@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,179 @@
1
+ <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ # Accessibility quality contract
3
+
4
+ ## pattern.accordion
5
+
6
+ Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.visible.
7
+
8
+ Behavior:
9
+ - Toggle only the controlled panel
10
+ - Preserve DOM and focus order
11
+
12
+ Evidence: unit, axe, e2e, human.
13
+
14
+ ## pattern.alert
15
+
16
+ Requires: semantics.alert.
17
+
18
+ Behavior:
19
+ - Announce once without moving focus
20
+
21
+ Evidence: unit, human.
22
+
23
+ ## pattern.carousel
24
+
25
+ Requires: semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control, semantics.live-status.
26
+
27
+ Behavior:
28
+ - Pause rotation on interaction
29
+ - Provide named controls and current position
30
+
31
+ Evidence: unit, axe, e2e, human.
32
+
33
+ ## pattern.combobox
34
+
35
+ Requires: semantics.accessible-name, semantics.expanded-state, semantics.selected-state, semantics.keyboard, semantics.live-status.
36
+
37
+ Behavior:
38
+ - Keyboard controls popup, option, and input independently
39
+
40
+ Evidence: unit, axe, e2e, human.
41
+
42
+ ## pattern.consequential-submission
43
+
44
+ Requires: semantics.consequential-action, semantics.form-error, semantics.keyboard.
45
+
46
+ Behavior:
47
+ - Support review, correction, confirmation, or reversal
48
+
49
+ Evidence: e2e, human.
50
+
51
+ ## pattern.dialog
52
+
53
+ Requires: semantics.native-dialog, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.initial, semantics.focus.return.
54
+
55
+ Behavior:
56
+ - Manage initial, contained, and return focus
57
+ - Dismiss topmost dialog with Escape
58
+
59
+ Evidence: unit, axe, e2e, human.
60
+
61
+ ## pattern.disclosure
62
+
63
+ Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard.
64
+
65
+ Behavior:
66
+ - Control toggles one region
67
+
68
+ Evidence: unit, axe, e2e.
69
+
70
+ ## pattern.dynamic-status
71
+
72
+ Requires: semantics.live-status.
73
+
74
+ Behavior:
75
+ - Announce meaningful changes once
76
+
77
+ Evidence: unit, e2e, human.
78
+
79
+ ## pattern.field
80
+
81
+ Requires: semantics.form-label, semantics.form-required, semantics.focus.visible.
82
+
83
+ Behavior:
84
+ - Expose label, instructions, and requiredness before interaction
85
+
86
+ Evidence: unit, axe, human.
87
+
88
+ ## pattern.image
89
+
90
+ Requires: semantics.non-text-alternative.
91
+
92
+ Behavior:
93
+ - Alternative follows image purpose
94
+
95
+ Evidence: axe, human.
96
+
97
+ ## pattern.listbox
98
+
99
+ Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
100
+
101
+ Behavior:
102
+ - Arrow keys move active option
103
+ - Selection follows declared model
104
+
105
+ Evidence: unit, axe, e2e, human.
106
+
107
+ ## pattern.media-player
108
+
109
+ Requires: semantics.media-alternatives, semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control.
110
+
111
+ Behavior:
112
+ - Provide keyboard-operable named controls and required alternatives
113
+
114
+ Evidence: axe, e2e, human.
115
+
116
+ ## pattern.menu-button
117
+
118
+ Requires: semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.initial, semantics.focus.return.
119
+
120
+ Behavior:
121
+ - Open and navigate menu by keyboard
122
+
123
+ Evidence: unit, e2e, human.
124
+
125
+ ## pattern.pagination
126
+
127
+ Requires: semantics.native-elements, semantics.accessible-name, semantics.landmarks, semantics.focus.visible.
128
+
129
+ Behavior:
130
+ - Expose current page and named navigation
131
+
132
+ Evidence: unit, axe, human.
133
+
134
+ ## pattern.popover
135
+
136
+ Requires: semantics.native-elements, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.return.
137
+
138
+ Behavior:
139
+ - Dismiss without trapping focus
140
+
141
+ Evidence: unit, e2e, human.
142
+
143
+ ## pattern.progress
144
+
145
+ Requires: semantics.name-role-value, semantics.live-status.
146
+
147
+ Behavior:
148
+ - Expose value and completion changes without announcement noise
149
+
150
+ Evidence: unit, axe, human.
151
+
152
+ ## pattern.tabs
153
+
154
+ Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
155
+
156
+ Behavior:
157
+ - Arrow keys move between tabs
158
+ - Selection and activation follow the documented model
159
+
160
+ Evidence: unit, axe, e2e, human.
161
+
162
+ ## pattern.tooltip
163
+
164
+ Requires: semantics.accessible-name, semantics.keyboard.escape.
165
+
166
+ Behavior:
167
+ - Available on hover and focus
168
+ - Never contains interactive content
169
+
170
+ Evidence: unit, e2e, human.
171
+
172
+ ## pattern.validation
173
+
174
+ Requires: semantics.form-error, semantics.live-status, semantics.focus.initial.
175
+
176
+ Behavior:
177
+ - Identify, associate, summarize, and focus errors deterministically
178
+
179
+ Evidence: unit, axe, e2e, human.
@@ -0,0 +1,428 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "trigger_states": [
5
+ "unobserved",
6
+ "not_applicable",
7
+ "candidate",
8
+ "applicable"
9
+ ],
10
+ "resolution_states": [
11
+ "skipped",
12
+ "needs_confirmation",
13
+ "needs_input",
14
+ "resolved",
15
+ "deferred",
16
+ "conflict"
17
+ ],
18
+ "facts": {
19
+ "artifact.page_context": {
20
+ "type": "boolean"
21
+ },
22
+ "content.has_non_text": {
23
+ "type": "boolean"
24
+ },
25
+ "content.has_media": {
26
+ "type": "boolean"
27
+ },
28
+ "component.has_form_fields": {
29
+ "type": "boolean"
30
+ },
31
+ "component.submission_consequence": {
32
+ "type": "array",
33
+ "items": "string"
34
+ },
35
+ "component.has_dynamic_status": {
36
+ "type": "boolean"
37
+ },
38
+ "component.pattern": {
39
+ "type": "string"
40
+ },
41
+ "interaction.has_motion_or_timing": {
42
+ "type": "boolean"
43
+ },
44
+ "interaction.has_complex_pointer": {
45
+ "type": "boolean"
46
+ },
47
+ "interaction.has_character_shortcuts": {
48
+ "type": "boolean"
49
+ },
50
+ "content.uses_orientation_or_sensory_cues": {
51
+ "type": "boolean"
52
+ },
53
+ "interaction.has_pointer_targets": {
54
+ "type": "boolean"
55
+ },
56
+ "interaction.can_obscure_focus": {
57
+ "type": "boolean"
58
+ },
59
+ "flow.has_authentication": {
60
+ "type": "boolean"
61
+ },
62
+ "flow.repeats_entry": {
63
+ "type": "boolean"
64
+ },
65
+ "artifact.has_help": {
66
+ "type": "boolean"
67
+ },
68
+ "content.has_locale_or_bidi": {
69
+ "type": "boolean"
70
+ },
71
+ "component.has_data_table_or_grid": {
72
+ "type": "boolean"
73
+ }
74
+ },
75
+ "rows": [
76
+ {
77
+ "id": "applicability.page-context",
78
+ "when": {
79
+ "equals": {
80
+ "fact": "artifact.page_context",
81
+ "value": true
82
+ }
83
+ },
84
+ "outcomes": [
85
+ "semantics.headings",
86
+ "semantics.landmarks"
87
+ ],
88
+ "evidence": [
89
+ "axe",
90
+ "human"
91
+ ],
92
+ "order": 0,
93
+ "trigger_state": "unobserved",
94
+ "resolution_state": "needs_input"
95
+ },
96
+ {
97
+ "id": "applicability.non-text-content",
98
+ "when": {
99
+ "equals": {
100
+ "fact": "content.has_non_text",
101
+ "value": true
102
+ }
103
+ },
104
+ "outcomes": [
105
+ "pattern.image"
106
+ ],
107
+ "evidence": [
108
+ "axe",
109
+ "human"
110
+ ],
111
+ "order": 1,
112
+ "trigger_state": "unobserved",
113
+ "resolution_state": "needs_input"
114
+ },
115
+ {
116
+ "id": "applicability.media",
117
+ "when": {
118
+ "equals": {
119
+ "fact": "content.has_media",
120
+ "value": true
121
+ }
122
+ },
123
+ "outcomes": [
124
+ "pattern.media-player"
125
+ ],
126
+ "evidence": [
127
+ "e2e",
128
+ "human"
129
+ ],
130
+ "order": 2,
131
+ "trigger_state": "unobserved",
132
+ "resolution_state": "needs_input"
133
+ },
134
+ {
135
+ "id": "applicability.forms",
136
+ "when": {
137
+ "equals": {
138
+ "fact": "component.has_form_fields",
139
+ "value": true
140
+ }
141
+ },
142
+ "outcomes": [
143
+ "pattern.field",
144
+ "pattern.validation"
145
+ ],
146
+ "evidence": [
147
+ "unit",
148
+ "axe",
149
+ "e2e"
150
+ ],
151
+ "order": 3,
152
+ "trigger_state": "unobserved",
153
+ "resolution_state": "needs_input"
154
+ },
155
+ {
156
+ "id": "applicability.consequential-submission",
157
+ "when": {
158
+ "contains": {
159
+ "fact": "component.submission_consequence",
160
+ "value": "consequential"
161
+ }
162
+ },
163
+ "outcomes": [
164
+ "pattern.consequential-submission"
165
+ ],
166
+ "evidence": [
167
+ "e2e",
168
+ "human"
169
+ ],
170
+ "order": 4,
171
+ "trigger_state": "unobserved",
172
+ "resolution_state": "needs_input"
173
+ },
174
+ {
175
+ "id": "applicability.dynamic-status",
176
+ "when": {
177
+ "equals": {
178
+ "fact": "component.has_dynamic_status",
179
+ "value": true
180
+ }
181
+ },
182
+ "outcomes": [
183
+ "pattern.dynamic-status"
184
+ ],
185
+ "evidence": [
186
+ "unit",
187
+ "e2e",
188
+ "human"
189
+ ],
190
+ "order": 5,
191
+ "trigger_state": "unobserved",
192
+ "resolution_state": "needs_input"
193
+ },
194
+ {
195
+ "id": "applicability.overlays",
196
+ "when": {
197
+ "contains": {
198
+ "fact": "component.pattern",
199
+ "value": [
200
+ "dialog",
201
+ "popover",
202
+ "tooltip"
203
+ ]
204
+ }
205
+ },
206
+ "outcomes": [
207
+ "semantics.keyboard.escape",
208
+ "semantics.focus.return"
209
+ ],
210
+ "evidence": [
211
+ "e2e"
212
+ ],
213
+ "order": 6,
214
+ "trigger_state": "unobserved",
215
+ "resolution_state": "needs_input"
216
+ },
217
+ {
218
+ "id": "applicability.motion-timing",
219
+ "when": {
220
+ "equals": {
221
+ "fact": "interaction.has_motion_or_timing",
222
+ "value": true
223
+ }
224
+ },
225
+ "outcomes": [
226
+ "semantics.motion-control"
227
+ ],
228
+ "evidence": [
229
+ "e2e",
230
+ "human"
231
+ ],
232
+ "order": 7,
233
+ "trigger_state": "unobserved",
234
+ "resolution_state": "needs_input"
235
+ },
236
+ {
237
+ "id": "applicability.complex-pointer",
238
+ "when": {
239
+ "equals": {
240
+ "fact": "interaction.has_complex_pointer",
241
+ "value": true
242
+ }
243
+ },
244
+ "outcomes": [
245
+ "semantics.keyboard"
246
+ ],
247
+ "evidence": [
248
+ "e2e",
249
+ "human"
250
+ ],
251
+ "order": 8,
252
+ "trigger_state": "unobserved",
253
+ "resolution_state": "needs_input"
254
+ },
255
+ {
256
+ "id": "applicability.character-shortcuts",
257
+ "when": {
258
+ "equals": {
259
+ "fact": "interaction.has_character_shortcuts",
260
+ "value": true
261
+ }
262
+ },
263
+ "outcomes": [
264
+ "semantics.keyboard"
265
+ ],
266
+ "evidence": [
267
+ "unit",
268
+ "e2e"
269
+ ],
270
+ "order": 9,
271
+ "trigger_state": "unobserved",
272
+ "resolution_state": "needs_input"
273
+ },
274
+ {
275
+ "id": "applicability.orientation-sensory",
276
+ "when": {
277
+ "equals": {
278
+ "fact": "content.uses_orientation_or_sensory_cues",
279
+ "value": true
280
+ }
281
+ },
282
+ "outcomes": [
283
+ "semantics.name-role-value"
284
+ ],
285
+ "evidence": [
286
+ "human"
287
+ ],
288
+ "order": 10,
289
+ "trigger_state": "unobserved",
290
+ "resolution_state": "needs_input"
291
+ },
292
+ {
293
+ "id": "applicability.target-size",
294
+ "when": {
295
+ "equals": {
296
+ "fact": "interaction.has_pointer_targets",
297
+ "value": true
298
+ }
299
+ },
300
+ "outcomes": [
301
+ "semantics.target-size"
302
+ ],
303
+ "evidence": [
304
+ "e2e",
305
+ "human"
306
+ ],
307
+ "order": 11,
308
+ "trigger_state": "unobserved",
309
+ "resolution_state": "needs_input"
310
+ },
311
+ {
312
+ "id": "applicability.focus-obstruction",
313
+ "when": {
314
+ "equals": {
315
+ "fact": "interaction.can_obscure_focus",
316
+ "value": true
317
+ }
318
+ },
319
+ "outcomes": [
320
+ "semantics.focus.visible"
321
+ ],
322
+ "evidence": [
323
+ "e2e",
324
+ "human"
325
+ ],
326
+ "order": 12,
327
+ "trigger_state": "unobserved",
328
+ "resolution_state": "needs_input"
329
+ },
330
+ {
331
+ "id": "applicability.authentication-captcha",
332
+ "when": {
333
+ "equals": {
334
+ "fact": "flow.has_authentication",
335
+ "value": true
336
+ }
337
+ },
338
+ "outcomes": [
339
+ "semantics.form-label",
340
+ "semantics.form-error"
341
+ ],
342
+ "evidence": [
343
+ "axe",
344
+ "e2e",
345
+ "human"
346
+ ],
347
+ "order": 13,
348
+ "trigger_state": "unobserved",
349
+ "resolution_state": "needs_input"
350
+ },
351
+ {
352
+ "id": "applicability.redundant-entry",
353
+ "when": {
354
+ "equals": {
355
+ "fact": "flow.repeats_entry",
356
+ "value": true
357
+ }
358
+ },
359
+ "outcomes": [
360
+ "semantics.form-label"
361
+ ],
362
+ "evidence": [
363
+ "e2e",
364
+ "human"
365
+ ],
366
+ "order": 14,
367
+ "trigger_state": "unobserved",
368
+ "resolution_state": "needs_input"
369
+ },
370
+ {
371
+ "id": "applicability.consistent-help",
372
+ "when": {
373
+ "equals": {
374
+ "fact": "artifact.has_help",
375
+ "value": true
376
+ }
377
+ },
378
+ "outcomes": [
379
+ "semantics.landmarks"
380
+ ],
381
+ "evidence": [
382
+ "human"
383
+ ],
384
+ "order": 15,
385
+ "trigger_state": "unobserved",
386
+ "resolution_state": "needs_input"
387
+ },
388
+ {
389
+ "id": "applicability.locale-bidi",
390
+ "when": {
391
+ "equals": {
392
+ "fact": "content.has_locale_or_bidi",
393
+ "value": true
394
+ }
395
+ },
396
+ "outcomes": [
397
+ "semantics.native-elements"
398
+ ],
399
+ "evidence": [
400
+ "unit",
401
+ "human"
402
+ ],
403
+ "order": 16,
404
+ "trigger_state": "unobserved",
405
+ "resolution_state": "needs_input"
406
+ },
407
+ {
408
+ "id": "applicability.data-table-grid",
409
+ "when": {
410
+ "equals": {
411
+ "fact": "component.has_data_table_or_grid",
412
+ "value": true
413
+ }
414
+ },
415
+ "outcomes": [
416
+ "semantics.data-table"
417
+ ],
418
+ "evidence": [
419
+ "axe",
420
+ "e2e",
421
+ "human"
422
+ ],
423
+ "order": 17,
424
+ "trigger_state": "unobserved",
425
+ "resolution_state": "needs_input"
426
+ }
427
+ ]
428
+ }