Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Build component stories with proper args, controls, decorators, and testing patterns.
Build component stories with proper args, controls, decorators, and testing patterns.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Default export is component meta—title, component, args, decorators Named exports are stories—each export becomes a story in sidebar satisfies Meta<typeof Component> for TypeScript type checking CSF3 uses object syntax, not functions—export const Primary = { args: {...} }
args are actual prop values passed to component—args: { label: 'Click me' } argTypes configure controls UI—argTypes: { size: { control: 'select', options: ['sm', 'lg'] } } Default args in meta apply to all stories—override in individual stories argTypes: { onClick: { action: 'clicked' } } logs events in Actions panel
Auto-inferred from TypeScript props—boolean becomes toggle, string becomes text input Override control type: argTypes: { color: { control: 'color' } } Disable control: argTypes: { children: { control: false } } Options for select: control: { type: 'select' }, options: ['a', 'b', 'c']
Wrap stories with context—providers, layout wrappers, theme Component-level in meta: decorators: [(Story) => <Provider><Story /></Provider>] Global in .storybook/preview.js: applies to all stories Order matters—later decorators wrap earlier ones
Interactive testing within story: play: async ({ canvasElement }) => {...} Use @storybook/testing-library for queries—within(canvasElement).getByRole() await userEvent.click(button) for interactions expect(element).toBeVisible() for assertions—tests run in browser
argTypes: { onClick: { action: 'clicked' } } auto-logs to Actions panel Or import: import { action } from '@storybook/addon-actions' Use fn() from @storybook/test in Storybook 8+ for spying in play functions Actions help verify event handlers without manual console.log
Title path creates hierarchy: title: 'Components/Forms/Button' Stories appear in order of export—put Primary first tags: ['autodocs'] generates docs page automatically parameters: { docs: { description: { story: 'text' } } } adds story description
Default state: export const Default = {} With all props: export const WithIcon = { args: { icon: <Icon /> } } Edge cases: Empty, Loading, Error, Disabled states as separate stories Responsive: Use viewport addon parameters per story
Custom render: render: (args) => <Wrapper><Component {...args} /></Wrapper> Access context in render: render: (args, { globals }) => ... Useful when story needs different JSX structure than default Prefer decorators for wrapping, render for restructuring
.storybook/main.js: addons, framework, stories glob patterns .storybook/preview.js: global decorators, parameters, argTypes Stories glob: stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'] Static assets: staticDirs: ['../public'] for images/fonts
Forgetting to install addon AND add to main.js addons array Using storiesOf API—deprecated, use CSF exports Missing component in meta—controls won't auto-generate Decorators returning Story without calling it: (Story) => <Story /> not (Story) => Story
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.