// // 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 ( {props.label} ); }; 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} {props.label} ))} ); }; 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', }, };