import type { Meta, StoryObj } from '@storybook/vue3' import { VSlideGroup, VSlideGroupItem, VCard, VCardText, VBtn, VChip } from 'vuetify/components' import { ref } from 'vue' const meta: Meta = { title: 'Composants/Composants Vuetify/VSlideGroup', tags: ['!dev'], component: VSlideGroup, parameters: { docs: { source: { transform: (src: string) => { const templateMatch = src.match(/template:\s*`([\s\S]*?)`/) if (templateMatch && templateMatch[1]) { return templateMatch[1] .trim() .replace(//g, '') .replace(//g, '') .replace(//g, '') .replace(//g, '') .replace(//g, '') .replace(//g, '') .replace(//g, '') } return src }, }, }, }, argTypes: { selectedClass: { control: { type: 'text' }, description: 'Classe CSS appliquée aux éléments sélectionnés', }, showArrows: { control: { type: 'boolean' }, description: 'Affiche les flèches de navigation', }, centerActive: { control: { type: 'boolean' }, description: 'Centre l\'élément actif', }, multiple: { control: { type: 'boolean' }, description: 'Permet la sélection multiple', }, mandatory: { control: { type: 'boolean' }, description: 'Rend la sélection obligatoire', }, }, } export default meta type Story = StoryObj export const Default: Story = { render: args => ({ components: { VSlideGroup, VSlideGroupItem, VCard, VCardText }, setup() { return { args } }, template: ` {{ n }} `, }), args: { showArrows: true, }, parameters: { docs: { source: { code: ``, }, }, }, } export const WithChips: Story = { render: args => ({ components: { VSlideGroup, VSlideGroupItem, VChip }, setup() { const tags = ['Option 1', 'Option 2', 'Option 3', 'Option 4', 'Option 5', 'Option 6', 'Option 7', 'Option 8'] return { args, tags } }, template: ` {{ tag }} `, }), args: { showArrows: true, mandatory: false, }, parameters: { docs: { source: { code: ` `, }, }, }, } export const CenterActive: Story = { render: args => ({ components: { VSlideGroup, VSlideGroupItem, VBtn }, setup() { const model = ref(3) const items = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'] return { args, model, items } }, template: ` {{ item }}

Jour sélectionné : {{ items[model] }}

`, }), args: { showArrows: true, centerActive: true, mandatory: true, }, parameters: { docs: { source: { code: ` `, }, }, }, } export const Misc: Story = { render: args => ({ components: { VSlideGroup, VSlideGroupItem, VChip }, setup() { const model = ref(0) const items = [ { text: 'Aperitifs', value: 'aperitifs' }, { text: 'Appetizers', value: 'appetizers' }, { text: 'Cocktails', value: 'cocktails' }, { text: 'Dinner', value: 'dinner' }, { text: 'Wines by the Bottle', value: 'wines_bottle' }, { text: 'Wines by the Glass', value: 'wines_glass' }, ] return { args, model, items } }, template: ` {{ item.text }}

Selected: {{ items[model]?.text || 'None' }}

`, }), args: { showArrows: true, centerActive: true, mandatory: true, }, parameters: { docs: { description: { story: 'Exemple de menu de navigation avec sélection et affichage de la valeur sélectionnée.', }, source: { code: ` `, }, }, }, } export const MultipleSelection: Story = { render: args => ({ components: { VSlideGroup, VSlideGroupItem, VCard, VCardText }, setup() { return { args } }, template: ` {{ n }} `, }), args: { showArrows: true, multiple: true, }, parameters: { docs: { source: { code: ``, }, }, }, } export const CustomCards: Story = { render: args => ({ components: { VSlideGroup, VSlideGroupItem, VCard, VCardText }, setup() { const categories = [ { title: 'Catégorie 1', color: 'primary' }, { title: 'Catégorie 2', color: 'secondary' }, { title: 'Catégorie 3', color: 'success' }, { title: 'Catégorie 4', color: 'info' }, { title: 'Catégorie 5', color: 'warning' }, { title: 'Catégorie 6', color: 'error' }, ] return { args, categories } }, template: ` {{ category.title }} `, }), args: { showArrows: true, mandatory: false, }, parameters: { docs: { source: { code: ` `, }, }, }, }