@verndale/accessibility-standards 1.0.0 → 2.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 +2 -0
- package/README.md +4 -0
- package/bin/accessibility-standards.mjs +1 -1
- package/dist/manifest.json +39 -21
- package/dist/profiles/ai-orchestration/coverage-manifest.json +109 -2
- package/dist/profiles/ai-orchestration/implementation/accessibility.md +334 -0
- package/dist/profiles/ai-orchestration/pattern-contracts.json +125 -39
- package/dist/profiles/ai-orchestration/patterns/accordion.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/alert.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/carousel.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/combobox.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/dialog.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/disclosure.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/field.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/image.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/listbox.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/media-player.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/menu-button.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/pagination.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/popover.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/progress.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/tabs.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/tooltip.md +9 -0
- package/dist/profiles/ai-orchestration/patterns/validation.md +9 -0
- package/dist/profiles/ai-orchestration/review/accessibility.md +8 -1
- package/dist/profiles/ai-orchestration/semantics/accessible-name.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/alert.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/consequential-action.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/data-table.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/expanded-state.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/focus.initial.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/focus.return.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/focus.visible.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/form-error.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/form-label.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/form-required.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/headings.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/keyboard.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/landmarks.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/live-status.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/motion-control.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/name-role-value.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/native-dialog.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/native-elements.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/selected-state.md +1 -0
- package/dist/profiles/ai-orchestration/semantics/target-size.md +1 -0
- package/dist/profiles/ai-orchestration/semantics.json +48 -1
- package/dist/profiles/ai-orchestration/testing/accessibility.md +1 -1
- package/dist/profiles/ai-orchestration/ui-design-brain-bindings.json +856 -0
- package/dist/profiles/conductor/a11y-semantics.md +22 -1
- package/dist/profiles/conductor/accessibility-quality.md +314 -0
- package/dist/profiles/conductor/applicability-matrix.json +111 -28
- package/dist/profiles/conductor/coverage-manifest.json +109 -2
- package/dist/profiles/conductor/pattern-contracts.json +125 -39
- package/dist/profiles/conductor/patterns/accordion.json +13 -3
- package/dist/profiles/conductor/patterns/alert.json +13 -3
- package/dist/profiles/conductor/patterns/carousel.json +13 -3
- package/dist/profiles/conductor/patterns/combobox.json +13 -3
- package/dist/profiles/conductor/patterns/consequential-submission.json +13 -3
- package/dist/profiles/conductor/patterns/dialog.json +13 -3
- package/dist/profiles/conductor/patterns/disclosure.json +13 -3
- package/dist/profiles/conductor/patterns/dynamic-status.json +13 -3
- package/dist/profiles/conductor/patterns/field.json +23 -3
- package/dist/profiles/conductor/patterns/image.json +23 -3
- package/dist/profiles/conductor/patterns/listbox.json +13 -3
- package/dist/profiles/conductor/patterns/media-player.json +23 -3
- package/dist/profiles/conductor/patterns/menu-button.json +13 -3
- package/dist/profiles/conductor/patterns/pagination.json +13 -3
- package/dist/profiles/conductor/patterns/popover.json +13 -3
- package/dist/profiles/conductor/patterns/progress.json +13 -3
- package/dist/profiles/conductor/patterns/tabs.json +13 -3
- package/dist/profiles/conductor/patterns/tooltip.json +13 -3
- package/dist/profiles/conductor/patterns/validation.json +23 -3
- package/dist/profiles/conductor/semantics.json +48 -1
- package/dist/profiles/conductor/ui-design-brain-bindings.json +856 -0
- package/dist/projection-manifest.json +103 -78
- package/dist/requirements-to-implementation.md +2 -0
- package/lib/build-manifest.mjs +12 -6
- package/lib/build.mjs +19 -5
- package/lib/compile-applicability.mjs +131 -10
- package/lib/coverage.mjs +20 -0
- package/lib/index.mjs +1 -1
- package/lib/load.mjs +31 -1
- package/lib/provenance.mjs +49 -0
- package/lib/render.mjs +69 -29
- package/lib/sync.mjs +240 -26
- package/lib/validate.mjs +255 -24
- package/package.json +24 -11
- package/profiles/ai-orchestration/profile.json +1 -1
- package/profiles/conductor/profile.json +1 -1
- package/schemas/consumer-config.schema.json +1 -1
- package/schemas/contract.schema.json +1 -0
- package/schemas/manifest.schema.json +1 -1
- package/schemas/projection-manifest.schema.json +84 -1
- package/schemas/ui-design-brain-bindings.schema.json +86 -0
- package/src/applicability/facts.yml +29 -1
- package/src/applicability/matrix.yml +3 -2
- package/src/applicability/ui-design-brain-bindings.yml +210 -0
- package/src/contract.yml +1 -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/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/pagination.yml +1 -1
- package/src/patterns/navigation/tabs.yml +1 -1
- 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/combobox.yml +1 -1
- package/src/patterns/selection/listbox.yml +1 -1
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
<!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
|
|
2
|
-
|
|
2
|
+
<!-- package: @verndale/accessibility-standards@2.0.0; profile: conductor@2.0.0; schema: 2; source-digest: e4bf4272751c21e417ddd3e6c52308bf804fab097629ba843964532e7f97d9f0; profile-digest: 4840ac3a4910f8dc3a850df266a141e0e4df94ca3c8935ae4531c56f6be91e65 -->
|
|
3
|
+
# Accessibility foundations, semantics, and policies
|
|
4
|
+
|
|
5
|
+
## foundation.conformance-boundary
|
|
6
|
+
|
|
7
|
+
Automated checks provide evidence but do not establish conformance; every applicable outcome needs its declared proof routes.
|
|
8
|
+
|
|
9
|
+
## foundation.standards-hierarchy
|
|
10
|
+
|
|
11
|
+
Prefer native platform semantics; apply WCAG conformance, ARIA only where needed, APG interaction guidance, then non-conflicting product policy.
|
|
12
|
+
|
|
13
|
+
## foundation.wcag-2.2
|
|
14
|
+
|
|
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.
|
|
3
16
|
|
|
4
17
|
## semantics.accessible-name
|
|
5
18
|
|
|
@@ -150,3 +163,11 @@ Proof: unit, e2e.
|
|
|
150
163
|
Pointer targets meet 24 by 24 CSS pixels or a WCAG 2.5.8 exception; 44 by 44 is an enhanced recommendation.
|
|
151
164
|
|
|
152
165
|
Proof: e2e, human.
|
|
166
|
+
|
|
167
|
+
## policy.enhanced-quality
|
|
168
|
+
|
|
169
|
+
Enhanced guidance is advisory and cannot be represented as a conformance failure unless the consumer explicitly adopts it as product policy.
|
|
170
|
+
|
|
171
|
+
## policy.target-size
|
|
172
|
+
|
|
173
|
+
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.
|
|
@@ -1,179 +1,493 @@
|
|
|
1
1
|
<!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
|
|
2
|
+
<!-- package: @verndale/accessibility-standards@2.0.0; profile: conductor@2.0.0; schema: 2; source-digest: e4bf4272751c21e417ddd3e6c52308bf804fab097629ba843964532e7f97d9f0; profile-digest: 4840ac3a4910f8dc3a850df266a141e0e4df94ca3c8935ae4531c56f6be91e65 -->
|
|
2
3
|
# Accessibility quality contract
|
|
3
4
|
|
|
4
5
|
## pattern.accordion
|
|
5
6
|
|
|
6
7
|
Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.visible.
|
|
7
8
|
|
|
9
|
+
Scope: Grouped disclosure sections.
|
|
10
|
+
|
|
8
11
|
Behavior:
|
|
9
12
|
- Toggle only the controlled panel
|
|
10
13
|
- Preserve DOM and focus order
|
|
11
14
|
|
|
15
|
+
Product decisions: single_or_multiple_open.
|
|
16
|
+
|
|
17
|
+
Functional Spec bindings: behavior, states, keyboard.
|
|
18
|
+
|
|
19
|
+
Implementation outcomes: accordion-control, accordion-panel.
|
|
20
|
+
|
|
12
21
|
Evidence: unit, axe, e2e, human.
|
|
13
22
|
|
|
14
23
|
## pattern.alert
|
|
15
24
|
|
|
16
25
|
Requires: semantics.alert.
|
|
17
26
|
|
|
27
|
+
Scope: Urgent message.
|
|
28
|
+
|
|
18
29
|
Behavior:
|
|
19
30
|
- Announce once without moving focus
|
|
20
31
|
|
|
32
|
+
Product decisions: urgency.
|
|
33
|
+
|
|
34
|
+
Functional Spec bindings: messaging.
|
|
35
|
+
|
|
36
|
+
Implementation outcomes: alert-announcement.
|
|
37
|
+
|
|
21
38
|
Evidence: unit, human.
|
|
22
39
|
|
|
23
40
|
## pattern.carousel
|
|
24
41
|
|
|
25
42
|
Requires: semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control, semantics.live-status.
|
|
26
43
|
|
|
44
|
+
Scope: Rotating content set.
|
|
45
|
+
|
|
27
46
|
Behavior:
|
|
28
47
|
- Pause rotation on interaction
|
|
29
48
|
- Provide named controls and current position
|
|
30
49
|
|
|
50
|
+
Product decisions: auto_rotation, looping.
|
|
51
|
+
|
|
52
|
+
Functional Spec bindings: behavior, states, controls.
|
|
53
|
+
|
|
54
|
+
Implementation outcomes: carousel-controls, carousel-rotation.
|
|
55
|
+
|
|
31
56
|
Evidence: unit, axe, e2e, human.
|
|
32
57
|
|
|
33
58
|
## pattern.combobox
|
|
34
59
|
|
|
35
60
|
Requires: semantics.accessible-name, semantics.expanded-state, semantics.selected-state, semantics.keyboard, semantics.live-status.
|
|
36
61
|
|
|
62
|
+
Scope: Input with selectable popup.
|
|
63
|
+
|
|
37
64
|
Behavior:
|
|
38
65
|
- Keyboard controls popup, option, and input independently
|
|
39
66
|
|
|
67
|
+
Product decisions: editable, autocomplete, selection_commit.
|
|
68
|
+
|
|
69
|
+
Functional Spec bindings: behavior, states, keyboard.
|
|
70
|
+
|
|
71
|
+
Implementation outcomes: combobox-state-machine.
|
|
72
|
+
|
|
40
73
|
Evidence: unit, axe, e2e, human.
|
|
41
74
|
|
|
42
75
|
## pattern.consequential-submission
|
|
43
76
|
|
|
44
77
|
Requires: semantics.consequential-action, semantics.form-error, semantics.keyboard.
|
|
45
78
|
|
|
79
|
+
Scope: Legal, financial, destructive, or irreversible submission.
|
|
80
|
+
|
|
46
81
|
Behavior:
|
|
47
82
|
- Support review, correction, confirmation, or reversal
|
|
48
83
|
|
|
84
|
+
Product decisions: safeguard, reversal_window.
|
|
85
|
+
|
|
86
|
+
Functional Spec bindings: submission, confirmation.
|
|
87
|
+
|
|
88
|
+
Implementation outcomes: submission-safeguard.
|
|
89
|
+
|
|
49
90
|
Evidence: e2e, human.
|
|
50
91
|
|
|
51
92
|
## pattern.dialog
|
|
52
93
|
|
|
53
94
|
Requires: semantics.native-dialog, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.initial, semantics.focus.return.
|
|
54
95
|
|
|
96
|
+
Scope: Modal and non-modal dialogs.
|
|
97
|
+
|
|
55
98
|
Behavior:
|
|
56
99
|
- Manage initial, contained, and return focus
|
|
57
100
|
- Dismiss topmost dialog with Escape
|
|
58
101
|
|
|
102
|
+
Product decisions: modal, initial_focus, dismissal.
|
|
103
|
+
|
|
104
|
+
Functional Spec bindings: behavior, states, focus, keyboard.
|
|
105
|
+
|
|
106
|
+
Implementation outcomes: dialog-semantics, dialog-focus-lifecycle.
|
|
107
|
+
|
|
59
108
|
Evidence: unit, axe, e2e, human.
|
|
60
109
|
|
|
61
110
|
## pattern.disclosure
|
|
62
111
|
|
|
63
112
|
Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard.
|
|
64
113
|
|
|
114
|
+
Scope: Show and hide supplementary content.
|
|
115
|
+
|
|
65
116
|
Behavior:
|
|
66
117
|
- Control toggles one region
|
|
67
118
|
|
|
119
|
+
Product decisions: initial_state.
|
|
120
|
+
|
|
121
|
+
Functional Spec bindings: behavior, states.
|
|
122
|
+
|
|
123
|
+
Implementation outcomes: disclosure-control.
|
|
124
|
+
|
|
68
125
|
Evidence: unit, axe, e2e.
|
|
69
126
|
|
|
70
127
|
## pattern.dynamic-status
|
|
71
128
|
|
|
72
129
|
Requires: semantics.live-status.
|
|
73
130
|
|
|
131
|
+
Scope: Asynchronous status message.
|
|
132
|
+
|
|
74
133
|
Behavior:
|
|
75
134
|
- Announce meaningful changes once
|
|
76
135
|
|
|
136
|
+
Product decisions: announcement_copy.
|
|
137
|
+
|
|
138
|
+
Functional Spec bindings: messaging, states.
|
|
139
|
+
|
|
140
|
+
Implementation outcomes: status-live-region.
|
|
141
|
+
|
|
77
142
|
Evidence: unit, e2e, human.
|
|
78
143
|
|
|
79
144
|
## pattern.field
|
|
80
145
|
|
|
81
146
|
Requires: semantics.form-label, semantics.form-required, semantics.focus.visible.
|
|
82
147
|
|
|
148
|
+
Scope: Labeled form input.
|
|
149
|
+
|
|
83
150
|
Behavior:
|
|
84
151
|
- Expose label, instructions, and requiredness before interaction
|
|
85
152
|
|
|
153
|
+
Product decisions: required, instructions.
|
|
154
|
+
|
|
155
|
+
Functional Spec bindings: fields, requiredness.
|
|
156
|
+
|
|
157
|
+
Implementation outcomes: field-associations.
|
|
158
|
+
|
|
86
159
|
Evidence: unit, axe, human.
|
|
87
160
|
|
|
88
161
|
## pattern.image
|
|
89
162
|
|
|
90
163
|
Requires: semantics.non-text-alternative.
|
|
91
164
|
|
|
165
|
+
Scope: Informative, functional, complex, or decorative image.
|
|
166
|
+
|
|
92
167
|
Behavior:
|
|
93
168
|
- Alternative follows image purpose
|
|
94
169
|
|
|
170
|
+
Product decisions: purpose, long_description.
|
|
171
|
+
|
|
172
|
+
Functional Spec bindings: content.
|
|
173
|
+
|
|
174
|
+
Implementation outcomes: image-alternative.
|
|
175
|
+
|
|
95
176
|
Evidence: axe, human.
|
|
96
177
|
|
|
97
178
|
## pattern.listbox
|
|
98
179
|
|
|
99
180
|
Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
|
|
100
181
|
|
|
182
|
+
Scope: Single or multi-select option list.
|
|
183
|
+
|
|
101
184
|
Behavior:
|
|
102
185
|
- Arrow keys move active option
|
|
103
186
|
- Selection follows declared model
|
|
104
187
|
|
|
188
|
+
Product decisions: single_or_multi, selection_follows_focus.
|
|
189
|
+
|
|
190
|
+
Functional Spec bindings: behavior, states, keyboard.
|
|
191
|
+
|
|
192
|
+
Implementation outcomes: listbox-keyboard-model.
|
|
193
|
+
|
|
105
194
|
Evidence: unit, axe, e2e, human.
|
|
106
195
|
|
|
107
196
|
## pattern.media-player
|
|
108
197
|
|
|
109
198
|
Requires: semantics.media-alternatives, semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control.
|
|
110
199
|
|
|
200
|
+
Scope: Audio or video playback.
|
|
201
|
+
|
|
111
202
|
Behavior:
|
|
112
203
|
- Provide keyboard-operable named controls and required alternatives
|
|
113
204
|
|
|
205
|
+
Product decisions: captions, transcript, audio_description, autoplay.
|
|
206
|
+
|
|
207
|
+
Functional Spec bindings: content, controls, behavior.
|
|
208
|
+
|
|
209
|
+
Implementation outcomes: media-alternatives, media-controls.
|
|
210
|
+
|
|
114
211
|
Evidence: axe, e2e, human.
|
|
115
212
|
|
|
116
213
|
## pattern.menu-button
|
|
117
214
|
|
|
118
215
|
Requires: semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.initial, semantics.focus.return.
|
|
119
216
|
|
|
217
|
+
Scope: Button opening a command menu.
|
|
218
|
+
|
|
120
219
|
Behavior:
|
|
121
220
|
- Open and navigate menu by keyboard
|
|
122
221
|
|
|
222
|
+
Product decisions: focus_strategy.
|
|
223
|
+
|
|
224
|
+
Functional Spec bindings: behavior, keyboard, focus.
|
|
225
|
+
|
|
226
|
+
Implementation outcomes: menu-button-keyboard.
|
|
227
|
+
|
|
123
228
|
Evidence: unit, e2e, human.
|
|
124
229
|
|
|
125
230
|
## pattern.pagination
|
|
126
231
|
|
|
127
232
|
Requires: semantics.native-elements, semantics.accessible-name, semantics.landmarks, semantics.focus.visible.
|
|
128
233
|
|
|
234
|
+
Scope: Paged result navigation.
|
|
235
|
+
|
|
129
236
|
Behavior:
|
|
130
237
|
- Expose current page and named navigation
|
|
131
238
|
|
|
239
|
+
Product decisions: url_behavior.
|
|
240
|
+
|
|
241
|
+
Functional Spec bindings: states, navigation.
|
|
242
|
+
|
|
243
|
+
Implementation outcomes: pagination-current-page.
|
|
244
|
+
|
|
132
245
|
Evidence: unit, axe, human.
|
|
133
246
|
|
|
134
247
|
## pattern.popover
|
|
135
248
|
|
|
136
249
|
Requires: semantics.native-elements, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.return.
|
|
137
250
|
|
|
251
|
+
Scope: Non-modal transient surface.
|
|
252
|
+
|
|
138
253
|
Behavior:
|
|
139
254
|
- Dismiss without trapping focus
|
|
140
255
|
|
|
256
|
+
Product decisions: dismissal, focus_entry.
|
|
257
|
+
|
|
258
|
+
Functional Spec bindings: behavior, focus.
|
|
259
|
+
|
|
260
|
+
Implementation outcomes: popover-dismissal.
|
|
261
|
+
|
|
141
262
|
Evidence: unit, e2e, human.
|
|
142
263
|
|
|
143
264
|
## pattern.progress
|
|
144
265
|
|
|
145
266
|
Requires: semantics.name-role-value, semantics.live-status.
|
|
146
267
|
|
|
268
|
+
Scope: Determinate or indeterminate progress.
|
|
269
|
+
|
|
147
270
|
Behavior:
|
|
148
271
|
- Expose value and completion changes without announcement noise
|
|
149
272
|
|
|
273
|
+
Product decisions: determinate.
|
|
274
|
+
|
|
275
|
+
Functional Spec bindings: states, messaging.
|
|
276
|
+
|
|
277
|
+
Implementation outcomes: progress-value.
|
|
278
|
+
|
|
150
279
|
Evidence: unit, axe, human.
|
|
151
280
|
|
|
152
281
|
## pattern.tabs
|
|
153
282
|
|
|
154
283
|
Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
|
|
155
284
|
|
|
285
|
+
Scope: Tabbed interfaces.
|
|
286
|
+
|
|
156
287
|
Behavior:
|
|
157
288
|
- Arrow keys move between tabs
|
|
158
289
|
- Selection and activation follow the documented model
|
|
159
290
|
|
|
291
|
+
Product decisions: automatic_or_manual_activation.
|
|
292
|
+
|
|
293
|
+
Functional Spec bindings: behavior, states, keyboard.
|
|
294
|
+
|
|
295
|
+
Implementation outcomes: tabs-keyboard-model.
|
|
296
|
+
|
|
160
297
|
Evidence: unit, axe, e2e, human.
|
|
161
298
|
|
|
162
299
|
## pattern.tooltip
|
|
163
300
|
|
|
164
301
|
Requires: semantics.accessible-name, semantics.keyboard.escape.
|
|
165
302
|
|
|
303
|
+
Scope: Supplementary description.
|
|
304
|
+
|
|
166
305
|
Behavior:
|
|
167
306
|
- Available on hover and focus
|
|
168
307
|
- Never contains interactive content
|
|
169
308
|
|
|
309
|
+
Product decisions: delay.
|
|
310
|
+
|
|
311
|
+
Functional Spec bindings: behavior.
|
|
312
|
+
|
|
313
|
+
Implementation outcomes: tooltip-description.
|
|
314
|
+
|
|
170
315
|
Evidence: unit, e2e, human.
|
|
171
316
|
|
|
172
317
|
## pattern.validation
|
|
173
318
|
|
|
174
319
|
Requires: semantics.form-error, semantics.live-status, semantics.focus.initial.
|
|
175
320
|
|
|
321
|
+
Scope: Client or server validation.
|
|
322
|
+
|
|
176
323
|
Behavior:
|
|
177
324
|
- Identify, associate, summarize, and focus errors deterministically
|
|
178
325
|
|
|
326
|
+
Product decisions: validation_timing, error_summary.
|
|
327
|
+
|
|
328
|
+
Functional Spec bindings: validation, messaging, focus.
|
|
329
|
+
|
|
330
|
+
Implementation outcomes: validation-associations, error-summary.
|
|
331
|
+
|
|
179
332
|
Evidence: unit, axe, e2e, human.
|
|
333
|
+
|
|
334
|
+
## applicability.page-context
|
|
335
|
+
|
|
336
|
+
When: `{"equals":{"fact":"artifact.page_context","value":true}}`
|
|
337
|
+
|
|
338
|
+
Outcomes: semantics.headings, semantics.landmarks.
|
|
339
|
+
|
|
340
|
+
Evidence: axe, human.
|
|
341
|
+
|
|
342
|
+
## applicability.non-text-content
|
|
343
|
+
|
|
344
|
+
When: `{"equals":{"fact":"content.has_non_text","value":true}}`
|
|
345
|
+
|
|
346
|
+
Outcomes: pattern.image.
|
|
347
|
+
|
|
348
|
+
Evidence: axe, human.
|
|
349
|
+
|
|
350
|
+
## applicability.media
|
|
351
|
+
|
|
352
|
+
When: `{"equals":{"fact":"content.has_media","value":true}}`
|
|
353
|
+
|
|
354
|
+
Outcomes: pattern.media-player.
|
|
355
|
+
|
|
356
|
+
Evidence: e2e, human.
|
|
357
|
+
|
|
358
|
+
## applicability.forms
|
|
359
|
+
|
|
360
|
+
When: `{"equals":{"fact":"component.has_form_fields","value":true}}`
|
|
361
|
+
|
|
362
|
+
Outcomes: pattern.field.
|
|
363
|
+
|
|
364
|
+
Evidence: unit, axe.
|
|
365
|
+
|
|
366
|
+
## applicability.validation
|
|
367
|
+
|
|
368
|
+
When: `{"equals":{"fact":"component.has_validation","value":true}}`
|
|
369
|
+
|
|
370
|
+
Outcomes: pattern.validation.
|
|
371
|
+
|
|
372
|
+
Evidence: unit, axe, e2e, human.
|
|
373
|
+
|
|
374
|
+
## applicability.consequential-submission
|
|
375
|
+
|
|
376
|
+
When: `{"contains":{"fact":"component.submission_consequence","value":"consequential"}}`
|
|
377
|
+
|
|
378
|
+
Outcomes: pattern.consequential-submission.
|
|
379
|
+
|
|
380
|
+
Evidence: e2e, human.
|
|
381
|
+
|
|
382
|
+
## applicability.dynamic-status
|
|
383
|
+
|
|
384
|
+
When: `{"equals":{"fact":"component.has_dynamic_status","value":true}}`
|
|
385
|
+
|
|
386
|
+
Outcomes: pattern.dynamic-status.
|
|
387
|
+
|
|
388
|
+
Evidence: unit, e2e, human.
|
|
389
|
+
|
|
390
|
+
## applicability.overlays
|
|
391
|
+
|
|
392
|
+
When: `{"any":[{"contains":{"fact":"component.ui_pattern_ids","value":"modal"}},{"contains":{"fact":"component.ui_pattern_ids","value":"popover"}},{"contains":{"fact":"component.ui_pattern_ids","value":"tooltip"}}]}`
|
|
393
|
+
|
|
394
|
+
Outcomes: semantics.keyboard.escape, semantics.focus.return.
|
|
395
|
+
|
|
396
|
+
Evidence: e2e.
|
|
397
|
+
|
|
398
|
+
## applicability.motion-timing
|
|
399
|
+
|
|
400
|
+
When: `{"equals":{"fact":"interaction.has_motion_or_timing","value":true}}`
|
|
401
|
+
|
|
402
|
+
Outcomes: semantics.motion-control.
|
|
403
|
+
|
|
404
|
+
Evidence: e2e, human.
|
|
405
|
+
|
|
406
|
+
## applicability.complex-pointer
|
|
407
|
+
|
|
408
|
+
When: `{"equals":{"fact":"interaction.has_complex_pointer","value":true}}`
|
|
409
|
+
|
|
410
|
+
Outcomes: semantics.keyboard.
|
|
411
|
+
|
|
412
|
+
Evidence: e2e, human.
|
|
413
|
+
|
|
414
|
+
## applicability.character-shortcuts
|
|
415
|
+
|
|
416
|
+
When: `{"equals":{"fact":"interaction.has_character_shortcuts","value":true}}`
|
|
417
|
+
|
|
418
|
+
Outcomes: semantics.keyboard.
|
|
419
|
+
|
|
420
|
+
Evidence: unit, e2e.
|
|
421
|
+
|
|
422
|
+
## applicability.orientation-sensory
|
|
423
|
+
|
|
424
|
+
When: `{"equals":{"fact":"content.uses_orientation_or_sensory_cues","value":true}}`
|
|
425
|
+
|
|
426
|
+
Outcomes: semantics.name-role-value.
|
|
427
|
+
|
|
428
|
+
Evidence: human.
|
|
429
|
+
|
|
430
|
+
## applicability.target-size
|
|
431
|
+
|
|
432
|
+
When: `{"equals":{"fact":"interaction.has_pointer_targets","value":true}}`
|
|
433
|
+
|
|
434
|
+
Outcomes: semantics.target-size.
|
|
435
|
+
|
|
436
|
+
Evidence: e2e, human.
|
|
437
|
+
|
|
438
|
+
## applicability.focus-obstruction
|
|
439
|
+
|
|
440
|
+
When: `{"equals":{"fact":"interaction.can_obscure_focus","value":true}}`
|
|
441
|
+
|
|
442
|
+
Outcomes: semantics.focus.visible.
|
|
443
|
+
|
|
444
|
+
Evidence: e2e, human.
|
|
445
|
+
|
|
446
|
+
## applicability.authentication-captcha
|
|
447
|
+
|
|
448
|
+
When: `{"equals":{"fact":"flow.has_authentication","value":true}}`
|
|
449
|
+
|
|
450
|
+
Outcomes: semantics.form-label, semantics.form-error.
|
|
451
|
+
|
|
452
|
+
Evidence: axe, e2e, human.
|
|
453
|
+
|
|
454
|
+
## applicability.redundant-entry
|
|
455
|
+
|
|
456
|
+
When: `{"equals":{"fact":"flow.repeats_entry","value":true}}`
|
|
457
|
+
|
|
458
|
+
Outcomes: semantics.form-label.
|
|
459
|
+
|
|
460
|
+
Evidence: e2e, human.
|
|
461
|
+
|
|
462
|
+
## applicability.consistent-help
|
|
463
|
+
|
|
464
|
+
When: `{"equals":{"fact":"artifact.has_help","value":true}}`
|
|
465
|
+
|
|
466
|
+
Outcomes: semantics.landmarks.
|
|
467
|
+
|
|
468
|
+
Evidence: human.
|
|
469
|
+
|
|
470
|
+
## applicability.locale-bidi
|
|
471
|
+
|
|
472
|
+
When: `{"equals":{"fact":"content.has_locale_or_bidi","value":true}}`
|
|
473
|
+
|
|
474
|
+
Outcomes: semantics.native-elements.
|
|
475
|
+
|
|
476
|
+
Evidence: unit, human.
|
|
477
|
+
|
|
478
|
+
## applicability.data-table-grid
|
|
479
|
+
|
|
480
|
+
When: `{"equals":{"fact":"component.has_data_table_or_grid","value":true}}`
|
|
481
|
+
|
|
482
|
+
Outcomes: semantics.data-table.
|
|
483
|
+
|
|
484
|
+
Evidence: axe, e2e, human.
|
|
485
|
+
|
|
486
|
+
## Evidence routing
|
|
487
|
+
|
|
488
|
+
Tool availability changes the evidence route, never requirement applicability. A missing required capability is a blocker.
|
|
489
|
+
|
|
490
|
+
- unit: semantic state and deterministic resolver behavior; capability: unit
|
|
491
|
+
- axe: automated rule evidence; capability: axe
|
|
492
|
+
- e2e: keyboard, focus, and integrated behavior; capability: e2e
|
|
493
|
+
- human: judgment, assistive technology, content, and visual evidence; capability: human
|