import type { Meta, StoryObj } from 'storybook-solidjs-vite'; import { Avatar } from './avatar'; import { componentDescription } from '../stories/docs/element-controls'; const meta = { title: 'Solid (Advanced)/Primitives/Avatar', component: Avatar, tags: ['autodocs'], parameters: { layout: 'padded', docs: { controls: { exclude: ['use:eventListener'] }, description: componentDescription([ 'A small, rounded **avatar** that renders an image when `src` is provided and falls back to short initials otherwise.', '**When to use:** to identify the author of a message, a conversation participant, or the current user in a header or list.', '**How to use:** always pass a `fallback` (1–2 initials) and a `size`. Provide `src`/`alt` when you have an image; if the image is missing or fails, the `fallback` text shows instead.', '**Placement:** message rows (next to assistant/user content), conversation list items, account menus, and headers.', ]), }, }, argTypes: { src: { control: 'text', description: 'Image URL. When omitted, the `fallback` initials are shown.', }, alt: { control: 'text', description: 'Alt text for the image. Defaults to `fallback` when not set.', }, fallback: { control: 'text', description: 'Initials shown when there is no image (required).', }, size: { control: 'select', options: ['sm', 'md', 'lg'], description: 'Avatar diameter preset.', table: { defaultValue: { summary: 'md' } }, }, }, args: { fallback: 'JD', size: 'md', }, render: (args) => , } satisfies Meta; export default meta; type Story = StoryObj; const IMPORT = `import { Avatar } from '@kitn.ai/chat';`; const src = (code: string) => ({ parameters: { docs: { source: { code: `${IMPORT}\n\n${code}`, language: 'tsx' } } }, }); /** Interactive playground — tweak the controls to explore image vs. fallback and sizes. */ export const Playground: Story = { ...src(``), }; export const WithFallback: Story = { args: { fallback: 'JD', size: 'md' }, ...src(``), }; export const WithImage: Story = { args: { src: 'https://api.dicebear.com/7.x/initials/svg?seed=JD', alt: 'John Doe', fallback: 'JD', }, ...src(``), }; export const Small: Story = { args: { size: 'sm', fallback: 'S' }, ...src(``), }; export const Large: Story = { args: { size: 'lg', fallback: 'LG' }, ...src(``), }; /** Every size side by side (showcase — not driven by controls). */ export const AllSizes: Story = { render: () => (
), ...src(`
`), };