@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.
Files changed (148) hide show
  1. package/OPERATING.md +5 -0
  2. package/README.md +22 -0
  3. package/bin/accessibility-standards.mjs +32 -0
  4. package/dist/manifest.json +202 -0
  5. package/dist/profiles/ai-orchestration/coverage-manifest.json +202 -0
  6. package/dist/profiles/ai-orchestration/implementation/accessibility.md +329 -0
  7. package/dist/profiles/ai-orchestration/pattern-contracts.json +697 -0
  8. package/dist/profiles/ai-orchestration/patterns/accordion.md +12 -0
  9. package/dist/profiles/ai-orchestration/patterns/alert.md +11 -0
  10. package/dist/profiles/ai-orchestration/patterns/carousel.md +12 -0
  11. package/dist/profiles/ai-orchestration/patterns/combobox.md +11 -0
  12. package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +11 -0
  13. package/dist/profiles/ai-orchestration/patterns/dialog.md +12 -0
  14. package/dist/profiles/ai-orchestration/patterns/disclosure.md +11 -0
  15. package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +11 -0
  16. package/dist/profiles/ai-orchestration/patterns/field.md +11 -0
  17. package/dist/profiles/ai-orchestration/patterns/image.md +11 -0
  18. package/dist/profiles/ai-orchestration/patterns/listbox.md +12 -0
  19. package/dist/profiles/ai-orchestration/patterns/media-player.md +11 -0
  20. package/dist/profiles/ai-orchestration/patterns/menu-button.md +11 -0
  21. package/dist/profiles/ai-orchestration/patterns/pagination.md +11 -0
  22. package/dist/profiles/ai-orchestration/patterns/popover.md +11 -0
  23. package/dist/profiles/ai-orchestration/patterns/progress.md +11 -0
  24. package/dist/profiles/ai-orchestration/patterns/tabs.md +12 -0
  25. package/dist/profiles/ai-orchestration/patterns/tooltip.md +12 -0
  26. package/dist/profiles/ai-orchestration/patterns/validation.md +11 -0
  27. package/dist/profiles/ai-orchestration/review/accessibility.md +67 -0
  28. package/dist/profiles/ai-orchestration/semantics/accessible-name.md +8 -0
  29. package/dist/profiles/ai-orchestration/semantics/alert.md +8 -0
  30. package/dist/profiles/ai-orchestration/semantics/consequential-action.md +8 -0
  31. package/dist/profiles/ai-orchestration/semantics/data-table.md +8 -0
  32. package/dist/profiles/ai-orchestration/semantics/expanded-state.md +8 -0
  33. package/dist/profiles/ai-orchestration/semantics/focus.initial.md +8 -0
  34. package/dist/profiles/ai-orchestration/semantics/focus.return.md +8 -0
  35. package/dist/profiles/ai-orchestration/semantics/focus.visible.md +8 -0
  36. package/dist/profiles/ai-orchestration/semantics/form-error.md +8 -0
  37. package/dist/profiles/ai-orchestration/semantics/form-label.md +8 -0
  38. package/dist/profiles/ai-orchestration/semantics/form-required.md +8 -0
  39. package/dist/profiles/ai-orchestration/semantics/headings.md +8 -0
  40. package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +8 -0
  41. package/dist/profiles/ai-orchestration/semantics/keyboard.md +8 -0
  42. package/dist/profiles/ai-orchestration/semantics/landmarks.md +8 -0
  43. package/dist/profiles/ai-orchestration/semantics/live-status.md +8 -0
  44. package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +8 -0
  45. package/dist/profiles/ai-orchestration/semantics/motion-control.md +8 -0
  46. package/dist/profiles/ai-orchestration/semantics/name-role-value.md +8 -0
  47. package/dist/profiles/ai-orchestration/semantics/native-dialog.md +8 -0
  48. package/dist/profiles/ai-orchestration/semantics/native-elements.md +8 -0
  49. package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +8 -0
  50. package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +8 -0
  51. package/dist/profiles/ai-orchestration/semantics/selected-state.md +8 -0
  52. package/dist/profiles/ai-orchestration/semantics/target-size.md +8 -0
  53. package/dist/profiles/ai-orchestration/semantics.json +289 -0
  54. package/dist/profiles/ai-orchestration/testing/accessibility.md +138 -0
  55. package/dist/profiles/conductor/a11y-semantics.md +152 -0
  56. package/dist/profiles/conductor/accessibility-quality.md +179 -0
  57. package/dist/profiles/conductor/applicability-matrix.json +428 -0
  58. package/dist/profiles/conductor/coverage-manifest.json +202 -0
  59. package/dist/profiles/conductor/pattern-contracts.json +697 -0
  60. package/dist/profiles/conductor/patterns/accordion.json +44 -0
  61. package/dist/profiles/conductor/patterns/alert.json +34 -0
  62. package/dist/profiles/conductor/patterns/carousel.json +45 -0
  63. package/dist/profiles/conductor/patterns/combobox.json +44 -0
  64. package/dist/profiles/conductor/patterns/consequential-submission.json +38 -0
  65. package/dist/profiles/conductor/patterns/dialog.json +47 -0
  66. package/dist/profiles/conductor/patterns/disclosure.json +39 -0
  67. package/dist/profiles/conductor/patterns/dynamic-status.json +36 -0
  68. package/dist/profiles/conductor/patterns/field.json +39 -0
  69. package/dist/profiles/conductor/patterns/image.json +35 -0
  70. package/dist/profiles/conductor/patterns/listbox.json +43 -0
  71. package/dist/profiles/conductor/patterns/media-player.json +45 -0
  72. package/dist/profiles/conductor/patterns/menu-button.json +41 -0
  73. package/dist/profiles/conductor/patterns/pagination.json +39 -0
  74. package/dist/profiles/conductor/patterns/popover.json +40 -0
  75. package/dist/profiles/conductor/patterns/progress.json +37 -0
  76. package/dist/profiles/conductor/patterns/tabs.json +42 -0
  77. package/dist/profiles/conductor/patterns/tooltip.json +37 -0
  78. package/dist/profiles/conductor/patterns/validation.json +42 -0
  79. package/dist/profiles/conductor/semantics.json +289 -0
  80. package/dist/projection-manifest.json +90 -0
  81. package/dist/requirements-to-implementation.md +21 -0
  82. package/lib/build-manifest.mjs +20 -0
  83. package/lib/build.mjs +31 -0
  84. package/lib/compile-applicability.mjs +56 -0
  85. package/lib/digest.mjs +11 -0
  86. package/lib/index.mjs +4 -0
  87. package/lib/load.mjs +40 -0
  88. package/lib/render.mjs +71 -0
  89. package/lib/sync.mjs +94 -0
  90. package/lib/validate.mjs +31 -0
  91. package/package.json +46 -0
  92. package/profiles/ai-orchestration/profile.json +1 -0
  93. package/profiles/ai-orchestration/templates/implementation/README.md +3 -0
  94. package/profiles/ai-orchestration/templates/patterns/README.md +3 -0
  95. package/profiles/ai-orchestration/templates/review/README.md +3 -0
  96. package/profiles/ai-orchestration/templates/semantics/README.md +3 -0
  97. package/profiles/ai-orchestration/templates/testing/README.md +3 -0
  98. package/profiles/conductor/profile.json +1 -0
  99. package/profiles/conductor/templates/applicability/README.md +3 -0
  100. package/profiles/conductor/templates/evidence/README.md +3 -0
  101. package/profiles/conductor/templates/patterns/README.md +3 -0
  102. package/profiles/conductor/templates/semantics/README.md +3 -0
  103. package/schemas/applicability-matrix.schema.json +1 -0
  104. package/schemas/consumer-config.schema.json +1 -0
  105. package/schemas/consumer-routes.schema.json +1 -0
  106. package/schemas/manifest.schema.json +1 -0
  107. package/schemas/pattern.schema.json +1 -0
  108. package/schemas/profile.schema.json +1 -0
  109. package/schemas/projection-manifest.schema.json +1 -0
  110. package/schemas/record.schema.json +1 -0
  111. package/schemas/semantic.schema.json +1 -0
  112. package/src/applicability/facts.yml +1 -0
  113. package/src/applicability/matrix.yml +20 -0
  114. package/src/evidence/proof-routing.yml +1 -0
  115. package/src/foundations/conformance-boundary.yml +1 -0
  116. package/src/foundations/standards-hierarchy.yml +1 -0
  117. package/src/foundations/wcag-2.2.yml +1 -0
  118. package/src/patterns/disclosure/accordion.yml +1 -0
  119. package/src/patterns/disclosure/disclosure.yml +1 -0
  120. package/src/patterns/feedback/alert.yml +1 -0
  121. package/src/patterns/feedback/dynamic-status.yml +1 -0
  122. package/src/patterns/feedback/progress.yml +1 -0
  123. package/src/patterns/forms/consequential-submission.yml +1 -0
  124. package/src/patterns/forms/field.yml +1 -0
  125. package/src/patterns/forms/validation.yml +1 -0
  126. package/src/patterns/media/carousel.yml +1 -0
  127. package/src/patterns/media/image.yml +1 -0
  128. package/src/patterns/media/media-player.yml +1 -0
  129. package/src/patterns/navigation/menu-button.yml +1 -0
  130. package/src/patterns/navigation/pagination.yml +1 -0
  131. package/src/patterns/navigation/tabs.yml +1 -0
  132. package/src/patterns/overlays/dialog.yml +1 -0
  133. package/src/patterns/overlays/popover.yml +1 -0
  134. package/src/patterns/overlays/tooltip.yml +1 -0
  135. package/src/patterns/selection/combobox.yml +1 -0
  136. package/src/patterns/selection/listbox.yml +1 -0
  137. package/src/policies/enhanced-quality.yml +1 -0
  138. package/src/policies/target-size.yml +1 -0
  139. package/src/semantics/accessible-names.yml +1 -0
  140. package/src/semantics/forms.yml +1 -0
  141. package/src/semantics/headings-landmarks.yml +1 -0
  142. package/src/semantics/keyboard-focus.yml +1 -0
  143. package/src/semantics/live-regions.yml +1 -0
  144. package/src/semantics/media.yml +1 -0
  145. package/src/semantics/native-elements.yml +1 -0
  146. package/src/semantics/roles-states-properties.yml +1 -0
  147. package/src/semantics/tables.yml +1 -0
  148. package/src/sources.yml +1 -0
@@ -0,0 +1,329 @@
1
+ <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ # Accessibility implementation contract
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.
153
+
154
+ ## pattern.accordion
155
+
156
+ Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.visible.
157
+
158
+ Behavior:
159
+ - Toggle only the controlled panel
160
+ - Preserve DOM and focus order
161
+
162
+ Evidence: unit, axe, e2e, human.
163
+
164
+ ## pattern.alert
165
+
166
+ Requires: semantics.alert.
167
+
168
+ Behavior:
169
+ - Announce once without moving focus
170
+
171
+ Evidence: unit, human.
172
+
173
+ ## pattern.carousel
174
+
175
+ Requires: semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control, semantics.live-status.
176
+
177
+ Behavior:
178
+ - Pause rotation on interaction
179
+ - Provide named controls and current position
180
+
181
+ Evidence: unit, axe, e2e, human.
182
+
183
+ ## pattern.combobox
184
+
185
+ Requires: semantics.accessible-name, semantics.expanded-state, semantics.selected-state, semantics.keyboard, semantics.live-status.
186
+
187
+ Behavior:
188
+ - Keyboard controls popup, option, and input independently
189
+
190
+ Evidence: unit, axe, e2e, human.
191
+
192
+ ## pattern.consequential-submission
193
+
194
+ Requires: semantics.consequential-action, semantics.form-error, semantics.keyboard.
195
+
196
+ Behavior:
197
+ - Support review, correction, confirmation, or reversal
198
+
199
+ Evidence: e2e, human.
200
+
201
+ ## pattern.dialog
202
+
203
+ Requires: semantics.native-dialog, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.initial, semantics.focus.return.
204
+
205
+ Behavior:
206
+ - Manage initial, contained, and return focus
207
+ - Dismiss topmost dialog with Escape
208
+
209
+ Evidence: unit, axe, e2e, human.
210
+
211
+ ## pattern.disclosure
212
+
213
+ Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard.
214
+
215
+ Behavior:
216
+ - Control toggles one region
217
+
218
+ Evidence: unit, axe, e2e.
219
+
220
+ ## pattern.dynamic-status
221
+
222
+ Requires: semantics.live-status.
223
+
224
+ Behavior:
225
+ - Announce meaningful changes once
226
+
227
+ Evidence: unit, e2e, human.
228
+
229
+ ## pattern.field
230
+
231
+ Requires: semantics.form-label, semantics.form-required, semantics.focus.visible.
232
+
233
+ Behavior:
234
+ - Expose label, instructions, and requiredness before interaction
235
+
236
+ Evidence: unit, axe, human.
237
+
238
+ ## pattern.image
239
+
240
+ Requires: semantics.non-text-alternative.
241
+
242
+ Behavior:
243
+ - Alternative follows image purpose
244
+
245
+ Evidence: axe, human.
246
+
247
+ ## pattern.listbox
248
+
249
+ Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
250
+
251
+ Behavior:
252
+ - Arrow keys move active option
253
+ - Selection follows declared model
254
+
255
+ Evidence: unit, axe, e2e, human.
256
+
257
+ ## pattern.media-player
258
+
259
+ Requires: semantics.media-alternatives, semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control.
260
+
261
+ Behavior:
262
+ - Provide keyboard-operable named controls and required alternatives
263
+
264
+ Evidence: axe, e2e, human.
265
+
266
+ ## pattern.menu-button
267
+
268
+ Requires: semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.initial, semantics.focus.return.
269
+
270
+ Behavior:
271
+ - Open and navigate menu by keyboard
272
+
273
+ Evidence: unit, e2e, human.
274
+
275
+ ## pattern.pagination
276
+
277
+ Requires: semantics.native-elements, semantics.accessible-name, semantics.landmarks, semantics.focus.visible.
278
+
279
+ Behavior:
280
+ - Expose current page and named navigation
281
+
282
+ Evidence: unit, axe, human.
283
+
284
+ ## pattern.popover
285
+
286
+ Requires: semantics.native-elements, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.return.
287
+
288
+ Behavior:
289
+ - Dismiss without trapping focus
290
+
291
+ Evidence: unit, e2e, human.
292
+
293
+ ## pattern.progress
294
+
295
+ Requires: semantics.name-role-value, semantics.live-status.
296
+
297
+ Behavior:
298
+ - Expose value and completion changes without announcement noise
299
+
300
+ Evidence: unit, axe, human.
301
+
302
+ ## pattern.tabs
303
+
304
+ Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
305
+
306
+ Behavior:
307
+ - Arrow keys move between tabs
308
+ - Selection and activation follow the documented model
309
+
310
+ Evidence: unit, axe, e2e, human.
311
+
312
+ ## pattern.tooltip
313
+
314
+ Requires: semantics.accessible-name, semantics.keyboard.escape.
315
+
316
+ Behavior:
317
+ - Available on hover and focus
318
+ - Never contains interactive content
319
+
320
+ Evidence: unit, e2e, human.
321
+
322
+ ## pattern.validation
323
+
324
+ Requires: semantics.form-error, semantics.live-status, semantics.focus.initial.
325
+
326
+ Behavior:
327
+ - Identify, associate, summarize, and focus errors deterministically
328
+
329
+ Evidence: unit, axe, e2e, human.