import type { Meta, StoryObj } from '@storybook/react-vite' import { IconSquareRounded } from '@tabler/icons-react' import { useRef, useState } from 'react' import { Button } from './Button' import { FilePicker } from './FilePicker' import { IconButton } from './IconButton' import { EmptyState } from './EmptyState' const meta = { title: 'Inputs/FilePicker', component: FilePicker, // The code tab shows each story's own code: building it from the rendered // element reads `element.ref`, which React 19 warns about. parameters: { layout: 'padded', docs: { source: { type: 'code' } } }, args: { onPick: () => {} }, argTypes: { onPick: { control: false } }, } satisfies Meta export default meta type Story = StoryObj /** What was chosen, one line per pick, so choosing the same file twice shows twice. */ function Picks({ picks }: { picks: string[] }) { if (picks.length === 0) return return (
    {picks.map((pick, i) => (
  • {pick}
  • ))}
) } /** Opened by the caller's own button. It draws nothing itself. */ export const Default: Story = { render: (args) => { const picker = useRef(null) const [picks, setPicks] = useState([]) return (
setPicks((held) => [...held, files.map((f) => f.name).join(', ')])} />
) }, } /** `multiple`, opened from an icon-only button. */ export const Several: Story = { args: { multiple: true }, render: (args) => { const picker = useRef(null) const [picks, setPicks] = useState([]) return (
setPicks((held) => [...held, files.map((f) => f.name).join(', ')])} /> picker.current?.click()}>
) }, }