import type { Meta, StoryObj } from '@storybook/html'; import '@42/styles/button.css'; const PLUS_ICON = ''; interface ButtonArgs { label: string; variant: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger'; size: 'sm' | 'md' | 'lg'; disabled: boolean; } const meta: Meta = { title: 'Presentational/Button', tags: ['autodocs'], argTypes: { variant: { control: 'select', options: ['primary', 'secondary', 'outline', 'ghost', 'danger'], }, size: { control: 'inline-radio', options: ['sm', 'md', 'lg'] }, disabled: { control: 'boolean' }, label: { control: 'text' }, }, args: { label: 'Button', variant: 'primary', size: 'md', disabled: false, }, render: ({ label, variant, size, disabled }) => { const button = document.createElement('button'); button.className = 'c42-button'; button.dataset.variant = variant; if (size !== 'md') { button.dataset.size = size; } button.disabled = disabled; button.textContent = label; return button; }, }; export default meta; type Story = StoryObj; export const Primary: Story = {}; export const Secondary: Story = { args: { variant: 'secondary' } }; export const Outline: Story = { args: { variant: 'outline' } }; export const Ghost: Story = { args: { variant: 'ghost' } }; export const Danger: Story = { args: { variant: 'danger' } }; export const Disabled: Story = { args: { disabled: true } }; export const IconOnly: Story = { args: { label: 'Add item', variant: 'primary' }, render: ({ label, variant, size, disabled }) => { const button = document.createElement('button'); button.className = 'c42-button'; button.dataset.variant = variant; button.dataset.icon = ''; if (size !== 'md') { button.dataset.size = size; } button.disabled = disabled; button.innerHTML = `${PLUS_ICON}${label}`; return button; }, }; export const IconWithLabel: Story = { args: { label: 'Add item', variant: 'primary' }, render: ({ label, variant, size, disabled }) => { const button = document.createElement('button'); button.className = 'c42-button'; button.dataset.variant = variant; if (size !== 'md') { button.dataset.size = size; } button.disabled = disabled; button.innerHTML = `${PLUS_ICON}${label}`; return button; }, };