import type { Meta, StoryObj } from '@storybook/vue3-vite' import { ref } from 'vue' import MultiSelect from './MultiSelect.vue' import type { SelectOption } from './types' const meta: Meta = { title: 'Components/Select/MultiSelect', component: MultiSelect, tags: ['autodocs'], parameters: { layout: 'padded' }, decorators: [ () => ({ template: '
' }) ], argTypes: { label: { control: 'text' }, size: { control: { type: 'select' }, options: ['lg', 'md'] }, showSearchBox: { control: 'boolean' }, showSelectedCount: { control: 'boolean' }, showClearButton: { control: 'boolean' }, searchPlaceholder: { control: 'text' } }, args: { label: 'Category', size: 'lg', showSearchBox: false, showSelectedCount: false, showClearButton: false, searchPlaceholder: 'Search...' } } export default meta type Story = StoryObj const sampleOptions: SelectOption[] = [ { name: 'Vue', value: 'vue' }, { name: 'React', value: 'react' }, { name: 'Angular', value: 'angular' }, { name: 'Svelte', value: 'svelte' } ] export const Default: Story = { render: (args) => ({ components: { MultiSelect }, setup() { const selected = ref([]) return { selected, sampleOptions, args } }, template: '' }) } export const MediumSize: Story = { render: () => ({ components: { MultiSelect }, setup() { const selected = ref([sampleOptions[0]]) return { selected, sampleOptions } }, template: '' }), parameters: { controls: { disable: true } } } export const WithPreselectedValues: Story = { render: () => ({ components: { MultiSelect }, setup() { const selected = ref([sampleOptions[0], sampleOptions[1]]) return { selected, sampleOptions } }, template: '' }), parameters: { controls: { disable: true } } } export const Disabled: Story = { render: () => ({ components: { MultiSelect }, setup() { const selected = ref([sampleOptions[0]]) return { selected, sampleOptions } }, template: '' }), parameters: { controls: { disable: true } } } export const WithSearchBox: Story = { args: { showSearchBox: true }, render: (args) => ({ components: { MultiSelect }, setup() { const selected = ref([]) return { selected, sampleOptions, args } }, template: '' }) } export const AllHeaderFeatures: Story = { args: { showSearchBox: true, showSelectedCount: true, showClearButton: true }, render: (args) => ({ components: { MultiSelect }, setup() { const selected = ref([]) return { selected, sampleOptions, args } }, template: '' }) } export const AllStates: Story = { render: () => ({ components: { MultiSelect }, setup() { const a = ref([]) const b = ref([sampleOptions[0]]) const c = ref([sampleOptions[0]]) return { sampleOptions, a, b, c } }, template: `

Large (Interface)

Medium (Node)

` }), parameters: { controls: { disable: true } } }