@verndale/accessibility-standards 1.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 +5 -0
- package/README.md +22 -0
- package/bin/accessibility-standards.mjs +32 -0
- package/dist/manifest.json +202 -0
- package/dist/profiles/ai-orchestration/coverage-manifest.json +202 -0
- package/dist/profiles/ai-orchestration/implementation/accessibility.md +329 -0
- package/dist/profiles/ai-orchestration/pattern-contracts.json +697 -0
- package/dist/profiles/ai-orchestration/patterns/accordion.md +12 -0
- package/dist/profiles/ai-orchestration/patterns/alert.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/carousel.md +12 -0
- package/dist/profiles/ai-orchestration/patterns/combobox.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/dialog.md +12 -0
- package/dist/profiles/ai-orchestration/patterns/disclosure.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/field.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/image.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/listbox.md +12 -0
- package/dist/profiles/ai-orchestration/patterns/media-player.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/menu-button.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/pagination.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/popover.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/progress.md +11 -0
- package/dist/profiles/ai-orchestration/patterns/tabs.md +12 -0
- package/dist/profiles/ai-orchestration/patterns/tooltip.md +12 -0
- package/dist/profiles/ai-orchestration/patterns/validation.md +11 -0
- package/dist/profiles/ai-orchestration/review/accessibility.md +67 -0
- package/dist/profiles/ai-orchestration/semantics/accessible-name.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/alert.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/consequential-action.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/data-table.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/expanded-state.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/focus.initial.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/focus.return.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/focus.visible.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/form-error.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/form-label.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/form-required.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/headings.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/keyboard.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/landmarks.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/live-status.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/motion-control.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/name-role-value.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/native-dialog.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/native-elements.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/selected-state.md +8 -0
- package/dist/profiles/ai-orchestration/semantics/target-size.md +8 -0
- package/dist/profiles/ai-orchestration/semantics.json +289 -0
- package/dist/profiles/ai-orchestration/testing/accessibility.md +138 -0
- package/dist/profiles/conductor/a11y-semantics.md +152 -0
- package/dist/profiles/conductor/accessibility-quality.md +179 -0
- package/dist/profiles/conductor/applicability-matrix.json +428 -0
- package/dist/profiles/conductor/coverage-manifest.json +202 -0
- package/dist/profiles/conductor/pattern-contracts.json +697 -0
- package/dist/profiles/conductor/patterns/accordion.json +44 -0
- package/dist/profiles/conductor/patterns/alert.json +34 -0
- package/dist/profiles/conductor/patterns/carousel.json +45 -0
- package/dist/profiles/conductor/patterns/combobox.json +44 -0
- package/dist/profiles/conductor/patterns/consequential-submission.json +38 -0
- package/dist/profiles/conductor/patterns/dialog.json +47 -0
- package/dist/profiles/conductor/patterns/disclosure.json +39 -0
- package/dist/profiles/conductor/patterns/dynamic-status.json +36 -0
- package/dist/profiles/conductor/patterns/field.json +39 -0
- package/dist/profiles/conductor/patterns/image.json +35 -0
- package/dist/profiles/conductor/patterns/listbox.json +43 -0
- package/dist/profiles/conductor/patterns/media-player.json +45 -0
- package/dist/profiles/conductor/patterns/menu-button.json +41 -0
- package/dist/profiles/conductor/patterns/pagination.json +39 -0
- package/dist/profiles/conductor/patterns/popover.json +40 -0
- package/dist/profiles/conductor/patterns/progress.json +37 -0
- package/dist/profiles/conductor/patterns/tabs.json +42 -0
- package/dist/profiles/conductor/patterns/tooltip.json +37 -0
- package/dist/profiles/conductor/patterns/validation.json +42 -0
- package/dist/profiles/conductor/semantics.json +289 -0
- package/dist/projection-manifest.json +90 -0
- package/dist/requirements-to-implementation.md +21 -0
- package/lib/build-manifest.mjs +20 -0
- package/lib/build.mjs +31 -0
- package/lib/compile-applicability.mjs +56 -0
- package/lib/digest.mjs +11 -0
- package/lib/index.mjs +4 -0
- package/lib/load.mjs +40 -0
- package/lib/render.mjs +71 -0
- package/lib/sync.mjs +94 -0
- package/lib/validate.mjs +31 -0
- package/package.json +46 -0
- package/profiles/ai-orchestration/profile.json +1 -0
- package/profiles/ai-orchestration/templates/implementation/README.md +3 -0
- package/profiles/ai-orchestration/templates/patterns/README.md +3 -0
- package/profiles/ai-orchestration/templates/review/README.md +3 -0
- package/profiles/ai-orchestration/templates/semantics/README.md +3 -0
- package/profiles/ai-orchestration/templates/testing/README.md +3 -0
- package/profiles/conductor/profile.json +1 -0
- package/profiles/conductor/templates/applicability/README.md +3 -0
- package/profiles/conductor/templates/evidence/README.md +3 -0
- package/profiles/conductor/templates/patterns/README.md +3 -0
- package/profiles/conductor/templates/semantics/README.md +3 -0
- package/schemas/applicability-matrix.schema.json +1 -0
- package/schemas/consumer-config.schema.json +1 -0
- package/schemas/consumer-routes.schema.json +1 -0
- package/schemas/manifest.schema.json +1 -0
- package/schemas/pattern.schema.json +1 -0
- package/schemas/profile.schema.json +1 -0
- package/schemas/projection-manifest.schema.json +1 -0
- package/schemas/record.schema.json +1 -0
- package/schemas/semantic.schema.json +1 -0
- package/src/applicability/facts.yml +1 -0
- package/src/applicability/matrix.yml +20 -0
- package/src/evidence/proof-routing.yml +1 -0
- package/src/foundations/conformance-boundary.yml +1 -0
- package/src/foundations/standards-hierarchy.yml +1 -0
- package/src/foundations/wcag-2.2.yml +1 -0
- package/src/patterns/disclosure/accordion.yml +1 -0
- package/src/patterns/disclosure/disclosure.yml +1 -0
- package/src/patterns/feedback/alert.yml +1 -0
- package/src/patterns/feedback/dynamic-status.yml +1 -0
- package/src/patterns/feedback/progress.yml +1 -0
- package/src/patterns/forms/consequential-submission.yml +1 -0
- package/src/patterns/forms/field.yml +1 -0
- package/src/patterns/forms/validation.yml +1 -0
- package/src/patterns/media/carousel.yml +1 -0
- package/src/patterns/media/image.yml +1 -0
- package/src/patterns/media/media-player.yml +1 -0
- package/src/patterns/navigation/menu-button.yml +1 -0
- package/src/patterns/navigation/pagination.yml +1 -0
- package/src/patterns/navigation/tabs.yml +1 -0
- package/src/patterns/overlays/dialog.yml +1 -0
- package/src/patterns/overlays/popover.yml +1 -0
- package/src/patterns/overlays/tooltip.yml +1 -0
- package/src/patterns/selection/combobox.yml +1 -0
- package/src/patterns/selection/listbox.yml +1 -0
- package/src/policies/enhanced-quality.yml +1 -0
- package/src/policies/target-size.yml +1 -0
- package/src/semantics/accessible-names.yml +1 -0
- package/src/semantics/forms.yml +1 -0
- package/src/semantics/headings-landmarks.yml +1 -0
- package/src/semantics/keyboard-focus.yml +1 -0
- package/src/semantics/live-regions.yml +1 -0
- package/src/semantics/media.yml +1 -0
- package/src/semantics/native-elements.yml +1 -0
- package/src/semantics/roles-states-properties.yml +1 -0
- package/src/semantics/tables.yml +1 -0
- package/src/sources.yml +1 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
|
|
3
|
+
"schema_version": 1,
|
|
4
|
+
"semantics": [
|
|
5
|
+
{
|
|
6
|
+
"id": "semantics.accessible-name",
|
|
7
|
+
"version": "1.0.0",
|
|
8
|
+
"title": "Accessible name",
|
|
9
|
+
"kind": "semantic",
|
|
10
|
+
"requirement": "Every interactive or meaning-bearing control has a concise programmatic name derived from visible text when available.",
|
|
11
|
+
"proof": [
|
|
12
|
+
"unit",
|
|
13
|
+
"axe",
|
|
14
|
+
"human"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "semantics.alert",
|
|
19
|
+
"version": "1.0.0",
|
|
20
|
+
"title": "Urgent alert",
|
|
21
|
+
"kind": "semantic",
|
|
22
|
+
"requirement": "Use alert semantics only for urgent, time-sensitive messages that require immediate announcement.",
|
|
23
|
+
"proof": [
|
|
24
|
+
"unit",
|
|
25
|
+
"human"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": "semantics.consequential-action",
|
|
30
|
+
"version": "1.0.0",
|
|
31
|
+
"title": "Consequential action",
|
|
32
|
+
"kind": "semantic",
|
|
33
|
+
"requirement": "Legal, financial, destructive, or data-submitting actions support review, confirmation, or reversal as required.",
|
|
34
|
+
"proof": [
|
|
35
|
+
"e2e",
|
|
36
|
+
"human"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "semantics.data-table",
|
|
41
|
+
"version": "1.0.0",
|
|
42
|
+
"title": "Data table",
|
|
43
|
+
"kind": "semantic",
|
|
44
|
+
"requirement": "Tabular relationships use table markup with associated headers; interactive grids implement their full keyboard model.",
|
|
45
|
+
"proof": [
|
|
46
|
+
"axe",
|
|
47
|
+
"e2e",
|
|
48
|
+
"human"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "semantics.expanded-state",
|
|
53
|
+
"version": "1.0.0",
|
|
54
|
+
"title": "Expanded state",
|
|
55
|
+
"kind": "semantic",
|
|
56
|
+
"requirement": "Expandable controls expose aria-expanded and identify the controlled region when needed.",
|
|
57
|
+
"proof": [
|
|
58
|
+
"unit",
|
|
59
|
+
"axe",
|
|
60
|
+
"e2e"
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "semantics.focus.initial",
|
|
65
|
+
"version": "1.0.0",
|
|
66
|
+
"title": "Initial focus",
|
|
67
|
+
"kind": "semantic",
|
|
68
|
+
"requirement": "On activation, focus moves to the deterministic target appropriate to the pattern.",
|
|
69
|
+
"proof": [
|
|
70
|
+
"unit",
|
|
71
|
+
"e2e"
|
|
72
|
+
]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "semantics.focus.return",
|
|
76
|
+
"version": "1.0.0",
|
|
77
|
+
"title": "Focus return",
|
|
78
|
+
"kind": "semantic",
|
|
79
|
+
"requirement": "On dismissal, focus returns to the invoking control or a documented logical successor.",
|
|
80
|
+
"proof": [
|
|
81
|
+
"unit",
|
|
82
|
+
"e2e"
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"id": "semantics.focus.visible",
|
|
87
|
+
"version": "1.0.0",
|
|
88
|
+
"title": "Visible focus",
|
|
89
|
+
"kind": "semantic",
|
|
90
|
+
"requirement": "Keyboard focus is visible, sufficiently contrasted, and not fully obscured.",
|
|
91
|
+
"proof": [
|
|
92
|
+
"e2e",
|
|
93
|
+
"human"
|
|
94
|
+
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "semantics.form-error",
|
|
98
|
+
"version": "1.0.0",
|
|
99
|
+
"title": "Form error",
|
|
100
|
+
"kind": "semantic",
|
|
101
|
+
"requirement": "Identify errors in text, associate them with fields, and provide correction guidance.",
|
|
102
|
+
"proof": [
|
|
103
|
+
"unit",
|
|
104
|
+
"axe",
|
|
105
|
+
"e2e",
|
|
106
|
+
"human"
|
|
107
|
+
]
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "semantics.form-label",
|
|
111
|
+
"version": "1.0.0",
|
|
112
|
+
"title": "Form label",
|
|
113
|
+
"kind": "semantic",
|
|
114
|
+
"requirement": "Every form control has a persistent programmatically associated label.",
|
|
115
|
+
"proof": [
|
|
116
|
+
"unit",
|
|
117
|
+
"axe"
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "semantics.form-required",
|
|
122
|
+
"version": "1.0.0",
|
|
123
|
+
"title": "Required field",
|
|
124
|
+
"kind": "semantic",
|
|
125
|
+
"requirement": "Requiredness is communicated visually and programmatically before submission.",
|
|
126
|
+
"proof": [
|
|
127
|
+
"unit",
|
|
128
|
+
"axe"
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"id": "semantics.headings",
|
|
133
|
+
"version": "1.0.0",
|
|
134
|
+
"title": "Heading structure",
|
|
135
|
+
"kind": "semantic",
|
|
136
|
+
"requirement": "Headings describe document structure without choosing levels for visual appearance.",
|
|
137
|
+
"proof": [
|
|
138
|
+
"axe",
|
|
139
|
+
"human"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"id": "semantics.keyboard",
|
|
144
|
+
"version": "1.0.0",
|
|
145
|
+
"title": "Keyboard operation",
|
|
146
|
+
"kind": "semantic",
|
|
147
|
+
"requirement": "All functionality is operable with a keyboard without traps.",
|
|
148
|
+
"proof": [
|
|
149
|
+
"e2e",
|
|
150
|
+
"human"
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "semantics.keyboard.escape",
|
|
155
|
+
"version": "1.0.0",
|
|
156
|
+
"title": "Escape dismissal",
|
|
157
|
+
"kind": "semantic",
|
|
158
|
+
"requirement": "Escape closes the topmost dismissible overlay without activating its trigger.",
|
|
159
|
+
"proof": [
|
|
160
|
+
"unit",
|
|
161
|
+
"e2e"
|
|
162
|
+
]
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "semantics.landmarks",
|
|
166
|
+
"version": "1.0.0",
|
|
167
|
+
"title": "Landmarks",
|
|
168
|
+
"kind": "semantic",
|
|
169
|
+
"requirement": "Use native landmarks and name repeated landmarks only when a name is required to distinguish them.",
|
|
170
|
+
"proof": [
|
|
171
|
+
"axe",
|
|
172
|
+
"human"
|
|
173
|
+
]
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"id": "semantics.live-status",
|
|
177
|
+
"version": "1.0.0",
|
|
178
|
+
"title": "Status announcements",
|
|
179
|
+
"kind": "semantic",
|
|
180
|
+
"requirement": "Important asynchronous status updates are exposed through a correctly scoped, non-duplicative live region.",
|
|
181
|
+
"proof": [
|
|
182
|
+
"unit",
|
|
183
|
+
"e2e",
|
|
184
|
+
"human"
|
|
185
|
+
]
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"id": "semantics.media-alternatives",
|
|
189
|
+
"version": "1.0.0",
|
|
190
|
+
"title": "Media alternatives",
|
|
191
|
+
"kind": "semantic",
|
|
192
|
+
"requirement": "Prerecorded media provides applicable captions, transcripts, and audio description.",
|
|
193
|
+
"proof": [
|
|
194
|
+
"human"
|
|
195
|
+
]
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"id": "semantics.motion-control",
|
|
199
|
+
"version": "1.0.0",
|
|
200
|
+
"title": "Motion control",
|
|
201
|
+
"kind": "semantic",
|
|
202
|
+
"requirement": "Respect reduced-motion preferences and provide controls for moving or time-limited content where required.",
|
|
203
|
+
"proof": [
|
|
204
|
+
"e2e",
|
|
205
|
+
"human"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"id": "semantics.name-role-value",
|
|
210
|
+
"version": "1.0.0",
|
|
211
|
+
"title": "Name role value",
|
|
212
|
+
"kind": "semantic",
|
|
213
|
+
"requirement": "Expose the correct accessible name, role, value, and state through the platform accessibility API.",
|
|
214
|
+
"proof": [
|
|
215
|
+
"unit",
|
|
216
|
+
"axe",
|
|
217
|
+
"human"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"id": "semantics.native-dialog",
|
|
222
|
+
"version": "1.0.0",
|
|
223
|
+
"title": "Native dialog semantics",
|
|
224
|
+
"kind": "semantic",
|
|
225
|
+
"requirement": "Use dialog semantics with a programmatic name and modal state only when interaction is modal.",
|
|
226
|
+
"proof": [
|
|
227
|
+
"axe",
|
|
228
|
+
"e2e",
|
|
229
|
+
"human"
|
|
230
|
+
]
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"id": "semantics.native-elements",
|
|
234
|
+
"version": "1.0.0",
|
|
235
|
+
"title": "Native elements",
|
|
236
|
+
"kind": "semantic",
|
|
237
|
+
"requirement": "Use the native HTML element whose semantics and behavior match the control before adding ARIA.",
|
|
238
|
+
"proof": [
|
|
239
|
+
"axe",
|
|
240
|
+
"human"
|
|
241
|
+
]
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"id": "semantics.non-text-alternative",
|
|
245
|
+
"version": "1.0.0",
|
|
246
|
+
"title": "Non-text alternative",
|
|
247
|
+
"kind": "semantic",
|
|
248
|
+
"requirement": "Meaningful non-text content has an equivalent alternative and decorative content is ignored by assistive technology.",
|
|
249
|
+
"proof": [
|
|
250
|
+
"axe",
|
|
251
|
+
"human"
|
|
252
|
+
]
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"id": "semantics.roles-states-properties",
|
|
256
|
+
"version": "1.0.0",
|
|
257
|
+
"title": "Roles states and properties",
|
|
258
|
+
"kind": "semantic",
|
|
259
|
+
"requirement": "Apply only valid ARIA roles, states, and properties and keep exposed state synchronized with rendered behavior.",
|
|
260
|
+
"proof": [
|
|
261
|
+
"unit",
|
|
262
|
+
"axe",
|
|
263
|
+
"e2e"
|
|
264
|
+
]
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
"id": "semantics.selected-state",
|
|
268
|
+
"version": "1.0.0",
|
|
269
|
+
"title": "Selected state",
|
|
270
|
+
"kind": "semantic",
|
|
271
|
+
"requirement": "Selection widgets expose current selection with the state required by their role.",
|
|
272
|
+
"proof": [
|
|
273
|
+
"unit",
|
|
274
|
+
"e2e"
|
|
275
|
+
]
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"id": "semantics.target-size",
|
|
279
|
+
"version": "1.0.0",
|
|
280
|
+
"title": "Target size",
|
|
281
|
+
"kind": "semantic",
|
|
282
|
+
"requirement": "Pointer targets meet 24 by 24 CSS pixels or a WCAG 2.5.8 exception; 44 by 44 is an enhanced recommendation.",
|
|
283
|
+
"proof": [
|
|
284
|
+
"e2e",
|
|
285
|
+
"human"
|
|
286
|
+
]
|
|
287
|
+
}
|
|
288
|
+
]
|
|
289
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
<!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
|
|
2
|
+
# Accessibility testing contract
|
|
3
|
+
|
|
4
|
+
## axe
|
|
5
|
+
|
|
6
|
+
- pattern.accordion
|
|
7
|
+
- pattern.carousel
|
|
8
|
+
- pattern.combobox
|
|
9
|
+
- pattern.dialog
|
|
10
|
+
- pattern.disclosure
|
|
11
|
+
- pattern.field
|
|
12
|
+
- pattern.image
|
|
13
|
+
- pattern.listbox
|
|
14
|
+
- pattern.media-player
|
|
15
|
+
- pattern.pagination
|
|
16
|
+
- pattern.progress
|
|
17
|
+
- pattern.tabs
|
|
18
|
+
- pattern.validation
|
|
19
|
+
- semantics.accessible-name
|
|
20
|
+
- semantics.data-table
|
|
21
|
+
- semantics.expanded-state
|
|
22
|
+
- semantics.form-error
|
|
23
|
+
- semantics.form-label
|
|
24
|
+
- semantics.form-required
|
|
25
|
+
- semantics.headings
|
|
26
|
+
- semantics.landmarks
|
|
27
|
+
- semantics.name-role-value
|
|
28
|
+
- semantics.native-dialog
|
|
29
|
+
- semantics.native-elements
|
|
30
|
+
- semantics.non-text-alternative
|
|
31
|
+
- semantics.roles-states-properties
|
|
32
|
+
|
|
33
|
+
## e2e
|
|
34
|
+
|
|
35
|
+
- pattern.accordion
|
|
36
|
+
- pattern.carousel
|
|
37
|
+
- pattern.combobox
|
|
38
|
+
- pattern.consequential-submission
|
|
39
|
+
- pattern.dialog
|
|
40
|
+
- pattern.disclosure
|
|
41
|
+
- pattern.dynamic-status
|
|
42
|
+
- pattern.field
|
|
43
|
+
- pattern.listbox
|
|
44
|
+
- pattern.media-player
|
|
45
|
+
- pattern.menu-button
|
|
46
|
+
- pattern.popover
|
|
47
|
+
- pattern.tabs
|
|
48
|
+
- pattern.tooltip
|
|
49
|
+
- pattern.validation
|
|
50
|
+
- semantics.consequential-action
|
|
51
|
+
- semantics.data-table
|
|
52
|
+
- semantics.expanded-state
|
|
53
|
+
- semantics.focus.initial
|
|
54
|
+
- semantics.focus.return
|
|
55
|
+
- semantics.focus.visible
|
|
56
|
+
- semantics.form-error
|
|
57
|
+
- semantics.form-label
|
|
58
|
+
- semantics.keyboard
|
|
59
|
+
- semantics.keyboard.escape
|
|
60
|
+
- semantics.live-status
|
|
61
|
+
- semantics.motion-control
|
|
62
|
+
- semantics.native-dialog
|
|
63
|
+
- semantics.roles-states-properties
|
|
64
|
+
- semantics.selected-state
|
|
65
|
+
- semantics.target-size
|
|
66
|
+
|
|
67
|
+
## human
|
|
68
|
+
|
|
69
|
+
- pattern.accordion
|
|
70
|
+
- pattern.alert
|
|
71
|
+
- pattern.carousel
|
|
72
|
+
- pattern.combobox
|
|
73
|
+
- pattern.consequential-submission
|
|
74
|
+
- pattern.dialog
|
|
75
|
+
- pattern.dynamic-status
|
|
76
|
+
- pattern.field
|
|
77
|
+
- pattern.image
|
|
78
|
+
- pattern.listbox
|
|
79
|
+
- pattern.media-player
|
|
80
|
+
- pattern.menu-button
|
|
81
|
+
- pattern.pagination
|
|
82
|
+
- pattern.popover
|
|
83
|
+
- pattern.progress
|
|
84
|
+
- pattern.tabs
|
|
85
|
+
- pattern.tooltip
|
|
86
|
+
- pattern.validation
|
|
87
|
+
- semantics.accessible-name
|
|
88
|
+
- semantics.alert
|
|
89
|
+
- semantics.consequential-action
|
|
90
|
+
- semantics.data-table
|
|
91
|
+
- semantics.focus.visible
|
|
92
|
+
- semantics.form-error
|
|
93
|
+
- semantics.form-label
|
|
94
|
+
- semantics.headings
|
|
95
|
+
- semantics.keyboard
|
|
96
|
+
- semantics.landmarks
|
|
97
|
+
- semantics.live-status
|
|
98
|
+
- semantics.media-alternatives
|
|
99
|
+
- semantics.motion-control
|
|
100
|
+
- semantics.name-role-value
|
|
101
|
+
- semantics.native-dialog
|
|
102
|
+
- semantics.native-elements
|
|
103
|
+
- semantics.non-text-alternative
|
|
104
|
+
- semantics.target-size
|
|
105
|
+
|
|
106
|
+
## unit
|
|
107
|
+
|
|
108
|
+
- pattern.accordion
|
|
109
|
+
- pattern.alert
|
|
110
|
+
- pattern.carousel
|
|
111
|
+
- pattern.combobox
|
|
112
|
+
- pattern.dialog
|
|
113
|
+
- pattern.disclosure
|
|
114
|
+
- pattern.dynamic-status
|
|
115
|
+
- pattern.field
|
|
116
|
+
- pattern.listbox
|
|
117
|
+
- pattern.menu-button
|
|
118
|
+
- pattern.pagination
|
|
119
|
+
- pattern.popover
|
|
120
|
+
- pattern.progress
|
|
121
|
+
- pattern.tabs
|
|
122
|
+
- pattern.tooltip
|
|
123
|
+
- pattern.validation
|
|
124
|
+
- semantics.accessible-name
|
|
125
|
+
- semantics.alert
|
|
126
|
+
- semantics.expanded-state
|
|
127
|
+
- semantics.focus.initial
|
|
128
|
+
- semantics.focus.return
|
|
129
|
+
- semantics.form-error
|
|
130
|
+
- semantics.form-label
|
|
131
|
+
- semantics.form-required
|
|
132
|
+
- semantics.keyboard
|
|
133
|
+
- semantics.keyboard.escape
|
|
134
|
+
- semantics.live-status
|
|
135
|
+
- semantics.name-role-value
|
|
136
|
+
- semantics.native-elements
|
|
137
|
+
- semantics.roles-states-properties
|
|
138
|
+
- semantics.selected-state
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
<!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
|
|
2
|
+
# Accessibility semantics
|
|
3
|
+
|
|
4
|
+
## semantics.accessible-name
|
|
5
|
+
|
|
6
|
+
Every interactive or meaning-bearing control has a concise programmatic name derived from visible text when available.
|
|
7
|
+
|
|
8
|
+
Proof: unit, axe, human.
|
|
9
|
+
|
|
10
|
+
## semantics.alert
|
|
11
|
+
|
|
12
|
+
Use alert semantics only for urgent, time-sensitive messages that require immediate announcement.
|
|
13
|
+
|
|
14
|
+
Proof: unit, human.
|
|
15
|
+
|
|
16
|
+
## semantics.consequential-action
|
|
17
|
+
|
|
18
|
+
Legal, financial, destructive, or data-submitting actions support review, confirmation, or reversal as required.
|
|
19
|
+
|
|
20
|
+
Proof: e2e, human.
|
|
21
|
+
|
|
22
|
+
## semantics.data-table
|
|
23
|
+
|
|
24
|
+
Tabular relationships use table markup with associated headers; interactive grids implement their full keyboard model.
|
|
25
|
+
|
|
26
|
+
Proof: axe, e2e, human.
|
|
27
|
+
|
|
28
|
+
## semantics.expanded-state
|
|
29
|
+
|
|
30
|
+
Expandable controls expose aria-expanded and identify the controlled region when needed.
|
|
31
|
+
|
|
32
|
+
Proof: unit, axe, e2e.
|
|
33
|
+
|
|
34
|
+
## semantics.focus.initial
|
|
35
|
+
|
|
36
|
+
On activation, focus moves to the deterministic target appropriate to the pattern.
|
|
37
|
+
|
|
38
|
+
Proof: unit, e2e.
|
|
39
|
+
|
|
40
|
+
## semantics.focus.return
|
|
41
|
+
|
|
42
|
+
On dismissal, focus returns to the invoking control or a documented logical successor.
|
|
43
|
+
|
|
44
|
+
Proof: unit, e2e.
|
|
45
|
+
|
|
46
|
+
## semantics.focus.visible
|
|
47
|
+
|
|
48
|
+
Keyboard focus is visible, sufficiently contrasted, and not fully obscured.
|
|
49
|
+
|
|
50
|
+
Proof: e2e, human.
|
|
51
|
+
|
|
52
|
+
## semantics.form-error
|
|
53
|
+
|
|
54
|
+
Identify errors in text, associate them with fields, and provide correction guidance.
|
|
55
|
+
|
|
56
|
+
Proof: unit, axe, e2e, human.
|
|
57
|
+
|
|
58
|
+
## semantics.form-label
|
|
59
|
+
|
|
60
|
+
Every form control has a persistent programmatically associated label.
|
|
61
|
+
|
|
62
|
+
Proof: unit, axe.
|
|
63
|
+
|
|
64
|
+
## semantics.form-required
|
|
65
|
+
|
|
66
|
+
Requiredness is communicated visually and programmatically before submission.
|
|
67
|
+
|
|
68
|
+
Proof: unit, axe.
|
|
69
|
+
|
|
70
|
+
## semantics.headings
|
|
71
|
+
|
|
72
|
+
Headings describe document structure without choosing levels for visual appearance.
|
|
73
|
+
|
|
74
|
+
Proof: axe, human.
|
|
75
|
+
|
|
76
|
+
## semantics.keyboard
|
|
77
|
+
|
|
78
|
+
All functionality is operable with a keyboard without traps.
|
|
79
|
+
|
|
80
|
+
Proof: e2e, human.
|
|
81
|
+
|
|
82
|
+
## semantics.keyboard.escape
|
|
83
|
+
|
|
84
|
+
Escape closes the topmost dismissible overlay without activating its trigger.
|
|
85
|
+
|
|
86
|
+
Proof: unit, e2e.
|
|
87
|
+
|
|
88
|
+
## semantics.landmarks
|
|
89
|
+
|
|
90
|
+
Use native landmarks and name repeated landmarks only when a name is required to distinguish them.
|
|
91
|
+
|
|
92
|
+
Proof: axe, human.
|
|
93
|
+
|
|
94
|
+
## semantics.live-status
|
|
95
|
+
|
|
96
|
+
Important asynchronous status updates are exposed through a correctly scoped, non-duplicative live region.
|
|
97
|
+
|
|
98
|
+
Proof: unit, e2e, human.
|
|
99
|
+
|
|
100
|
+
## semantics.media-alternatives
|
|
101
|
+
|
|
102
|
+
Prerecorded media provides applicable captions, transcripts, and audio description.
|
|
103
|
+
|
|
104
|
+
Proof: human.
|
|
105
|
+
|
|
106
|
+
## semantics.motion-control
|
|
107
|
+
|
|
108
|
+
Respect reduced-motion preferences and provide controls for moving or time-limited content where required.
|
|
109
|
+
|
|
110
|
+
Proof: e2e, human.
|
|
111
|
+
|
|
112
|
+
## semantics.name-role-value
|
|
113
|
+
|
|
114
|
+
Expose the correct accessible name, role, value, and state through the platform accessibility API.
|
|
115
|
+
|
|
116
|
+
Proof: unit, axe, human.
|
|
117
|
+
|
|
118
|
+
## semantics.native-dialog
|
|
119
|
+
|
|
120
|
+
Use dialog semantics with a programmatic name and modal state only when interaction is modal.
|
|
121
|
+
|
|
122
|
+
Proof: axe, e2e, human.
|
|
123
|
+
|
|
124
|
+
## semantics.native-elements
|
|
125
|
+
|
|
126
|
+
Use the native HTML element whose semantics and behavior match the control before adding ARIA.
|
|
127
|
+
|
|
128
|
+
Proof: axe, human.
|
|
129
|
+
|
|
130
|
+
## semantics.non-text-alternative
|
|
131
|
+
|
|
132
|
+
Meaningful non-text content has an equivalent alternative and decorative content is ignored by assistive technology.
|
|
133
|
+
|
|
134
|
+
Proof: axe, human.
|
|
135
|
+
|
|
136
|
+
## semantics.roles-states-properties
|
|
137
|
+
|
|
138
|
+
Apply only valid ARIA roles, states, and properties and keep exposed state synchronized with rendered behavior.
|
|
139
|
+
|
|
140
|
+
Proof: unit, axe, e2e.
|
|
141
|
+
|
|
142
|
+
## semantics.selected-state
|
|
143
|
+
|
|
144
|
+
Selection widgets expose current selection with the state required by their role.
|
|
145
|
+
|
|
146
|
+
Proof: unit, e2e.
|
|
147
|
+
|
|
148
|
+
## semantics.target-size
|
|
149
|
+
|
|
150
|
+
Pointer targets meet 24 by 24 CSS pixels or a WCAG 2.5.8 exception; 44 by 44 is an enhanced recommendation.
|
|
151
|
+
|
|
152
|
+
Proof: e2e, human.
|