Nouns Builder Components is a collection of reusable, lightly-styled React components designed for DAOs built with Nouns Builder. Builder DAO funded the initial development of the library—with credit to ripe0x (design and development) and badublanc (development).
Note
This library is for technical users. Check out the easy-to-use builder to embed the components without coding!
Click here to preview all the components!
You can install the library and its peer dependencies with your favorite package manager.
# npm
npm i nouns-builder-components @rainbow-me/rainbowkit@latest wagmi viem
# yarn
yarn add nouns-builder-components @rainbow-me/rainbowkit@latest wagmi viem
Once installed, import the BuilderDAO
provider and component stylesheet. Wrap your application with BuilderDAO
, RainbowKitProvider
, and WagmiConfig
. Instructions for setting up wagmi and RainbowKit are available in the RainbowKit installation documentation.
A working setup can be found on CodeSanbox.
// ...
import 'nouns-builder-components/index.css';
import { BuilderDAO } from 'nouns-builder-components';
// ...
export default function App() {
return (
<WagmiConfig client={wagmiClient}>
<RainbowKitProvider chains={chains}>
{/* Purple Dao */}
<BuilderDAO
collection="0xa45662638E9f3bbb7A6FeCb4B17853B7ba0F3a60"
chain="MAINNET"
>
<YourApp />
</BuilderDAO>
</RainbowKitProvider>
</WagmiConfig>
);
}
Now, import and use the desired components in your application.
import { AuctionHero, CollectionList, useDao } from 'nouns-builder-components';
export default function App() {
const dao = useDao();
if (!dao) return <></>;
return (
<div className="App">
<AuctionHero dao={dao} />
<CollectionList dao={dao} />
</div>
);
}
See a working demo on CodeSandbox.
Each component needs the dao
prop, which you can get by with the useDao
hook. Each component also accepts an opts
prop: an object configuring the theme and other options.
Components include:
- AuctionHero
- CollectionList
- MemberList
- ProposalList
- Treasury
- PropHouseRounds
- PropHouseProps
Options
key | value |
---|---|
theme? |
base or dark - default: base |
Example Usage
import { AuctionHero, useDao } from 'nouns-builder-components';
export default function App() {
const dao = useDao();
if (!dao) return <></>;
return <AuctionHero dao={dao} opts={{ theme: 'base' }} />;
}
Options
key | value |
---|---|
theme? |
base or dark - default: base |
rows? |
number - default: 3 |
itemsPerRow? |
number - default: 5 |
sortDirection? |
ASC or DESC - default: ASC |
hideLabels? |
boolean - default: true |
Example Usage
import { CollectionList, useDao } from 'nouns-builder-components';
export default function App() {
const dao = useDao();
if (!dao) return <></>;
return <CollectionList dao={dao} opts={{ theme: 'dark', rows: 2 }} />;
}
Options
key | value |
---|---|
theme? |
base or dark - default: base |
rows? |
number - default: 3 |
itemsPerRow? |
number - default: 6 |
Example Usage
import { MemberList, useDao } from 'nouns-builder-components';
export default function App() {
const dao = useDao();
if (!dao) return <></>;
return <MemberList dao={dao} opts={{ rows: 5, itemsPerRow: 5 }} />;
}
Options
key | value |
---|---|
theme? |
base or dark - default: base |
sortDirection? |
ASC or DESC - default: DESC |
max? |
number - default: 10 |
Example Usage
import { ProposalList, useDao } from 'nouns-builder-components';
export default function App() {
const dao = useDao();
if (!dao) return <></>;
return <ProposalList dao={dao} opts={{ sortDirection: 'ASC', max: 5 }} />;
}
Options
key | value |
---|---|
theme? |
base or dark - default: base |
Example Usage
import { Treasury, useDao } from 'nouns-builder-components';
export default function App() {
const dao = useDao();
if (!dao) return <></>;
return <Treasury dao={dao} />;
}
Options
key | value |
---|---|
houseId |
number |
theme? |
base or dark - default: base |
rows? |
number - default: 3 |
itemsPerRow? |
number - default: 2 |
sortDirection? |
ASC or DESC - default: DESC |
Example Usage
import { PropHouseRounds, useDao } from 'nouns-builder-components';
export default function App() {
const dao = useDao();
if (!dao) return <></>;
return <PropHouseRounds dao={dao} opts={{ houseId: 17 }} />;
}
Options
key | value |
---|---|
houseId |
number |
round |
string |
theme? |
base or dark - default: base |
max? |
number - default: 12 |
format? |
grid or list - default: list |
Example Usage
import { PropHouseProps, useDao } from 'nouns-builder-components';
export default function App() {
const dao = useDao();
if (!dao) return <></>;
return (
<PropHouseProps
dao={dao}
opts={{ houseId: 17, round: 'Retroactive Funding' }}
/>
);
}