import type { Meta, StoryObj } from '@storybook/html'; import { Avatar, type AvatarOptions } from '@42/core/avatar'; import '@42/styles/avatar.css'; const snippet = `import { Avatar } from '@42/core/avatar'; import '@42/styles/avatar.css'; const avatar = new Avatar(document.querySelector('[data-c42-avatar]')!, { name: 'Jane Doe', status: 'online', }); avatar.on('avatar:error', () => console.log('image failed, showing initials'));`; const meta: Meta = { title: 'Core/Media/Avatar', tags: ['autodocs'], parameters: { docs: { source: { code: snippet, language: 'ts' }, }, }, argTypes: { name: { control: 'text' }, status: { control: 'select', options: [null, 'online', 'offline', 'busy', 'away'], }, }, args: { name: 'Jane Doe', status: null, }, render: (args) => { const root = document.createElement('div'); root.dataset.c42Avatar = ''; root.innerHTML = ` Jane Doe `; new Avatar(root, args); return root; }, }; export default meta; type Story = StoryObj; export const Loaded: Story = {}; export const WithStatus: Story = { args: { status: 'online' }, }; export const BrokenSrcFallback: Story = { render: (args) => { const root = document.createElement('div'); root.dataset.c42Avatar = ''; root.innerHTML = ` Grace Hopper `; new Avatar(root, args); return root; }, args: { name: 'Grace Hopper', status: 'busy' }, }; export const InitialsOnly: Story = { render: (args) => { const root = document.createElement('div'); root.dataset.c42Avatar = ''; root.innerHTML = ` `; new Avatar(root, args); return root; }, args: { name: 'Ada Lovelace', status: 'away' }, };