import type { Meta, StoryObj } from 'storybook-solidjs-vite'; import { Markdown } from './markdown'; import { componentDescription } from '../stories/docs/element-controls'; const meta = { title: 'Solid (Advanced)/Elements/Markdown', component: Markdown, tags: ['autodocs'], parameters: { layout: 'padded', docs: { controls: { exclude: ['use:eventListener'] }, description: componentDescription([ 'Renders a Markdown string to styled HTML (GFM enabled — tables, lists, blockquotes), splitting fenced code into highlighted `CodeBlock`s.', '**When to use:** to display assistant message content, documentation, or any rich text authored in Markdown.', '**How to use:** pass the Markdown string as `content`; optionally set `codeTheme` for code fences and `class` for the prose container. Prose sizing follows the surrounding `ChatConfig`.', '**Placement:** inside `MessageContent`, response panels, or anywhere formatted text is shown.', ]), }, }, argTypes: { content: { control: 'text', description: 'The Markdown source string to render.', }, id: { control: 'text', description: 'Optional stable id used for block keys (auto-generated if omitted).', }, codeTheme: { control: 'text', description: 'Shiki theme name applied to fenced code blocks (falls back to the chat config theme).', }, class: { control: 'text', description: 'Additional CSS classes for the prose container.', }, }, args: { content: 'This is a simple paragraph of text rendered through the **Markdown** component.', }, render: (args) => , } satisfies Meta; export default meta; type Story = StoryObj; const IMPORT = `import { Markdown } from '@kitn.ai/chat';`; const src = (code: string) => ({ parameters: { docs: { source: { code: `${IMPORT}\n\n${code}`, language: 'tsx' } } }, }); /** Interactive playground — edit the `content` control to render any Markdown. */ export const Playground: Story = { ...src(``), }; export const PlainText: Story = { args: { content: 'This is a simple paragraph of text rendered through the Markdown component.', }, ...src(``), }; export const Headings: Story = { args: { content: `# Heading 1 ## Heading 2 ### Heading 3 #### Heading 4 Some text below the headings.`, }, ...src(``), }; export const CodeBlocks: Story = { args: { content: `Here is some inline \`code\` in a paragraph. \`\`\`typescript const x: number = 42; console.log(x); \`\`\` And another block: \`\`\`python print("hello world") \`\`\``, }, ...src(``), }; export const Lists: Story = { args: { content: `### Unordered List - First item - Second item - Nested item - Another nested - Third item ### Ordered List 1. Step one 2. Step two 3. Step three`, }, ...src(``), }; export const GFMTable: Story = { args: { content: `### Comparison Table | Feature | SolidJS | React | Svelte | |---------|---------|-------|--------| | Reactivity | Fine-grained | Virtual DOM | Compiler | | Bundle Size | ~7KB | ~40KB | ~2KB | | Performance | Excellent | Good | Excellent | | Learning Curve | Moderate | Moderate | Easy |`, }, ...src(``), }; export const RichContent: Story = { args: { class: 'max-w-2xl', content: `# Project Overview This is a **comprehensive** guide to building modern web applications. ## Key Technologies - **SolidJS** -- Reactive UI framework - **TypeScript** -- Type-safe JavaScript - **Tailwind CSS** -- Utility-first styling ## Getting Started \`\`\`bash pnpm create solid cd my-app pnpm install pnpm dev \`\`\` > **Note:** Make sure you have Node.js 18+ installed. ## Architecture | Layer | Technology | Purpose | |-------|-----------|---------| | UI | SolidJS | Components | | State | Signals | Reactivity | | Styling | Tailwind | Design | For more info, visit [solidjs.com](https://solidjs.com).`, }, ...src(``), };