import type { Meta, StoryObj } from '@storybook/vue3' import { ref, watch } from 'vue' import AmeliproCheckbox from './AmeliproCheckbox.vue' const meta = { argTypes: { 'append': { description: 'Permet de rajouter un élément après le label' }, 'required': { description: 'Permet de rendre la selection obligatoire' }, 'checkbox': { description: 'Objet qui permet de générer la checkbox', table: { type: { detail: `{ label: string; value: string; description?: string; }`, summary: 'AmeliproCheckboxItem', }, }, }, 'disabled': { description: 'Permet de désactiver la checkbox' }, 'errorDefault': { description: 'Peut afficher la checkbox en erreur directement au chargement' }, 'isSwitch': { description: 'Transforme la checkbox en switch' }, 'label': { description: 'Permet de renseigner un label personnalisé' }, 'labelLeft': { description: 'Positionne le label à gauche de la case à cocher' }, 'modelValue': { description: 'Etat de la checkbox' }, 'requiredErrorMessage': { description: 'Message d’erreur affiché lorsque la props required est active' }, 'uniqueId': { description: 'Id unique de la checkbox' }, 'update:model-value': { description: 'Événement émit au changement de la valeur de la checkbox' }, }, component: AmeliproCheckbox, title: 'Composants/Amelipro/Formulaires/AmeliproCheckbox', } as Meta export default meta type Story = StoryObj export const Default: Story = { args: { checkbox: { label: 'Exemple', value: 'Valeur de la checkbox', }, uniqueId: 'checkbox-example', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Script', code: ``, }, ], }, render: args => ({ components: { AmeliproCheckbox }, setup() { const model = ref(false) watch(() => args.modelValue, (newValue) => { model.value = newValue }) return { args, model } }, template: ` `, }), } export const Disabled: Story = { args: { checkbox: { label: 'Désactivée', value: 'disabled', }, uniqueId: 'checkbox-disabled', disabled: true, }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, ], }, render: args => ({ components: { AmeliproCheckbox }, setup() { const model = ref(false) watch(() => args.modelValue, (newValue) => { model.value = !!newValue }) return { args, model } }, template: `

Exemple de case à cocher désactivée grâce à la prop disabled.

`, }), } export const Switch: Story = { args: { checkbox: { label: 'Switch', value: 'switch', }, uniqueId: 'checkbox-switch', isSwitch: true, }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, ], }, render: args => ({ components: { AmeliproCheckbox }, setup() { const model = ref(false) watch(() => args.modelValue, (newValue) => { model.value = !!newValue }) return { args, model } }, template: `

La checkbox est affichée sous forme de switch grâce à la prop isSwitch.

`, }), } export const LabelLeft: Story = { args: { checkbox: { label: 'Label à gauche', value: 'label-left', }, uniqueId: 'checkbox-label-left', labelLeft: true, }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, ], }, render: args => ({ components: { AmeliproCheckbox }, setup() { const model = ref(false) watch(() => args.modelValue, (newValue) => { model.value = !!newValue }) return { args, model } }, template: `

Le label est positionné à gauche grâce à la prop labelLeft.

`, }), } export const Required: Story = { args: { checkbox: { label: 'Obligatoire', value: 'required', }, uniqueId: 'checkbox-required', required: true, }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, ], }, render: args => ({ components: { AmeliproCheckbox }, setup() { const model = ref(false) watch(() => args.modelValue, (newValue) => { model.value = !!newValue }) return { args, model } }, template: `

La sélection est obligatoire grâce à la prop required.

`, }), } export const ErrorDefault: Story = { args: { checkbox: { label: 'Erreur au chargement', value: 'error-default', }, uniqueId: 'checkbox-error-default', required: true, errorDefault: true, }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, ], }, render: args => ({ components: { AmeliproCheckbox }, setup() { const model = ref(false) watch(() => args.modelValue, (newValue) => { model.value = !!newValue }) return { args, model } }, template: `

La checkbox affiche une erreur dès le chargement grâce à la prop errorDefault.

`, }), } export const CustomErrorMessage: Story = { args: { checkbox: { label: 'Erreur personnalisée', value: 'custom-error', }, uniqueId: 'checkbox-custom-error', required: true, requiredErrorMessage: 'Veuillez cocher cette case pour continuer', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, ], }, render: args => ({ components: { AmeliproCheckbox }, setup() { const model = ref(false) watch(() => args.modelValue, (newValue) => { model.value = !!newValue }) return { args, model } }, template: `

Message d’erreur personnalisé via la prop requiredErrorMessage.

`, }), } export const Append: Story = { args: { checkbox: { label: 'Avec append', value: 'with-append', }, uniqueId: 'checkbox-with-append', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, ], }, render: args => ({ components: { AmeliproCheckbox }, setup() { const model = ref(false) watch(() => args.modelValue, (newValue) => { model.value = !!newValue }) return { args, model } }, template: `

Exemple avec slot append.

`, }), }