| name | new-story |
| description | Generate a Storybook story for a component using real components and project CSS classes |
New Story
Generate a Storybook story for a given component.
Arguments
/new-story <ComponentPath> — path to the component (e.g. frontend/src/ui/modals/MyModal.tsx)
Rules
- Use real components. Import and render the actual component. Never approximate with inline styles.
- Use real CSS classes. If you need wrapper markup, use the project's actual CSS classes — never inline styles that mimic them.
- Mock only data, not rendering. Mock Go backend calls via
window.__storybookGoOverrides, mock props with realistic data. Never mock the component's visual output.
- Trace ALL hook dependencies before writing. Read the component and every hook it uses. Identify which providers are needed. Don't discover them one crash at a time.
- Use existing decorators. Check
frontend/.storybook/decorators/ for providers:
SidebarProvidersDecorator — KubeconfigProvider + NamespaceProvider
AppearanceModeProviderDecorator — appearance mode context
KeyboardProviderDecorator — keyboard shortcuts
KubeconfigProviderDecorator — kubeconfig only
ZoomProviderDecorator — zoom context
- Use existing mocks. Check
frontend/.storybook/mocks/ for Go backend mocks (wailsBackendApp.ts, wailsBackendSettings.ts, wailsModels.ts).
- Story file location. Place the
.stories.tsx file next to the component it tests.
- Multiple stories per file. Create stories for the main states: default, loading, error, empty, and any interesting prop variations.
Template
import type { Meta, StoryObj } from '@storybook/react';
import <ComponentName> from './<ComponentName>';
const meta: Meta<typeof <ComponentName>> = {
title: '<Category>/<ComponentName>',
component: <ComponentName>,
};
export default meta;
type Story = StoryObj<typeof <ComponentName>>;
export const Default: Story = {
args: {
},
};
Verification
After creating the story, run npx tsc --noEmit from the frontend/ directory to confirm it compiles without errors.