@verndale/accessibility-standards 1.0.0 → 2.0.1

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 (124) hide show
  1. package/OPERATING.md +2 -0
  2. package/README.md +4 -0
  3. package/bin/accessibility-standards.mjs +1 -1
  4. package/dist/manifest.json +39 -21
  5. package/dist/profiles/ai-orchestration/coverage-manifest.json +109 -2
  6. package/dist/profiles/ai-orchestration/implementation/accessibility.md +334 -0
  7. package/dist/profiles/ai-orchestration/pattern-contracts.json +125 -39
  8. package/dist/profiles/ai-orchestration/patterns/accordion.md +9 -0
  9. package/dist/profiles/ai-orchestration/patterns/alert.md +9 -0
  10. package/dist/profiles/ai-orchestration/patterns/carousel.md +9 -0
  11. package/dist/profiles/ai-orchestration/patterns/combobox.md +9 -0
  12. package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +9 -0
  13. package/dist/profiles/ai-orchestration/patterns/dialog.md +9 -0
  14. package/dist/profiles/ai-orchestration/patterns/disclosure.md +9 -0
  15. package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +9 -0
  16. package/dist/profiles/ai-orchestration/patterns/field.md +9 -0
  17. package/dist/profiles/ai-orchestration/patterns/image.md +9 -0
  18. package/dist/profiles/ai-orchestration/patterns/listbox.md +9 -0
  19. package/dist/profiles/ai-orchestration/patterns/media-player.md +9 -0
  20. package/dist/profiles/ai-orchestration/patterns/menu-button.md +9 -0
  21. package/dist/profiles/ai-orchestration/patterns/pagination.md +9 -0
  22. package/dist/profiles/ai-orchestration/patterns/popover.md +9 -0
  23. package/dist/profiles/ai-orchestration/patterns/progress.md +9 -0
  24. package/dist/profiles/ai-orchestration/patterns/tabs.md +9 -0
  25. package/dist/profiles/ai-orchestration/patterns/tooltip.md +9 -0
  26. package/dist/profiles/ai-orchestration/patterns/validation.md +9 -0
  27. package/dist/profiles/ai-orchestration/review/accessibility.md +8 -1
  28. package/dist/profiles/ai-orchestration/semantics/accessible-name.md +1 -0
  29. package/dist/profiles/ai-orchestration/semantics/alert.md +1 -0
  30. package/dist/profiles/ai-orchestration/semantics/consequential-action.md +1 -0
  31. package/dist/profiles/ai-orchestration/semantics/data-table.md +1 -0
  32. package/dist/profiles/ai-orchestration/semantics/expanded-state.md +1 -0
  33. package/dist/profiles/ai-orchestration/semantics/focus.initial.md +1 -0
  34. package/dist/profiles/ai-orchestration/semantics/focus.return.md +1 -0
  35. package/dist/profiles/ai-orchestration/semantics/focus.visible.md +1 -0
  36. package/dist/profiles/ai-orchestration/semantics/form-error.md +1 -0
  37. package/dist/profiles/ai-orchestration/semantics/form-label.md +1 -0
  38. package/dist/profiles/ai-orchestration/semantics/form-required.md +1 -0
  39. package/dist/profiles/ai-orchestration/semantics/headings.md +1 -0
  40. package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +1 -0
  41. package/dist/profiles/ai-orchestration/semantics/keyboard.md +1 -0
  42. package/dist/profiles/ai-orchestration/semantics/landmarks.md +1 -0
  43. package/dist/profiles/ai-orchestration/semantics/live-status.md +1 -0
  44. package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +1 -0
  45. package/dist/profiles/ai-orchestration/semantics/motion-control.md +1 -0
  46. package/dist/profiles/ai-orchestration/semantics/name-role-value.md +1 -0
  47. package/dist/profiles/ai-orchestration/semantics/native-dialog.md +1 -0
  48. package/dist/profiles/ai-orchestration/semantics/native-elements.md +1 -0
  49. package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +1 -0
  50. package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +1 -0
  51. package/dist/profiles/ai-orchestration/semantics/selected-state.md +1 -0
  52. package/dist/profiles/ai-orchestration/semantics/target-size.md +1 -0
  53. package/dist/profiles/ai-orchestration/semantics.json +48 -1
  54. package/dist/profiles/ai-orchestration/testing/accessibility.md +1 -1
  55. package/dist/profiles/ai-orchestration/ui-design-brain-bindings.json +856 -0
  56. package/dist/profiles/conductor/a11y-semantics.md +22 -1
  57. package/dist/profiles/conductor/accessibility-quality.md +314 -0
  58. package/dist/profiles/conductor/applicability-matrix.json +111 -28
  59. package/dist/profiles/conductor/coverage-manifest.json +109 -2
  60. package/dist/profiles/conductor/pattern-contracts.json +125 -39
  61. package/dist/profiles/conductor/patterns/accordion.json +13 -3
  62. package/dist/profiles/conductor/patterns/alert.json +13 -3
  63. package/dist/profiles/conductor/patterns/carousel.json +13 -3
  64. package/dist/profiles/conductor/patterns/combobox.json +13 -3
  65. package/dist/profiles/conductor/patterns/consequential-submission.json +13 -3
  66. package/dist/profiles/conductor/patterns/dialog.json +13 -3
  67. package/dist/profiles/conductor/patterns/disclosure.json +13 -3
  68. package/dist/profiles/conductor/patterns/dynamic-status.json +13 -3
  69. package/dist/profiles/conductor/patterns/field.json +23 -3
  70. package/dist/profiles/conductor/patterns/image.json +23 -3
  71. package/dist/profiles/conductor/patterns/listbox.json +13 -3
  72. package/dist/profiles/conductor/patterns/media-player.json +23 -3
  73. package/dist/profiles/conductor/patterns/menu-button.json +13 -3
  74. package/dist/profiles/conductor/patterns/pagination.json +13 -3
  75. package/dist/profiles/conductor/patterns/popover.json +13 -3
  76. package/dist/profiles/conductor/patterns/progress.json +13 -3
  77. package/dist/profiles/conductor/patterns/tabs.json +13 -3
  78. package/dist/profiles/conductor/patterns/tooltip.json +13 -3
  79. package/dist/profiles/conductor/patterns/validation.json +23 -3
  80. package/dist/profiles/conductor/semantics.json +48 -1
  81. package/dist/profiles/conductor/ui-design-brain-bindings.json +856 -0
  82. package/dist/projection-manifest.json +103 -78
  83. package/dist/requirements-to-implementation.md +2 -0
  84. package/lib/build-manifest.mjs +12 -6
  85. package/lib/build.mjs +19 -5
  86. package/lib/compile-applicability.mjs +131 -10
  87. package/lib/coverage.mjs +20 -0
  88. package/lib/index.mjs +1 -1
  89. package/lib/load.mjs +31 -1
  90. package/lib/provenance.mjs +49 -0
  91. package/lib/render.mjs +69 -29
  92. package/lib/sync.mjs +240 -26
  93. package/lib/validate.mjs +255 -24
  94. package/package.json +24 -11
  95. package/profiles/ai-orchestration/profile.json +1 -1
  96. package/profiles/conductor/profile.json +1 -1
  97. package/schemas/consumer-config.schema.json +1 -1
  98. package/schemas/contract.schema.json +1 -0
  99. package/schemas/manifest.schema.json +1 -1
  100. package/schemas/projection-manifest.schema.json +84 -1
  101. package/schemas/ui-design-brain-bindings.schema.json +86 -0
  102. package/src/applicability/facts.yml +29 -1
  103. package/src/applicability/matrix.yml +3 -2
  104. package/src/applicability/ui-design-brain-bindings.yml +210 -0
  105. package/src/contract.yml +1 -0
  106. package/src/patterns/disclosure/accordion.yml +1 -1
  107. package/src/patterns/disclosure/disclosure.yml +1 -1
  108. package/src/patterns/feedback/alert.yml +1 -1
  109. package/src/patterns/feedback/dynamic-status.yml +1 -1
  110. package/src/patterns/feedback/progress.yml +1 -1
  111. package/src/patterns/forms/consequential-submission.yml +1 -1
  112. package/src/patterns/forms/field.yml +1 -1
  113. package/src/patterns/forms/validation.yml +1 -1
  114. package/src/patterns/media/carousel.yml +1 -1
  115. package/src/patterns/media/image.yml +1 -1
  116. package/src/patterns/media/media-player.yml +1 -1
  117. package/src/patterns/navigation/menu-button.yml +1 -1
  118. package/src/patterns/navigation/pagination.yml +1 -1
  119. package/src/patterns/navigation/tabs.yml +1 -1
  120. package/src/patterns/overlays/dialog.yml +1 -1
  121. package/src/patterns/overlays/popover.yml +1 -1
  122. package/src/patterns/overlays/tooltip.yml +1 -1
  123. package/src/patterns/selection/combobox.yml +1 -1
  124. package/src/patterns/selection/listbox.yml +1 -1
@@ -0,0 +1,210 @@
1
+ {
2
+ "version": 1,
3
+ "source": {
4
+ "package": "@verndale/ui-design-brain",
5
+ "package_version": "1.16.1",
6
+ "catalog_authority_version": "1.15.1",
7
+ "repository": "https://github.com/verndale/ui-design-brain",
8
+ "manifest_path": "skills/ui-design-brain/catalog-manifest.json",
9
+ "source_digest": "sha256:1eda596fe341786b5ada25742b6487bc06685fff17cbd582bc1b58302097e3ff",
10
+ "manifest_digest": "sha256:63a0bc8d9537d6d4c0aef8fd8a539bf4a9181a50d0761bd63eae6fe59b4eddc9",
11
+ "pattern_count": 80,
12
+ "tracking_issue": "https://github.com/verndale/ui-design-brain/issues/47"
13
+ },
14
+ "bindings": [
15
+ { "ui_pattern_id": "accordion", "classification": "direct", "pattern_ids": ["pattern.accordion"] },
16
+ {
17
+ "ui_pattern_id": "alert",
18
+ "classification": "candidate",
19
+ "discriminator_facts": ["component.has_dynamic_status", "component.message_urgency"],
20
+ "candidates": [
21
+ { "pattern_id": "pattern.alert", "when": { "equals": { "fact": "component.message_urgency", "value": "urgent" } } },
22
+ { "pattern_id": "pattern.dynamic-status", "when": { "equals": { "fact": "component.has_dynamic_status", "value": true } } }
23
+ ]
24
+ },
25
+ { "ui_pattern_id": "avatar", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.non-text-alternative"] },
26
+ {
27
+ "ui_pattern_id": "badge",
28
+ "classification": "candidate",
29
+ "discriminator_facts": ["component.has_dynamic_status"],
30
+ "candidates": [
31
+ { "pattern_id": "pattern.dynamic-status", "when": { "equals": { "fact": "component.has_dynamic_status", "value": true } } }
32
+ ]
33
+ },
34
+ { "ui_pattern_id": "breadcrumbs", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.landmarks", "semantics.native-elements"] },
35
+ { "ui_pattern_id": "button", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.name-role-value", "semantics.native-elements", "semantics.target-size"] },
36
+ { "ui_pattern_id": "button-group", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.native-elements"] },
37
+ { "ui_pattern_id": "card", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
38
+ { "ui_pattern_id": "carousel", "classification": "direct", "pattern_ids": ["pattern.carousel"] },
39
+ { "ui_pattern_id": "checkbox", "classification": "direct", "pattern_ids": ["pattern.field"] },
40
+ { "ui_pattern_id": "color-picker", "classification": "direct", "pattern_ids": ["pattern.field"] },
41
+ { "ui_pattern_id": "combobox", "classification": "direct", "pattern_ids": ["pattern.combobox", "pattern.field"] },
42
+ { "ui_pattern_id": "comparison-table", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.data-table"] },
43
+ {
44
+ "ui_pattern_id": "context-menu",
45
+ "classification": "candidate",
46
+ "discriminator_facts": ["component.command_menu_trigger"],
47
+ "candidates": [
48
+ { "pattern_id": "pattern.menu-button", "when": { "equals": { "fact": "component.command_menu_trigger", "value": true } } }
49
+ ]
50
+ },
51
+ { "ui_pattern_id": "date-input", "classification": "direct", "pattern_ids": ["pattern.field"] },
52
+ {
53
+ "ui_pattern_id": "datepicker",
54
+ "classification": "candidate",
55
+ "pattern_ids": ["pattern.field"],
56
+ "discriminator_facts": ["component.overlay_model"],
57
+ "candidates": [
58
+ { "pattern_id": "pattern.dialog", "when": { "equals": { "fact": "component.overlay_model", "value": "modal" } } },
59
+ { "pattern_id": "pattern.popover", "when": { "equals": { "fact": "component.overlay_model", "value": "non-modal" } } }
60
+ ]
61
+ },
62
+ {
63
+ "ui_pattern_id": "drawer",
64
+ "classification": "candidate",
65
+ "discriminator_facts": ["component.overlay_model"],
66
+ "candidates": [
67
+ { "pattern_id": "pattern.dialog", "when": { "equals": { "fact": "component.overlay_model", "value": "modal" } } },
68
+ { "pattern_id": "pattern.disclosure", "when": { "equals": { "fact": "component.overlay_model", "value": "inline" } } },
69
+ { "pattern_id": "pattern.popover", "when": { "equals": { "fact": "component.overlay_model", "value": "non-modal" } } }
70
+ ]
71
+ },
72
+ {
73
+ "ui_pattern_id": "dropdown-menu",
74
+ "classification": "candidate",
75
+ "discriminator_facts": ["component.command_menu_trigger"],
76
+ "candidates": [
77
+ { "pattern_id": "pattern.menu-button", "when": { "equals": { "fact": "component.command_menu_trigger", "value": true } } }
78
+ ]
79
+ },
80
+ {
81
+ "ui_pattern_id": "empty-state",
82
+ "classification": "candidate",
83
+ "discriminator_facts": ["component.has_dynamic_status"],
84
+ "candidates": [
85
+ { "pattern_id": "pattern.dynamic-status", "when": { "equals": { "fact": "component.has_dynamic_status", "value": true } } }
86
+ ]
87
+ },
88
+ { "ui_pattern_id": "error-message", "classification": "direct", "pattern_ids": ["pattern.validation"] },
89
+ { "ui_pattern_id": "eyebrow", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
90
+ { "ui_pattern_id": "fieldset", "classification": "direct", "pattern_ids": ["pattern.field"] },
91
+ { "ui_pattern_id": "file", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
92
+ { "ui_pattern_id": "file-upload", "classification": "direct", "pattern_ids": ["pattern.field"] },
93
+ {
94
+ "ui_pattern_id": "filter",
95
+ "classification": "candidate",
96
+ "discriminator_facts": ["component.has_form_fields"],
97
+ "candidates": [
98
+ { "pattern_id": "pattern.field", "when": { "equals": { "fact": "component.has_form_fields", "value": true } } }
99
+ ]
100
+ },
101
+ { "ui_pattern_id": "footer", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.landmarks"] },
102
+ { "ui_pattern_id": "form", "classification": "direct", "pattern_ids": ["pattern.field"] },
103
+ { "ui_pattern_id": "header", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.landmarks"] },
104
+ { "ui_pattern_id": "heading", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.headings"] },
105
+ { "ui_pattern_id": "helper-text", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
106
+ { "ui_pattern_id": "hero", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.headings"] },
107
+ { "ui_pattern_id": "icon", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.non-text-alternative"] },
108
+ { "ui_pattern_id": "image", "classification": "direct", "pattern_ids": ["pattern.image"] },
109
+ { "ui_pattern_id": "in-page-navigation", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.landmarks", "semantics.native-elements"] },
110
+ { "ui_pattern_id": "label", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.form-label"] },
111
+ { "ui_pattern_id": "link", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.native-elements", "semantics.target-size"] },
112
+ { "ui_pattern_id": "list", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
113
+ { "ui_pattern_id": "logo-bar", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.non-text-alternative"] },
114
+ { "ui_pattern_id": "marquee", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.motion-control"] },
115
+ { "ui_pattern_id": "masthead", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.headings", "semantics.landmarks"] },
116
+ { "ui_pattern_id": "media-object", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.non-text-alternative"] },
117
+ {
118
+ "ui_pattern_id": "mega-menu",
119
+ "classification": "candidate",
120
+ "discriminator_facts": ["component.command_menu_trigger"],
121
+ "candidates": [
122
+ { "pattern_id": "pattern.menu-button", "when": { "equals": { "fact": "component.command_menu_trigger", "value": true } } }
123
+ ]
124
+ },
125
+ { "ui_pattern_id": "modal", "classification": "direct", "pattern_ids": ["pattern.dialog"] },
126
+ {
127
+ "ui_pattern_id": "navigation",
128
+ "classification": "candidate",
129
+ "discriminator_facts": ["component.command_menu_trigger"],
130
+ "candidates": [
131
+ { "pattern_id": "pattern.menu-button", "when": { "equals": { "fact": "component.command_menu_trigger", "value": true } } }
132
+ ]
133
+ },
134
+ { "ui_pattern_id": "number-input", "classification": "direct", "pattern_ids": ["pattern.field"] },
135
+ { "ui_pattern_id": "pagination", "classification": "direct", "pattern_ids": ["pattern.pagination"] },
136
+ { "ui_pattern_id": "popover", "classification": "direct", "pattern_ids": ["pattern.popover"] },
137
+ { "ui_pattern_id": "progress-bar", "classification": "direct", "pattern_ids": ["pattern.progress"] },
138
+ { "ui_pattern_id": "progress-indicator", "classification": "direct", "pattern_ids": ["pattern.progress"] },
139
+ { "ui_pattern_id": "quote", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
140
+ { "ui_pattern_id": "radio-button", "classification": "direct", "pattern_ids": ["pattern.field"] },
141
+ { "ui_pattern_id": "rating", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.name-role-value"] },
142
+ { "ui_pattern_id": "rich-text", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.headings", "semantics.native-elements"] },
143
+ { "ui_pattern_id": "rich-text-editor", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.name-role-value"] },
144
+ { "ui_pattern_id": "search-input", "classification": "direct", "pattern_ids": ["pattern.field"] },
145
+ {
146
+ "ui_pattern_id": "search-overlay",
147
+ "classification": "candidate",
148
+ "discriminator_facts": ["component.overlay_model"],
149
+ "candidates": [
150
+ { "pattern_id": "pattern.dialog", "when": { "equals": { "fact": "component.overlay_model", "value": "modal" } } },
151
+ { "pattern_id": "pattern.popover", "when": { "equals": { "fact": "component.overlay_model", "value": "non-modal" } } }
152
+ ]
153
+ },
154
+ { "ui_pattern_id": "section-header", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.headings"] },
155
+ { "ui_pattern_id": "segmented-control", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.selected-state"] },
156
+ {
157
+ "ui_pattern_id": "select",
158
+ "classification": "candidate",
159
+ "pattern_ids": ["pattern.field"],
160
+ "discriminator_facts": ["component.selection_model"],
161
+ "candidates": [
162
+ { "pattern_id": "pattern.combobox", "when": { "equals": { "fact": "component.selection_model", "value": "combobox" } } },
163
+ { "pattern_id": "pattern.listbox", "when": { "equals": { "fact": "component.selection_model", "value": "listbox" } } }
164
+ ]
165
+ },
166
+ { "ui_pattern_id": "separator", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
167
+ {
168
+ "ui_pattern_id": "sidebar",
169
+ "classification": "candidate",
170
+ "discriminator_facts": ["component.command_menu_trigger"],
171
+ "candidates": [
172
+ { "pattern_id": "pattern.menu-button", "when": { "equals": { "fact": "component.command_menu_trigger", "value": true } } }
173
+ ]
174
+ },
175
+ {
176
+ "ui_pattern_id": "skeleton",
177
+ "classification": "candidate",
178
+ "discriminator_facts": ["component.has_dynamic_status"],
179
+ "candidates": [
180
+ { "pattern_id": "pattern.dynamic-status", "when": { "equals": { "fact": "component.has_dynamic_status", "value": true } } }
181
+ ]
182
+ },
183
+ { "ui_pattern_id": "skip-link", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.native-elements"] },
184
+ { "ui_pattern_id": "slider", "classification": "direct", "pattern_ids": ["pattern.field"] },
185
+ { "ui_pattern_id": "spinner", "classification": "direct", "pattern_ids": ["pattern.progress"] },
186
+ { "ui_pattern_id": "stack", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
187
+ { "ui_pattern_id": "stat", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
188
+ { "ui_pattern_id": "stepper", "classification": "direct", "pattern_ids": ["pattern.field"] },
189
+ { "ui_pattern_id": "table", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.data-table"] },
190
+ { "ui_pattern_id": "tabs", "classification": "direct", "pattern_ids": ["pattern.tabs"] },
191
+ { "ui_pattern_id": "text-input", "classification": "direct", "pattern_ids": ["pattern.field"] },
192
+ { "ui_pattern_id": "textarea", "classification": "direct", "pattern_ids": ["pattern.field"] },
193
+ {
194
+ "ui_pattern_id": "toast",
195
+ "classification": "candidate",
196
+ "discriminator_facts": ["component.has_dynamic_status", "component.message_urgency"],
197
+ "candidates": [
198
+ { "pattern_id": "pattern.alert", "when": { "equals": { "fact": "component.message_urgency", "value": "urgent" } } },
199
+ { "pattern_id": "pattern.dynamic-status", "when": { "equals": { "fact": "component.has_dynamic_status", "value": true } } }
200
+ ]
201
+ },
202
+ { "ui_pattern_id": "toggle", "classification": "direct", "pattern_ids": ["pattern.field"] },
203
+ { "ui_pattern_id": "tooltip", "classification": "direct", "pattern_ids": ["pattern.tooltip"] },
204
+ { "ui_pattern_id": "tree-view", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.roles-states-properties", "semantics.selected-state"] },
205
+ { "ui_pattern_id": "utility-bar", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.landmarks"] },
206
+ { "ui_pattern_id": "video", "classification": "direct", "pattern_ids": ["pattern.media-player"] },
207
+ { "ui_pattern_id": "visually-hidden", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
208
+ { "ui_pattern_id": "wizard", "classification": "direct", "pattern_ids": ["pattern.field"] }
209
+ ]
210
+ }
@@ -0,0 +1 @@
1
+ {"schema_version":2,"package_version":"2.0.1"}
@@ -1 +1 @@
1
- {"id":"pattern.accordion","version":"1.0.0","title":"Accordion","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.expanded-state","semantics.keyboard","semantics.focus.visible"],"activation":{"fact":"component.pattern","equals":"accordion"},"scope":"Grouped disclosure sections","behavior":["Toggle only the controlled panel","Preserve DOM and focus order"],"product_decisions":["single_or_multiple_open"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["accordion-control","accordion-panel"],"evidence_routes":["unit","axe","e2e","human"]}
1
+ {"id":"pattern.accordion","version":"1.0.0","title":"Accordion","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.expanded-state","semantics.keyboard","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.accordion"}},"scope":"Grouped disclosure sections","behavior":["Toggle only the controlled panel","Preserve DOM and focus order"],"product_decisions":["single_or_multiple_open"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["accordion-control","accordion-panel"],"evidence_routes":["unit","axe","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.disclosure","version":"1.0.0","title":"Disclosure","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.expanded-state","semantics.keyboard"],"activation":{"fact":"component.pattern","equals":"disclosure"},"scope":"Show and hide supplementary content","behavior":["Control toggles one region"],"product_decisions":["initial_state"],"functional_spec_bindings":["behavior","states"],"implementation_outcomes":["disclosure-control"],"evidence_routes":["unit","axe","e2e"]}
1
+ {"id":"pattern.disclosure","version":"1.0.0","title":"Disclosure","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.expanded-state","semantics.keyboard"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.disclosure"}},"scope":"Show and hide supplementary content","behavior":["Control toggles one region"],"product_decisions":["initial_state"],"functional_spec_bindings":["behavior","states"],"implementation_outcomes":["disclosure-control"],"evidence_routes":["unit","axe","e2e"]}
@@ -1 +1 @@
1
- {"id":"pattern.alert","version":"1.0.0","title":"Alert","kind":"pattern","requires":["semantics.alert"],"activation":{"fact":"component.pattern","equals":"alert"},"scope":"Urgent message","behavior":["Announce once without moving focus"],"product_decisions":["urgency"],"functional_spec_bindings":["messaging"],"implementation_outcomes":["alert-announcement"],"evidence_routes":["unit","human"]}
1
+ {"id":"pattern.alert","version":"1.0.0","title":"Alert","kind":"pattern","requires":["semantics.alert"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.alert"}},"scope":"Urgent message","behavior":["Announce once without moving focus"],"product_decisions":["urgency"],"functional_spec_bindings":["messaging"],"implementation_outcomes":["alert-announcement"],"evidence_routes":["unit","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.dynamic-status","version":"1.0.0","title":"Dynamic status","kind":"pattern","requires":["semantics.live-status"],"activation":{"fact":"component.has_dynamic_status","equals":true},"scope":"Asynchronous status message","behavior":["Announce meaningful changes once"],"product_decisions":["announcement_copy"],"functional_spec_bindings":["messaging","states"],"implementation_outcomes":["status-live-region"],"evidence_routes":["unit","e2e","human"]}
1
+ {"id":"pattern.dynamic-status","version":"1.0.0","title":"Dynamic status","kind":"pattern","requires":["semantics.live-status"],"activation":{"equals":{"fact":"component.has_dynamic_status","value":true}},"scope":"Asynchronous status message","behavior":["Announce meaningful changes once"],"product_decisions":["announcement_copy"],"functional_spec_bindings":["messaging","states"],"implementation_outcomes":["status-live-region"],"evidence_routes":["unit","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.progress","version":"1.0.0","title":"Progress","kind":"pattern","requires":["semantics.name-role-value","semantics.live-status"],"activation":{"fact":"component.pattern","equals":"progress"},"scope":"Determinate or indeterminate progress","behavior":["Expose value and completion changes without announcement noise"],"product_decisions":["determinate"],"functional_spec_bindings":["states","messaging"],"implementation_outcomes":["progress-value"],"evidence_routes":["unit","axe","human"]}
1
+ {"id":"pattern.progress","version":"1.0.0","title":"Progress","kind":"pattern","requires":["semantics.name-role-value","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.progress"}},"scope":"Determinate or indeterminate progress","behavior":["Expose value and completion changes without announcement noise"],"product_decisions":["determinate"],"functional_spec_bindings":["states","messaging"],"implementation_outcomes":["progress-value"],"evidence_routes":["unit","axe","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.consequential-submission","version":"1.0.0","title":"Consequential submission","kind":"pattern","requires":["semantics.consequential-action","semantics.form-error","semantics.keyboard"],"activation":{"fact":"component.submission_consequence","contains":"consequential"},"scope":"Legal, financial, destructive, or irreversible submission","behavior":["Support review, correction, confirmation, or reversal"],"product_decisions":["safeguard","reversal_window"],"functional_spec_bindings":["submission","confirmation"],"implementation_outcomes":["submission-safeguard"],"evidence_routes":["e2e","human"]}
1
+ {"id":"pattern.consequential-submission","version":"1.0.0","title":"Consequential submission","kind":"pattern","requires":["semantics.consequential-action","semantics.form-error","semantics.keyboard"],"activation":{"contains":{"fact":"component.submission_consequence","value":"consequential"}},"scope":"Legal, financial, destructive, or irreversible submission","behavior":["Support review, correction, confirmation, or reversal"],"product_decisions":["safeguard","reversal_window"],"functional_spec_bindings":["submission","confirmation"],"implementation_outcomes":["submission-safeguard"],"evidence_routes":["e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.field","version":"1.0.0","title":"Form field","kind":"pattern","requires":["semantics.form-label","semantics.form-required","semantics.focus.visible"],"activation":{"fact":"component.has_form_fields","equals":true},"scope":"Labeled form input","behavior":["Expose label, instructions, and requiredness before interaction"],"product_decisions":["required","instructions"],"functional_spec_bindings":["fields","requiredness"],"implementation_outcomes":["field-associations"],"evidence_routes":["unit","axe","human"]}
1
+ {"id":"pattern.field","version":"1.0.0","title":"Form field","kind":"pattern","requires":["semantics.form-label","semantics.form-required","semantics.focus.visible"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.field"}},{"equals":{"fact":"component.has_form_fields","value":true}}]},"scope":"Labeled form input","behavior":["Expose label, instructions, and requiredness before interaction"],"product_decisions":["required","instructions"],"functional_spec_bindings":["fields","requiredness"],"implementation_outcomes":["field-associations"],"evidence_routes":["unit","axe","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.validation","version":"1.0.0","title":"Form validation","kind":"pattern","requires":["semantics.form-error","semantics.live-status","semantics.focus.initial"],"activation":{"fact":"component.has_validation","equals":true},"scope":"Client or server validation","behavior":["Identify, associate, summarize, and focus errors deterministically"],"product_decisions":["validation_timing","error_summary"],"functional_spec_bindings":["validation","messaging","focus"],"implementation_outcomes":["validation-associations","error-summary"],"evidence_routes":["unit","axe","e2e","human"]}
1
+ {"id":"pattern.validation","version":"1.0.0","title":"Form validation","kind":"pattern","requires":["semantics.form-error","semantics.live-status","semantics.focus.initial"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.validation"}},{"equals":{"fact":"component.has_validation","value":true}}]},"scope":"Client or server validation","behavior":["Identify, associate, summarize, and focus errors deterministically"],"product_decisions":["validation_timing","error_summary"],"functional_spec_bindings":["validation","messaging","focus"],"implementation_outcomes":["validation-associations","error-summary"],"evidence_routes":["unit","axe","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.carousel","version":"1.0.0","title":"Carousel","kind":"pattern","requires":["semantics.accessible-name","semantics.keyboard","semantics.focus.visible","semantics.motion-control","semantics.live-status"],"activation":{"fact":"component.pattern","equals":"carousel"},"scope":"Rotating content set","behavior":["Pause rotation on interaction","Provide named controls and current position"],"product_decisions":["auto_rotation","looping"],"functional_spec_bindings":["behavior","states","controls"],"implementation_outcomes":["carousel-controls","carousel-rotation"],"evidence_routes":["unit","axe","e2e","human"]}
1
+ {"id":"pattern.carousel","version":"1.0.0","title":"Carousel","kind":"pattern","requires":["semantics.accessible-name","semantics.keyboard","semantics.focus.visible","semantics.motion-control","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.carousel"}},"scope":"Rotating content set","behavior":["Pause rotation on interaction","Provide named controls and current position"],"product_decisions":["auto_rotation","looping"],"functional_spec_bindings":["behavior","states","controls"],"implementation_outcomes":["carousel-controls","carousel-rotation"],"evidence_routes":["unit","axe","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.image","version":"1.0.0","title":"Image","kind":"pattern","requires":["semantics.non-text-alternative"],"activation":{"fact":"content.has_non_text","equals":true},"scope":"Informative, functional, complex, or decorative image","behavior":["Alternative follows image purpose"],"product_decisions":["purpose","long_description"],"functional_spec_bindings":["content"],"implementation_outcomes":["image-alternative"],"evidence_routes":["axe","human"]}
1
+ {"id":"pattern.image","version":"1.0.0","title":"Image","kind":"pattern","requires":["semantics.non-text-alternative"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.image"}},{"equals":{"fact":"content.has_non_text","value":true}}]},"scope":"Informative, functional, complex, or decorative image","behavior":["Alternative follows image purpose"],"product_decisions":["purpose","long_description"],"functional_spec_bindings":["content"],"implementation_outcomes":["image-alternative"],"evidence_routes":["axe","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.media-player","version":"1.0.0","title":"Media player","kind":"pattern","requires":["semantics.media-alternatives","semantics.accessible-name","semantics.keyboard","semantics.focus.visible","semantics.motion-control"],"activation":{"fact":"content.has_media","equals":true},"scope":"Audio or video playback","behavior":["Provide keyboard-operable named controls and required alternatives"],"product_decisions":["captions","transcript","audio_description","autoplay"],"functional_spec_bindings":["content","controls","behavior"],"implementation_outcomes":["media-alternatives","media-controls"],"evidence_routes":["axe","e2e","human"]}
1
+ {"id":"pattern.media-player","version":"1.0.0","title":"Media player","kind":"pattern","requires":["semantics.media-alternatives","semantics.accessible-name","semantics.keyboard","semantics.focus.visible","semantics.motion-control"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.media-player"}},{"equals":{"fact":"content.has_media","value":true}}]},"scope":"Audio or video playback","behavior":["Provide keyboard-operable named controls and required alternatives"],"product_decisions":["captions","transcript","audio_description","autoplay"],"functional_spec_bindings":["content","controls","behavior"],"implementation_outcomes":["media-alternatives","media-controls"],"evidence_routes":["axe","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.menu-button","version":"1.0.0","title":"Menu button","kind":"pattern","requires":["semantics.accessible-name","semantics.expanded-state","semantics.keyboard","semantics.focus.initial","semantics.focus.return"],"activation":{"fact":"component.pattern","equals":"menu-button"},"scope":"Button opening a command menu","behavior":["Open and navigate menu by keyboard"],"product_decisions":["focus_strategy"],"functional_spec_bindings":["behavior","keyboard","focus"],"implementation_outcomes":["menu-button-keyboard"],"evidence_routes":["unit","e2e","human"]}
1
+ {"id":"pattern.menu-button","version":"1.0.0","title":"Menu button","kind":"pattern","requires":["semantics.accessible-name","semantics.expanded-state","semantics.keyboard","semantics.focus.initial","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.menu-button"}},"scope":"Button opening a command menu","behavior":["Open and navigate menu by keyboard"],"product_decisions":["focus_strategy"],"functional_spec_bindings":["behavior","keyboard","focus"],"implementation_outcomes":["menu-button-keyboard"],"evidence_routes":["unit","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.pagination","version":"1.0.0","title":"Pagination","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.landmarks","semantics.focus.visible"],"activation":{"fact":"component.pattern","equals":"pagination"},"scope":"Paged result navigation","behavior":["Expose current page and named navigation"],"product_decisions":["url_behavior"],"functional_spec_bindings":["states","navigation"],"implementation_outcomes":["pagination-current-page"],"evidence_routes":["unit","axe","human"]}
1
+ {"id":"pattern.pagination","version":"1.0.0","title":"Pagination","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.landmarks","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.pagination"}},"scope":"Paged result navigation","behavior":["Expose current page and named navigation"],"product_decisions":["url_behavior"],"functional_spec_bindings":["states","navigation"],"implementation_outcomes":["pagination-current-page"],"evidence_routes":["unit","axe","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.tabs","version":"1.0.0","title":"Tabs","kind":"pattern","requires":["semantics.accessible-name","semantics.selected-state","semantics.keyboard","semantics.focus.visible"],"activation":{"fact":"component.pattern","equals":"tabs"},"scope":"Tabbed interfaces","behavior":["Arrow keys move between tabs","Selection and activation follow the documented model"],"product_decisions":["automatic_or_manual_activation"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["tabs-keyboard-model"],"evidence_routes":["unit","axe","e2e","human"]}
1
+ {"id":"pattern.tabs","version":"1.0.0","title":"Tabs","kind":"pattern","requires":["semantics.accessible-name","semantics.selected-state","semantics.keyboard","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tabs"}},"scope":"Tabbed interfaces","behavior":["Arrow keys move between tabs","Selection and activation follow the documented model"],"product_decisions":["automatic_or_manual_activation"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["tabs-keyboard-model"],"evidence_routes":["unit","axe","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.dialog","version":"1.0.0","title":"Dialog","kind":"pattern","requires":["semantics.native-dialog","semantics.accessible-name","semantics.keyboard.escape","semantics.focus.initial","semantics.focus.return"],"activation":{"fact":"component.pattern","equals":"dialog"},"scope":"Modal and non-modal dialogs","behavior":["Manage initial, contained, and return focus","Dismiss topmost dialog with Escape"],"product_decisions":["modal","initial_focus","dismissal"],"functional_spec_bindings":["behavior","states","focus","keyboard"],"implementation_outcomes":["dialog-semantics","dialog-focus-lifecycle"],"evidence_routes":["unit","axe","e2e","human"]}
1
+ {"id":"pattern.dialog","version":"1.0.0","title":"Dialog","kind":"pattern","requires":["semantics.native-dialog","semantics.accessible-name","semantics.keyboard.escape","semantics.focus.initial","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.dialog"}},"scope":"Modal and non-modal dialogs","behavior":["Manage initial, contained, and return focus","Dismiss topmost dialog with Escape"],"product_decisions":["modal","initial_focus","dismissal"],"functional_spec_bindings":["behavior","states","focus","keyboard"],"implementation_outcomes":["dialog-semantics","dialog-focus-lifecycle"],"evidence_routes":["unit","axe","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.popover","version":"1.0.0","title":"Popover","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.keyboard.escape","semantics.focus.return"],"activation":{"fact":"component.pattern","equals":"popover"},"scope":"Non-modal transient surface","behavior":["Dismiss without trapping focus"],"product_decisions":["dismissal","focus_entry"],"functional_spec_bindings":["behavior","focus"],"implementation_outcomes":["popover-dismissal"],"evidence_routes":["unit","e2e","human"]}
1
+ {"id":"pattern.popover","version":"1.0.0","title":"Popover","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.keyboard.escape","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.popover"}},"scope":"Non-modal transient surface","behavior":["Dismiss without trapping focus"],"product_decisions":["dismissal","focus_entry"],"functional_spec_bindings":["behavior","focus"],"implementation_outcomes":["popover-dismissal"],"evidence_routes":["unit","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.tooltip","version":"1.0.0","title":"Tooltip","kind":"pattern","requires":["semantics.accessible-name","semantics.keyboard.escape"],"activation":{"fact":"component.pattern","equals":"tooltip"},"scope":"Supplementary description","behavior":["Available on hover and focus","Never contains interactive content"],"product_decisions":["delay"],"functional_spec_bindings":["behavior"],"implementation_outcomes":["tooltip-description"],"evidence_routes":["unit","e2e","human"]}
1
+ {"id":"pattern.tooltip","version":"1.0.0","title":"Tooltip","kind":"pattern","requires":["semantics.accessible-name","semantics.keyboard.escape"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tooltip"}},"scope":"Supplementary description","behavior":["Available on hover and focus","Never contains interactive content"],"product_decisions":["delay"],"functional_spec_bindings":["behavior"],"implementation_outcomes":["tooltip-description"],"evidence_routes":["unit","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.combobox","version":"1.0.0","title":"Combobox","kind":"pattern","requires":["semantics.accessible-name","semantics.expanded-state","semantics.selected-state","semantics.keyboard","semantics.live-status"],"activation":{"fact":"component.pattern","equals":"combobox"},"scope":"Input with selectable popup","behavior":["Keyboard controls popup, option, and input independently"],"product_decisions":["editable","autocomplete","selection_commit"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["combobox-state-machine"],"evidence_routes":["unit","axe","e2e","human"]}
1
+ {"id":"pattern.combobox","version":"1.0.0","title":"Combobox","kind":"pattern","requires":["semantics.accessible-name","semantics.expanded-state","semantics.selected-state","semantics.keyboard","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.combobox"}},"scope":"Input with selectable popup","behavior":["Keyboard controls popup, option, and input independently"],"product_decisions":["editable","autocomplete","selection_commit"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["combobox-state-machine"],"evidence_routes":["unit","axe","e2e","human"]}
@@ -1 +1 @@
1
- {"id":"pattern.listbox","version":"1.0.0","title":"Listbox","kind":"pattern","requires":["semantics.accessible-name","semantics.selected-state","semantics.keyboard","semantics.focus.visible"],"activation":{"fact":"component.pattern","equals":"listbox"},"scope":"Single or multi-select option list","behavior":["Arrow keys move active option","Selection follows declared model"],"product_decisions":["single_or_multi","selection_follows_focus"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["listbox-keyboard-model"],"evidence_routes":["unit","axe","e2e","human"]}
1
+ {"id":"pattern.listbox","version":"1.0.0","title":"Listbox","kind":"pattern","requires":["semantics.accessible-name","semantics.selected-state","semantics.keyboard","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.listbox"}},"scope":"Single or multi-select option list","behavior":["Arrow keys move active option","Selection follows declared model"],"product_decisions":["single_or_multi","selection_follows_focus"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["listbox-keyboard-model"],"evidence_routes":["unit","axe","e2e","human"]}