@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.
- 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
|
@@ -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
|
+
}
|
package/src/contract.yml
ADDED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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","
|
|
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.
|
|
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","
|
|
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.
|
|
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.
|
|
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.
|
|
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","
|
|
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","
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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"]}
|