import { mdiAccount } from '@mdi/js' import type { Meta, StoryObj } from '@storybook/vue3' import SyBtnMenu from './SyBtnMenu.vue' import { VListItem, VListItemTitle } from 'vuetify/components' import SyIcon from '@/components/Customs/SyIcon/SyIcon.vue' const meta: Meta = { title: 'Composants/Navigation/SyBtnMenu', component: SyBtnMenu, parameters: { layout: 'fullscreen', controls: { exclude: ['modelValue', 'label', 'required', 'isOpen', 'formattedItems', 'selectedItem'] }, }, argTypes: { modelValue: { control: 'text' }, menuItems: { control: 'object' }, label: { control: 'text' }, menuId: { control: 'text' }, textKey: { control: 'text' }, valueKey: { control: 'text' }, primaryInfo: { control: 'text' }, secondaryInfo: { control: 'text' }, hideIcon: { control: 'boolean' }, hideLogoutBtn: { control: 'boolean' }, isMobileView: { control: 'boolean' }, options: { control: 'object' }, }, } export default meta type Story = StoryObj export const Default: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { primaryInfo: 'Mes options', menuItems: [ { text: 'Administration', value: 'Administration', link: '/admin' }, { text: 'Profil', value: 'Profil', link: '/profile' }, { text: 'Paramètres', value: 'Paramètres', link: '/settings' }, ], modelValue: 'Administration', }, render: (args) => { return { components: { SyBtnMenu }, setup() { return { args } }, template: `
`, } }, } export const MobileView: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { primaryInfo: 'Mes options', menuItems: ['Option 1', 'Option 2'], isMobileView: true, }, render: (args) => { return { components: { SyBtnMenu, SyIcon }, setup() { return { args, mdiAccount } }, template: `
`, } }, } export const WithSlotPrependIcon: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { primaryInfo: 'Jane Doe', menuItems: ['Option 1', 'Option 2'], options: { iconColor: 'secondary', }, }, render: (args) => { return { components: { SyBtnMenu, SyIcon }, setup() { return { args, mdiAccount } }, template: `
`, } }, } export const WithSlotAppendIcon: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { primaryInfo: 'Jane Doe', menuItems: ['Option 1', 'Option 2'], }, render: (args) => { return { components: { SyBtnMenu, SyIcon }, setup() { return { args, mdiAccount } }, template: `
`, } }, } export const WithIconOnly: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { primaryInfo: 'Jane Doe', menuItems: ['Option 1', 'Option 2'], iconOnly: true, }, render: (args) => { return { components: { SyBtnMenu, SyIcon }, setup() { return { args, mdiAccount } }, template: `
`, } }, } export const WithLogoutItemSlot: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { primaryInfo: 'Mes options', menuItems: ['Option 1', 'Option 2'], }, render: (args) => { return { components: { SyBtnMenu, VListItem, VListItemTitle }, setup() { return { args } }, template: `
`, } }, } export const WithCustomKeys: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { menuItems: [ { customText: 'Choix 1', customValue: '1' }, { customText: 'Choix 2', customValue: '2' }, ], textKey: 'customText', valueKey: 'customValue', }, render: (args) => { return { components: { SyBtnMenu, SyIcon }, setup() { return { args, mdiAccount } }, template: `
`, } }, } export const WithMultipleSlots: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { menuItems: ['Option 1', 'Option 2'], }, render: (args) => { return { components: { SyBtnMenu, SyIcon, VListItem, VListItemTitle }, setup() { return { args, mdiAccount } }, template: `
`, } }, } export const WithCustomStyles: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { primaryInfo: 'Jane Doe', menuItems: ['Option 1', 'Option 2'], }, render: (args) => { return { components: { SyBtnMenu, SyIcon }, setup() { return { args, mdiAccount } }, template: `
`, } }, } export const WithStyledOptions: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { menuItems: ['Option 1', 'Option 2'], options: { menu: { height: '200px' }, btn: { variant: 'outlined', textColor: 'primary', color: 'primary' }, list: { dense: true, textColor: 'primary' }, }, }, render: (args) => { return { components: { SyBtnMenu, SyIcon }, setup() { return { args, mdiAccount } }, template: `
`, } }, }