Day 27: Setting up Storybook
Installing Storybook is relatively straightforward.
As I mentioned yesterday, I’m setting this up in my shared component library, so I simple went to my bofa-components folder and ran npx storybook@latest init.
I ran into trouble at first. It supports a surprising number of frameworks out-of-the-box, but because I had gone with such a simple initial setup for my component library, it wasn’t able to automatically detect what framework I was using. I selected webpack-react though, and everything worked fine after that.
When I run npm run storybook the first time, this local Storybook view popped up in a browser:

I don’t see the UtilityNav component yet because I haven’t written a story for it. But the Storybook initialization created several sample components, stories, and doc pages. They’re helpful to review if this is your first time through, but I’ll remove them and create a new story file.
Here’s the simplest version of the story:

The story is simple: I’m importing the component and exporting it with a “Default” label. I’m not even passing the activeItem property.
The filename is UtilityNav.stories.js and it lives alongside the component file. Storybook is looking for any files that match ../src/**/*.stories.@(js|jsx|mjs|ts|tsx) — that’s how it finds story files.
When I run Storybook again, this is what I see:

My UtilityNav component is listed in the sidebar, with the Default story I defined, below it. And there’s my component, displayed as it would in any app, only in this isolated development environment.
Success! 🎉
This is good, but I need to take care of something important. Engineers using this component really needs to know about the activeItem prop. That’s how they’ll set the active state for their particular product.
I could list out each option as an individual story:

But I want to take a more elegant approach. I’m going to use Storybook’s arg functionality to show those options as as dropdown on the controls panel:

By defining argTypes and passing in the options to a select control, Storybook now lets users select the items from a dropdown and see the component’s activeItem updated:

This approach makes it easy for me to add/remove items. It will also be helpful if I ever decide to move away from hard-coding these items.
Now that I’ve got a story set up for my component, I should create some documentation to explain how to import the library and how to use components in existing products.
More on that tomorrow!
—
P.S. If you’ve just joined the list, I’m in the middle of a practical design system build. You can catch up at the beginning of the series here.
—
Cheers,
Up Next: What is “The Question?”
Design Systems Daily
Sign up to get daily bite-sized insights in your inbox about design systems, product design, and team-building:
New to design systems?
Start with my free 30-day email course →