import type { Meta, StoryObj } from '@storybook/vue3' import AmeliproCard from './AmeliproCard.vue' const meta = { argTypes: { borderColor: { description: 'Couleur des bordures de la card' }, bordered: { description: 'Permet d’activer ou de desactiver les bordures de la card' }, cardColor: { description: 'Couleur du background de la card' }, cardTitle: { description: 'Valeur du titre de la card' }, classes: { description: 'Classes personnalisée de la card' }, contentClasses: { description: 'Partie droite du header du panneau dépliant' }, default: { description: 'Contenu de la card' }, divider: { description: 'Permet d’activer ou de desactiver le divider de la card entre le titre et le contenu' }, fullSizeImg: { description: 'Slot permettant d’ajouter une image qui couvre toute la largeur du bloc entre le header et le contenu' }, headerLeft: { description: 'Titre de la card' }, headerRight: { description: 'Header droit de la card' }, headerRightWidth: { description: 'Défini la largeur de la partie droite des headers des cartes. Cette props est utile seulement si le slot accordion-header-right est utilisé' }, noCardHeader: { description: 'Permet de supprimer la partie header de la card' }, rightPart: { description: 'Permet de créer un encart à droite de la card' }, rightPartClasses: { description: 'Permet des classes sur l’encart à droite de la card' }, rightPartContent: { description: 'Contenu de la partie droite de la carte, ne sert que si la propriété rightPart est activée' }, rightPartWidth: { description: 'Permet de gérer la largeur l’encart à droite de la card' }, titleColor: { description: 'Couleur du titre de la card' }, titleLevel: { description: 'Permet de changer le niveau du titre' }, uniqueId: { description: 'Identifiant unique de la carte' }, }, component: AmeliproCard, title: 'Composants/Amelipro/Cartes/AmeliproCard', } as Meta export default meta type Story = StoryObj export const Default: Story = { args: { cardTitle: 'Mon titre', default: '[Slot: default]', headerRight: '[Slot: headerRight]', uniqueId: 'amelipro-card-unique-id', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Scripts', code: ``, }, ], }, render: args => ({ components: { AmeliproCard }, setup() { return { args } }, template: ` `, }), } // --- Carte sans header --- export const SansHeader: Story = { name: 'Sans header', args: { cardTitle: 'Titre masqué', default: '[Slot: default]', noCardHeader: true, uniqueId: 'amelipro-card-no-header', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Script', code: ``, }, ], }, render: args => ({ components: { AmeliproCard }, setup() { return { args } }, template: `

La prop noCardHeader masque le header de la carte.

`, }), } // --- Carte avec bordure et couleur personnalisées --- export const BordureEtCouleur: Story = { name: 'Bordure et couleur', args: { cardTitle: 'Carte colorée', default: '[Slot: default]', bordered: true, borderColor: '#1976d2', cardColor: '#e3f2fd', uniqueId: 'amelipro-card-colored', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Script', code: ``, }, ], }, render: args => ({ components: { AmeliproCard }, setup() { return { args } }, template: `

La carte possède une bordure et une couleur de fond personnalisées grâce aux props bordered, borderColor et cardColor.

`, }), } // --- Carte avec slot headerLeft et headerRight --- export const HeaderGaucheDroite: Story = { name: 'Header gauche et droite', args: { cardTitle: 'Titre principal', default: '[Slot: default]', uniqueId: 'amelipro-card-header-left-right', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Script', code: ``, }, ], }, render: args => ({ components: { AmeliproCard }, setup() { return { args } }, template: `

Utilisation des slots headerLeft et headerRight pour personnaliser les deux parties du header.

`, }), } // --- Carte avec encart à droite --- export const EncartDroit: Story = { name: 'Encart à droite', args: { cardTitle: 'Carte avec encart', default: '[Slot: default]', rightPart: true, rightPartContent: 'Contenu encart', rightPartWidth: '120px', uniqueId: 'amelipro-card-right-part', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Script', code: ``, }, ], }, render: args => ({ components: { AmeliproCard }, setup() { return { args } }, template: `

La prop rightPart active un encart à droite de la carte, personnalisable avec rightPartContent et rightPartWidth.

`, }), } // --- Carte avec image pleine largeur (slot fullSizeImg) --- export const ImagePleineLargeur: Story = { name: 'Image pleine largeur', args: { cardTitle: 'Carte avec image', default: '[Slot: default]', uniqueId: 'amelipro-card-full-img', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Script', code: ``, }, ], }, render: args => ({ components: { AmeliproCard }, setup() { return { args } }, template: `

Le slot fullSizeImg permet d’ajouter une image qui couvre toute la largeur de la carte.

`, }), } // --- Carte sans divider --- export const SansDivider: Story = { name: 'Sans divider', args: { cardTitle: 'Carte sans divider', default: '[Slot: default]', divider: false, uniqueId: 'amelipro-card-no-divider', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Script', code: ``, }, ], }, render: args => ({ components: { AmeliproCard }, setup() { return { args } }, template: `

La prop divider à false supprime la séparation entre le header et le contenu.

`, }), } // --- Carte avec niveau de titre et couleur personnalisés --- export const TitreNiveauEtCouleur: Story = { name: 'Titre niveau et couleur', args: { cardTitle: 'Titre personnalisé', titleLevel: 3, titleColor: '#1976d2', default: '[Slot: default]', uniqueId: 'amelipro-card-title-level-color', }, parameters: { sourceCode: [ { name: 'Template', code: ``, }, { name: 'Script', code: ``, }, ], }, render: args => ({ components: { AmeliproCard }, setup() { return { args } }, template: `

Le niveau et la couleur du titre sont personnalisés grâce aux props titleLevel et titleColor.

`, }), }