# accessibility-widget Widget d'accessibilité React aligné **RGAA 4.1 / WCAG 2.1 AA**, conçu pour rendre les sites et services numériques accessibles à toutes et à tous. ## Installation ```bash npm install accessibility-widget ``` ## Usage ```tsx import { AccessibilityWidget } from "accessibility-widget"; import "accessibility-widget/dist/accessibility-widget.css"; export default function App() { return ( <> ); } ``` ## Props | Prop | Type | Défaut | Description | | ------------ | -------------------------------------------------------------------- | --------------------- | ---------------------------------------------------- | | `position` | `"bottom-right"` \| `"bottom-left"` \| `"top-right"` \| `"top-left"` | `"bottom-right"` | Position du bouton flottant | | `lang` | `"fr"` \| `"en"` | `"fr"` | Langue de l'interface | | `storageKey` | `string` | `"a11y-widget-prefs"` | Clé localStorage pour la persistance des préférences | ## Fonctionnalités ### RGAA 3 - Couleurs - Contraste élevé - Inversion des couleurs ### RGAA 10 - Présentation de l'information - Taille du texte (×1 / ×1.2 / ×1.4 / ×1.6) - Hauteur de ligne augmentée - Espacement des lettres - Espacement des mots - Alignement du texte à gauche - Police lisible (serif) ou dyslexique (OpenDyslexic) ### RGAA 13 - Consultation - Réduction des animations - Mise en pause des animations ### Navigation au clavier - Indicateur de focus renforcé - Mise en évidence des liens ### Aide à la lecture - Guide de lecture (réticule horizontal) - Masque de lecture ## Accessibilité du widget lui-même Le widget est lui-même conforme RGAA : - Bouton trigger avec `aria-label`, `aria-expanded`, `aria-haspopup="dialog"` - Dialog avec `role="dialog"`, `aria-modal`, `aria-labelledby` - Focus-trap dans le panneau (Tab / Shift+Tab) - Fermeture par Échap avec retour du focus sur le trigger - Switches avec `role="switch"`, `aria-checked`, `aria-labelledby` - Annonces des changements d'état via `aria-live="polite"` - Compatible NVDA + Firefox, JAWS + Firefox, VoiceOver + Safari, TalkBack + Chrome ## Environnements de test recommandés (RGAA) | Environnement | OS | | ------------------------------------- | ----------- | | NVDA (dernière version) + Firefox | Windows | | JAWS (version précédente) + Firefox | Windows | | VoiceOver (dernière version) + Safari | macOS / iOS | | TalkBack (dernière version) + Chrome | Android | ## Usage avancé ### Usage headless (hooks uniquement) ```tsx import { useA11yStore, useA11yEffects } from "accessibility-widget"; function MonWidget() { const { state, dispatch } = useA11yStore("mes-prefs"); useA11yEffects(state); return ( ); } ``` ### Personnalisation CSS Toutes les couleurs et dimensions sont en custom properties CSS : ```css :root { --a11y-color-bg: #1a1a2e; /* couleur du bouton et header */ --a11y-color-accent: #005fcc; /* couleur d'accentuation */ --a11y-panel-width: 340px; /* largeur du panneau */ --a11y-radius: 12px; /* rayon des bordures */ } ``` ## Référence - [RGAA 4.1 - Critères et tests](https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/) - [RGAA 4.1 - Environnements de test](https://accessibilite.numerique.gouv.fr/methode/environnement-de-test/) - [WCAG 2.1](https://www.w3.org/TR/WCAG21/) ## Licence MIT © [Jessy DAVID](https://jessy-david.dev)