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: `
Le composant SyAutocomplete implémente le pattern de navigation au clavier recommandé par le W3C pour les combobox avec auto-complétion.
{{ item.touche }}Note: Le focus DOM reste toujours sur l'élément combobox, tandis que le focus visuel est géré via aria-activedescendant.
Lorsque la prop loading est à true, le composant affiche une barre de progression au bas du champ.
aria-label nommant le champ (« Chargement de [label] ») afin que les lecteurs d’écran annoncent son état.progressbar et son nom accessible satisfont le critère « Nom, rôle, valeur » pour les composants d’interface.