import React, { useState } from 'react'; import type { ComponentMeta } from '@storybook/react'; import type { SelectDisplay } from '@tih/ui'; import { Select } from '@tih/ui'; const SelectDisplays: ReadonlyArray<SelectDisplay> = ['inline', 'block']; export default { argTypes: { disabled: { control: 'boolean', }, display: { control: { type: 'select' }, options: SelectDisplays, }, errorMessage: { control: 'text', }, isLabelHidden: { control: 'boolean', }, label: { control: 'text', }, name: { control: 'text', }, placeholder: { control: 'text', }, }, component: Select, title: 'Select', } as ComponentMeta<typeof Select>; export function Basic({ display, isLabelHidden, label, name, }: Pick< React.ComponentProps<typeof Select>, 'display' | 'isLabelHidden' | 'label' | 'name' >) { const [value, setValue] = useState('apple'); return ( <Select display={display} isLabelHidden={isLabelHidden} label={label} name={name} options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} value={value} onChange={setValue} /> ); } Basic.args = { display: 'inline', isLabelHidden: false, label: 'Select fruit', }; export function Display() { const [value, setValue] = useState('apple'); return ( <div className="space-y-4"> <Select label="Select a fruit" options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} value={value} onChange={setValue} /> <Select display="block" label="Select a fruit" options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} value={value} onChange={setValue} /> </div> ); } export function HiddenLabel() { const [value, setValue] = useState('apple'); return ( <div className="space-x-4"> <Select isLabelHidden={true} label="Select a fruit" options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} value={value} onChange={setValue} /> </div> ); } export function Disabled() { const [value, setValue] = useState('apple'); return ( <div className="space-x-4"> <Select disabled={true} label="Select a fruit" options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} value={value} onChange={setValue} /> </div> ); } export function Required() { const [value, setValue] = useState('apple'); return ( <Select label="Select a fruit" options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} required={true} value={value} onChange={setValue} /> ); } export function Placeholder() { return ( <Select label="Select a fruit" options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} placeholder="Select a fruit" required={true} /> ); } export function Error() { const [value, setValue] = useState('banana'); return ( <Select errorMessage={value !== 'apple' ? 'Must select apple' : undefined} label="Select a fruit" options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} required={true} value={value} onChange={setValue} /> ); } export function Uncontrolled() { return ( <div className="space-x-4"> <Select defaultValue="apple" label="Select a fruit" options={[ { label: 'Apple', value: 'apple', }, { label: 'Banana', value: 'banana', }, { label: 'Orange', value: 'orange', }, ]} /> </div> ); }