storybook
SKILL.md
Storybook
Documentation: storybook.js.org
Running Storybook
npm run storybook
File Location
Co-locate stories with components as *.stories.svelte.
Basic Story Pattern
From stack-status-badge.stories.svelte:
<script module lang="ts">
import { defineMeta } from '@storybook/addon-svelte-csf';
import { StackStatus } from '../models';
import StackStatusBadge from './stack-status-badge.svelte';
const { Story } = defineMeta({
argTypes: {
status: {
control: { type: 'select' },
options: [StackStatus.Open, StackStatus.Fixed, StackStatus.Regressed]
}
},
component: StackStatusBadge,
tags: ['autodocs'],
title: 'Components/Stacks/StackStatusBadge'
});
</script>
<Story name="Open" args={{ status: StackStatus.Open }} />
<Story name="Fixed" args={{ status: StackStatus.Fixed }} />
<Story name="Regressed" args={{ status: StackStatus.Regressed }} />
Story with Snippets
From notification.stories.svelte:
<script module lang="ts">
import { Button } from '$comp/ui/button';
import CheckCircle from '@lucide/svelte/icons/check-circle';
import Ban from '@lucide/svelte/icons/ban';
import { defineMeta } from '@storybook/addon-svelte-csf';
import NotificationDescription from './notification-description.svelte';
import NotificationTitle from './notification-title.svelte';
import Notification from './notification.svelte';
const { Story } = defineMeta({
component: Notification,
tags: ['autodocs'],
title: 'Components/Shared/Notification'
});
</script>
<Story name="Success">
<Notification variant="success">
{#snippet icon()}<CheckCircle />{/snippet}
<NotificationTitle>Operation completed successfully!</NotificationTitle>
<NotificationDescription>Your changes have been saved.</NotificationDescription>
</Notification>
</Story>
<Story name="Destructive">
<Notification variant="destructive">
{#snippet icon()}<Ban />{/snippet}
<NotificationTitle>Something went wrong</NotificationTitle>
<NotificationDescription>An error occurred. Please try again.</NotificationDescription>
</Notification>
</Story>
<Story name="With Action">
<Notification variant="information">
{#snippet action()}
<Button variant="outline" size="sm">Take Action</Button>
{/snippet}
<NotificationTitle>Action required</NotificationTitle>
<NotificationDescription>Click the button to proceed.</NotificationDescription>
</Notification>
</Story>
Key Patterns
defineMeta: ReturnsStorycomponent, configurecomponent,title,tagstags: ['autodocs']: Auto-generate documentation pageargTypes: Configure controls for props (select, text, boolean, etc.)- Simple args:
<Story name="Open" args={{ status: 'open' }} /> - Custom content: Use children with snippets for complex compositions
- Title hierarchy: Use
/for organization (e.g.,Components/Shared/Notification)
Weekly Installs
1
Repository
mindrally/skillsInstalled on
windsurf1
opencode1
codex1
claude-code1
antigravity1
gemini-cli1