Doc blocks for design system documentation
If you document design systems, I’m about to save you a ton of time. Because Storybook comes with lesser-known components for organizing colors, typography, and icons.
ColorPalette
Display color systems with the ColorPalette
component.
Import "@storybook/blocks"
. Then render a ColorPalette
with a single ColorItem
inside.
import { ColorPalette, ColorItem } from "@storybook/blocks"
<ColorPalette> <ColorItem /></ColorPalette>
Create an object with a key and color value. And pass it to the ColorItem
component via the color
prop.
Both key and value are displayed in the UI.
<ColorItem colors={{ Apple: "#66bf3c" }} />
Describe ColorItems
with title
and subtitle
props.
<ColorItem
title="Apple"
subtitle="A delicious brand color."
colors={{ Apple: "#66bf3c" }}
/>
Add as many colors to the colors
prop as needed.
<ColorItem
title="Apple"
subtitle="A delicious brand color."
colors={{
Apple: "#66bf3c",
AppleDark: "#46991f",
AppleLight: "#83da5a"
}}
/>
Use any CSS-supported color value.ColorItem
adds gray cross-hatches to indicate translucency — where color functions with non-1
alpha values are used.
<ColorItem
title="Apple"
subtitle="A delicious brand color."
colors={{
Apple: "rgba(102,191,60,1)",
Apple60: "rgba(102,191,60,.6)",
Apple30: "rgba(102,191,60,.3)",
}}
/>
See full ColorPalette
API reference.
Typeset
Display typography systems with the Typeset
component.
Import the Typeset
component from @storybook/blocks
.
import { Typeset } from "@storybook/blocks";
<Typeset {/* required props */} />
Typeset
requires four props to render: fontSizes
, fontWeight
, sampleText
, and fontFamily
.
fontSizes
and fontWeight
support any supported CSS value (and numbers).
<Typeset
fontSizes={["2.875em", "2em", "1.375em", "1em"]}
fontWeight="900"
sampleText="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
fontFamily='"Nunito Sans", "Helvetica Neue", Helvetica, Arial, sans-serif'
/>
Create a new Typeset
block for every discrete typographical subset.
## Code
<Typeset
fontSizes={[16]}
fontWeight={400}
sampleText="let var = 'const';"
fontFamily='ui-monospace,
Menlo, Monaco,
"Cascadia Mono", "Segoe UI Mono",
"Roboto Mono",
"Oxygen Mono",
"Ubuntu Monospace",
"Source Code Pro",
"Fira Mono",
"Droid Sans Mono",
"Courier New", monospace;'
/>
See full Typeset
API reference.
IconGallery
Display icons with the IconGallery
component.
Import "@storybook/blocks"
. Then render a IconGallery
with a single IconItem
inside it.
import { IconGallery, IconItem } from "@storybook/blocks"
<IconGallery> <IconItem></IconItem></IconGallery>
Place an icon inside IconItem
. Then display that icon’s name with the name
prop.
import * as Icons from "@storybook/icons";
<IconGallery>
<IconItem name="Accessibility">
<Icons.Accessibility />
</IconItem>
</IconGallery>
Take this further — in React — by dynamically generating all available icons.
## Storybook icons
<IconGallery>
{Object.entries(Icons)
.filter(([name]) => name !== "iconList")
.map(([name, Icon]) => (
<IconItem name={name}>
<Icon />
</IconItem>
))}
</IconGallery>
See full IconGallery
API reference.
Learn more…
Find in-depth references for each component on the Storybook docs page and Chromatic YouTube channel.
Subscribe to my newsletter
Read articles from chantastic directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
chantastic
chantastic
software explorer