npx claudepluginhub fubits1/svelte-skills --plugin svelte-5This skill uses the workspace's default tool permissions.
- ALWAYS use `mcp__storybook__get-storybook-story-instructions` before writing stories.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
mcp__storybook__get-storybook-story-instructions before writing stories.mcp__storybook__preview-stories to preview stories after writing them.parameters.fixtures for fixture overrides.App.svelte AND .storybook/preview.ts. Moving imports out of the SCSS chain breaks Storybook unless also added to preview.ts or storybook.scss.Components that import and read from Svelte 4 module-level
writable() stores (from svelte/store) render with default/
empty data in Storybook unless the stores are populated before
the component mounts. This does NOT apply to Svelte 5 runes-
based state in .svelte.ts modules — those are reactive on
their own.
Pattern: Create a <ComponentName>Wrapper.svelte that:
setContext() for any required Svelte contextsstore.set() with mock data for every Svelte 4
writable() store the component importsUse asChild in the story — NEVER decorators for components
that depend on Svelte 4 writable stores. Decorators lose
complex args (Writable stores, objects with methods) through
Storybook's arg serialization.
<!-- stories/MyComponentWrapper.svelte -->
<script lang="ts">
import { setContext } from 'svelte'
import { writable } from 'svelte/store'
import { myWritableStore } from '../stores' // Svelte 4 writable()
setContext('myContext', true)
myWritableStore.set({ /* mock data */ })
</script>
<div style="max-width: 600px; padding: 1rem;">
<slot />
</div>
<!-- stories/MyComponent.stories.svelte -->
<Story name="Default" asChild>
<MyComponentWrapper>
<MyComponent />
</MyComponentWrapper>
</Story>
Using () => {} for callback props in stories means the
callback is never verified. If the component passes wrong
data types to the callback, the noop silently swallows it.
For critical callbacks (onChange, onSubmit, onParameterChanged):
A common failure: a noop callback hides a bug where
onChange passes full selection objects instead of expected
string values. The story "passes" because noop accepts
anything.
When adding skip-vitest to a story, IMMEDIATELY verify it
renders correctly in the Storybook UI via Playwright MCP.
Navigate to the story URL, wait for render, take a screenshot,
check console for 0 errors. skip-vitest means "can't
automate as vitest test" — it does NOT mean "don't verify."