Accessibilité, clavier et audit axe
QForm Builder Community 0.1.16 ajoute un contrat d’accessibilité cohérent entre le catalogue, le canvas, l’arborescence, les dialogues et les modes de consultation.
Navigation clavier
Dans le catalogue de gauche :
Tabplace le focus sur un élément ;EntréeouEspaceajoute l’élément au formulaire ;- le champ ajouté reçoit ensuite le focus dans le canvas.
Dans le canvas en mode édition :
Tabparcourt les overlays des champs ;EntréeouEspacesélectionne le champ ;Alt+Flèche hautdéplace le champ vers le haut ;Alt+Flèche basdéplace le champ vers le bas.
Dans l’arborescence :
- chaque nœud métier est focalisable ;
Alt+Flèche haut/basdéclenche la même action de déplacement que le menu contextuel ;- le focus revient sur le nœud déplacé.
Les boutons de copie et de suppression sont de vrais QBtn avec un nom accessible et un QTooltip enfant direct.
Cohérence clic, sélection et déplacement
Le canvas utilise une session d’interaction unique. Un clic simple sélectionne le champ, tandis qu’un déplacement natif conserve cette sélection jusqu’au drop. Le verrou anti-clic post-drag est associé à la source exacte : il neutralise le clic synthétique du navigateur sans bloquer la sélection d’un autre champ.
Les overlays, actions contextuelles et headers de steps sont délégués à leurs handlers dédiés dès la phase de capture. Ils ne traversent pas la logique générique de clic extérieur : un clic synthétique consommé sur la source déplacée ne peut donc pas effacer une autre sélection valide.
Le réordonnancement clavier reste indépendant du drag pointeur et conserve ses annonces live, sa restitution de focus et l’alternative Alt + Flèche haut/bas.
Annonces et restauration du focus
Le builder contient deux régions live invisibles :
- une région
politepour les ajouts, sélections et déplacements ; - une région
assertivepour les opérations destructives ou prioritaires.
Après la fermeture du Theme Builder, de l’historique ou des dialogues import/export, le focus revient sur le bouton qui a ouvert le panneau.
Les composants personnalisés imbriqués dans le builder peuvent utiliser le composable auto-importé :
Le même composable est disponible par import explicite depuis le sous-chemin public :
import { useFormBuilderAccessibility } from '@vevedh/qform-builder-layer/accessibility'const accessibility = useFormBuilderAccessibility()
accessibility.announce('Configuration appliquée')
await accessibility.focusField('email')Le composable reste sûr hors d’un FormBuilder : son implémentation de repli ne produit aucune erreur.
Modes lecture seule et désactivé
Le mode readonly bascule le builder vers l’aperçu et interdit les mutations. Le mode disabled désactive les actions et les contrôles concernés. Les deux états font partie de la fixture d’audit navigateur.
Audit automatisé
Le projet utilise @axe-core/playwright avec les tags WCAG A/AA jusqu’à WCAG 2.2 AA.
bun run accessibility:check
bun run e2e:accessibility
bun run release:browser:checkLe scénario vérifie :
- le builder en édition ;
- l’aperçu ;
- le Theme Builder ;
- les dialogues import/export ;
- les modes lecture seule et désactivé ;
- l’ajout et le déplacement au clavier ;
- la restauration du focus.
Une violation axe fait échouer le test et affiche l’identifiant de la règle, son aide, la cible DOM et le résumé de l’échec.
Limite de l’automatisation
Un audit axe ne remplace pas une revue humaine. Avant une release candidate, vérifier aussi :
- la logique de lecture avec NVDA ou un autre lecteur d’écran ;
- la pertinence des libellés métier ;
- la cohérence de l’ordre de tabulation ;
- l’usage sans souris sur les formulaires complexes ;
- le contraste des thèmes personnalisés fournis par l’application hôte ;
- le zoom à 200 % et le reflow.
Contrat pour les extensions
Un élément ou panneau personnalisé doit :
- utiliser un contrôle natif ou Quasar approprié ;
- fournir un nom accessible quand le contenu visible ne suffit pas ;
- conserver un focus visible ;
- prendre en charge
EntréeetEspacelorsqu’un élément non natif agit comme un bouton ; - ne pas utiliser un
divcliquable sans rôle ni clavier ; - restituer le focus après la fermeture d’un panneau modal ;
- respecter
readonly,disabledetprefers-reduced-motion; - ajouter un scénario Playwright lorsqu’un nouveau parcours clavier est introduit.