import type { Meta, StoryObj } from '@storybook/vue3' import { ref, watch } from 'vue' import AmeliproBtn from '../AmeliproBtn/AmeliproBtn.vue' import AmeliproDialog from './AmeliproDialog.vue' const meta = { argTypes: { attach: { description: 'attache le contenu de la boite de dialogue et son overlay à l\'intérieur de v-app' }, cancelBtnLabel: { description: 'Label du bouton annuler' }, change: { description: 'Événement émis au click sur les boutons annuler et fermer' }, confirm: { description: 'Événement émis au click sur le bouton valider' }, default: { description: 'Contenu principal de la fenêtre' }, eager: { description: 'Property héritée de Vuetify permettant de charger le contenu de la modale dans le DOM même lorsque la modale est fermée' }, footer: { description: 'Contenu du footer de la fenêtre' }, fullscreen: { description: 'Affiche la modale en plein écran' }, header: { description: 'Titre de la fenêtre' }, hiddenCancelBtn: { description: 'Masque le bouton Annuler du footer' }, labelledby: { description: 'Id du titre de la modale' }, mainContentMaxHeight: { description: 'Hauteur maximale du contenu principal' }, mainContentMinHeight: { description: 'Hauteur minimale du contenu principal' }, modelValue: { description: 'Valeur d’affichage de la fenêtre de dialogue' }, noClickOutside: { description: 'Empêche la fermeture de la modale en cliquant à l’extérieur ou en appuyant sur echap mais la croix de fermeture reste présente' }, noFooter: { description: 'Masque le footer par défaut' }, persistent: { description: 'Retire la croix de fermeture' }, title: { description: 'Titre par défaut' }, uniqueId: { description: 'Identifiant unique de la modale' }, validationBtnLabel: { description: 'Label du bouton valider' }, width: { description: 'Largeur de la fenêtre de dialogue' }, }, component: AmeliproDialog, title: 'Composants/Amelipro/Boites de dialogue/AmeliproDialog', } as Meta export default meta type Story = StoryObj export const Default: Story = { args: { default: '[Slot: default]', modelValue: false, uniqueId: 'amelipro-dialog-unique-id', }, parameters: { args: {}, sourceCode: [ { name: 'Template', code: ``, }, { name: 'Scripts', code: ``, }, ], }, render: args => ({ components: { AmeliproDialog, AmeliproBtn }, setup() { const value = ref(false) // Optional: Keeps v-model in sync with storybook args watch(() => args.modelValue, (newValue) => { value.value = newValue }) return { args, value } }, template: `
Ouvrir la modale
`, }), } export const Fullscreen: Story = { name: 'Plein écran', args: { modelValue: false, fullscreen: true, uniqueId: 'amelipro-dialog-fullscreen', default: 'Contenu de la modale en plein écran', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Scripts', code: ``, }, ], }, render: args => ({ components: { AmeliproDialog, AmeliproBtn }, setup() { const value = ref(false) watch(() => args.modelValue, (newValue) => { value.value = newValue }) return { args, value } }, template: `

Modale affichée en plein écran (fullscreen).

Ouvrir la modale plein écran
`, }), } export const SansFooter: Story = { name: 'Sans footer', args: { modelValue: false, noFooter: true, uniqueId: 'amelipro-dialog-no-footer', default: 'Contenu sans footer', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Scripts', code: ``, }, ], }, render: args => ({ components: { AmeliproDialog, AmeliproBtn }, setup() { const value = ref(false) watch(() => args.modelValue, (newValue) => { value.value = newValue }) return { args, value } }, template: `

Modale sans footer (noFooter).

Ouvrir la modale sans footer
`, }), } export const Persistent: Story = { name: 'Persistent (pas de croix de fermeture)', args: { modelValue: false, persistent: true, uniqueId: 'amelipro-dialog-persistent', default: 'Contenu persistent', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Scripts', code: ``, }, ], }, render: args => ({ components: { AmeliproDialog, AmeliproBtn }, setup() { const value = ref(false) watch(() => args.modelValue, (newValue) => { value.value = newValue }) return { args, value } }, template: `

Modale sans croix de fermeture (persistent).

Ouvrir la modale persistent
`, }), } export const AvecFooterPersonnalise: Story = { name: 'Avec footer personnalisé', args: { modelValue: false, uniqueId: 'amelipro-dialog-footer-custom', default: 'Contenu principal', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Scripts', code: ``, }, ], }, render: args => ({ components: { AmeliproDialog, AmeliproBtn }, setup() { const value = ref(false) watch(() => args.modelValue, (newValue) => { value.value = newValue }) return { args, value } }, template: `

Modale avec footer personnalisé via le slot footer.

Ouvrir la modale avec footer personnalisé
`, }), }