import type { Meta, StoryObj } from '@storybook/vue3' import CopyBtn from './CopyBtn.vue' import { VIcon } from 'vuetify/components' import { mdiContentDuplicate } from '@mdi/js' const duplicateIcon = mdiContentDuplicate const meta = { title: 'Composants/Boutons/CopyBtn', component: CopyBtn, parameters: { layout: 'fullscreen', controls: { exclude: ['copy'] }, }, argTypes: { ariaLabel: { control: { type: 'text' }, default: 'copy-btn', }, ariaOwns: { control: { type: 'text' }, default: 'copy-btn', }, textToCopy: { control: { type: 'text' }, default: 'test', }, hideTooltip: { control: { type: 'boolean' }, default: false, }, tooltipDuration: { control: { type: 'number' }, default: 2000, }, separatorsToRemove: { control: { type: 'text' }, default: '', }, vuetifyOptions: { control: { type: 'object' }, default: () => ({ menu: { location: 'end center', offset: 16, zIndex: 8, contentClass: 'sy-copy-tooltip-menu text-white text-body-2 ml-2', }, btn: { icon: true, variant: 'text', density: 'comfortable', }, icon: { color: 'grey-darken-20', }, }), }, }, } satisfies Meta export default meta type Story = StoryObj export const Default: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { ariaLabel: 'Copier le numéro de patient', ariaOwns: 'copy-btn-1', textToCopy: '1970756541', hideTooltip: false, tooltipDuration: 2000, vuetifyOptions: { menu: { location: 'end center', offset: 16, zIndex: 8, contentClass: 'sy-copy-tooltip-menu text-white text-body-2 ml-2', }, btn: { icon: true, variant: 'text', density: 'comfortable', }, icon: { color: 'grey-darken-20', }, }, }, render: (args) => { return { components: { CopyBtn }, setup() { return { args } }, template: `

Patient n°1970756541

`, } }, } export const NoTooltip: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { ariaLabel: 'Copier le numéro de patient', textToCopy: '1970756541', hideTooltip: true, tooltipDuration: 2000, }, render: (args) => { return { components: { CopyBtn }, setup() { return { args } }, template: `

Patient n°1970756541

`, } }, } export const SlotIcon: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { ariaLabel: 'Copier le numéro de patient', textToCopy: '1970756541', hideTooltip: false, tooltipDuration: 2000, icon: duplicateIcon, }, render: (args) => { return { components: { CopyBtn, VIcon }, setup() { return { args } }, template: `

Patient n°1970756541

`, } }, } export const RemoveSeparators: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { ariaLabel: 'Copier l\'IBAN sans tirets', ariaOwns: 'copy-btn-remove-separators', textToCopy: 'FR76-3000-4000-0300-0000-0000-000', hideTooltip: false, tooltipDuration: 2000, separatorsToRemove: '-', }, render: (args) => { return { components: { CopyBtn }, setup() { return { args } }, template: `

IBAN : FR76-3000-4000-0300-0000-0000-000

`, } }, } export const MultiSeparators: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { ariaLabel: 'Copier le numéro sans séparateurs', ariaOwns: 'copy-btn-multi-separators', textToCopy: '+33 (0)6.12.34.56.78', hideTooltip: false, tooltipDuration: 2000, separatorsToRemove: ['+', '(', ')', '.'], }, render: (args) => { return { components: { CopyBtn }, setup() { return { args } }, template: `

Téléphone : +33 (0)6.12.34.56.78

`, } }, } export const RemoveSpaces: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { ariaLabel: 'Copier le numéro de sécurité sociale sans espaces', ariaOwns: 'copy-btn-remove-spaces', textToCopy: '1 97 07 56 541 123 45', hideTooltip: false, tooltipDuration: 2000, }, render: (args) => { return { components: { CopyBtn }, setup() { return { args } }, template: `

Numéro de sécurité sociale : 1 97 07 56 541 123 45

`, } }, } export const SlotTooltip: Story = { parameters: { a11y: { disable: true, }, sourceCode: [ { name: 'Template', code: ` `, }, { name: 'Script', code: ` `, }, ], }, args: { ariaLabel: 'Copier le numéro de patient', textToCopy: '1970756541', hideTooltip: false, tooltipDuration: 2000, tooltip: 'Texte personalisé', }, render: (args) => { return { components: { CopyBtn }, setup() { return { args } }, template: `

Patient n°1970756541

`, } }, }