@verndale/accessibility-standards 1.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/OPERATING.md +3 -1
  2. package/README.md +4 -0
  3. package/bin/accessibility-standards.mjs +1 -1
  4. package/dist/manifest.json +159 -101
  5. package/dist/profiles/ai-orchestration/coverage-manifest.json +724 -68
  6. package/dist/profiles/ai-orchestration/implementation/accessibility.md +825 -10
  7. package/dist/profiles/ai-orchestration/pattern-contracts.json +1015 -343
  8. package/dist/profiles/ai-orchestration/patterns/accordion.md +14 -0
  9. package/dist/profiles/ai-orchestration/patterns/alert.md +14 -0
  10. package/dist/profiles/ai-orchestration/patterns/carousel.md +14 -0
  11. package/dist/profiles/ai-orchestration/patterns/checkbox.md +27 -0
  12. package/dist/profiles/ai-orchestration/patterns/combobox.md +14 -0
  13. package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +15 -1
  14. package/dist/profiles/ai-orchestration/patterns/dialog.md +14 -0
  15. package/dist/profiles/ai-orchestration/patterns/disclosure.md +14 -0
  16. package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +14 -0
  17. package/dist/profiles/ai-orchestration/patterns/field.md +15 -0
  18. package/dist/profiles/ai-orchestration/patterns/image.md +14 -0
  19. package/dist/profiles/ai-orchestration/patterns/listbox.md +14 -0
  20. package/dist/profiles/ai-orchestration/patterns/media-player.md +17 -0
  21. package/dist/profiles/ai-orchestration/patterns/menu-button.md +14 -0
  22. package/dist/profiles/ai-orchestration/patterns/menu.md +30 -0
  23. package/dist/profiles/ai-orchestration/patterns/pagination.md +14 -0
  24. package/dist/profiles/ai-orchestration/patterns/popover.md +15 -0
  25. package/dist/profiles/ai-orchestration/patterns/progress.md +15 -0
  26. package/dist/profiles/ai-orchestration/patterns/radio-group.md +27 -0
  27. package/dist/profiles/ai-orchestration/patterns/slider.md +31 -0
  28. package/dist/profiles/ai-orchestration/patterns/spinbutton.md +28 -0
  29. package/dist/profiles/ai-orchestration/patterns/tabs.md +14 -0
  30. package/dist/profiles/ai-orchestration/patterns/tooltip.md +14 -0
  31. package/dist/profiles/ai-orchestration/patterns/tree-view.md +31 -0
  32. package/dist/profiles/ai-orchestration/patterns/validation.md +15 -0
  33. package/dist/profiles/ai-orchestration/review/accessibility.md +21 -6
  34. package/dist/profiles/ai-orchestration/semantics/accessible-authentication.md +13 -0
  35. package/dist/profiles/ai-orchestration/semantics/accessible-name.md +8 -1
  36. package/dist/profiles/ai-orchestration/semantics/alert.md +7 -0
  37. package/dist/profiles/ai-orchestration/semantics/consequential-action.md +6 -1
  38. package/dist/profiles/ai-orchestration/semantics/consistent-help.md +13 -0
  39. package/dist/profiles/ai-orchestration/semantics/data-table.md +7 -1
  40. package/dist/profiles/ai-orchestration/semantics/dragging-alternative.md +13 -0
  41. package/dist/profiles/ai-orchestration/semantics/expanded-state.md +6 -0
  42. package/dist/profiles/ai-orchestration/semantics/focus.initial.md +4 -0
  43. package/dist/profiles/ai-orchestration/semantics/focus.return.md +4 -0
  44. package/dist/profiles/ai-orchestration/semantics/focus.visible.md +8 -1
  45. package/dist/profiles/ai-orchestration/semantics/form-error.md +8 -1
  46. package/dist/profiles/ai-orchestration/semantics/form-label.md +7 -0
  47. package/dist/profiles/ai-orchestration/semantics/form-required.md +7 -0
  48. package/dist/profiles/ai-orchestration/semantics/headings.md +7 -0
  49. package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +4 -0
  50. package/dist/profiles/ai-orchestration/semantics/keyboard.md +7 -0
  51. package/dist/profiles/ai-orchestration/semantics/landmarks.md +6 -0
  52. package/dist/profiles/ai-orchestration/semantics/live-status.md +7 -1
  53. package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +11 -0
  54. package/dist/profiles/ai-orchestration/semantics/motion-control.md +8 -1
  55. package/dist/profiles/ai-orchestration/semantics/name-role-value.md +6 -1
  56. package/dist/profiles/ai-orchestration/semantics/native-dialog.md +7 -0
  57. package/dist/profiles/ai-orchestration/semantics/native-elements.md +5 -0
  58. package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +5 -0
  59. package/dist/profiles/ai-orchestration/semantics/redundant-entry.md +13 -0
  60. package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +6 -0
  61. package/dist/profiles/ai-orchestration/semantics/selected-state.md +6 -0
  62. package/dist/profiles/ai-orchestration/semantics/target-size.md +6 -1
  63. package/dist/profiles/ai-orchestration/semantics.json +843 -100
  64. package/dist/profiles/ai-orchestration/testing/accessibility.md +33 -3
  65. package/dist/profiles/ai-orchestration/ui-design-brain-bindings.json +836 -0
  66. package/dist/profiles/conductor/a11y-semantics.md +270 -10
  67. package/dist/profiles/conductor/accessibility-quality.md +557 -1
  68. package/dist/profiles/conductor/applicability-matrix.json +270 -230
  69. package/dist/profiles/conductor/coverage-manifest.json +724 -68
  70. package/dist/profiles/conductor/pattern-contracts.json +1015 -343
  71. package/dist/profiles/conductor/patterns/accordion.json +42 -24
  72. package/dist/profiles/conductor/patterns/alert.json +36 -18
  73. package/dist/profiles/conductor/patterns/carousel.json +43 -25
  74. package/dist/profiles/conductor/patterns/checkbox.json +67 -0
  75. package/dist/profiles/conductor/patterns/combobox.json +44 -26
  76. package/dist/profiles/conductor/patterns/consequential-submission.json +41 -22
  77. package/dist/profiles/conductor/patterns/dialog.json +44 -26
  78. package/dist/profiles/conductor/patterns/disclosure.json +40 -22
  79. package/dist/profiles/conductor/patterns/dynamic-status.json +38 -19
  80. package/dist/profiles/conductor/patterns/field.json +58 -22
  81. package/dist/profiles/conductor/patterns/image.json +48 -19
  82. package/dist/profiles/conductor/patterns/listbox.json +42 -24
  83. package/dist/profiles/conductor/patterns/media-player.json +76 -26
  84. package/dist/profiles/conductor/patterns/menu-button.json +41 -23
  85. package/dist/profiles/conductor/patterns/menu.json +78 -0
  86. package/dist/profiles/conductor/patterns/pagination.json +41 -22
  87. package/dist/profiles/conductor/patterns/popover.json +49 -23
  88. package/dist/profiles/conductor/patterns/progress.json +45 -20
  89. package/dist/profiles/conductor/patterns/radio-group.json +69 -0
  90. package/dist/profiles/conductor/patterns/slider.json +84 -0
  91. package/dist/profiles/conductor/patterns/spinbutton.json +74 -0
  92. package/dist/profiles/conductor/patterns/tabs.json +41 -23
  93. package/dist/profiles/conductor/patterns/tooltip.json +38 -20
  94. package/dist/profiles/conductor/patterns/tree-view.json +77 -0
  95. package/dist/profiles/conductor/patterns/validation.json +59 -23
  96. package/dist/profiles/conductor/semantics.json +843 -100
  97. package/dist/profiles/conductor/ui-design-brain-bindings.json +836 -0
  98. package/dist/projection-manifest.json +123 -82
  99. package/dist/requirements-to-implementation.md +8 -0
  100. package/lib/build-manifest.mjs +12 -6
  101. package/lib/build.mjs +21 -7
  102. package/lib/compile-applicability.mjs +131 -10
  103. package/lib/coverage.mjs +20 -0
  104. package/lib/digest.mjs +8 -0
  105. package/lib/index.mjs +1 -1
  106. package/lib/load.mjs +44 -1
  107. package/lib/provenance.mjs +51 -0
  108. package/lib/render.mjs +115 -31
  109. package/lib/sync.mjs +242 -28
  110. package/lib/validate.mjs +557 -24
  111. package/package.json +27 -10
  112. package/profiles/ai-orchestration/profile.json +1 -1
  113. package/profiles/ai-orchestration/templates/patterns/README.md +1 -1
  114. package/profiles/ai-orchestration/templates/review/README.md +1 -1
  115. package/profiles/ai-orchestration/templates/semantics/README.md +1 -1
  116. package/profiles/ai-orchestration/templates/testing/README.md +1 -1
  117. package/profiles/conductor/profile.json +1 -1
  118. package/profiles/conductor/templates/evidence/README.md +1 -1
  119. package/profiles/conductor/templates/patterns/README.md +1 -1
  120. package/profiles/conductor/templates/semantics/README.md +1 -1
  121. package/schemas/consumer-config.schema.json +1 -1
  122. package/schemas/contract.schema.json +1 -0
  123. package/schemas/manifest.schema.json +1 -1
  124. package/schemas/pattern.schema.json +98 -1
  125. package/schemas/profile.schema.json +1 -1
  126. package/schemas/projection-manifest.schema.json +84 -1
  127. package/schemas/semantic.schema.json +26 -1
  128. package/schemas/standards-reference.schema.json +105 -0
  129. package/schemas/ui-design-brain-bindings.schema.json +86 -0
  130. package/schemas/wcag-coverage.schema.json +93 -0
  131. package/src/applicability/facts.yml +27 -1
  132. package/src/applicability/matrix.yml +8 -9
  133. package/src/applicability/ui-design-brain-bindings.yml +196 -0
  134. package/src/contract.yml +1 -0
  135. package/src/coverage/wcag-2.2.yml +68 -0
  136. package/src/patterns/disclosure/accordion.yml +1 -1
  137. package/src/patterns/disclosure/disclosure.yml +1 -1
  138. package/src/patterns/feedback/alert.yml +1 -1
  139. package/src/patterns/feedback/dynamic-status.yml +1 -1
  140. package/src/patterns/feedback/progress.yml +1 -1
  141. package/src/patterns/forms/consequential-submission.yml +1 -1
  142. package/src/patterns/forms/field.yml +1 -1
  143. package/src/patterns/forms/spinbutton.yml +1 -0
  144. package/src/patterns/forms/validation.yml +1 -1
  145. package/src/patterns/media/carousel.yml +1 -1
  146. package/src/patterns/media/image.yml +1 -1
  147. package/src/patterns/media/media-player.yml +1 -1
  148. package/src/patterns/navigation/menu-button.yml +1 -1
  149. package/src/patterns/navigation/menu.yml +1 -0
  150. package/src/patterns/navigation/pagination.yml +1 -1
  151. package/src/patterns/navigation/tabs.yml +1 -1
  152. package/src/patterns/navigation/tree-view.yml +1 -0
  153. package/src/patterns/overlays/dialog.yml +1 -1
  154. package/src/patterns/overlays/popover.yml +1 -1
  155. package/src/patterns/overlays/tooltip.yml +1 -1
  156. package/src/patterns/selection/checkbox.yml +1 -0
  157. package/src/patterns/selection/combobox.yml +1 -1
  158. package/src/patterns/selection/listbox.yml +1 -1
  159. package/src/patterns/selection/radio-group.yml +1 -0
  160. package/src/patterns/selection/slider.yml +1 -0
  161. package/src/semantics/accessible-names.yml +1 -1
  162. package/src/semantics/forms.yml +1 -1
  163. package/src/semantics/headings-landmarks.yml +1 -1
  164. package/src/semantics/keyboard-focus.yml +1 -1
  165. package/src/semantics/live-regions.yml +1 -1
  166. package/src/semantics/media.yml +1 -1
  167. package/src/semantics/native-elements.yml +1 -1
  168. package/src/semantics/roles-states-properties.yml +1 -1
  169. package/src/semantics/tables.yml +1 -1
  170. package/src/semantics/wcag-2.2.yml +1 -0
  171. package/src/sources.yml +1 -1
@@ -1,12 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.accordion
3
4
 
4
5
  ## pattern.accordion
5
6
 
7
+ Standards:
8
+ - [aria-apg accordion](<https://www.w3.org/WAI/ARIA/apg/patterns/accordion/>) — informative
9
+
6
10
  Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.visible.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.accordion"}}`
13
+
14
+ Scope: Grouped disclosure sections.
15
+
8
16
  Behavior:
9
17
  - Toggle only the controlled panel
10
18
  - Preserve DOM and focus order
11
19
 
20
+ Product decisions: single_or_multiple_open.
21
+
22
+ Functional Spec bindings: behavior, states, keyboard.
23
+
24
+ Implementation outcomes: accordion-control, accordion-panel.
25
+
12
26
  Evidence: unit, axe, e2e, human.
@@ -1,11 +1,25 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.alert
3
4
 
4
5
  ## pattern.alert
5
6
 
7
+ Standards:
8
+ - [aria-apg alert](<https://www.w3.org/WAI/ARIA/apg/patterns/alert/>) — informative
9
+
6
10
  Requires: semantics.alert.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.alert"}}`
13
+
14
+ Scope: Urgent message.
15
+
8
16
  Behavior:
9
17
  - Announce once without moving focus
10
18
 
19
+ Product decisions: urgency.
20
+
21
+ Functional Spec bindings: messaging.
22
+
23
+ Implementation outcomes: alert-announcement.
24
+
11
25
  Evidence: unit, human.
@@ -1,12 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.carousel
3
4
 
4
5
  ## pattern.carousel
5
6
 
7
+ Standards:
8
+ - [aria-apg carousel](<https://www.w3.org/WAI/ARIA/apg/patterns/carousel/>) — informative
9
+
6
10
  Requires: semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control, semantics.live-status.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.carousel"}}`
13
+
14
+ Scope: Rotating content set.
15
+
8
16
  Behavior:
9
17
  - Pause rotation on interaction
10
18
  - Provide named controls and current position
11
19
 
20
+ Product decisions: auto_rotation, looping.
21
+
22
+ Functional Spec bindings: behavior, states, controls.
23
+
24
+ Implementation outcomes: carousel-controls, carousel-rotation.
25
+
12
26
  Evidence: unit, axe, e2e, human.
@@ -0,0 +1,27 @@
1
+ <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
3
+ # pattern.checkbox
4
+
5
+ ## pattern.checkbox
6
+
7
+ Standards:
8
+ - [aria-apg checkbox](<https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/>) — informative
9
+
10
+ Requires: semantics.accessible-name, semantics.focus.visible, semantics.form-label, semantics.keyboard, semantics.name-role-value, semantics.native-elements, semantics.roles-states-properties.
11
+
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.checkbox"}}`
13
+
14
+ Scope: Standalone, grouped, dual-state, or tri-state checkboxes.
15
+
16
+ Behavior:
17
+ - Use a native checkbox when it provides the required behavior; otherwise expose checkbox semantics and synchronize checked, unchecked, or mixed state
18
+ - Space toggles the focused checkbox without changing unrelated controls
19
+ - Associate logical groups and any relevant descriptions with programmatic group labels
20
+
21
+ Product decisions: dual_or_tri_state, group_labeling, mixed_state_cycle.
22
+
23
+ Functional Spec bindings: fields, states, keyboard.
24
+
25
+ Implementation outcomes: checkbox-group-semantics, checkbox-state-machine.
26
+
27
+ Evidence: unit, axe, e2e, human.
@@ -1,11 +1,25 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.combobox
3
4
 
4
5
  ## pattern.combobox
5
6
 
7
+ Standards:
8
+ - [aria-apg combobox](<https://www.w3.org/WAI/ARIA/apg/patterns/combobox/>) — informative
9
+
6
10
  Requires: semantics.accessible-name, semantics.expanded-state, semantics.selected-state, semantics.keyboard, semantics.live-status.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.combobox"}}`
13
+
14
+ Scope: Input with selectable popup.
15
+
8
16
  Behavior:
9
17
  - Keyboard controls popup, option, and input independently
10
18
 
19
+ Product decisions: editable, autocomplete, selection_commit.
20
+
21
+ Functional Spec bindings: behavior, states, keyboard.
22
+
23
+ Implementation outcomes: combobox-state-machine.
24
+
11
25
  Evidence: unit, axe, e2e, human.
@@ -1,11 +1,25 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.consequential-submission
3
4
 
4
5
  ## pattern.consequential-submission
5
6
 
7
+ Standards:
8
+ - [wcag-2.2 3.3.4](<https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data>) (Level AA) — normative
9
+
6
10
  Requires: semantics.consequential-action, semantics.form-error, semantics.keyboard.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.submission_consequence","value":"consequential"}}`
13
+
14
+ Scope: Legal commitments, financial transactions, stored user-controllable data changes, or user test-response submissions.
15
+
8
16
  Behavior:
9
- - Support review, correction, confirmation, or reversal
17
+ - Provide at least one declared safeguard: make the submission reversible; check user-entered data for errors and let the user correct them; or let the user review, confirm, and correct information before finalizing
18
+
19
+ Product decisions: safeguard, reversal_window.
20
+
21
+ Functional Spec bindings: submission, confirmation.
22
+
23
+ Implementation outcomes: submission-safeguard.
10
24
 
11
25
  Evidence: e2e, human.
@@ -1,12 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.dialog
3
4
 
4
5
  ## pattern.dialog
5
6
 
7
+ Standards:
8
+ - [aria-apg dialog-modal](<https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/>) — informative
9
+
6
10
  Requires: semantics.native-dialog, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.initial, semantics.focus.return.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.dialog"}}`
13
+
14
+ Scope: Modal and non-modal dialogs.
15
+
8
16
  Behavior:
9
17
  - Manage initial, contained, and return focus
10
18
  - Dismiss topmost dialog with Escape
11
19
 
20
+ Product decisions: modal, initial_focus, dismissal.
21
+
22
+ Functional Spec bindings: behavior, states, focus, keyboard.
23
+
24
+ Implementation outcomes: dialog-semantics, dialog-focus-lifecycle.
25
+
12
26
  Evidence: unit, axe, e2e, human.
@@ -1,11 +1,25 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.disclosure
3
4
 
4
5
  ## pattern.disclosure
5
6
 
7
+ Standards:
8
+ - [aria-apg disclosure](<https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/>) — informative
9
+
6
10
  Requires: semantics.native-elements, semantics.accessible-name, semantics.expanded-state, semantics.keyboard.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.disclosure"}}`
13
+
14
+ Scope: Show and hide supplementary content.
15
+
8
16
  Behavior:
9
17
  - Control toggles one region
10
18
 
19
+ Product decisions: initial_state.
20
+
21
+ Functional Spec bindings: behavior, states.
22
+
23
+ Implementation outcomes: disclosure-control.
24
+
11
25
  Evidence: unit, axe, e2e.
@@ -1,11 +1,25 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.dynamic-status
3
4
 
4
5
  ## pattern.dynamic-status
5
6
 
7
+ Standards:
8
+ - [wcag-2.2 4.1.3](<https://www.w3.org/TR/WCAG22/#status-messages>) (Level AA) — normative
9
+
6
10
  Requires: semantics.live-status.
7
11
 
12
+ Activation: `{"equals":{"fact":"component.has_dynamic_status","value":true}}`
13
+
14
+ Scope: Asynchronous status message.
15
+
8
16
  Behavior:
9
17
  - Announce meaningful changes once
10
18
 
19
+ Product decisions: announcement_copy.
20
+
21
+ Functional Spec bindings: messaging, states.
22
+
23
+ Implementation outcomes: status-live-region.
24
+
11
25
  Evidence: unit, e2e, human.
@@ -1,11 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.field
3
4
 
4
5
  ## pattern.field
5
6
 
7
+ Standards:
8
+ - [wcag-2.2 3.3.2](<https://www.w3.org/TR/WCAG22/#labels-or-instructions>) (Level A) — normative
9
+ - [wcag-2.2 4.1.2](<https://www.w3.org/TR/WCAG22/#name-role-value>) (Level A) — normative
10
+
6
11
  Requires: semantics.form-label, semantics.form-required, semantics.focus.visible.
7
12
 
13
+ Activation: `{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.field"}},{"equals":{"fact":"component.has_form_fields","value":true}}]}`
14
+
15
+ Scope: Labeled form input.
16
+
8
17
  Behavior:
9
18
  - Expose label, instructions, and requiredness before interaction
10
19
 
20
+ Product decisions: required, instructions.
21
+
22
+ Functional Spec bindings: fields, requiredness.
23
+
24
+ Implementation outcomes: field-associations.
25
+
11
26
  Evidence: unit, axe, human.
@@ -1,11 +1,25 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.image
3
4
 
4
5
  ## pattern.image
5
6
 
7
+ Standards:
8
+ - [wcag-2.2 1.1.1](<https://www.w3.org/TR/WCAG22/#non-text-content>) (Level A) — normative
9
+
6
10
  Requires: semantics.non-text-alternative.
7
11
 
12
+ Activation: `{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.image"}},{"equals":{"fact":"content.has_non_text","value":true}}]}`
13
+
14
+ Scope: Informative, functional, complex, or decorative image.
15
+
8
16
  Behavior:
9
17
  - Alternative follows image purpose
10
18
 
19
+ Product decisions: purpose, long_description.
20
+
21
+ Functional Spec bindings: content.
22
+
23
+ Implementation outcomes: image-alternative.
24
+
11
25
  Evidence: axe, human.
@@ -1,12 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.listbox
3
4
 
4
5
  ## pattern.listbox
5
6
 
7
+ Standards:
8
+ - [aria-apg listbox](<https://www.w3.org/WAI/ARIA/apg/patterns/listbox/>) — informative
9
+
6
10
  Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.listbox"}}`
13
+
14
+ Scope: Single or multi-select option list.
15
+
8
16
  Behavior:
9
17
  - Arrow keys move active option
10
18
  - Selection follows declared model
11
19
 
20
+ Product decisions: single_or_multi, selection_follows_focus.
21
+
22
+ Functional Spec bindings: behavior, states, keyboard.
23
+
24
+ Implementation outcomes: listbox-keyboard-model.
25
+
12
26
  Evidence: unit, axe, e2e, human.
@@ -1,11 +1,28 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.media-player
3
4
 
4
5
  ## pattern.media-player
5
6
 
7
+ Standards:
8
+ - [wcag-2.2 1.2.1](<https://www.w3.org/TR/WCAG22/#audio-only-and-video-only-prerecorded>) (Level A) — normative
9
+ - [wcag-2.2 1.2.2](<https://www.w3.org/TR/WCAG22/#captions-prerecorded>) (Level A) — normative
10
+ - [wcag-2.2 1.2.3](<https://www.w3.org/TR/WCAG22/#audio-description-or-media-alternative-prerecorded>) (Level A) — normative
11
+ - [wcag-2.2 1.2.5](<https://www.w3.org/TR/WCAG22/#audio-description-prerecorded>) (Level AA) — normative
12
+
6
13
  Requires: semantics.media-alternatives, semantics.accessible-name, semantics.keyboard, semantics.focus.visible, semantics.motion-control.
7
14
 
15
+ Activation: `{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.media-player"}},{"equals":{"fact":"content.has_media","value":true}}]}`
16
+
17
+ Scope: Audio or video playback.
18
+
8
19
  Behavior:
9
20
  - Provide keyboard-operable named controls and required alternatives
10
21
 
22
+ Product decisions: captions, transcript, audio_description, autoplay.
23
+
24
+ Functional Spec bindings: content, controls, behavior.
25
+
26
+ Implementation outcomes: media-alternatives, media-controls.
27
+
11
28
  Evidence: axe, e2e, human.
@@ -1,11 +1,25 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.menu-button
3
4
 
4
5
  ## pattern.menu-button
5
6
 
7
+ Standards:
8
+ - [aria-apg menu-button](<https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/>) — informative
9
+
6
10
  Requires: semantics.accessible-name, semantics.expanded-state, semantics.keyboard, semantics.focus.initial, semantics.focus.return.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.menu-button"}}`
13
+
14
+ Scope: Button opening a command menu.
15
+
8
16
  Behavior:
9
17
  - Open and navigate menu by keyboard
10
18
 
19
+ Product decisions: focus_strategy.
20
+
21
+ Functional Spec bindings: behavior, keyboard, focus.
22
+
23
+ Implementation outcomes: menu-button-keyboard.
24
+
11
25
  Evidence: unit, e2e, human.
@@ -0,0 +1,30 @@
1
+ <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
3
+ # pattern.menu
4
+
5
+ ## pattern.menu
6
+
7
+ Standards:
8
+ - [aria-apg menubar](<https://www.w3.org/WAI/ARIA/apg/patterns/menubar/>) — informative
9
+
10
+ Requires: semantics.accessible-name, semantics.expanded-state, semantics.focus.initial, semantics.focus.return, semantics.focus.visible, semantics.keyboard, semantics.keyboard.escape, semantics.roles-states-properties.
11
+
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.menu"}}`
13
+
14
+ Scope: Command menus, submenus, and persistent menubars.
15
+
16
+ Behavior:
17
+ - Expose menu or menubar containers with menuitem, menuitemcheckbox, or menuitemradio children; synchronize submenu expanded state, checkable-item checked state, orientation, and disabled state
18
+ - When a popup menu opens, move focus to its first item; when a persistent menubar receives focus through Tab or Shift+Tab, restore its declared last-focused item or use its first enabled item; Tab and Shift+Tab do not move among items and, from an item, exit the composite and close all open menus
19
+ - For the default horizontal menubar with vertical popup menus, Right and Left move among menubar items, Down opens a submenu and focuses its first item, Up may open it and focus its last item, Down and Up move among popup items, Right opens a child submenu, and Left closes a child submenu and returns focus to its parent item; reverse the declared axes for alternate orientations
20
+ - Enter opens an item's submenu and focuses its first item, or otherwise activates the item and closes the menu; declare whether Space mirrors Enter on plain items, toggles menuitemcheckbox without closing, and checks a menuitemradio while unchecking its group peers without closing
21
+ - Keep disabled menu items focusable but non-activatable, keep separators non-focusable, and apply Home, End, optional type-ahead, and the declared wrapping policy within the current menu or menubar
22
+ - Escape closes the menu containing focus and restores focus to its parent item, menu button, or invoking context
23
+
24
+ Product decisions: entry_focus, focus_strategy, menu_or_menubar, orientation, space_behavior, submenu_model, typeahead, wrap_navigation.
25
+
26
+ Functional Spec bindings: behavior, states, keyboard, focus.
27
+
28
+ Implementation outcomes: menu-composite-focus, menu-keyboard-model, menu-state-model.
29
+
30
+ Evidence: unit, axe, e2e, human.
@@ -1,11 +1,25 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.pagination
3
4
 
4
5
  ## pattern.pagination
5
6
 
7
+ Standards:
8
+ - [wcag-2.2 2.4.4](<https://www.w3.org/TR/WCAG22/#link-purpose-in-context>) (Level A) — normative
9
+
6
10
  Requires: semantics.native-elements, semantics.accessible-name, semantics.landmarks, semantics.focus.visible.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.pagination"}}`
13
+
14
+ Scope: Paged result navigation.
15
+
8
16
  Behavior:
9
17
  - Expose current page and named navigation
10
18
 
19
+ Product decisions: url_behavior.
20
+
21
+ Functional Spec bindings: states, navigation.
22
+
23
+ Implementation outcomes: pagination-current-page.
24
+
11
25
  Evidence: unit, axe, human.
@@ -1,11 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.popover
3
4
 
4
5
  ## pattern.popover
5
6
 
7
+ Standards:
8
+ - [wcag-2.2 2.1.1](<https://www.w3.org/TR/WCAG22/#keyboard>) (Level A) — normative
9
+ - [wcag-2.2 2.4.3](<https://www.w3.org/TR/WCAG22/#focus-order>) (Level A) — normative
10
+
6
11
  Requires: semantics.native-elements, semantics.accessible-name, semantics.keyboard.escape, semantics.focus.return.
7
12
 
13
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.popover"}}`
14
+
15
+ Scope: Non-modal transient surface.
16
+
8
17
  Behavior:
9
18
  - Dismiss without trapping focus
10
19
 
20
+ Product decisions: dismissal, focus_entry.
21
+
22
+ Functional Spec bindings: behavior, focus.
23
+
24
+ Implementation outcomes: popover-dismissal.
25
+
11
26
  Evidence: unit, e2e, human.
@@ -1,11 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.progress
3
4
 
4
5
  ## pattern.progress
5
6
 
7
+ Standards:
8
+ - [wai-aria-1.2 progressbar](<https://www.w3.org/TR/wai-aria-1.2/#progressbar>) — normative
9
+ - [wcag-2.2 4.1.2](<https://www.w3.org/TR/WCAG22/#name-role-value>) (Level A) — normative
10
+
6
11
  Requires: semantics.name-role-value, semantics.live-status.
7
12
 
13
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.progress"}}`
14
+
15
+ Scope: Determinate or indeterminate progress.
16
+
8
17
  Behavior:
9
18
  - Expose value and completion changes without announcement noise
10
19
 
20
+ Product decisions: determinate.
21
+
22
+ Functional Spec bindings: states, messaging.
23
+
24
+ Implementation outcomes: progress-value.
25
+
11
26
  Evidence: unit, axe, human.
@@ -0,0 +1,27 @@
1
+ <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
3
+ # pattern.radio-group
4
+
5
+ ## pattern.radio-group
6
+
7
+ Standards:
8
+ - [aria-apg radio](<https://www.w3.org/WAI/ARIA/apg/patterns/radio/>) — informative
9
+
10
+ Requires: semantics.accessible-name, semantics.focus.visible, semantics.form-label, semantics.keyboard, semantics.native-elements, semantics.roles-states-properties.
11
+
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.radio-group"}}`
13
+
14
+ Scope: Mutually exclusive choices presented as a radio group.
15
+
16
+ Behavior:
17
+ - Use native grouped radio inputs when they provide the required behavior; otherwise expose a named radiogroup containing named radio controls with exactly one checked item when selected
18
+ - Use one tab stop for group entry, focusing the checked radio or the first radio when none is checked
19
+ - Outside a toolbar, Space selects the focused radio and arrow keys move focus and selection with wrapping; inside a toolbar, toolbar navigation moves focus without changing selection, while Space or optionally Enter checks the focused radio
20
+
21
+ Product decisions: initial_selection, native_or_custom, toolbar_context, wrap_navigation.
22
+
23
+ Functional Spec bindings: fields, states, keyboard, focus.
24
+
25
+ Implementation outcomes: radio-group-keyboard-model, radio-group-labeling, radio-group-selection-model.
26
+
27
+ Evidence: unit, axe, e2e, human.
@@ -0,0 +1,31 @@
1
+ <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
3
+ # pattern.slider
4
+
5
+ ## pattern.slider
6
+
7
+ Standards:
8
+ - [aria-apg slider](<https://www.w3.org/WAI/ARIA/apg/patterns/slider/>) — informative
9
+ - [aria-apg slider-multithumb](<https://www.w3.org/WAI/ARIA/apg/patterns/slider-multithumb/>) — informative
10
+
11
+ Requires: semantics.accessible-name, semantics.dragging-alternative, semantics.focus.visible, semantics.keyboard, semantics.name-role-value, semantics.native-elements, semantics.roles-states-properties.
12
+
13
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.slider"}}`
14
+
15
+ Scope: Single-thumb or multi-thumb bounded range input.
16
+
17
+ Behavior:
18
+ - Use a native input[type=range] for a single-thumb slider when it supplies the required range, step, orientation, labeling, and value presentation; use a custom slider only when native behavior cannot satisfy the declared interaction
19
+ - Expose every focusable thumb as a distinct named slider with synchronized current, minimum, maximum, orientation, and user-friendly value text when the numeric value is insufficient
20
+ - Right and Up increase by one step while Left and Down decrease by one step unless a documented orientation and value presentation makes reversal more intuitive; Home and End move to range bounds, and optional Page Up and Page Down apply the declared larger step
21
+ - Provide an equivalent single-pointer method for every drag operation that does not require dragging, such as track activation or an adjacent value input
22
+ - Keep every thumb in a constant tab order for multi-thumb sliders and update dependent thumb bounds whenever another thumb changes them
23
+ - Verify operation with touch-based assistive technology on target devices before production use
24
+
25
+ Product decisions: direction_mapping, large_step, native_or_custom, orientation, single_or_multi_thumb, step, thumb_constraints, value_text.
26
+
27
+ Functional Spec bindings: fields, states, keyboard, controls.
28
+
29
+ Implementation outcomes: slider-keyboard-model, slider-native-control-selection, slider-range-state, slider-touch-at-compatibility.
30
+
31
+ Evidence: unit, axe, e2e, human.
@@ -0,0 +1,28 @@
1
+ <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
3
+ # pattern.spinbutton
4
+
5
+ ## pattern.spinbutton
6
+
7
+ Standards:
8
+ - [aria-apg spinbutton](<https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/>) — informative
9
+
10
+ Requires: semantics.accessible-name, semantics.focus.visible, semantics.form-label, semantics.keyboard, semantics.name-role-value, semantics.native-elements, semantics.roles-states-properties.
11
+
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.spinbutton"}}`
13
+
14
+ Scope: Value input constrained to a discrete set or range, with optional direct text editing.
15
+
16
+ Behavior:
17
+ - Use a native number input when it supplies the required range, step, editing, labeling, and validation behavior; otherwise expose a named spinbutton with synchronized current, minimum, maximum, user-friendly value text, and invalid state when a value is outside the allowed range
18
+ - Keep focus on the spinbutton while Up and Down change its value, Home and End apply known bounds, and optional Page Up and Page Down apply the declared larger step
19
+ - Treat the editable decision as permission for direct text entry, not as whether the spinbutton is adjustable; when direct editing is disabled, the declared increment and decrement controls still change the value and the spinbutton is not exposed as read-only
20
+ - When direct editing is allowed, preserve platform text editing commands and do not intercept keys needed to enter, navigate, select, or modify text
21
+
22
+ Product decisions: editable, large_step, native_or_custom, range_bounds, step, value_text.
23
+
24
+ Functional Spec bindings: fields, states, keyboard, validation.
25
+
26
+ Implementation outcomes: spinbutton-keyboard-model, spinbutton-native-control-selection, spinbutton-range-state, spinbutton-validation.
27
+
28
+ Evidence: unit, axe, e2e, human.
@@ -1,12 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.tabs
3
4
 
4
5
  ## pattern.tabs
5
6
 
7
+ Standards:
8
+ - [aria-apg tabs](<https://www.w3.org/WAI/ARIA/apg/patterns/tabs/>) — informative
9
+
6
10
  Requires: semantics.accessible-name, semantics.selected-state, semantics.keyboard, semantics.focus.visible.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tabs"}}`
13
+
14
+ Scope: Tabbed interfaces.
15
+
8
16
  Behavior:
9
17
  - Arrow keys move between tabs
10
18
  - Selection and activation follow the documented model
11
19
 
20
+ Product decisions: automatic_or_manual_activation.
21
+
22
+ Functional Spec bindings: behavior, states, keyboard.
23
+
24
+ Implementation outcomes: tabs-keyboard-model.
25
+
12
26
  Evidence: unit, axe, e2e, human.
@@ -1,12 +1,26 @@
1
1
  <!-- GENERATED by @verndale/accessibility-standards; DO NOT EDIT -->
2
+ <!-- package: @verndale/accessibility-standards@3.0.0; profile: ai-orchestration@3.0.0; schema: 3; source-digest: 708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af; profile-digest: de396e9a23010dff2e8abf3ae7e8500153599583ffa31a595b3a94fbe9df3da4 -->
2
3
  # pattern.tooltip
3
4
 
4
5
  ## pattern.tooltip
5
6
 
7
+ Standards:
8
+ - [aria-apg tooltip](<https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/>) — informative
9
+
6
10
  Requires: semantics.accessible-name, semantics.keyboard.escape.
7
11
 
12
+ Activation: `{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tooltip"}}`
13
+
14
+ Scope: Supplementary description.
15
+
8
16
  Behavior:
9
17
  - Available on hover and focus
10
18
  - Never contains interactive content
11
19
 
20
+ Product decisions: delay.
21
+
22
+ Functional Spec bindings: behavior.
23
+
24
+ Implementation outcomes: tooltip-description.
25
+
12
26
  Evidence: unit, e2e, human.