test(web): add a Storybook story for the combobox primitive (#67)
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import type { Meta, StoryObj } from '@storybook/react-vite'
|
||||
import { useState } from 'react'
|
||||
import { expect } from 'storybook/test'
|
||||
|
||||
import {
|
||||
ComboboxRoot,
|
||||
ComboboxInputGroup,
|
||||
ComboboxInput,
|
||||
ComboboxClear,
|
||||
ComboboxTrigger,
|
||||
ComboboxPopup,
|
||||
ComboboxList,
|
||||
ComboboxItem,
|
||||
ComboboxItemIndicator,
|
||||
ComboboxEmpty,
|
||||
} from './combobox'
|
||||
|
||||
const fruits = ['Apple', 'Apricot', 'Banana', 'Cherry']
|
||||
|
||||
function ComboboxDemo() {
|
||||
const [value, setValue] = useState<string | null>(null)
|
||||
|
||||
return (
|
||||
<ComboboxRoot<string | null>
|
||||
items={fruits}
|
||||
value={value}
|
||||
onValueChange={setValue}
|
||||
itemToStringLabel={(item) => item ?? ''}
|
||||
isItemEqualToValue={(a, b) => a === b}
|
||||
>
|
||||
<ComboboxInputGroup>
|
||||
<ComboboxInput placeholder='Pick a fruit' />
|
||||
<ComboboxClear aria-label='Clear' />
|
||||
<ComboboxTrigger aria-label='Open' />
|
||||
</ComboboxInputGroup>
|
||||
<ComboboxPopup>
|
||||
<ComboboxEmpty>No matches</ComboboxEmpty>
|
||||
<ComboboxList>
|
||||
{(item: string) => (
|
||||
<ComboboxItem key={item} value={item}>
|
||||
<ComboboxItemIndicator className='text-primary'>✓</ComboboxItemIndicator>
|
||||
{item}
|
||||
</ComboboxItem>
|
||||
)}
|
||||
</ComboboxList>
|
||||
</ComboboxPopup>
|
||||
</ComboboxRoot>
|
||||
)
|
||||
}
|
||||
|
||||
const meta = {
|
||||
component: ComboboxDemo,
|
||||
tags: ['ai-generated'],
|
||||
} satisfies Meta<typeof ComboboxDemo>
|
||||
|
||||
export default meta
|
||||
type Story = StoryObj<typeof meta>
|
||||
|
||||
export const Default: Story = {
|
||||
play: async ({ canvas }) => {
|
||||
await expect(canvas.getByPlaceholderText('Pick a fruit')).toBeInTheDocument()
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user