import type { StoryObj } from '@storybook/vue3' import { mdiKeyboard, mdiLoading } from '@mdi/js' const keyboardIcon = mdiKeyboard const loadingIcon = mdiLoading export default { title: 'Composants/Formulaires/Selects/SyAutocomplete/Accessibility', } export const ComboboxKeyboardNavigation: StoryObj = { tags: ['!dev'], render: () => { return { setup() { const keyboardData = [ { touche: 'Flèche bas', action: 'Ouvre le menu et déplace le focus sur la première option (ou la suivante si une option est déjà sélectionnée)', }, { touche: 'Flèche haut', action: 'Ouvre le menu et déplace le focus sur la dernière option', }, { touche: 'Flèches haut/bas', action: 'Déplace le focus dans la liste des options (sans modifier la sélection)', }, { touche: 'Entrée', action: 'Sélectionne l\'option active et ferme le menu', }, { touche: 'Échap', action: 'Ferme le menu sans modifier la sélection', }, { touche: 'Saisie de texte', action: 'Filtre les options en temps réel basé sur le texte saisi', }, { touche: 'Caractères imprimables', action: 'Déplace le focus sur l\'option commençant par le(s) caractère(s) saisi(s)', }, ] return { keyboardData, keyboardIcon } }, template: `

Navigation au clavier

Le composant SyAutocomplete implémente le pattern de navigation au clavier recommandé par le W3C pour les combobox avec auto-complétion.

Touche Action {{ item.touche }} {{ item.action }}

Note: Le focus DOM reste toujours sur l'élément combobox, tandis que le focus visuel est géré via aria-activedescendant.

`, } }, } export const LoadingAccessibility: StoryObj = { tags: ['!dev'], render: () => { return { setup() { return { loadingIcon } }, template: `

Lorsque la prop loading est à true, le composant affiche une barre de progression au bas du champ.

Comportement Détail Barre de progression accessible La barre porte un aria-label nommant le champ (« Chargement de [label] ») afin que les lecteurs d’écran annoncent son état. Message « Aucune option » masqué Le message d’absence de résultats n’est pas affiché pendant le chargement, pour éviter de signaler à tort que la liste est vide. Critère RGAA 4.1 / WCAG 4.1.2 Le rôle progressbar et son nom accessible satisfont le critère « Nom, rôle, valeur » pour les composants d’interface.
`, } }, }