@verndale/accessibility-standards 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/OPERATING.md +1 -1
- package/README.md +1 -1
- package/dist/manifest.json +156 -116
- package/dist/profiles/ai-orchestration/coverage-manifest.json +702 -153
- package/dist/profiles/ai-orchestration/implementation/accessibility.md +523 -42
- package/dist/profiles/ai-orchestration/pattern-contracts.json +892 -306
- package/dist/profiles/ai-orchestration/patterns/accordion.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/alert.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/carousel.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/checkbox.md +27 -0
- package/dist/profiles/ai-orchestration/patterns/combobox.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +8 -3
- package/dist/profiles/ai-orchestration/patterns/dialog.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/disclosure.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/field.md +7 -1
- package/dist/profiles/ai-orchestration/patterns/image.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/listbox.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/media-player.md +9 -1
- package/dist/profiles/ai-orchestration/patterns/menu-button.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/menu.md +30 -0
- package/dist/profiles/ai-orchestration/patterns/pagination.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/popover.md +7 -1
- package/dist/profiles/ai-orchestration/patterns/progress.md +7 -1
- package/dist/profiles/ai-orchestration/patterns/radio-group.md +27 -0
- package/dist/profiles/ai-orchestration/patterns/slider.md +31 -0
- package/dist/profiles/ai-orchestration/patterns/spinbutton.md +28 -0
- package/dist/profiles/ai-orchestration/patterns/tabs.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/tooltip.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/tree-view.md +31 -0
- package/dist/profiles/ai-orchestration/patterns/validation.md +7 -1
- package/dist/profiles/ai-orchestration/review/accessibility.md +14 -6
- package/dist/profiles/ai-orchestration/semantics/accessible-authentication.md +13 -0
- package/dist/profiles/ai-orchestration/semantics/accessible-name.md +8 -2
- package/dist/profiles/ai-orchestration/semantics/alert.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/consequential-action.md +6 -2
- package/dist/profiles/ai-orchestration/semantics/consistent-help.md +13 -0
- package/dist/profiles/ai-orchestration/semantics/data-table.md +7 -2
- package/dist/profiles/ai-orchestration/semantics/dragging-alternative.md +13 -0
- package/dist/profiles/ai-orchestration/semantics/expanded-state.md +6 -1
- package/dist/profiles/ai-orchestration/semantics/focus.initial.md +4 -1
- package/dist/profiles/ai-orchestration/semantics/focus.return.md +4 -1
- package/dist/profiles/ai-orchestration/semantics/focus.visible.md +8 -2
- package/dist/profiles/ai-orchestration/semantics/form-error.md +8 -2
- package/dist/profiles/ai-orchestration/semantics/form-label.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/form-required.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/headings.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +4 -1
- package/dist/profiles/ai-orchestration/semantics/keyboard.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/landmarks.md +6 -1
- package/dist/profiles/ai-orchestration/semantics/live-status.md +7 -2
- package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +11 -1
- package/dist/profiles/ai-orchestration/semantics/motion-control.md +8 -2
- package/dist/profiles/ai-orchestration/semantics/name-role-value.md +6 -2
- package/dist/profiles/ai-orchestration/semantics/native-dialog.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/native-elements.md +5 -1
- package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +5 -1
- package/dist/profiles/ai-orchestration/semantics/redundant-entry.md +13 -0
- package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +6 -1
- package/dist/profiles/ai-orchestration/semantics/selected-state.md +6 -1
- package/dist/profiles/ai-orchestration/semantics/target-size.md +6 -2
- package/dist/profiles/ai-orchestration/semantics.json +826 -130
- package/dist/profiles/ai-orchestration/testing/accessibility.md +33 -3
- package/dist/profiles/ai-orchestration/ui-design-brain-bindings.json +287 -307
- package/dist/profiles/conductor/a11y-semantics.md +249 -10
- package/dist/profiles/conductor/accessibility-quality.md +275 -33
- package/dist/profiles/conductor/applicability-matrix.json +226 -269
- package/dist/profiles/conductor/coverage-manifest.json +702 -153
- package/dist/profiles/conductor/pattern-contracts.json +892 -306
- package/dist/profiles/conductor/patterns/accordion.json +35 -27
- package/dist/profiles/conductor/patterns/alert.json +29 -21
- package/dist/profiles/conductor/patterns/carousel.json +36 -28
- package/dist/profiles/conductor/patterns/checkbox.json +67 -0
- package/dist/profiles/conductor/patterns/combobox.json +37 -29
- package/dist/profiles/conductor/patterns/consequential-submission.json +34 -25
- package/dist/profiles/conductor/patterns/dialog.json +37 -29
- package/dist/profiles/conductor/patterns/disclosure.json +33 -25
- package/dist/profiles/conductor/patterns/dynamic-status.json +31 -22
- package/dist/profiles/conductor/patterns/field.json +41 -25
- package/dist/profiles/conductor/patterns/image.json +31 -22
- package/dist/profiles/conductor/patterns/listbox.json +35 -27
- package/dist/profiles/conductor/patterns/media-player.json +59 -29
- package/dist/profiles/conductor/patterns/menu-button.json +34 -26
- package/dist/profiles/conductor/patterns/menu.json +78 -0
- package/dist/profiles/conductor/patterns/pagination.json +34 -25
- package/dist/profiles/conductor/patterns/popover.json +42 -26
- package/dist/profiles/conductor/patterns/progress.json +38 -23
- package/dist/profiles/conductor/patterns/radio-group.json +69 -0
- package/dist/profiles/conductor/patterns/slider.json +84 -0
- package/dist/profiles/conductor/patterns/spinbutton.json +74 -0
- package/dist/profiles/conductor/patterns/tabs.json +34 -26
- package/dist/profiles/conductor/patterns/tooltip.json +31 -23
- package/dist/profiles/conductor/patterns/tree-view.json +77 -0
- package/dist/profiles/conductor/patterns/validation.json +42 -26
- package/dist/profiles/conductor/semantics.json +826 -130
- package/dist/profiles/conductor/ui-design-brain-bindings.json +287 -307
- package/dist/projection-manifest.json +120 -104
- package/dist/requirements-to-implementation.md +7 -1
- package/lib/build.mjs +3 -3
- package/lib/digest.mjs +8 -0
- package/lib/load.mjs +13 -0
- package/lib/provenance.mjs +2 -0
- package/lib/render.mjs +51 -7
- package/lib/sync.mjs +2 -2
- package/lib/validate.mjs +335 -33
- package/package.json +6 -2
- package/profiles/ai-orchestration/profile.json +1 -1
- package/profiles/ai-orchestration/templates/patterns/README.md +1 -1
- package/profiles/ai-orchestration/templates/review/README.md +1 -1
- package/profiles/ai-orchestration/templates/semantics/README.md +1 -1
- package/profiles/ai-orchestration/templates/testing/README.md +1 -1
- package/profiles/conductor/profile.json +1 -1
- package/profiles/conductor/templates/evidence/README.md +1 -1
- package/profiles/conductor/templates/patterns/README.md +1 -1
- package/profiles/conductor/templates/semantics/README.md +1 -1
- package/schemas/consumer-config.schema.json +1 -1
- package/schemas/contract.schema.json +1 -1
- package/schemas/manifest.schema.json +1 -1
- package/schemas/pattern.schema.json +98 -1
- package/schemas/profile.schema.json +1 -1
- package/schemas/projection-manifest.schema.json +6 -6
- package/schemas/semantic.schema.json +26 -1
- package/schemas/standards-reference.schema.json +105 -0
- package/schemas/wcag-coverage.schema.json +93 -0
- package/src/applicability/facts.yml +3 -5
- package/src/applicability/matrix.yml +5 -7
- package/src/applicability/ui-design-brain-bindings.yml +8 -22
- package/src/contract.yml +1 -1
- package/src/coverage/wcag-2.2.yml +68 -0
- package/src/patterns/disclosure/accordion.yml +1 -1
- package/src/patterns/disclosure/disclosure.yml +1 -1
- package/src/patterns/feedback/alert.yml +1 -1
- package/src/patterns/feedback/dynamic-status.yml +1 -1
- package/src/patterns/feedback/progress.yml +1 -1
- package/src/patterns/forms/consequential-submission.yml +1 -1
- package/src/patterns/forms/field.yml +1 -1
- package/src/patterns/forms/spinbutton.yml +1 -0
- package/src/patterns/forms/validation.yml +1 -1
- package/src/patterns/media/carousel.yml +1 -1
- package/src/patterns/media/image.yml +1 -1
- package/src/patterns/media/media-player.yml +1 -1
- package/src/patterns/navigation/menu-button.yml +1 -1
- package/src/patterns/navigation/menu.yml +1 -0
- package/src/patterns/navigation/pagination.yml +1 -1
- package/src/patterns/navigation/tabs.yml +1 -1
- package/src/patterns/navigation/tree-view.yml +1 -0
- package/src/patterns/overlays/dialog.yml +1 -1
- package/src/patterns/overlays/popover.yml +1 -1
- package/src/patterns/overlays/tooltip.yml +1 -1
- package/src/patterns/selection/checkbox.yml +1 -0
- package/src/patterns/selection/combobox.yml +1 -1
- package/src/patterns/selection/listbox.yml +1 -1
- package/src/patterns/selection/radio-group.yml +1 -0
- package/src/patterns/selection/slider.yml +1 -0
- package/src/semantics/accessible-names.yml +1 -1
- package/src/semantics/forms.yml +1 -1
- package/src/semantics/headings-landmarks.yml +1 -1
- package/src/semantics/keyboard-focus.yml +1 -1
- package/src/semantics/live-regions.yml +1 -1
- package/src/semantics/media.yml +1 -1
- package/src/semantics/native-elements.yml +1 -1
- package/src/semantics/roles-states-properties.yml +1 -1
- package/src/semantics/tables.yml +1 -1
- package/src/semantics/wcag-2.2.yml +1 -0
- package/src/sources.yml +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
|
|
2
|
-
<!-- package: @verndale/accessibility-standards@
|
|
2
|
+
<!-- package: @verndale/accessibility-standards@3.0.0; profile: conductor@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491 -->
|
|
3
3
|
# Accessibility foundations, semantics, and policies
|
|
4
4
|
|
|
5
5
|
## foundation.conformance-boundary
|
|
@@ -14,9 +14,25 @@ Prefer native platform semantics; apply WCAG conformance, ARIA only where needed
|
|
|
14
14
|
|
|
15
15
|
Meet WCAG 2.2 Level A and AA. Target size minimum is 24 by 24 CSS pixels or an allowed exception; 44 by 44 is enhanced guidance only.
|
|
16
16
|
|
|
17
|
+
## semantics.accessible-authentication
|
|
18
|
+
|
|
19
|
+
Do not require a cognitive function test at any authentication step unless that step provides a non-cognitive alternative or an assistive mechanism such as password-manager support or copy and paste, including pasting a complete one-time code, or the test is limited to the object-recognition or user-provided personal-content exception.
|
|
20
|
+
|
|
21
|
+
Standards:
|
|
22
|
+
- [wcag-2.2 3.3.8](<https://www.w3.org/TR/WCAG22/#accessible-authentication-minimum>) (Level AA) — normative
|
|
23
|
+
- [wcag-2.2-understanding 3.3.8](<https://www.w3.org/WAI/WCAG22/Understanding/accessible-authentication-minimum.html>) (Level AA) — informative
|
|
24
|
+
|
|
25
|
+
Proof: e2e, human.
|
|
26
|
+
|
|
17
27
|
## semantics.accessible-name
|
|
18
28
|
|
|
19
|
-
Every interactive or meaning-bearing control has a concise programmatic name
|
|
29
|
+
Every interactive or meaning-bearing control has a concise programmatic name. For user interface components whose visible labels include text or images of text, the accessible name contains the text presented visually; preserve that text's order where practical.
|
|
30
|
+
|
|
31
|
+
Standards:
|
|
32
|
+
- [wcag-2.2 2.5.3](<https://www.w3.org/TR/WCAG22/#label-in-name>) (Level A) — normative
|
|
33
|
+
- [wcag-2.2 4.1.2](<https://www.w3.org/TR/WCAG22/#name-role-value>) (Level A) — normative
|
|
34
|
+
- [wcag-2.2-understanding 2.5.3](<https://www.w3.org/WAI/WCAG22/Understanding/label-in-name.html>) (Level A) — informative
|
|
35
|
+
- [wcag-2.2-understanding 4.1.2](<https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html>) (Level A) — informative
|
|
20
36
|
|
|
21
37
|
Proof: unit, axe, human.
|
|
22
38
|
|
|
@@ -24,47 +40,105 @@ Proof: unit, axe, human.
|
|
|
24
40
|
|
|
25
41
|
Use alert semantics only for urgent, time-sensitive messages that require immediate announcement.
|
|
26
42
|
|
|
43
|
+
Standards:
|
|
44
|
+
- [aria-apg alert](<https://www.w3.org/WAI/ARIA/apg/patterns/alert/>) — informative
|
|
45
|
+
- [wai-aria-1.2 alert](<https://www.w3.org/TR/wai-aria-1.2/#alert>) — normative
|
|
46
|
+
- [wcag-2.2 4.1.3](<https://www.w3.org/TR/WCAG22/#status-messages>) (Level AA) — normative
|
|
47
|
+
- [wcag-2.2-understanding 4.1.3](<https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html>) (Level AA) — informative
|
|
48
|
+
|
|
27
49
|
Proof: unit, human.
|
|
28
50
|
|
|
29
51
|
## semantics.consequential-action
|
|
30
52
|
|
|
31
|
-
|
|
53
|
+
For web pages that cause legal commitments or financial transactions, modify or delete user-controllable data in data storage systems, or submit user test responses, at least one safeguard is provided: submissions are reversible; user-entered data is checked for input errors and the user can correct them; or a mechanism lets the user review, confirm, and correct information before finalizing the submission.
|
|
54
|
+
|
|
55
|
+
Standards:
|
|
56
|
+
- [wcag-2.2 3.3.4](<https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data>) (Level AA) — normative
|
|
57
|
+
- [wcag-2.2-understanding 3.3.4](<https://www.w3.org/WAI/WCAG22/Understanding/error-prevention-legal-financial-data.html>) (Level AA) — informative
|
|
58
|
+
|
|
59
|
+
Proof: e2e, human.
|
|
60
|
+
|
|
61
|
+
## semantics.consistent-help
|
|
62
|
+
|
|
63
|
+
When human contact details or mechanisms, self-help, or fully automated contact mechanisms repeat across pages in the same set, they occur in the same serialized order relative to other content for the same page variation unless the user initiates a change. This does not require adding help.
|
|
64
|
+
|
|
65
|
+
Standards:
|
|
66
|
+
- [wcag-2.2 3.2.6](<https://www.w3.org/TR/WCAG22/#consistent-help>) (Level A) — normative
|
|
67
|
+
- [wcag-2.2-understanding 3.2.6](<https://www.w3.org/WAI/WCAG22/Understanding/consistent-help.html>) (Level A) — informative
|
|
32
68
|
|
|
33
69
|
Proof: e2e, human.
|
|
34
70
|
|
|
35
71
|
## semantics.data-table
|
|
36
72
|
|
|
37
|
-
Tabular relationships use table
|
|
73
|
+
Tabular relationships use table semantics with programmatically associated row and column headers.
|
|
74
|
+
|
|
75
|
+
Standards:
|
|
76
|
+
- [aria-apg table](<https://www.w3.org/WAI/ARIA/apg/patterns/table/>) — informative
|
|
77
|
+
- [wcag-2.2 1.3.1](<https://www.w3.org/TR/WCAG22/#info-and-relationships>) (Level A) — normative
|
|
78
|
+
- [wcag-2.2-understanding 1.3.1](<https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html>) (Level A) — informative
|
|
38
79
|
|
|
39
80
|
Proof: axe, e2e, human.
|
|
40
81
|
|
|
82
|
+
## semantics.dragging-alternative
|
|
83
|
+
|
|
84
|
+
Author-provided functionality operated by dragging also provides an equivalent single-pointer method that does not require dragging, unless dragging is essential or the functionality is determined by the user agent and not modified by the author.
|
|
85
|
+
|
|
86
|
+
Standards:
|
|
87
|
+
- [wcag-2.2 2.5.7](<https://www.w3.org/TR/WCAG22/#dragging-movements>) (Level AA) — normative
|
|
88
|
+
- [wcag-2.2-understanding 2.5.7](<https://www.w3.org/WAI/WCAG22/Understanding/dragging-movements.html>) (Level AA) — informative
|
|
89
|
+
|
|
90
|
+
Proof: e2e, human.
|
|
91
|
+
|
|
41
92
|
## semantics.expanded-state
|
|
42
93
|
|
|
43
94
|
Expandable controls expose aria-expanded and identify the controlled region when needed.
|
|
44
95
|
|
|
96
|
+
Standards:
|
|
97
|
+
- [wai-aria-1.2 aria-expanded](<https://www.w3.org/TR/wai-aria-1.2/#aria-expanded>) — normative
|
|
98
|
+
- [wcag-2.2 4.1.2](<https://www.w3.org/TR/WCAG22/#name-role-value>) (Level A) — normative
|
|
99
|
+
- [wcag-2.2-understanding 4.1.2](<https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html>) (Level A) — informative
|
|
100
|
+
|
|
45
101
|
Proof: unit, axe, e2e.
|
|
46
102
|
|
|
47
103
|
## semantics.focus.initial
|
|
48
104
|
|
|
49
105
|
On activation, focus moves to the deterministic target appropriate to the pattern.
|
|
50
106
|
|
|
107
|
+
Standards:
|
|
108
|
+
- [aria-apg dialog-modal](<https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/#keyboard_interaction>) — informative
|
|
109
|
+
|
|
51
110
|
Proof: unit, e2e.
|
|
52
111
|
|
|
53
112
|
## semantics.focus.return
|
|
54
113
|
|
|
55
114
|
On dismissal, focus returns to the invoking control or a documented logical successor.
|
|
56
115
|
|
|
116
|
+
Standards:
|
|
117
|
+
- [aria-apg dialog-modal](<https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/#keyboard_interaction>) — informative
|
|
118
|
+
|
|
57
119
|
Proof: unit, e2e.
|
|
58
120
|
|
|
59
121
|
## semantics.focus.visible
|
|
60
122
|
|
|
61
|
-
|
|
123
|
+
A visible keyboard focus indicator is available, and focused components are not entirely hidden by author-created content.
|
|
124
|
+
|
|
125
|
+
Standards:
|
|
126
|
+
- [wcag-2.2 2.4.11](<https://www.w3.org/TR/WCAG22/#focus-not-obscured-minimum>) (Level AA) — normative
|
|
127
|
+
- [wcag-2.2 2.4.7](<https://www.w3.org/TR/WCAG22/#focus-visible>) (Level AA) — normative
|
|
128
|
+
- [wcag-2.2-understanding 2.4.11](<https://www.w3.org/WAI/WCAG22/Understanding/focus-not-obscured-minimum.html>) (Level AA) — informative
|
|
129
|
+
- [wcag-2.2-understanding 2.4.7](<https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html>) (Level AA) — informative
|
|
62
130
|
|
|
63
131
|
Proof: e2e, human.
|
|
64
132
|
|
|
65
133
|
## semantics.form-error
|
|
66
134
|
|
|
67
|
-
|
|
135
|
+
When an input error is automatically detected, identify the item in error and describe the error to the user in text. When correction suggestions are known, provide them unless doing so would jeopardize the security or purpose of the content.
|
|
136
|
+
|
|
137
|
+
Standards:
|
|
138
|
+
- [wcag-2.2 3.3.1](<https://www.w3.org/TR/WCAG22/#error-identification>) (Level A) — normative
|
|
139
|
+
- [wcag-2.2 3.3.3](<https://www.w3.org/TR/WCAG22/#error-suggestion>) (Level AA) — normative
|
|
140
|
+
- [wcag-2.2-understanding 3.3.1](<https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html>) (Level A) — informative
|
|
141
|
+
- [wcag-2.2-understanding 3.3.3](<https://www.w3.org/WAI/WCAG22/Understanding/error-suggestion.html>) (Level AA) — informative
|
|
68
142
|
|
|
69
143
|
Proof: unit, axe, e2e, human.
|
|
70
144
|
|
|
@@ -72,41 +146,78 @@ Proof: unit, axe, e2e, human.
|
|
|
72
146
|
|
|
73
147
|
Every form control has a persistent programmatically associated label.
|
|
74
148
|
|
|
149
|
+
Standards:
|
|
150
|
+
- [wcag-2.2 1.3.1](<https://www.w3.org/TR/WCAG22/#info-and-relationships>) (Level A) — normative
|
|
151
|
+
- [wcag-2.2 3.3.2](<https://www.w3.org/TR/WCAG22/#labels-or-instructions>) (Level A) — normative
|
|
152
|
+
- [wcag-2.2-understanding 1.3.1](<https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html>) (Level A) — informative
|
|
153
|
+
- [wcag-2.2-understanding 3.3.2](<https://www.w3.org/WAI/WCAG22/Understanding/labels-or-instructions.html>) (Level A) — informative
|
|
154
|
+
|
|
75
155
|
Proof: unit, axe.
|
|
76
156
|
|
|
77
157
|
## semantics.form-required
|
|
78
158
|
|
|
79
159
|
Requiredness is communicated visually and programmatically before submission.
|
|
80
160
|
|
|
161
|
+
Standards:
|
|
162
|
+
- [wcag-2.2 1.3.1](<https://www.w3.org/TR/WCAG22/#info-and-relationships>) (Level A) — normative
|
|
163
|
+
- [wcag-2.2 3.3.2](<https://www.w3.org/TR/WCAG22/#labels-or-instructions>) (Level A) — normative
|
|
164
|
+
- [wcag-2.2-understanding 1.3.1](<https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html>) (Level A) — informative
|
|
165
|
+
- [wcag-2.2-understanding 3.3.2](<https://www.w3.org/WAI/WCAG22/Understanding/labels-or-instructions.html>) (Level A) — informative
|
|
166
|
+
|
|
81
167
|
Proof: unit, axe.
|
|
82
168
|
|
|
83
169
|
## semantics.headings
|
|
84
170
|
|
|
85
171
|
Headings describe document structure without choosing levels for visual appearance.
|
|
86
172
|
|
|
173
|
+
Standards:
|
|
174
|
+
- [wcag-2.2 1.3.1](<https://www.w3.org/TR/WCAG22/#info-and-relationships>) (Level A) — normative
|
|
175
|
+
- [wcag-2.2 2.4.6](<https://www.w3.org/TR/WCAG22/#headings-and-labels>) (Level AA) — normative
|
|
176
|
+
- [wcag-2.2-understanding 1.3.1](<https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html>) (Level A) — informative
|
|
177
|
+
- [wcag-2.2-understanding 2.4.6](<https://www.w3.org/WAI/WCAG22/Understanding/headings-and-labels.html>) (Level AA) — informative
|
|
178
|
+
|
|
87
179
|
Proof: axe, human.
|
|
88
180
|
|
|
89
181
|
## semantics.keyboard
|
|
90
182
|
|
|
91
183
|
All functionality is operable with a keyboard without traps.
|
|
92
184
|
|
|
185
|
+
Standards:
|
|
186
|
+
- [wcag-2.2 2.1.1](<https://www.w3.org/TR/WCAG22/#keyboard>) (Level A) — normative
|
|
187
|
+
- [wcag-2.2 2.1.2](<https://www.w3.org/TR/WCAG22/#no-keyboard-trap>) (Level A) — normative
|
|
188
|
+
- [wcag-2.2-understanding 2.1.1](<https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html>) (Level A) — informative
|
|
189
|
+
- [wcag-2.2-understanding 2.1.2](<https://www.w3.org/WAI/WCAG22/Understanding/no-keyboard-trap.html>) (Level A) — informative
|
|
190
|
+
|
|
93
191
|
Proof: e2e, human.
|
|
94
192
|
|
|
95
193
|
## semantics.keyboard.escape
|
|
96
194
|
|
|
97
195
|
Escape closes the topmost dismissible overlay without activating its trigger.
|
|
98
196
|
|
|
197
|
+
Standards:
|
|
198
|
+
- [aria-apg dialog-modal](<https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/#keyboard_interaction>) — informative
|
|
199
|
+
|
|
99
200
|
Proof: unit, e2e.
|
|
100
201
|
|
|
101
202
|
## semantics.landmarks
|
|
102
203
|
|
|
103
204
|
Use native landmarks and name repeated landmarks only when a name is required to distinguish them.
|
|
104
205
|
|
|
206
|
+
Standards:
|
|
207
|
+
- [aria-apg landmark-regions](<https://www.w3.org/WAI/ARIA/apg/practices/landmark-regions/>) — informative
|
|
208
|
+
- [wcag-2.2 1.3.1](<https://www.w3.org/TR/WCAG22/#info-and-relationships>) (Level A) — normative
|
|
209
|
+
- [wcag-2.2-understanding 1.3.1](<https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html>) (Level A) — informative
|
|
210
|
+
|
|
105
211
|
Proof: axe, human.
|
|
106
212
|
|
|
107
213
|
## semantics.live-status
|
|
108
214
|
|
|
109
|
-
|
|
215
|
+
Status messages that can be programmatically determined are exposed to assistive technology through appropriate roles or properties without receiving focus, using correctly scoped and non-duplicative live regions where needed.
|
|
216
|
+
|
|
217
|
+
Standards:
|
|
218
|
+
- [wai-aria-1.2 status](<https://www.w3.org/TR/wai-aria-1.2/#status>) — normative
|
|
219
|
+
- [wcag-2.2 4.1.3](<https://www.w3.org/TR/WCAG22/#status-messages>) (Level AA) — normative
|
|
220
|
+
- [wcag-2.2-understanding 4.1.3](<https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html>) (Level AA) — informative
|
|
110
221
|
|
|
111
222
|
Proof: unit, e2e, human.
|
|
112
223
|
|
|
@@ -114,17 +225,37 @@ Proof: unit, e2e, human.
|
|
|
114
225
|
|
|
115
226
|
Prerecorded media provides applicable captions, transcripts, and audio description.
|
|
116
227
|
|
|
228
|
+
Standards:
|
|
229
|
+
- [wcag-2.2 1.2.1](<https://www.w3.org/TR/WCAG22/#audio-only-and-video-only-prerecorded>) (Level A) — normative
|
|
230
|
+
- [wcag-2.2 1.2.2](<https://www.w3.org/TR/WCAG22/#captions-prerecorded>) (Level A) — normative
|
|
231
|
+
- [wcag-2.2 1.2.3](<https://www.w3.org/TR/WCAG22/#audio-description-or-media-alternative-prerecorded>) (Level A) — normative
|
|
232
|
+
- [wcag-2.2 1.2.5](<https://www.w3.org/TR/WCAG22/#audio-description-prerecorded>) (Level AA) — normative
|
|
233
|
+
- [wcag-2.2-understanding 1.2.1](<https://www.w3.org/WAI/WCAG22/Understanding/audio-only-and-video-only-prerecorded.html>) (Level A) — informative
|
|
234
|
+
- [wcag-2.2-understanding 1.2.2](<https://www.w3.org/WAI/WCAG22/Understanding/captions-prerecorded.html>) (Level A) — informative
|
|
235
|
+
- [wcag-2.2-understanding 1.2.3](<https://www.w3.org/WAI/WCAG22/Understanding/audio-description-or-media-alternative-prerecorded.html>) (Level A) — informative
|
|
236
|
+
- [wcag-2.2-understanding 1.2.5](<https://www.w3.org/WAI/WCAG22/Understanding/audio-description-prerecorded.html>) (Level AA) — informative
|
|
237
|
+
|
|
117
238
|
Proof: human.
|
|
118
239
|
|
|
119
240
|
## semantics.motion-control
|
|
120
241
|
|
|
121
|
-
|
|
242
|
+
Moving, blinking, or scrolling content that starts automatically, lasts more than five seconds, and appears alongside other content provides pause, stop, or hide controls unless essential. Automatically starting, parallel auto-updating content provides pause, stop, or hide controls or lets the user control update frequency unless essential. Honor reduced-motion preferences as a mechanism for disabling non-essential interaction-triggered animation.
|
|
243
|
+
|
|
244
|
+
Standards:
|
|
245
|
+
- [wcag-2.2 2.2.2](<https://www.w3.org/TR/WCAG22/#pause-stop-hide>) (Level A) — normative
|
|
246
|
+
- [wcag-2.2 2.3.3](<https://www.w3.org/TR/WCAG22/#animation-from-interactions>) (Level AAA) — normative
|
|
247
|
+
- [wcag-2.2-understanding 2.2.2](<https://www.w3.org/WAI/WCAG22/Understanding/pause-stop-hide.html>) (Level A) — informative
|
|
248
|
+
- [wcag-2.2-understanding 2.3.3](<https://www.w3.org/WAI/WCAG22/Understanding/animation-from-interactions.html>) (Level AAA) — informative
|
|
122
249
|
|
|
123
250
|
Proof: e2e, human.
|
|
124
251
|
|
|
125
252
|
## semantics.name-role-value
|
|
126
253
|
|
|
127
|
-
|
|
254
|
+
For every user interface component, the name and role can be programmatically determined; states, properties, and values that users can set can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.
|
|
255
|
+
|
|
256
|
+
Standards:
|
|
257
|
+
- [wcag-2.2 4.1.2](<https://www.w3.org/TR/WCAG22/#name-role-value>) (Level A) — normative
|
|
258
|
+
- [wcag-2.2-understanding 4.1.2](<https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html>) (Level A) — informative
|
|
128
259
|
|
|
129
260
|
Proof: unit, axe, human.
|
|
130
261
|
|
|
@@ -132,35 +263,73 @@ Proof: unit, axe, human.
|
|
|
132
263
|
|
|
133
264
|
Use dialog semantics with a programmatic name and modal state only when interaction is modal.
|
|
134
265
|
|
|
266
|
+
Standards:
|
|
267
|
+
- [aria-apg dialog-modal](<https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/>) — informative
|
|
268
|
+
- [wai-aria-1.2 dialog](<https://www.w3.org/TR/wai-aria-1.2/#dialog>) — normative
|
|
269
|
+
- [wcag-2.2 4.1.2](<https://www.w3.org/TR/WCAG22/#name-role-value>) (Level A) — normative
|
|
270
|
+
- [wcag-2.2-understanding 4.1.2](<https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html>) (Level A) — informative
|
|
271
|
+
|
|
135
272
|
Proof: axe, e2e, human.
|
|
136
273
|
|
|
137
274
|
## semantics.native-elements
|
|
138
275
|
|
|
139
276
|
Use the native HTML element whose semantics and behavior match the control before adding ARIA.
|
|
140
277
|
|
|
278
|
+
Standards:
|
|
279
|
+
- [aria-apg read-me-first](<https://www.w3.org/WAI/ARIA/apg/practices/read-me-first/>) — informative
|
|
280
|
+
- [wai-aria-1.2 host\_general\_conflict](<https://www.w3.org/TR/wai-aria-1.2/#host_general_conflict>) — normative
|
|
281
|
+
|
|
141
282
|
Proof: axe, human.
|
|
142
283
|
|
|
143
284
|
## semantics.non-text-alternative
|
|
144
285
|
|
|
145
286
|
Meaningful non-text content has an equivalent alternative and decorative content is ignored by assistive technology.
|
|
146
287
|
|
|
288
|
+
Standards:
|
|
289
|
+
- [wcag-2.2 1.1.1](<https://www.w3.org/TR/WCAG22/#non-text-content>) (Level A) — normative
|
|
290
|
+
- [wcag-2.2-understanding 1.1.1](<https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html>) (Level A) — informative
|
|
291
|
+
|
|
147
292
|
Proof: axe, human.
|
|
148
293
|
|
|
294
|
+
## semantics.redundant-entry
|
|
295
|
+
|
|
296
|
+
Information previously entered by or provided to the user and required again in the same process is auto-populated or available to select, unless re-entry is essential, required for security, or the prior information is no longer valid.
|
|
297
|
+
|
|
298
|
+
Standards:
|
|
299
|
+
- [wcag-2.2 3.3.7](<https://www.w3.org/TR/WCAG22/#redundant-entry>) (Level A) — normative
|
|
300
|
+
- [wcag-2.2-understanding 3.3.7](<https://www.w3.org/WAI/WCAG22/Understanding/redundant-entry.html>) (Level A) — informative
|
|
301
|
+
|
|
302
|
+
Proof: e2e, human.
|
|
303
|
+
|
|
149
304
|
## semantics.roles-states-properties
|
|
150
305
|
|
|
151
306
|
Apply only valid ARIA roles, states, and properties and keep exposed state synchronized with rendered behavior.
|
|
152
307
|
|
|
308
|
+
Standards:
|
|
309
|
+
- [wai-aria-1.2 roles](<https://www.w3.org/TR/wai-aria-1.2/#roles>) — normative
|
|
310
|
+
- [wcag-2.2 4.1.2](<https://www.w3.org/TR/WCAG22/#name-role-value>) (Level A) — normative
|
|
311
|
+
- [wcag-2.2-understanding 4.1.2](<https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html>) (Level A) — informative
|
|
312
|
+
|
|
153
313
|
Proof: unit, axe, e2e.
|
|
154
314
|
|
|
155
315
|
## semantics.selected-state
|
|
156
316
|
|
|
157
317
|
Selection widgets expose current selection with the state required by their role.
|
|
158
318
|
|
|
319
|
+
Standards:
|
|
320
|
+
- [wai-aria-1.2 aria-selected](<https://www.w3.org/TR/wai-aria-1.2/#aria-selected>) — normative
|
|
321
|
+
- [wcag-2.2 4.1.2](<https://www.w3.org/TR/WCAG22/#name-role-value>) (Level A) — normative
|
|
322
|
+
- [wcag-2.2-understanding 4.1.2](<https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html>) (Level A) — informative
|
|
323
|
+
|
|
159
324
|
Proof: unit, e2e.
|
|
160
325
|
|
|
161
326
|
## semantics.target-size
|
|
162
327
|
|
|
163
|
-
|
|
328
|
+
Each pointer target contains an axis-aligned 24 by 24 CSS pixel square unless one of these exceptions applies: an undersized target is positioned so that a 24 CSS pixel diameter circle centered on its bounding box does not intersect another target or the corresponding circle for another undersized target; an equivalent control on the same page meets this criterion; the target is in a sentence or its size is otherwise constrained by the line-height of non-target text; the target size is determined by an unmodified user agent; or the target's particular presentation is essential or legally required for the information being conveyed.
|
|
329
|
+
|
|
330
|
+
Standards:
|
|
331
|
+
- [wcag-2.2 2.5.8](<https://www.w3.org/TR/WCAG22/#target-size-minimum>) (Level AA) — normative
|
|
332
|
+
- [wcag-2.2-understanding 2.5.8](<https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html>) (Level AA) — informative
|
|
164
333
|
|
|
165
334
|
Proof: e2e, human.
|
|
166
335
|
|
|
@@ -171,3 +340,73 @@ Enhanced guidance is advisory and cannot be represented as a conformance failure
|
|
|
171
340
|
## policy.target-size
|
|
172
341
|
|
|
173
342
|
Enforce WCAG 2.5.8 at 24 by 24 CSS pixels or a documented exception; report 44 by 44 as enhanced guidance, never as the AA minimum.
|
|
343
|
+
|
|
344
|
+
## WCAG 2.2 Level A/AA coverage
|
|
345
|
+
|
|
346
|
+
Coverage is criterion-level traceability, not a conformance claim: 16 covered, 8 partial, and 31 gaps.
|
|
347
|
+
|
|
348
|
+
| Criterion | Title | Level | Status | Semantic IDs | Note |
|
|
349
|
+
| --- | --- | --- | --- | --- | --- |
|
|
350
|
+
| 1.1.1 | Non-text Content | A | partial | semantics.non-text-alternative | Meaningful and decorative non-text content are covered, but dedicated obligations for controls and input, time-based media identification, tests, sensory experiences, and CAPTCHA alternatives are not all represented. |
|
|
351
|
+
| 1.2.1 | Audio-only and Video-only (Prerecorded) | A | partial | semantics.media-alternatives | The shared media rule does not distinguish every audio-only and video-only alternative. |
|
|
352
|
+
| 1.2.2 | Captions (Prerecorded) | A | partial | semantics.media-alternatives | Captions are required broadly, without a criterion-specific prerecorded contract. |
|
|
353
|
+
| 1.2.3 | Audio Description or Media Alternative (Prerecorded) | A | partial | semantics.media-alternatives | The shared media rule covers both alternatives but does not encode the criterion's conditional choice. |
|
|
354
|
+
| 1.2.4 | Captions (Live) | AA | gap | — | No semantic rule requires live captions. |
|
|
355
|
+
| 1.2.5 | Audio Description (Prerecorded) | AA | partial | semantics.media-alternatives | Audio description is named, but prerecorded applicability is not represented independently. |
|
|
356
|
+
| 1.3.1 | Info and Relationships | A | partial | semantics.data-table, semantics.form-label, semantics.form-required, semantics.headings, semantics.landmarks | Several structural cases are covered, but the general criterion is broader than the current rules. |
|
|
357
|
+
| 1.3.2 | Meaningful Sequence | A | gap | — | No semantic rule explicitly preserves meaningful reading sequence. |
|
|
358
|
+
| 1.3.3 | Sensory Characteristics | A | gap | — | No semantic rule prevents instructions from relying only on sensory characteristics. |
|
|
359
|
+
| 1.3.4 | Orientation | AA | gap | — | No semantic rule prevents unnecessary orientation restrictions. |
|
|
360
|
+
| 1.3.5 | Identify Input Purpose | AA | gap | — | No semantic rule requires programmatic input-purpose tokens. |
|
|
361
|
+
| 1.4.1 | Use of Color | A | gap | — | No semantic rule prohibits color-only communication. |
|
|
362
|
+
| 1.4.2 | Audio Control | A | gap | — | No semantic rule requires independent control of automatically playing audio. |
|
|
363
|
+
| 1.4.3 | Contrast (Minimum) | AA | gap | — | No semantic rule defines minimum text contrast. |
|
|
364
|
+
| 1.4.4 | Resize Text | AA | gap | — | No semantic rule defines text resizing behavior. |
|
|
365
|
+
| 1.4.5 | Images of Text | AA | gap | — | Text alternatives do not replace a rule limiting images of text. |
|
|
366
|
+
| 1.4.10 | Reflow | AA | gap | — | No semantic rule defines responsive reflow requirements. |
|
|
367
|
+
| 1.4.11 | Non-text Contrast | AA | gap | — | No semantic rule defines contrast for controls, states, or graphical objects. |
|
|
368
|
+
| 1.4.12 | Text Spacing | AA | gap | — | No semantic rule protects content under user-adjusted text spacing. |
|
|
369
|
+
| 1.4.13 | Content on Hover or Focus | AA | gap | — | Pattern behavior exists for tooltips, but no semantic rule covers dismissibility, hoverability, and persistence together. |
|
|
370
|
+
| 2.1.1 | Keyboard | A | covered | semantics.keyboard | — |
|
|
371
|
+
| 2.1.2 | No Keyboard Trap | A | covered | semantics.keyboard | — |
|
|
372
|
+
| 2.1.4 | Character Key Shortcuts | A | gap | — | Keyboard operability does not define shortcut remapping or deactivation. |
|
|
373
|
+
| 2.2.1 | Timing Adjustable | A | gap | — | No semantic rule encodes timing adjustment and its exceptions. |
|
|
374
|
+
| 2.2.2 | Pause, Stop, Hide | A | covered | semantics.motion-control | — |
|
|
375
|
+
| 2.3.1 | Three Flashes or Below Threshold | A | gap | — | No semantic rule limits flashing content. |
|
|
376
|
+
| 2.4.1 | Bypass Blocks | A | gap | — | Landmarks alone do not establish a required bypass mechanism. |
|
|
377
|
+
| 2.4.2 | Page Titled | A | gap | — | No semantic rule requires descriptive page titles. |
|
|
378
|
+
| 2.4.3 | Focus Order | A | gap | — | Pattern focus lifecycles do not establish document-wide focus order. |
|
|
379
|
+
| 2.4.4 | Link Purpose (In Context) | A | gap | — | No semantic rule explicitly defines contextual link purpose. |
|
|
380
|
+
| 2.4.5 | Multiple Ways | AA | gap | — | No semantic rule requires multiple ways to locate pages. |
|
|
381
|
+
| 2.4.6 | Headings and Labels | AA | partial | semantics.headings | Heading structure is covered, but a unified descriptive-purpose rule for all headings and labels is absent. |
|
|
382
|
+
| 2.4.7 | Focus Visible | AA | covered | semantics.focus.visible | — |
|
|
383
|
+
| 2.4.11 | Focus Not Obscured (Minimum) | AA | covered | semantics.focus.visible | — |
|
|
384
|
+
| 2.5.1 | Pointer Gestures | A | gap | — | Keyboard operation does not guarantee a single-pointer alternative to multipoint or path-based gestures. |
|
|
385
|
+
| 2.5.2 | Pointer Cancellation | A | gap | — | No semantic rule defines down-event cancellation behavior. |
|
|
386
|
+
| 2.5.3 | Label in Name | A | covered | semantics.accessible-name | — |
|
|
387
|
+
| 2.5.4 | Motion Actuation | A | gap | — | No semantic rule addresses device or user motion actuation. |
|
|
388
|
+
| 2.5.7 | Dragging Movements | AA | covered | semantics.dragging-alternative | — |
|
|
389
|
+
| 2.5.8 | Target Size (Minimum) | AA | covered | semantics.target-size | — |
|
|
390
|
+
| 3.1.1 | Language of Page | A | gap | — | No semantic rule explicitly requires the default page language. |
|
|
391
|
+
| 3.1.2 | Language of Parts | AA | gap | — | No semantic rule explicitly identifies changes in human language. |
|
|
392
|
+
| 3.2.1 | On Focus | A | gap | — | No semantic rule prohibits unexpected context changes on focus. |
|
|
393
|
+
| 3.2.2 | On Input | A | gap | — | No semantic rule prohibits unexpected context changes on input. |
|
|
394
|
+
| 3.2.3 | Consistent Navigation | AA | gap | — | Landmarks do not establish consistent repeated navigation order. |
|
|
395
|
+
| 3.2.4 | Consistent Identification | AA | gap | — | No semantic rule requires consistent identification of repeated components. |
|
|
396
|
+
| 3.2.6 | Consistent Help | A | covered | semantics.consistent-help | — |
|
|
397
|
+
| 3.3.1 | Error Identification | A | covered | semantics.form-error | — |
|
|
398
|
+
| 3.3.2 | Labels or Instructions | A | partial | semantics.form-label, semantics.form-required | Labels and requiredness are covered, but a dedicated rule for format and task-specific input instructions is absent. |
|
|
399
|
+
| 3.3.3 | Error Suggestion | AA | covered | semantics.form-error | — |
|
|
400
|
+
| 3.3.4 | Error Prevention (Legal, Financial, Data) | AA | covered | semantics.consequential-action | — |
|
|
401
|
+
| 3.3.7 | Redundant Entry | A | covered | semantics.redundant-entry | — |
|
|
402
|
+
| 3.3.8 | Accessible Authentication (Minimum) | AA | covered | semantics.accessible-authentication | — |
|
|
403
|
+
| 4.1.2 | Name, Role, Value | A | covered | semantics.accessible-name, semantics.expanded-state, semantics.name-role-value, semantics.native-dialog, semantics.roles-states-properties, semantics.selected-state | — |
|
|
404
|
+
| 4.1.3 | Status Messages | AA | covered | semantics.alert, semantics.live-status | — |
|
|
405
|
+
|
|
406
|
+
### Deferred APG patterns
|
|
407
|
+
|
|
408
|
+
- alert-dialog: Deferred until dialog purpose distinguishes urgent confirmation or attention from a general modal dialog.
|
|
409
|
+
- grid: Deferred until a static-versus-interactive grid discriminator and keyboard interaction model are defined.
|
|
410
|
+
- switch: Deferred until a binary toggle model distinguishes switch behavior from a generic form field.
|
|
411
|
+
- toolbar: Deferred until control-group behavior and its focus-management model are defined.
|
|
412
|
+
- treegrid: Deferred until static-versus-interactive grid selection and the hierarchical tree interaction model are defined.
|