03e84c1f28
Storybook (SvelteKit-Framework, Tailwind v4, MSW, Translation-Decorator): Stories für Atoms/Molecules/Organisms + alle CMS-Blocks. Button-Atom: 5 .btn-*-Varianten (primary/secondary/tertiary/outline/warning), class-Merge-Prop, href→<a>, Loading-Spinner neben Label, rounded-md/font-medium. Alle rohen .btn-*- und Hand-Style-Buttons app-weit aufs Atom migriert. SectionHeader-Molecule (kicker/number/title/subtitle/action) + Integration in 7 CMS-Blocks (post_overview, organisations, organisations_map, searchable_text, image_gallery, youtube_video_gallery, files) via neuem section_header-Schema. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import type { Preview } from '@storybook/sveltekit';
|
|
import { initialize, mswLoader } from 'msw-storybook-addon';
|
|
import WithTranslations from './decorators/WithTranslations.svelte';
|
|
// Design-System-Styles: Fonts, Tailwind, Farbtokens (wald/erde/…). Zieht die
|
|
// echte app.css des Frontends → Stories sehen aus wie live.
|
|
import '../src/app.css';
|
|
|
|
// MSW starten. `onUnhandledRequest: 'bypass'` → Requests ohne Handler laufen
|
|
// normal durch (z.B. der Vite-Proxy für /cms-images). Nur explizit gemockte
|
|
// Endpoints werden abgefangen → Blocks mit fetch entwickeln sich deterministisch
|
|
// offline, per Story via `parameters.msw.handlers`.
|
|
initialize({ onUnhandledRequest: 'bypass' });
|
|
|
|
// Default-Mock für den SvelteKit-page-Store/-State ($app/stores + $app/state).
|
|
// Ohne das crasht jede Komponente, die $page.url liest (Header, PostActions, …).
|
|
// Einzelne Stories können via parameters.sveltekit_experimental überschreiben.
|
|
const mockPage = {
|
|
url: new URL('http://localhost:6006/'),
|
|
params: {},
|
|
route: { id: null },
|
|
status: 200,
|
|
error: null,
|
|
data: {},
|
|
form: null,
|
|
state: {},
|
|
};
|
|
|
|
const preview: Preview = {
|
|
loaders: [mswLoader],
|
|
// Alle Stories in den Translation-Context wrappen → echte Texte statt Keys.
|
|
decorators: [() => WithTranslations],
|
|
parameters: {
|
|
sveltekit_experimental: {
|
|
stores: { page: mockPage },
|
|
state: { page: mockPage },
|
|
},
|
|
controls: {
|
|
matchers: {
|
|
color: /(background|color)$/i,
|
|
date: /Date$/i,
|
|
},
|
|
},
|
|
// Frontend rendert auf hellem Grund; Storybook-Canvas dazu passend.
|
|
backgrounds: {
|
|
default: 'weiss',
|
|
values: [
|
|
{ name: 'weiss', value: '#ffffff' },
|
|
{ name: 'stein', value: '#f5f5f4' },
|
|
],
|
|
},
|
|
},
|
|
};
|
|
|
|
export default preview;
|