アクセシビリティ
willink DS は WCAG 2.1 AA 準拠をコミットメントとして掲げ、その遵守を ドキュメントではなく CI とテストで担保します。対象は React 25 コンポーネント + Flutter 9 コンポーネント + Sonner Toast で、各基準ごとの監査結果は a11y matrix (docs/a11y/matrix.md、 v1.7.0)に集約されています。
監査している WCAG 2.1 AA 基準
matrix で各コンポーネントについて以下の達成基準を確認しています。
- 1.3.1 Info & Relationships — 構造とラベルの関連付け
- 1.4.3 Contrast — 通常テキスト
≥ 4.5:1/ 大きい文字≥ 3:1 - 1.4.11 Non-text Contrast — UI コンポーネント
≥ 3:1 - 2.1.1 Keyboard — 全操作にキーボードで到達可能
- 2.3.3 Animation from Interactions —
prefers-reduced-motionへの追従 - 2.4.7 Focus Visible — フォーカスリングを常時表示
- 2.5.5 Target Size — タップ領域(
smvariant は ⚠ として記録) - 3.2.4 Consistent Identification — 一貫した識別
- 4.1.2 Name / Role / Value — 名前・役割・値の公開
bash
# a11y matrix(抜粋)— docs/a11y/matrix.md (v1.7.0)
# React 25 + Flutter 9 component + Sonner Toast を WCAG 2.1 AA で監査
| 基準 | 内容 |
| ----------------------------- | --------------------------------- |
| 1.4.3 Contrast | 通常 >= 4.5:1 / 大きい文字 >= 3:1 |
| 1.4.11 Non-text Contrast | UI コンポーネント >= 3:1 |
| 2.1.1 Keyboard | 全操作をキーボードで到達可能 |
| 2.4.7 Focus Visible | focus-visible ring を常時表示 |enforcement の仕組み
AA 準拠は次のメカニズムでビルド時・テスト時に検証されます。
- jest-axe — 全 React コンポーネントの自動 a11y アサーション。
- キーボード操作とロール — Radix primitives に委譲し、ナビゲーションと
roleを担保。 - focus-visible リング —
--color-ring(= brand)で描画され、テーマの 単一ノブ に追従します。 - reduced motion — 2 層契約(ADR-0008)。詳細は モーション を参照。
- contrast CI gate —
scripts/check-contrast.mjsとpackages/tokensの contrast test がコントラストを強制します。 - FormField —
aria-describedby/aria-invalid/ id を自動配線(ADR-0015)。 - Popover — Radix の
role=dialogがアクセシブルな名前を要求するため、consumer 側でaria-label/aria-labelledbyの指定が必須です。
tsx
// CI gate: scripts/check-contrast.mjs + packages/tokens contrast test
// fg / bg は AAA(>= 7:1)、fg-secondary は AA(>= 4.5:1)を強制
const minRatio = {
'fg': 7, // AAA
'fg-strong': 7, // AAA
'fg-emphasis': 7, // AAA
'fg-secondary': 4.5, // AA
};contrast gate は前景/背景(fg / bg)を AAA(≥ 7:1)、fg-secondary を AA(≥ 4.5:1) として閾値化しています。
テキスト強調ラダー
本文・補助テキストの色は強調ラダーから選びます(ADR-0016)。
fg/fg-strong/fg-emphasis— AAA。本文・見出しに使用。fg-secondary— AA。補助テキストに使用可。fg-subtle/fg-faint— 4.5 未満が documented な baseline。キャプションや disabled 専用で、本文には 使用しないでください。
次は モーション で reduced-motion 契約を確認する、または a11y matrix でコンポーネント別の監査結果を見る。