Skip to content

Commit 10db4c4

Browse files
committed
docs(a11y): plan for better world
1 parent 707b50e commit 10db4c4

19 files changed

Lines changed: 1556 additions & 0 deletions

A11Y.md

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
# Accessibilité (A11Y) - Ultraviolet Design System
2+
3+
## 🎯 Vision
4+
5+
Rendre la Design System Ultraviolet **entièrement accessible** et conforme aux standards **WCAG 2.1 niveau AA**, afin que tous les utilisateurs, quel que soit leur handicap, puissent utiliser les composants UI.
6+
7+
## 📂 Structure
8+
9+
Toute la documentation, l'outillage et les tickets relatifs à l'accessibilité sont centralisés dans le dossier [`a11y/`](./a11y/).
10+
11+
## 📋 Ce que nous allons faire
12+
13+
### Phase 1 : Infrastructure & Outillage 🔧
14+
- [`UV-001`](./a11y/UV-001-setup-eslint-plugin-jsx-a11y.txt) : Configuration de `oxlint` avec règles A11y
15+
- [`UV-002`](./a11y/UV-002-configuration-jest-axe-tests-unitaires.txt) : Mise en place de `vitest-axe` pour les tests unitaires
16+
- [`UV-003`](./a11y/UV-003-storybook-a11y-configuration-avancee.txt) : Configuration avancée de Storybook avec addon a11y
17+
- [`UV-004`](./a11y/UV-004-ci-cd-tests-a11y-automatises.txt) : Intégration des tests A11y dans la CI/CD
18+
19+
### Phase 2 : Audit & Correctifs 🔍
20+
- [`UV-005`](./a11y/UV-005-audit-complet-composants-ui.txt) : Audit complet de tous les composants UI
21+
- [`UV-006`](./a11y/UV-006-corriger-violations-critiques.txt) : Correction des violations critiques et serious
22+
- [`UV-007`](./a11y/UV-007-focus-management-modal-dialog.txt) : Focus management pour les modals/dialogs
23+
- [`UV-008`](./a11y/UV-008-navigation-clavier-composants-interactifs.txt) : Navigation clavier sur les composants interactifs
24+
- [`UV-009`](./a11y/UV-009-aria-labels-roles.txt) : ARIA labels et roles
25+
26+
### Phase 3 : Tests E2E A11y 🧪
27+
- [`UV-010`](./a11y/UV-010-setup-playwright-a11y-tests.txt) : Setup de Playwright pour les tests d'accessibilité
28+
- [`UV-011`](./a11y/UV-011-tests-navigation-clavier-e2e.txt) : Tests automatisés de navigation clavier
29+
- [`UV-012`](./a11y/UV-012-tests-screen-readers.txt) : Tests de compatibilité avec les screen readers
30+
31+
### Phase 4 : Documentation & Guidelines 📚
32+
- [`UV-013`](./a11y/UV-013-documentation-a11y-developpeurs.txt) : Documentation A11y pour les développeurs
33+
- [`UV-014`](./a11y/UV-014-stories-demonstration-a11y.txt) : Stories de démonstration des bonnes pratiques
34+
- [`UV-015`](./a11y/UV-015-template-pr-checklist-a11y.txt) : Template de PR avec checklist A11y obligatoire
35+
36+
### Phase 5 : Monitoring & Maintenance 📊
37+
- [`UV-016`](./a11y/UV-016-dashboard-suivi-a11y.txt) : Dashboard de suivi des violations
38+
- [`UV-017`](./a11y/UV-017-audit-regulier-automatise.txt) : Audit régulier automatisé
39+
40+
## 🤔 Pourquoi faire ça ?
41+
42+
### 1. **Inclusion** 🌍
43+
L'accessibilité numérique est un droit fondamental. Environ **15% de la population mondiale** vit avec un handicap. Rendre nos composants accessibles, c'est permettre à tous d'utiliser nos applications.
44+
45+
### 2. **Conformité légale** ⚖️
46+
De nombreuses réglementations imposent l'accessibilité numérique :
47+
- **RGAA** en France (Référentiel Général d'Amélioration de l'Accessibilité)
48+
- **ADA** aux États-Unis
49+
- **European Accessibility Act** pour l'UE
50+
51+
### 3. **Qualité technique** 💎
52+
L'accessibilité améliore :
53+
- La sémantique HTML
54+
- La navigation clavier
55+
- La compatibilité avec les technologies d'assistance
56+
- Le SEO (les bonnes pratiques A11y beneficient aussi au référencement)
57+
58+
### 4. **Expérience utilisateur**
59+
Les fonctionnalités accessibles profitent à tous :
60+
- Sous-titres → utiles dans un environnement bruyant
61+
- Navigation clavier → utile pour les power users
62+
- Contrastes élevés → utile en extérieur ou sur écrans de mauvaise qualité
63+
64+
## 🛠️ Comment nous allons procéder
65+
66+
### 1. Outillage automatique
67+
```bash
68+
# Linting A11y en temps réel
69+
oxlint
70+
71+
# Tests unitaires
72+
npm test -- --testNamePattern="a11y"
73+
74+
# Tests E2E
75+
npm run test:e2e:a11y
76+
```
77+
78+
### 2. Workflow de développement
79+
- **Avant chaque commit** : lint A11y via pre-commit hooks
80+
- **Avant chaque PR** : tests A11y automatisés + checklist manuelle
81+
- **Dans la CI** : blocage si violations critiques ou serious
82+
- **Dans Storybook** : validation A11y sur chaque story
83+
84+
### 3. Processus de correction
85+
1. Détection automatique via oxlint/storybook
86+
2. Audit manuel sur les composants critiques
87+
3. Correction des violations par ordre de priorité (critical → serious → moderate)
88+
4. Tests de validation (clavier + screen reader)
89+
5. Documentation des patterns utilisés
90+
91+
### 4. Formation & Sensibilisation
92+
- Documentation des bonnes pratiques
93+
- Exemples concrets dans Storybook
94+
- Revue de code systématique sur les aspects A11y
95+
96+
## 📊 Métriques de succès
97+
98+
| Objectif | Cible | Échéance |
99+
|----------|-------|----------|
100+
| 0 violation critical | ✅ 0 | Sprint 2 |
101+
| 0 violation serious | ✅ 0 | Sprint 3 |
102+
| < 50 violations moderate | ⚠️ < 50 | Sprint 4 |
103+
| WCAG AA compliance | 📈 95%+ | Sprint 6 |
104+
| Composants testés | ✅ 100% | Sprint 4 |
105+
106+
## 📚 Ressources
107+
108+
- [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/)
109+
- [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/)
110+
- [RGAA 4.1](https://accessibilite.numerique.gouv.fr/rgaa/)
111+
- [A11y Project Checklist](https://www.a11yproject.com/checklist/)
112+
113+
## 🚀 Démarrage
114+
115+
1. Consulter la [roadmap détaillée et les 17 tickets](./a11y/README.md)
116+
2. Review des tickets dans [`a11y/`](./a11y/) :
117+
- Phase 1 : [`UV-001`](./a11y/UV-001-setup-eslint-plugin-jsx-a11y.txt), [`UV-002`](./a11y/UV-002-configuration-jest-axe-tests-unitaires.txt), [`UV-003`](./a11y/UV-003-storybook-a11y-configuration-avancee.txt), [`UV-004`](./a11y/UV-004-ci-cd-tests-a11y-automatises.txt)
118+
- Phase 2 : [`UV-005`](./a11y/UV-005-audit-complet-composants-ui.txt) à [`UV-009`](./a11y/UV-009-aria-labels-roles.txt)
119+
- Phase 3 : [`UV-010`](./a11y/UV-010-setup-playwright-a11y-tests.txt) à [`UV-012`](./a11y/UV-012-tests-screen-readers.txt)
120+
- Phase 4 : [`UV-013`](./a11y/UV-013-documentation-a11y-developpeurs.txt) à [`UV-015`](./a11y/UV-015-template-pr-checklist-a11y.txt)
121+
- Phase 5 : [`UV-016`](./a11y/UV-016-dashboard-suivi-a11y.txt), [`UV-017`](./a11y/UV-017-audit-regulier-automatise.txt)
122+
3. Priorisation avec l'équipe
123+
4. Lancement du Sprint 1
124+
125+
---
126+
127+
**Contact** : A11y Audit Team
128+
**Date** : Avril 2026
129+
**Statut** : En cours

a11y/README.md

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# A11y Audit Tickets - Ultraviolet Design System
2+
3+
Ce dossier contient 17 tickets Jira pour l'audit d'accessibilité de la Design System Ultraviolet.
4+
5+
## 📋 Liste des tickets
6+
7+
### Phase 1 : Infrastructure & Outillage 🔧
8+
- **UV-001** - Setup eslint-plugin-jsx-a11y (High)
9+
- **UV-002** - Configuration jest-axe pour les tests unitaires (High)
10+
- **UV-003** - Storybook A11y - Configuration avancée (Medium)
11+
- **UV-004** - CI/CD - Tests A11y automatisés (High)
12+
13+
### Phase 2 : Audit & Correctifs 🔍
14+
- **UV-005** - Audit complet des composants UI (High)
15+
- **UV-006** - Corriger les violations critiques (High)
16+
- **UV-007** - Focus Management - Modal/Dialog (High)
17+
- **UV-008** - Navigation clavier - Composants interactifs (Medium)
18+
- **UV-009** - ARIA Labels & Roles (Medium)
19+
20+
### Phase 3 : Tests E2E A11y 🧪
21+
- **UV-010** - Setup Playwright A11y Tests (Medium)
22+
- **UV-011** - Tests E2E de navigation clavier (Medium)
23+
- **UV-012** - Tests Screen Readers (Low)
24+
25+
### Phase 4 : Documentation & Guidelines 📚
26+
- **UV-013** - Documentation A11y pour les développeurs (Medium)
27+
- **UV-014** - Stories de démonstration A11y (Medium)
28+
- **UV-015** - Template de PR avec checklist A11y (Low)
29+
30+
### Phase 5 : Monitoring & Maintenance 📊
31+
- **UV-016** - Dashboard de suivi A11y (Low)
32+
- **UV-017** - Audit régulier automatisé (Low)
33+
34+
## 🎯 Roadmap recommandée
35+
36+
### Sprint 1 (Semaines 1-2)
37+
- UV-001: Setup eslint-plugin-jsx-a11y
38+
- UV-004: CI/CD - Tests A11y automatisés
39+
- UV-005: Audit complet des composants
40+
41+
### Sprint 2 (Semaines 3-4)
42+
- UV-002: Configuration jest-axe
43+
- UV-006: Corriger les violations critiques
44+
- UV-007: Focus Management Modal
45+
46+
### Sprint 3 (Semaines 5-6)
47+
- UV-008: Navigation clavier
48+
- UV-009: ARIA Labels & Roles
49+
- UV-010: Setup Playwright A11y
50+
51+
### Sprint 4 (Semaines 7-8)
52+
- UV-011: Tests navigation clavier E2E
53+
- UV-013: Documentation A11y
54+
- UV-014: Stories de démonstration
55+
56+
### Sprint 5 (Semaines 9-10)
57+
- UV-003: Storybook configuration avancée
58+
- UV-015: Template PR checklist
59+
- UV-016: Dashboard de suivi
60+
61+
### Sprint 6 (Semaines 11-12)
62+
- UV-012: Tests Screen Readers
63+
- UV-017: Audit régulier automatisé
64+
65+
## 📊 Métriques de succès
66+
67+
- **0 violation critical** (objectif sprint 2)
68+
- **0 violation serious** (objectif sprint 3)
69+
- **< 50 violations moderate** (objectif sprint 4)
70+
- **WCAG AA compliance 95%+** (objectif sprint 6)
71+
- **100% des composants testés** (objectif sprint 4)
72+
73+
## 🔗 Import dans Jira
74+
75+
Pour importer ces tickets dans Jira:
76+
77+
1. Aller dans Jira → Issues → Import issues from CSV
78+
2. Mapper les champs:
79+
- Summary → Summary
80+
- Issue Type → Issue Type
81+
- Priority → Priority
82+
- Labels → Labels
83+
- Description → Description
84+
- Estimation → Original Estimate (en heures)
85+
3. Utiliser le format de fichier fourni
86+
87+
## 📝 Notes
88+
89+
- Chaque ticket est dans un fichier `.txt` séparé
90+
- Le format est compatible avec l'import CSV Jira
91+
- Les dépendances entre tickets sont notées dans chaque fichier
92+
- Les estimations sont en heures
93+
94+
## 🚀 Prochaines étapes
95+
96+
1. Review des tickets avec l'équipe
97+
2. Priorisation selon la roadmap
98+
3. Création des tickets dans Jira
99+
4. Assignation des premiers tickets (Sprint 1)
100+
5. Kick-off de l'audit A11y
101+
102+
---
103+
104+
**Contact**: A11y Audit Team
105+
**Date de création**: Avril 2026
106+
**Version**: 1.0
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
Summary: Setup eslint-plugin-jsx-a11y pour l'audit A11y
2+
Issue Type: Story
3+
Priority: High
4+
Labels: a11y, devops, infrastructure, eslint
5+
6+
Description:
7+
Intégrer eslint-plugin-jsx-a11y dans la configuration oxlint pour détecter automatiquement les problèmes d'accessibilité dans le code.
8+
9+
Contexte:
10+
- Actuellement 52 occurrences de règles a11y désactivées avec oxlint-disable
11+
- Nécessité d'avoir un linting a11y automatisé dans le workflow de développement
12+
- Premier pilier de l'infrastructure a11y
13+
14+
Tâches:
15+
[ ] Ajouter eslint-plugin-jsx-a11y aux devDependencies
16+
[ ] Configurer les règles dans .oxlintrc.jsonc
17+
[ ] Commencer en mode warning uniquement (ne pas bloquer la CI)
18+
[ ] Documenter les règles activées dans CONTRIBUTING.md
19+
[ ] Tester sur un échantillon de composants
20+
21+
Règles à activer (priorité haute):
22+
- accessible-emoji
23+
- alt-text
24+
- anchor-has-content
25+
- aria-activedescendant-has-tabindex
26+
- aria-props
27+
- aria-role
28+
- aria-unsupported-roles
29+
- autocomplete-valid
30+
- click-events-have-key-events
31+
- heading-has-content
32+
- html-has-lang
33+
- iframe-has-title
34+
- img-redundant-alt
35+
- label-has-associated-control
36+
- lang
37+
- media-has-caption
38+
- mouse-events-have-key-events
39+
- no-access-key
40+
- no-autofocus
41+
- no-noninteractive-element-interactions
42+
- no-noninteractive-element-to-interactive-role
43+
- no-noninteractive-tabindex
44+
- no-redundant-roles
45+
- no-static-element-interactions
46+
- role-has-required-aria-props
47+
- scope
48+
- tabindex-no-positive
49+
50+
Critères d'acceptation:
51+
- [ ] La configuration oxlint inclut eslint-plugin-jsx-a11y
52+
- [ ] Les règles sont documentées
53+
- [ ] Le linting tourne en local sans erreurs bloquantes
54+
- [ ] La CI affiche les warnings a11y sans échouer
55+
56+
Estimation: 3h
57+
Assignee: Unassigned
58+
Reporter: A11y Audit Team
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
Summary: Configuration jest-axe pour les tests unitaires A11y
2+
Issue Type: Story
3+
Priority: High
4+
Labels: a11y, testing, jest-axe, vitest
5+
6+
Description:
7+
Implémenter axe-core dans les tests unitaires via jest-axe pour détecter les violations d'accessibilité automatiquement.
8+
9+
Contexte:
10+
- jest-axe est déjà installé (voir jest-axe.d.ts et expect.d.ts)
11+
- Mais peu ou pas utilisé dans les tests actuels
12+
- Utils/test contient les helpers de test (renderWithTheme, etc.)
13+
14+
Tâches:
15+
[ ] Ajouter axe-core aux dependencies de test (utils/test/package.json)
16+
[ ] Créer un helper toHaveNoAxeViolations dans utils/test/src/vitest/helpers/
17+
[ ] Configurer les règles axe personnalisées (WCAG AA)
18+
[ ] Ajouter la documentation d'usage dans utils/test/README.md
19+
[ ] Tester sur 2-3 composants existants (Button, Alert)
20+
[ ] Ajouter un exemple dans les tests existants
21+
22+
Configuration axe recommandée:
23+
```typescript
24+
const axeConfig = {
25+
rules: {
26+
'color-contrast': { enabled: true },
27+
'label': { enabled: true },
28+
'landmark-one-main': { enabled: false }, // Pas pertinent pour les composants isolés
29+
'region': { enabled: false }, // Idem
30+
}
31+
}
32+
```
33+
34+
Helper à créer:
35+
```typescript
36+
export const renderWithAxe = (component, options) => {
37+
const { container } = renderWithTheme(component, options)
38+
const results = await axe(container)
39+
expect(results).toHaveNoViolations()
40+
return renderWithTheme(component, options)
41+
}
42+
```
43+
44+
Critères d'acceptation:
45+
- [ ] Helper toHaveNoAxeViolations disponible dans @utils/test
46+
- [ ] Documentation à jour
47+
- [ ] Au moins 2 composants testés avec axe
48+
- [ ] Les tests passent en local et en CI
49+
50+
Estimation: 5h
51+
Assignee: Unassigned
52+
Reporter: A11y Audit Team
53+
Dependencies: UV-001

0 commit comments

Comments
 (0)