import type { Meta, StoryObj } from '@storybook/vue3' import SyInputSelect from './SyInputSelect.vue' import { VBtn, VMenu, VList, VListItem, VListItemTitle, VForm } from 'vuetify/components' import { ref } from 'vue' import SyAlert from '../../../SyAlert/SyAlert.vue' import { createDeprecationNotice } from '@/stories/DeprecationNotice/DeprecationNotice' const meta = { title: 'Composants/Formulaires/Selects/SyInputSelect', component: SyInputSelect, parameters: { layout: 'fullscreen', controls: { exclude: ['selectedValue', 'isOpen', 'toggleMenu', 'closeList', 'selectItem', 'selectedItem', 'getItemText'] }, }, argTypes: { selectedValue: { control: 'text' }, items: { control: 'object' }, errorMessages: { control: 'object' }, required: { control: 'boolean' }, outlined: { control: 'boolean' }, textKey: { control: 'text' }, valueKey: { control: 'text' }, vuetifyOptions: { control: 'object' }, displayAsterisk: { control: 'boolean' }, readonly: { control: 'boolean' }, bgColor: { control: 'color' }, }, } as Meta export default meta type Story = StoryObj export const Default: Story = { parameters: { sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { text: 'Option 1', value: '1' }, { text: 'Option 2', value: '2' }, ], vuetifyOptions: { menu: { color: 'primary', }, option: { color: 'primary', }, }, readonly: false, }, render: (args) => { return { components: { SyInputSelect, VBtn, VMenu, VList, VListItem, VListItemTitle }, setup() { return { args } }, template: `




`, } }, } export const Required: Story = { parameters: { sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { text: 'Option 1', value: '1' }, { text: 'Option 2', value: '2' }, ], required: true, }, render: (args) => { return { components: { SyInputSelect, VBtn, VMenu, VList, VListItem, VListItemTitle }, setup() { return { args } }, template: `
`, } }, } export const RequiredWithAsterisk: Story = { parameters: { docs: { description: { story: 'Version du champ de sélection requis avec un astérisque visuel.', }, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { ...Default.args, label: 'Sélectionnez une option', required: true, displayAsterisk: true, }, render: (args) => { return { components: { SyInputSelect }, setup() { return { args } }, template: `
`, } }, } export const withCustomError: Story = { parameters: { sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { text: 'Option 1', value: '1' }, { text: 'Option 2', value: '2' }, ], }, render: (args) => { return { components: { SyInputSelect, VBtn, VMenu, VList, VListItem, VListItemTitle }, setup() { const errorMessages = ref([]) const triggerError = () => { // @ts-expect-error test error message errorMessages.value = ['This is a test error message'] } return { args, errorMessages, triggerError } }, template: `
Trigger Error
`, } }, } export const withCustomKey: Story = { parameters: { sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { items: [ { customKey: 'Choix 1', value: '1' }, { customKey: 'Choix 2', value: '2' }, ], }, render: (args) => { return { components: { SyInputSelect, VBtn, VMenu, VList, VListItem, VListItemTitle }, setup() { return { args } }, template: `
`, } }, } export const withCustomStyles: Story = { parameters: { sourceCode: [ { name: 'Template', code: `