import type { StoryObj, Meta } from '@storybook/vue3'
import PhoneField from './PhoneField.vue'
import { ref, watch } from 'vue'
import { indicatifs } from './indicatifs'
import { getValidationDocumentation } from '@/composables/unifyValidation/documentationValidationProps'
import { fn } from '@storybook/test'
const meta = {
title: 'Composants/Formulaires/PhoneField',
component: PhoneField,
parameters: {
layout: 'fullscreen',
actions: { argTypesRegex: '^on.*' },
controls: { exclude: /^on*|undefined/ },
},
argTypes: {
'modelValue': {
control: 'string',
description: 'Valeur du champ numéro de téléphone. Ne doit contenir que les chiffres du numéro national, sans l\'indicatif pays. Par exemple, pour un numéro français +33 6 12 34 56 78, le `modelValue` doit être `0612345678`.',
table: {
type: {
summary: 'string',
},
},
},
'bgColor': {
control: 'color',
description: 'Couleur de fond du champ.',
table: {
type: {
summary: 'string',
},
},
},
'dialCodeModel': {
control: 'string',
description: 'Valeur de l\'indicatif pays sélectionné. Peut être une chaîne (ex : "+33") ou un objet indicatif complet (ex : { code: "+33", country: "France", abbreviation: "FR" }).' },
'outlined': {
control: 'boolean',
description: 'Affiche les champs avec une bordure.',
table: {
defaultValue: 'true',
},
},
'withCountryCode': {
control: 'boolean',
description: 'Affiche un sélecteur d\'indicatif pays à côté du champ numéro de téléphone. Lorsque cette prop est à `true`, le champ est divisé en deux parties : un sélecteur pour l\'indicatif pays et un champ pour le numéro national.',
table: {
type: {
summary: 'boolean',
},
},
},
'displayFormat': {
control: { type: 'select' },
description: 'Format d\'affichage des options d\'indicatif pays dans le sélecteur. Les formats disponibles sont :\n\n- `code` (ex : +33)\n- `code-abbreviation` (ex : +33 - FR)\n- `code-country` (ex : +33 - France)\n- `country` (ex : France)\n- `abbreviation` (ex : FR)',
options: ['code', 'code-abbreviation', 'code-country', 'country', 'abbreviation'],
table: {
type: {
summary: `'code' | 'code-abbreviation' | 'code-country' | 'country' | 'abbreviation'`,
},
},
},
'customIndicatifs': {
table: {
type: {
summary: 'Indicatif[]',
details: `{
code: string
abbreviation: string
country: string
countryFr?: string
mask?: string
phoneLength?: number
}[]
` },
},
control: 'object',
description: 'Permet d\'ajouter des indicatifs à la liste pre-existante',
},
'useCustomIndicatifsOnly': {
control: 'boolean',
description: 'Permet d\'utiliser uniquement les indicatifs que vous renseignez dans la props customIndicatifs',
},
'helpText': {
control: 'text',
description: 'Texte d\'aide affiché sous le champ. Lorsque présent, les messages d\'erreur incluent un exemple concret distinct du texte d\'aide.',
table: {
type: {
summary: 'string',
},
},
},
'autocompleteCountryCode': {
control: 'text',
description: 'Valeur de l\'attribut `autocomplete` pour le champ indicatif pays. Utiliser `tel-country-code` (défaut) lorsque le numéro est séparé en deux champs (indicatif + numéro national), conformément à [WHATWG](https://html.spec.whatwg.org/#autofill-field-tel-country-code) et [WCAG 1.3.5](https://www.w3.org/WAI/WCAG21/quickref/#identify-input-purpose).',
table: {
type: {
summary: `'autocomplete' | 'tel-country-code' | undefined`,
},
},
},
'autocompletePhone': {
control: 'text',
table: {
type: {
summary: `'autocomplete' | 'tel-national' | 'tel' | 'tel-extension'`,
},
},
description: 'Valeur de l\'attribut `autocomplete` pour le champ numéro de téléphone. Valeurs recommandées selon le scénario :\n\n- `tel-national` (défaut) — numéro sans indicatif, lorsque le composant est en mode deux champs (`withCountryCode`).\n- `tel` — numéro complet avec indicatif intégré, pour un champ unique sans sélecteur de pays.\n- `tel-extension` — poste ou extension téléphonique.',
},
'displayAsterisk': { control: 'boolean' },
'update:modelValue': {
action: 'update:modelValue',
table: {
type: {
summary: 'string',
},
},
},
'isClearable': {
control: 'boolean',
table: {
type: {
summary: 'boolean',
},
category: 'props',
},
description: 'Affiche un bouton de nettoyage (clear) dans le champ lorsque du texte est saisi. Lorsque `true`, les utilisateurs peuvent facilement effacer le contenu du champ en cliquant sur ce bouton.',
},
'withoutFieldset': {
control: 'boolean',
table: {
type: {
summary: 'boolean',
},
category: 'props',
},
description: 'N\'entoure pas le champ d\'un élément `