// // Copyright 2023 DXOS.org // import { type Meta, type StoryObj } from '@storybook/react-vite'; import React, { type ReactNode, useState } from 'react'; import { type Density } from '@dxos/ui-types'; import { withTheme } from '../../testing'; import { translations } from '../../translations'; import { Tooltip } from '../Tooltip'; import { Button } from './Button'; import { IconButton, type IconButtonProps } from './IconButton'; import { SystemIconButton } from './SystemIconButton'; const DefaultStory = (props: IconButtonProps) => { return (
); }; const densities: Density[] = ['lg', 'md', 'sm', 'xs']; const densityIconSize: Record = { lg: 5, md: 4, sm: 4, xs: 4, }; const DensitiesStory = (props: Omit) => { return (
iconOnly
label + icon
Button (reference)
{densities.map((density) => (
density={density}
))}
); }; type SystemPresetVariantProps = Partial>; const SystemPresetRow = ({ name, button, }: { name: string; button: (props: SystemPresetVariantProps) => ReactNode; }) => (
{name}
{button({})}
{button({ variant: 'ghost' })}
{button({ variant: 'ghost', iconOnly: true })}
); const SystemStory = () => { const [state, setState] = useState>({}); return (
default
ghost
iconOnly
( setState((prev) => ({ ...prev, star: !prev.star }))} {...props} /> )} /> ( setState((prev) => ({ ...prev, bookmark: !prev.bookmark }))} {...props} /> )} /> ( setState((prev) => ({ ...prev, expander: !prev.expander }))} {...props} /> )} />
} /> } /> } /> } />
); }; const meta = { title: 'ui/react-ui-core/components/IconButton', component: IconButton, render: DefaultStory as any, decorators: [withTheme()], parameters: { layout: 'centered', translations, }, } satisfies Meta; export default meta; type Story = StoryObj; export const Default: Story = { render: DensitiesStory as any, args: { label: 'Close', icon: 'ph--x--regular', }, }; export const Ghost: Story = { render: DensitiesStory as any, args: { label: 'Close', icon: 'ph--x--regular', variant: 'ghost', }, }; export const System: Story = { render: SystemStory, args: { label: 'System', }, };