@verndale/accessibility-standards 2.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.
- package/OPERATING.md +1 -1
- package/README.md +1 -1
- package/dist/manifest.json +156 -116
- package/dist/profiles/ai-orchestration/coverage-manifest.json +702 -153
- package/dist/profiles/ai-orchestration/implementation/accessibility.md +523 -42
- package/dist/profiles/ai-orchestration/pattern-contracts.json +892 -306
- package/dist/profiles/ai-orchestration/patterns/accordion.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/alert.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/carousel.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/checkbox.md +27 -0
- package/dist/profiles/ai-orchestration/patterns/combobox.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +8 -3
- package/dist/profiles/ai-orchestration/patterns/dialog.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/disclosure.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/field.md +7 -1
- package/dist/profiles/ai-orchestration/patterns/image.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/listbox.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/media-player.md +9 -1
- package/dist/profiles/ai-orchestration/patterns/menu-button.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/menu.md +30 -0
- package/dist/profiles/ai-orchestration/patterns/pagination.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/popover.md +7 -1
- package/dist/profiles/ai-orchestration/patterns/progress.md +7 -1
- package/dist/profiles/ai-orchestration/patterns/radio-group.md +27 -0
- package/dist/profiles/ai-orchestration/patterns/slider.md +31 -0
- package/dist/profiles/ai-orchestration/patterns/spinbutton.md +28 -0
- package/dist/profiles/ai-orchestration/patterns/tabs.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/tooltip.md +6 -1
- package/dist/profiles/ai-orchestration/patterns/tree-view.md +31 -0
- package/dist/profiles/ai-orchestration/patterns/validation.md +7 -1
- package/dist/profiles/ai-orchestration/review/accessibility.md +14 -6
- package/dist/profiles/ai-orchestration/semantics/accessible-authentication.md +13 -0
- package/dist/profiles/ai-orchestration/semantics/accessible-name.md +8 -2
- package/dist/profiles/ai-orchestration/semantics/alert.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/consequential-action.md +6 -2
- package/dist/profiles/ai-orchestration/semantics/consistent-help.md +13 -0
- package/dist/profiles/ai-orchestration/semantics/data-table.md +7 -2
- package/dist/profiles/ai-orchestration/semantics/dragging-alternative.md +13 -0
- package/dist/profiles/ai-orchestration/semantics/expanded-state.md +6 -1
- package/dist/profiles/ai-orchestration/semantics/focus.initial.md +4 -1
- package/dist/profiles/ai-orchestration/semantics/focus.return.md +4 -1
- package/dist/profiles/ai-orchestration/semantics/focus.visible.md +8 -2
- package/dist/profiles/ai-orchestration/semantics/form-error.md +8 -2
- package/dist/profiles/ai-orchestration/semantics/form-label.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/form-required.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/headings.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +4 -1
- package/dist/profiles/ai-orchestration/semantics/keyboard.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/landmarks.md +6 -1
- package/dist/profiles/ai-orchestration/semantics/live-status.md +7 -2
- package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +11 -1
- package/dist/profiles/ai-orchestration/semantics/motion-control.md +8 -2
- package/dist/profiles/ai-orchestration/semantics/name-role-value.md +6 -2
- package/dist/profiles/ai-orchestration/semantics/native-dialog.md +7 -1
- package/dist/profiles/ai-orchestration/semantics/native-elements.md +5 -1
- package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +5 -1
- package/dist/profiles/ai-orchestration/semantics/redundant-entry.md +13 -0
- package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +6 -1
- package/dist/profiles/ai-orchestration/semantics/selected-state.md +6 -1
- package/dist/profiles/ai-orchestration/semantics/target-size.md +6 -2
- package/dist/profiles/ai-orchestration/semantics.json +826 -130
- package/dist/profiles/ai-orchestration/testing/accessibility.md +33 -3
- package/dist/profiles/ai-orchestration/ui-design-brain-bindings.json +287 -307
- package/dist/profiles/conductor/a11y-semantics.md +249 -10
- package/dist/profiles/conductor/accessibility-quality.md +275 -33
- package/dist/profiles/conductor/applicability-matrix.json +226 -269
- package/dist/profiles/conductor/coverage-manifest.json +702 -153
- package/dist/profiles/conductor/pattern-contracts.json +892 -306
- package/dist/profiles/conductor/patterns/accordion.json +35 -27
- package/dist/profiles/conductor/patterns/alert.json +29 -21
- package/dist/profiles/conductor/patterns/carousel.json +36 -28
- package/dist/profiles/conductor/patterns/checkbox.json +67 -0
- package/dist/profiles/conductor/patterns/combobox.json +37 -29
- package/dist/profiles/conductor/patterns/consequential-submission.json +34 -25
- package/dist/profiles/conductor/patterns/dialog.json +37 -29
- package/dist/profiles/conductor/patterns/disclosure.json +33 -25
- package/dist/profiles/conductor/patterns/dynamic-status.json +31 -22
- package/dist/profiles/conductor/patterns/field.json +41 -25
- package/dist/profiles/conductor/patterns/image.json +31 -22
- package/dist/profiles/conductor/patterns/listbox.json +35 -27
- package/dist/profiles/conductor/patterns/media-player.json +59 -29
- package/dist/profiles/conductor/patterns/menu-button.json +34 -26
- package/dist/profiles/conductor/patterns/menu.json +78 -0
- package/dist/profiles/conductor/patterns/pagination.json +34 -25
- package/dist/profiles/conductor/patterns/popover.json +42 -26
- package/dist/profiles/conductor/patterns/progress.json +38 -23
- package/dist/profiles/conductor/patterns/radio-group.json +69 -0
- package/dist/profiles/conductor/patterns/slider.json +84 -0
- package/dist/profiles/conductor/patterns/spinbutton.json +74 -0
- package/dist/profiles/conductor/patterns/tabs.json +34 -26
- package/dist/profiles/conductor/patterns/tooltip.json +31 -23
- package/dist/profiles/conductor/patterns/tree-view.json +77 -0
- package/dist/profiles/conductor/patterns/validation.json +42 -26
- package/dist/profiles/conductor/semantics.json +826 -130
- package/dist/profiles/conductor/ui-design-brain-bindings.json +287 -307
- package/dist/projection-manifest.json +120 -104
- package/dist/requirements-to-implementation.md +7 -1
- package/lib/build.mjs +3 -3
- package/lib/digest.mjs +8 -0
- package/lib/load.mjs +13 -0
- package/lib/provenance.mjs +2 -0
- package/lib/render.mjs +51 -7
- package/lib/sync.mjs +2 -2
- package/lib/validate.mjs +335 -33
- package/package.json +6 -2
- package/profiles/ai-orchestration/profile.json +1 -1
- package/profiles/ai-orchestration/templates/patterns/README.md +1 -1
- package/profiles/ai-orchestration/templates/review/README.md +1 -1
- package/profiles/ai-orchestration/templates/semantics/README.md +1 -1
- package/profiles/ai-orchestration/templates/testing/README.md +1 -1
- package/profiles/conductor/profile.json +1 -1
- package/profiles/conductor/templates/evidence/README.md +1 -1
- package/profiles/conductor/templates/patterns/README.md +1 -1
- package/profiles/conductor/templates/semantics/README.md +1 -1
- package/schemas/consumer-config.schema.json +1 -1
- package/schemas/contract.schema.json +1 -1
- package/schemas/manifest.schema.json +1 -1
- package/schemas/pattern.schema.json +98 -1
- package/schemas/profile.schema.json +1 -1
- package/schemas/projection-manifest.schema.json +6 -6
- package/schemas/semantic.schema.json +26 -1
- package/schemas/standards-reference.schema.json +105 -0
- package/schemas/wcag-coverage.schema.json +93 -0
- package/src/applicability/facts.yml +3 -5
- package/src/applicability/matrix.yml +5 -7
- package/src/applicability/ui-design-brain-bindings.yml +8 -22
- package/src/contract.yml +1 -1
- package/src/coverage/wcag-2.2.yml +68 -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/spinbutton.yml +1 -0
- 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/menu.yml +1 -0
- package/src/patterns/navigation/pagination.yml +1 -1
- package/src/patterns/navigation/tabs.yml +1 -1
- package/src/patterns/navigation/tree-view.yml +1 -0
- 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/checkbox.yml +1 -0
- package/src/patterns/selection/combobox.yml +1 -1
- package/src/patterns/selection/listbox.yml +1 -1
- package/src/patterns/selection/radio-group.yml +1 -0
- package/src/patterns/selection/slider.yml +1 -0
- package/src/semantics/accessible-names.yml +1 -1
- package/src/semantics/forms.yml +1 -1
- package/src/semantics/headings-landmarks.yml +1 -1
- package/src/semantics/keyboard-focus.yml +1 -1
- package/src/semantics/live-regions.yml +1 -1
- package/src/semantics/media.yml +1 -1
- package/src/semantics/native-elements.yml +1 -1
- package/src/semantics/roles-states-properties.yml +1 -1
- package/src/semantics/tables.yml +1 -1
- package/src/semantics/wcag-2.2.yml +1 -0
- package/src/sources.yml +1 -1
|
@@ -1 +1,98 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "pattern.schema.json",
|
|
4
|
+
"$defs": {
|
|
5
|
+
"fact": { "type": "string", "pattern": "^[a-z][a-z0-9_-]*(?:\\.[a-z][a-z0-9_-]*)+$" },
|
|
6
|
+
"operand": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"required": ["fact", "value"],
|
|
9
|
+
"additionalProperties": false,
|
|
10
|
+
"properties": { "fact": { "$ref": "#/$defs/fact" }, "value": {} }
|
|
11
|
+
},
|
|
12
|
+
"existsOperand": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"required": ["fact"],
|
|
15
|
+
"additionalProperties": false,
|
|
16
|
+
"properties": { "fact": { "$ref": "#/$defs/fact" } }
|
|
17
|
+
},
|
|
18
|
+
"expression": {
|
|
19
|
+
"oneOf": [
|
|
20
|
+
{
|
|
21
|
+
"type": "object",
|
|
22
|
+
"required": ["all"],
|
|
23
|
+
"additionalProperties": false,
|
|
24
|
+
"properties": { "all": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/expression" } } }
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"type": "object",
|
|
28
|
+
"required": ["any"],
|
|
29
|
+
"additionalProperties": false,
|
|
30
|
+
"properties": { "any": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/expression" } } }
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"type": "object",
|
|
34
|
+
"required": ["not"],
|
|
35
|
+
"additionalProperties": false,
|
|
36
|
+
"properties": { "not": { "$ref": "#/$defs/expression" } }
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"type": "object",
|
|
40
|
+
"required": ["equals"],
|
|
41
|
+
"additionalProperties": false,
|
|
42
|
+
"properties": { "equals": { "$ref": "#/$defs/operand" } }
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"type": "object",
|
|
46
|
+
"required": ["contains"],
|
|
47
|
+
"additionalProperties": false,
|
|
48
|
+
"properties": { "contains": { "$ref": "#/$defs/operand" } }
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"type": "object",
|
|
52
|
+
"required": ["exists"],
|
|
53
|
+
"additionalProperties": false,
|
|
54
|
+
"properties": { "exists": { "$ref": "#/$defs/existsOperand" } }
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"nonBlankStrings": {
|
|
59
|
+
"type": "array",
|
|
60
|
+
"items": { "type": "string", "pattern": "\\S" },
|
|
61
|
+
"minItems": 1,
|
|
62
|
+
"uniqueItems": true
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"type": "object",
|
|
66
|
+
"required": ["id", "version", "title", "kind", "standards_refs", "requires", "activation", "scope", "behavior", "product_decisions", "functional_spec_bindings", "implementation_outcomes", "evidence_routes"],
|
|
67
|
+
"additionalProperties": false,
|
|
68
|
+
"properties": {
|
|
69
|
+
"id": { "type": "string", "pattern": "^pattern\\.[a-z0-9]+(?:[.-][a-z0-9]+)*$" },
|
|
70
|
+
"version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" },
|
|
71
|
+
"title": { "type": "string", "pattern": "\\S" },
|
|
72
|
+
"kind": { "const": "pattern" },
|
|
73
|
+
"standards_refs": {
|
|
74
|
+
"type": "array",
|
|
75
|
+
"items": { "$ref": "standards-reference.schema.json" },
|
|
76
|
+
"minItems": 1,
|
|
77
|
+
"uniqueItems": true
|
|
78
|
+
},
|
|
79
|
+
"requires": {
|
|
80
|
+
"type": "array",
|
|
81
|
+
"items": { "type": "string", "pattern": "^semantics\\.[a-z0-9]+(?:[.-][a-z0-9]+)*$" },
|
|
82
|
+
"minItems": 1,
|
|
83
|
+
"uniqueItems": true
|
|
84
|
+
},
|
|
85
|
+
"activation": { "$ref": "#/$defs/expression" },
|
|
86
|
+
"scope": { "type": "string", "pattern": "\\S" },
|
|
87
|
+
"behavior": { "$ref": "#/$defs/nonBlankStrings" },
|
|
88
|
+
"product_decisions": { "$ref": "#/$defs/nonBlankStrings" },
|
|
89
|
+
"functional_spec_bindings": { "$ref": "#/$defs/nonBlankStrings" },
|
|
90
|
+
"implementation_outcomes": { "$ref": "#/$defs/nonBlankStrings" },
|
|
91
|
+
"evidence_routes": {
|
|
92
|
+
"type": "array",
|
|
93
|
+
"items": { "enum": ["unit", "axe", "e2e", "human"] },
|
|
94
|
+
"minItems": 1,
|
|
95
|
+
"uniqueItems": true
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"profile.schema.json","type":"object","required":["name","version","channels"],"properties":{"name":{"enum":["conductor","ai-orchestration"]},"version":{"
|
|
1
|
+
{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"profile.schema.json","type":"object","required":["name","version","channels"],"properties":{"name":{"enum":["conductor","ai-orchestration"]},"version":{"const":"3.0.0"},"channels":{"type":"array","items":{"type":"string"},"uniqueItems":true}},"additionalProperties":false}
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
],
|
|
27
27
|
"properties": {
|
|
28
28
|
"_generated": { "type": "string" },
|
|
29
|
-
"package": { "
|
|
29
|
+
"package": { "const": "@verndale/accessibility-standards@3.0.0" },
|
|
30
30
|
"profile": { "enum": ["conductor", "ai-orchestration"] },
|
|
31
|
-
"profile_version": { "
|
|
32
|
-
"schema_version": { "
|
|
31
|
+
"profile_version": { "const": "3.0.0" },
|
|
32
|
+
"schema_version": { "const": 3 },
|
|
33
33
|
"digests": {
|
|
34
34
|
"type": "object",
|
|
35
35
|
"required": ["source", "profile", "ui_design_brain_bindings", "config", "routes"],
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"required": ["_generated", "package", "schema_version", "source_digest", "profile_digests", "ui_design_brain", "profiles"],
|
|
51
51
|
"properties": {
|
|
52
52
|
"_generated": { "type": "string" },
|
|
53
|
-
"package": { "
|
|
54
|
-
"schema_version": { "
|
|
53
|
+
"package": { "const": "@verndale/accessibility-standards@3.0.0" },
|
|
54
|
+
"schema_version": { "const": 3 },
|
|
55
55
|
"source_digest": { "$ref": "#/$defs/digest" },
|
|
56
56
|
"profile_digests": {
|
|
57
57
|
"type": "object",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"type": "object",
|
|
67
67
|
"required": ["version", "profile_digest", "source_digest", "outputs"],
|
|
68
68
|
"properties": {
|
|
69
|
-
"version": { "
|
|
69
|
+
"version": { "const": "3.0.0" },
|
|
70
70
|
"profile_digest": { "$ref": "#/$defs/digest" },
|
|
71
71
|
"source_digest": { "$ref": "#/$defs/digest" },
|
|
72
72
|
"outputs": { "type": "object", "additionalProperties": { "$ref": "#/$defs/digest" } }
|
|
@@ -1 +1,26 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "semantic.schema.json",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": ["id", "version", "title", "kind", "requirement", "proof", "standards_refs"],
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"properties": {
|
|
8
|
+
"id": { "type": "string", "pattern": "^semantics\\.[a-z0-9]+(?:[.-][a-z0-9]+)*$" },
|
|
9
|
+
"version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" },
|
|
10
|
+
"title": { "type": "string", "pattern": "\\S" },
|
|
11
|
+
"kind": { "const": "semantic" },
|
|
12
|
+
"requirement": { "type": "string", "pattern": "\\S" },
|
|
13
|
+
"proof": {
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": { "enum": ["unit", "axe", "e2e", "human"] },
|
|
16
|
+
"minItems": 1,
|
|
17
|
+
"uniqueItems": true
|
|
18
|
+
},
|
|
19
|
+
"standards_refs": {
|
|
20
|
+
"type": "array",
|
|
21
|
+
"items": { "$ref": "standards-reference.schema.json" },
|
|
22
|
+
"minItems": 1,
|
|
23
|
+
"uniqueItems": true
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "standards-reference.schema.json",
|
|
4
|
+
"$defs": {
|
|
5
|
+
"criterionId": {
|
|
6
|
+
"enum": [
|
|
7
|
+
"1.1.1", "1.2.1", "1.2.2", "1.2.3", "1.2.4", "1.2.5", "1.2.6", "1.2.7", "1.2.8", "1.2.9",
|
|
8
|
+
"1.3.1", "1.3.2", "1.3.3", "1.3.4", "1.3.5", "1.3.6",
|
|
9
|
+
"1.4.1", "1.4.2", "1.4.3", "1.4.4", "1.4.5", "1.4.6", "1.4.7", "1.4.8", "1.4.9", "1.4.10", "1.4.11", "1.4.12", "1.4.13",
|
|
10
|
+
"2.1.1", "2.1.2", "2.1.3", "2.1.4",
|
|
11
|
+
"2.2.1", "2.2.2", "2.2.3", "2.2.4", "2.2.5", "2.2.6",
|
|
12
|
+
"2.3.1", "2.3.2", "2.3.3",
|
|
13
|
+
"2.4.1", "2.4.2", "2.4.3", "2.4.4", "2.4.5", "2.4.6", "2.4.7", "2.4.8", "2.4.9", "2.4.10", "2.4.11", "2.4.12", "2.4.13",
|
|
14
|
+
"2.5.1", "2.5.2", "2.5.3", "2.5.4", "2.5.5", "2.5.6", "2.5.7", "2.5.8",
|
|
15
|
+
"3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6",
|
|
16
|
+
"3.2.1", "3.2.2", "3.2.3", "3.2.4", "3.2.5", "3.2.6",
|
|
17
|
+
"3.3.1", "3.3.2", "3.3.3", "3.3.4", "3.3.5", "3.3.6", "3.3.7", "3.3.8", "3.3.9",
|
|
18
|
+
"4.1.2", "4.1.3"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"levelAIds": {
|
|
22
|
+
"enum": [
|
|
23
|
+
"1.1.1", "1.2.1", "1.2.2", "1.2.3", "1.3.1", "1.3.2", "1.3.3", "1.4.1", "1.4.2",
|
|
24
|
+
"2.1.1", "2.1.2", "2.1.4", "2.2.1", "2.2.2", "2.3.1", "2.4.1", "2.4.2", "2.4.3", "2.4.4",
|
|
25
|
+
"2.5.1", "2.5.2", "2.5.3", "2.5.4", "3.1.1", "3.2.1", "3.2.2", "3.2.6", "3.3.1", "3.3.2", "3.3.7", "4.1.2"
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
"levelAAIds": {
|
|
29
|
+
"enum": [
|
|
30
|
+
"1.2.4", "1.2.5", "1.3.4", "1.3.5", "1.4.3", "1.4.4", "1.4.5", "1.4.10", "1.4.11", "1.4.12", "1.4.13",
|
|
31
|
+
"2.4.5", "2.4.6", "2.4.7", "2.4.11", "2.5.7", "2.5.8", "3.1.2", "3.2.3", "3.2.4", "3.3.3", "3.3.4", "3.3.8", "4.1.3"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
"levelAAAIds": {
|
|
35
|
+
"enum": [
|
|
36
|
+
"1.2.6", "1.2.7", "1.2.8", "1.2.9", "1.3.6", "1.4.6", "1.4.7", "1.4.8", "1.4.9",
|
|
37
|
+
"2.1.3", "2.2.3", "2.2.4", "2.2.5", "2.2.6", "2.3.2", "2.3.3", "2.4.8", "2.4.9", "2.4.10", "2.4.12", "2.4.13", "2.5.5", "2.5.6",
|
|
38
|
+
"3.1.3", "3.1.4", "3.1.5", "3.1.6", "3.2.5", "3.3.5", "3.3.6", "3.3.9"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"levelMatch": {
|
|
42
|
+
"oneOf": [
|
|
43
|
+
{ "properties": { "identifier": { "$ref": "#/$defs/levelAIds" }, "level": { "const": "A" } }, "required": ["identifier", "level"] },
|
|
44
|
+
{ "properties": { "identifier": { "$ref": "#/$defs/levelAAIds" }, "level": { "const": "AA" } }, "required": ["identifier", "level"] },
|
|
45
|
+
{ "properties": { "identifier": { "$ref": "#/$defs/levelAAAIds" }, "level": { "const": "AAA" } }, "required": ["identifier", "level"] }
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"wcagUrl": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"pattern": "^https://www\\.w3\\.org/TR/WCAG22/#(?:non-text-content|audio-only-and-video-only-prerecorded|captions-prerecorded|audio-description-or-media-alternative-prerecorded|captions-live|audio-description-prerecorded|sign-language-prerecorded|extended-audio-description-prerecorded|media-alternative-prerecorded|audio-only-live|info-and-relationships|meaningful-sequence|sensory-characteristics|orientation|identify-input-purpose|identify-purpose|use-of-color|audio-control|contrast-minimum|resize-text|images-of-text|contrast-enhanced|low-or-no-background-audio|visual-presentation|images-of-text-no-exception|reflow|non-text-contrast|text-spacing|content-on-hover-or-focus|keyboard|no-keyboard-trap|keyboard-no-exception|character-key-shortcuts|timing-adjustable|pause-stop-hide|no-timing|interruptions|re-authenticating|timeouts|three-flashes-or-below-threshold|three-flashes|animation-from-interactions|bypass-blocks|page-titled|focus-order|link-purpose-in-context|multiple-ways|headings-and-labels|focus-visible|location|link-purpose-link-only|section-headings|focus-not-obscured-minimum|focus-not-obscured-enhanced|focus-appearance|pointer-gestures|pointer-cancellation|label-in-name|motion-actuation|target-size-enhanced|concurrent-input-mechanisms|dragging-movements|target-size-minimum|language-of-page|language-of-parts|unusual-words|abbreviations|reading-level|pronunciation|on-focus|on-input|consistent-navigation|consistent-identification|change-on-request|consistent-help|error-identification|labels-or-instructions|error-suggestion|error-prevention-legal-financial-data|help|error-prevention-all|redundant-entry|accessible-authentication-minimum|accessible-authentication-enhanced|name-role-value|status-messages)$"
|
|
51
|
+
},
|
|
52
|
+
"understandingUrl": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"pattern": "^https://www\\.w3\\.org/WAI/WCAG22/Understanding/(?:non-text-content|audio-only-and-video-only-prerecorded|captions-prerecorded|audio-description-or-media-alternative-prerecorded|captions-live|audio-description-prerecorded|sign-language-prerecorded|extended-audio-description-prerecorded|media-alternative-prerecorded|audio-only-live|info-and-relationships|meaningful-sequence|sensory-characteristics|orientation|identify-input-purpose|identify-purpose|use-of-color|audio-control|contrast-minimum|resize-text|images-of-text|contrast-enhanced|low-or-no-background-audio|visual-presentation|images-of-text-no-exception|reflow|non-text-contrast|text-spacing|content-on-hover-or-focus|keyboard|no-keyboard-trap|keyboard-no-exception|character-key-shortcuts|timing-adjustable|pause-stop-hide|no-timing|interruptions|re-authenticating|timeouts|three-flashes-or-below-threshold|three-flashes|animation-from-interactions|bypass-blocks|page-titled|focus-order|link-purpose-in-context|multiple-ways|headings-and-labels|focus-visible|location|link-purpose-link-only|section-headings|focus-not-obscured-minimum|focus-not-obscured-enhanced|focus-appearance|pointer-gestures|pointer-cancellation|label-in-name|motion-actuation|target-size-enhanced|concurrent-input-mechanisms|dragging-movements|target-size-minimum|language-of-page|language-of-parts|unusual-words|abbreviations|reading-level|pronunciation|on-focus|on-input|consistent-navigation|consistent-identification|change-on-request|consistent-help|error-identification|labels-or-instructions|error-suggestion|error-prevention-legal-financial-data|help|error-prevention-all|redundant-entry|accessible-authentication-minimum|accessible-authentication-enhanced|name-role-value|status-messages)\\.html$"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"type": "object",
|
|
58
|
+
"required": ["authority", "identifier", "url", "normative"],
|
|
59
|
+
"additionalProperties": false,
|
|
60
|
+
"properties": {
|
|
61
|
+
"authority": { "enum": ["wcag-2.2", "wcag-2.2-understanding", "wai-aria-1.2", "aria-apg"] },
|
|
62
|
+
"identifier": { "type": "string", "pattern": "\\S" },
|
|
63
|
+
"url": { "type": "string", "pattern": "^https://" },
|
|
64
|
+
"normative": { "type": "boolean" },
|
|
65
|
+
"level": { "enum": ["A", "AA", "AAA"] }
|
|
66
|
+
},
|
|
67
|
+
"oneOf": [
|
|
68
|
+
{
|
|
69
|
+
"properties": {
|
|
70
|
+
"authority": { "const": "wcag-2.2" },
|
|
71
|
+
"identifier": { "$ref": "#/$defs/criterionId" },
|
|
72
|
+
"url": { "$ref": "#/$defs/wcagUrl" },
|
|
73
|
+
"normative": { "const": true }
|
|
74
|
+
},
|
|
75
|
+
"required": ["level"],
|
|
76
|
+
"allOf": [{ "$ref": "#/$defs/levelMatch" }]
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"properties": {
|
|
80
|
+
"authority": { "const": "wcag-2.2-understanding" },
|
|
81
|
+
"identifier": { "$ref": "#/$defs/criterionId" },
|
|
82
|
+
"url": { "$ref": "#/$defs/understandingUrl" },
|
|
83
|
+
"normative": { "const": false }
|
|
84
|
+
},
|
|
85
|
+
"required": ["level"],
|
|
86
|
+
"allOf": [{ "$ref": "#/$defs/levelMatch" }]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"properties": {
|
|
90
|
+
"authority": { "const": "wai-aria-1.2" },
|
|
91
|
+
"url": { "type": "string", "pattern": "^https://www\\.w3\\.org/TR/wai-aria-1\\.2/" },
|
|
92
|
+
"normative": { "const": true }
|
|
93
|
+
},
|
|
94
|
+
"not": { "required": ["level"] }
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"properties": {
|
|
98
|
+
"authority": { "const": "aria-apg" },
|
|
99
|
+
"url": { "type": "string", "pattern": "^https://www\\.w3\\.org/WAI/ARIA/apg/" },
|
|
100
|
+
"normative": { "const": false }
|
|
101
|
+
},
|
|
102
|
+
"not": { "required": ["level"] }
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "wcag-coverage.schema.json",
|
|
4
|
+
"$defs": {
|
|
5
|
+
"levelAIds": {
|
|
6
|
+
"enum": [
|
|
7
|
+
"1.1.1", "1.2.1", "1.2.2", "1.2.3", "1.3.1", "1.3.2", "1.3.3", "1.4.1", "1.4.2",
|
|
8
|
+
"2.1.1", "2.1.2", "2.1.4", "2.2.1", "2.2.2", "2.3.1", "2.4.1", "2.4.2", "2.4.3", "2.4.4",
|
|
9
|
+
"2.5.1", "2.5.2", "2.5.3", "2.5.4", "3.1.1", "3.2.1", "3.2.2", "3.2.6", "3.3.1", "3.3.2", "3.3.7", "4.1.2"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
"levelAAIds": {
|
|
13
|
+
"enum": [
|
|
14
|
+
"1.2.4", "1.2.5", "1.3.4", "1.3.5", "1.4.3", "1.4.4", "1.4.5", "1.4.10", "1.4.11", "1.4.12", "1.4.13",
|
|
15
|
+
"2.4.5", "2.4.6", "2.4.7", "2.4.11", "2.5.7", "2.5.8", "3.1.2", "3.2.3", "3.2.4", "3.3.3", "3.3.4", "3.3.8", "4.1.3"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"criterion": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"required": ["id", "title", "level", "status", "semantic_ids"],
|
|
21
|
+
"additionalProperties": false,
|
|
22
|
+
"properties": {
|
|
23
|
+
"id": {
|
|
24
|
+
"anyOf": [
|
|
25
|
+
{ "$ref": "#/$defs/levelAIds" },
|
|
26
|
+
{ "$ref": "#/$defs/levelAAIds" }
|
|
27
|
+
]
|
|
28
|
+
},
|
|
29
|
+
"title": { "type": "string", "pattern": "\\S" },
|
|
30
|
+
"level": { "enum": ["A", "AA"] },
|
|
31
|
+
"status": { "enum": ["covered", "partial", "gap"] },
|
|
32
|
+
"semantic_ids": {
|
|
33
|
+
"type": "array",
|
|
34
|
+
"items": { "type": "string", "pattern": "^semantics\\.[a-z0-9]+(?:[.-][a-z0-9]+)*$" },
|
|
35
|
+
"uniqueItems": true
|
|
36
|
+
},
|
|
37
|
+
"note": { "type": "string", "pattern": "\\S" }
|
|
38
|
+
},
|
|
39
|
+
"allOf": [
|
|
40
|
+
{
|
|
41
|
+
"oneOf": [
|
|
42
|
+
{ "properties": { "id": { "$ref": "#/$defs/levelAIds" }, "level": { "const": "A" } }, "required": ["id", "level"] },
|
|
43
|
+
{ "properties": { "id": { "$ref": "#/$defs/levelAAIds" }, "level": { "const": "AA" } }, "required": ["id", "level"] }
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"if": { "properties": { "status": { "const": "gap" } }, "required": ["status"] },
|
|
48
|
+
"then": { "properties": { "semantic_ids": { "maxItems": 0 } } },
|
|
49
|
+
"else": { "properties": { "semantic_ids": { "minItems": 1 } } }
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"if": { "properties": { "status": { "enum": ["partial", "gap"] } }, "required": ["status"] },
|
|
53
|
+
"then": { "required": ["note"] }
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"type": "object",
|
|
59
|
+
"required": ["version", "authority", "deferred_patterns", "criteria"],
|
|
60
|
+
"additionalProperties": false,
|
|
61
|
+
"properties": {
|
|
62
|
+
"version": { "const": 1 },
|
|
63
|
+
"authority": { "const": "wcag-2.2" },
|
|
64
|
+
"deferred_patterns": {
|
|
65
|
+
"type": "array",
|
|
66
|
+
"minItems": 5,
|
|
67
|
+
"uniqueItems": true,
|
|
68
|
+
"items": {
|
|
69
|
+
"type": "object",
|
|
70
|
+
"required": ["id", "reason"],
|
|
71
|
+
"additionalProperties": false,
|
|
72
|
+
"properties": {
|
|
73
|
+
"id": { "type": "string", "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" },
|
|
74
|
+
"reason": { "type": "string", "pattern": "\\S" }
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"allOf": [
|
|
78
|
+
{ "contains": { "properties": { "id": { "const": "alert-dialog" } }, "required": ["id"] } },
|
|
79
|
+
{ "contains": { "properties": { "id": { "const": "grid" } }, "required": ["id"] } },
|
|
80
|
+
{ "contains": { "properties": { "id": { "const": "switch" } }, "required": ["id"] } },
|
|
81
|
+
{ "contains": { "properties": { "id": { "const": "toolbar" } }, "required": ["id"] } },
|
|
82
|
+
{ "contains": { "properties": { "id": { "const": "treegrid" } }, "required": ["id"] } }
|
|
83
|
+
]
|
|
84
|
+
},
|
|
85
|
+
"criteria": {
|
|
86
|
+
"type": "array",
|
|
87
|
+
"minItems": 55,
|
|
88
|
+
"maxItems": 55,
|
|
89
|
+
"uniqueItems": true,
|
|
90
|
+
"items": { "$ref": "#/$defs/criterion" }
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -16,14 +16,12 @@
|
|
|
16
16
|
"component.selection_model": { "type": "string" },
|
|
17
17
|
"interaction.has_motion_or_timing": { "type": "boolean" },
|
|
18
18
|
"interaction.has_complex_pointer": { "type": "boolean" },
|
|
19
|
-
"interaction.
|
|
20
|
-
"content.uses_orientation_or_sensory_cues": { "type": "boolean" },
|
|
19
|
+
"interaction.has_dragging": { "type": "boolean" },
|
|
21
20
|
"interaction.has_pointer_targets": { "type": "boolean" },
|
|
22
21
|
"interaction.can_obscure_focus": { "type": "boolean" },
|
|
23
22
|
"flow.has_authentication": { "type": "boolean" },
|
|
24
23
|
"flow.repeats_entry": { "type": "boolean" },
|
|
25
|
-
"artifact.
|
|
26
|
-
"
|
|
27
|
-
"component.has_data_table_or_grid": { "type": "boolean" }
|
|
24
|
+
"artifact.has_repeated_help_across_page_set": { "type": "boolean" },
|
|
25
|
+
"component.has_data_table": { "type": "boolean" }
|
|
28
26
|
}
|
|
29
27
|
}
|
|
@@ -9,13 +9,11 @@
|
|
|
9
9
|
{"id":"applicability.overlays","when":{"any":[{"contains":{"fact":"component.ui_pattern_ids","value":"modal"}},{"contains":{"fact":"component.ui_pattern_ids","value":"popover"}},{"contains":{"fact":"component.ui_pattern_ids","value":"tooltip"}}]},"outcomes":["semantics.keyboard.escape","semantics.focus.return"],"evidence":["e2e"]},
|
|
10
10
|
{"id":"applicability.motion-timing","when":{"equals":{"fact":"interaction.has_motion_or_timing","value":true}},"outcomes":["semantics.motion-control"],"evidence":["e2e","human"]},
|
|
11
11
|
{"id":"applicability.complex-pointer","when":{"equals":{"fact":"interaction.has_complex_pointer","value":true}},"outcomes":["semantics.keyboard"],"evidence":["e2e","human"]},
|
|
12
|
-
{"id":"applicability.
|
|
13
|
-
{"id":"applicability.orientation-sensory","when":{"equals":{"fact":"content.uses_orientation_or_sensory_cues","value":true}},"outcomes":["semantics.name-role-value"],"evidence":["human"]},
|
|
12
|
+
{"id":"applicability.dragging-alternative","when":{"equals":{"fact":"interaction.has_dragging","value":true}},"outcomes":["semantics.dragging-alternative"],"evidence":["e2e","human"]},
|
|
14
13
|
{"id":"applicability.target-size","when":{"equals":{"fact":"interaction.has_pointer_targets","value":true}},"outcomes":["semantics.target-size"],"evidence":["e2e","human"]},
|
|
15
14
|
{"id":"applicability.focus-obstruction","when":{"equals":{"fact":"interaction.can_obscure_focus","value":true}},"outcomes":["semantics.focus.visible"],"evidence":["e2e","human"]},
|
|
16
|
-
{"id":"applicability.authentication
|
|
17
|
-
{"id":"applicability.redundant-entry","when":{"equals":{"fact":"flow.repeats_entry","value":true}},"outcomes":["semantics.form-label"],"evidence":["e2e","human"]},
|
|
18
|
-
{"id":"applicability.consistent-help","when":{"equals":{"fact":"artifact.
|
|
19
|
-
{"id":"applicability.
|
|
20
|
-
{"id":"applicability.data-table-grid","when":{"equals":{"fact":"component.has_data_table_or_grid","value":true}},"outcomes":["semantics.data-table"],"evidence":["axe","e2e","human"]}
|
|
15
|
+
{"id":"applicability.accessible-authentication","when":{"equals":{"fact":"flow.has_authentication","value":true}},"outcomes":["semantics.accessible-authentication"],"evidence":["e2e","human"]},
|
|
16
|
+
{"id":"applicability.redundant-entry","when":{"equals":{"fact":"flow.repeats_entry","value":true}},"outcomes":["semantics.form-label","semantics.redundant-entry"],"evidence":["e2e","human"]},
|
|
17
|
+
{"id":"applicability.consistent-help","when":{"equals":{"fact":"artifact.has_repeated_help_across_page_set","value":true}},"outcomes":["semantics.consistent-help"],"evidence":["e2e","human"]},
|
|
18
|
+
{"id":"applicability.data-table","when":{"equals":{"fact":"component.has_data_table","value":true}},"outcomes":["semantics.data-table"],"evidence":["axe","e2e","human"]}
|
|
21
19
|
]}
|
|
@@ -36,18 +36,11 @@
|
|
|
36
36
|
{ "ui_pattern_id": "button-group", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.native-elements"] },
|
|
37
37
|
{ "ui_pattern_id": "card", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
|
|
38
38
|
{ "ui_pattern_id": "carousel", "classification": "direct", "pattern_ids": ["pattern.carousel"] },
|
|
39
|
-
{ "ui_pattern_id": "checkbox", "classification": "direct", "pattern_ids": ["pattern.field"] },
|
|
39
|
+
{ "ui_pattern_id": "checkbox", "classification": "direct", "pattern_ids": ["pattern.checkbox", "pattern.field"] },
|
|
40
40
|
{ "ui_pattern_id": "color-picker", "classification": "direct", "pattern_ids": ["pattern.field"] },
|
|
41
41
|
{ "ui_pattern_id": "combobox", "classification": "direct", "pattern_ids": ["pattern.combobox", "pattern.field"] },
|
|
42
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
|
-
},
|
|
43
|
+
{ "ui_pattern_id": "context-menu", "classification": "direct", "pattern_ids": ["pattern.menu"] },
|
|
51
44
|
{ "ui_pattern_id": "date-input", "classification": "direct", "pattern_ids": ["pattern.field"] },
|
|
52
45
|
{
|
|
53
46
|
"ui_pattern_id": "datepicker",
|
|
@@ -69,14 +62,7 @@
|
|
|
69
62
|
{ "pattern_id": "pattern.popover", "when": { "equals": { "fact": "component.overlay_model", "value": "non-modal" } } }
|
|
70
63
|
]
|
|
71
64
|
},
|
|
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
|
-
},
|
|
65
|
+
{ "ui_pattern_id": "dropdown-menu", "classification": "direct", "pattern_ids": ["pattern.menu", "pattern.menu-button"] },
|
|
80
66
|
{
|
|
81
67
|
"ui_pattern_id": "empty-state",
|
|
82
68
|
"classification": "candidate",
|
|
@@ -131,13 +117,13 @@
|
|
|
131
117
|
{ "pattern_id": "pattern.menu-button", "when": { "equals": { "fact": "component.command_menu_trigger", "value": true } } }
|
|
132
118
|
]
|
|
133
119
|
},
|
|
134
|
-
{ "ui_pattern_id": "number-input", "classification": "direct", "pattern_ids": ["pattern.field"] },
|
|
120
|
+
{ "ui_pattern_id": "number-input", "classification": "direct", "pattern_ids": ["pattern.field", "pattern.spinbutton"] },
|
|
135
121
|
{ "ui_pattern_id": "pagination", "classification": "direct", "pattern_ids": ["pattern.pagination"] },
|
|
136
122
|
{ "ui_pattern_id": "popover", "classification": "direct", "pattern_ids": ["pattern.popover"] },
|
|
137
123
|
{ "ui_pattern_id": "progress-bar", "classification": "direct", "pattern_ids": ["pattern.progress"] },
|
|
138
124
|
{ "ui_pattern_id": "progress-indicator", "classification": "direct", "pattern_ids": ["pattern.progress"] },
|
|
139
125
|
{ "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"] },
|
|
126
|
+
{ "ui_pattern_id": "radio-button", "classification": "direct", "pattern_ids": ["pattern.field", "pattern.radio-group"] },
|
|
141
127
|
{ "ui_pattern_id": "rating", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.name-role-value"] },
|
|
142
128
|
{ "ui_pattern_id": "rich-text", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.headings", "semantics.native-elements"] },
|
|
143
129
|
{ "ui_pattern_id": "rich-text-editor", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.accessible-name", "semantics.focus.visible", "semantics.keyboard", "semantics.name-role-value"] },
|
|
@@ -181,11 +167,11 @@
|
|
|
181
167
|
]
|
|
182
168
|
},
|
|
183
169
|
{ "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"] },
|
|
170
|
+
{ "ui_pattern_id": "slider", "classification": "direct", "pattern_ids": ["pattern.field", "pattern.slider"] },
|
|
185
171
|
{ "ui_pattern_id": "spinner", "classification": "direct", "pattern_ids": ["pattern.progress"] },
|
|
186
172
|
{ "ui_pattern_id": "stack", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
|
|
187
173
|
{ "ui_pattern_id": "stat", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
|
|
188
|
-
{ "ui_pattern_id": "stepper", "classification": "direct", "pattern_ids": ["pattern.field"] },
|
|
174
|
+
{ "ui_pattern_id": "stepper", "classification": "direct", "pattern_ids": ["pattern.field", "pattern.spinbutton"] },
|
|
189
175
|
{ "ui_pattern_id": "table", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.data-table"] },
|
|
190
176
|
{ "ui_pattern_id": "tabs", "classification": "direct", "pattern_ids": ["pattern.tabs"] },
|
|
191
177
|
{ "ui_pattern_id": "text-input", "classification": "direct", "pattern_ids": ["pattern.field"] },
|
|
@@ -201,7 +187,7 @@
|
|
|
201
187
|
},
|
|
202
188
|
{ "ui_pattern_id": "toggle", "classification": "direct", "pattern_ids": ["pattern.field"] },
|
|
203
189
|
{ "ui_pattern_id": "tooltip", "classification": "direct", "pattern_ids": ["pattern.tooltip"] },
|
|
204
|
-
{ "ui_pattern_id": "tree-view", "classification": "
|
|
190
|
+
{ "ui_pattern_id": "tree-view", "classification": "direct", "pattern_ids": ["pattern.tree-view"] },
|
|
205
191
|
{ "ui_pattern_id": "utility-bar", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.landmarks"] },
|
|
206
192
|
{ "ui_pattern_id": "video", "classification": "direct", "pattern_ids": ["pattern.media-player"] },
|
|
207
193
|
{ "ui_pattern_id": "visually-hidden", "classification": "baseline-only", "baseline_semantic_ids": ["semantics.native-elements"] },
|
package/src/contract.yml
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"schema_version":
|
|
1
|
+
{"schema_version":3,"package_version":"3.0.0"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"authority": "wcag-2.2",
|
|
4
|
+
"deferred_patterns": [
|
|
5
|
+
{"id":"alert-dialog","reason":"Deferred until dialog purpose distinguishes urgent confirmation or attention from a general modal dialog."},
|
|
6
|
+
{"id":"grid","reason":"Deferred until a static-versus-interactive grid discriminator and keyboard interaction model are defined."},
|
|
7
|
+
{"id":"switch","reason":"Deferred until a binary toggle model distinguishes switch behavior from a generic form field."},
|
|
8
|
+
{"id":"toolbar","reason":"Deferred until control-group behavior and its focus-management model are defined."},
|
|
9
|
+
{"id":"treegrid","reason":"Deferred until static-versus-interactive grid selection and the hierarchical tree interaction model are defined."}
|
|
10
|
+
],
|
|
11
|
+
"criteria": [
|
|
12
|
+
{"id":"1.1.1","title":"Non-text Content","level":"A","status":"partial","semantic_ids":["semantics.non-text-alternative"],"note":"Meaningful and decorative non-text content are covered, but dedicated obligations for controls and input, time-based media identification, tests, sensory experiences, and CAPTCHA alternatives are not all represented."},
|
|
13
|
+
{"id":"1.2.1","title":"Audio-only and Video-only (Prerecorded)","level":"A","status":"partial","semantic_ids":["semantics.media-alternatives"],"note":"The shared media rule does not distinguish every audio-only and video-only alternative."},
|
|
14
|
+
{"id":"1.2.2","title":"Captions (Prerecorded)","level":"A","status":"partial","semantic_ids":["semantics.media-alternatives"],"note":"Captions are required broadly, without a criterion-specific prerecorded contract."},
|
|
15
|
+
{"id":"1.2.3","title":"Audio Description or Media Alternative (Prerecorded)","level":"A","status":"partial","semantic_ids":["semantics.media-alternatives"],"note":"The shared media rule covers both alternatives but does not encode the criterion's conditional choice."},
|
|
16
|
+
{"id":"1.2.4","title":"Captions (Live)","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule requires live captions."},
|
|
17
|
+
{"id":"1.2.5","title":"Audio Description (Prerecorded)","level":"AA","status":"partial","semantic_ids":["semantics.media-alternatives"],"note":"Audio description is named, but prerecorded applicability is not represented independently."},
|
|
18
|
+
{"id":"1.3.1","title":"Info and Relationships","level":"A","status":"partial","semantic_ids":["semantics.data-table","semantics.form-label","semantics.form-required","semantics.headings","semantics.landmarks"],"note":"Several structural cases are covered, but the general criterion is broader than the current rules."},
|
|
19
|
+
{"id":"1.3.2","title":"Meaningful Sequence","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule explicitly preserves meaningful reading sequence."},
|
|
20
|
+
{"id":"1.3.3","title":"Sensory Characteristics","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule prevents instructions from relying only on sensory characteristics."},
|
|
21
|
+
{"id":"1.3.4","title":"Orientation","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule prevents unnecessary orientation restrictions."},
|
|
22
|
+
{"id":"1.3.5","title":"Identify Input Purpose","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule requires programmatic input-purpose tokens."},
|
|
23
|
+
{"id":"1.4.1","title":"Use of Color","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule prohibits color-only communication."},
|
|
24
|
+
{"id":"1.4.2","title":"Audio Control","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule requires independent control of automatically playing audio."},
|
|
25
|
+
{"id":"1.4.3","title":"Contrast (Minimum)","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule defines minimum text contrast."},
|
|
26
|
+
{"id":"1.4.4","title":"Resize Text","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule defines text resizing behavior."},
|
|
27
|
+
{"id":"1.4.5","title":"Images of Text","level":"AA","status":"gap","semantic_ids":[],"note":"Text alternatives do not replace a rule limiting images of text."},
|
|
28
|
+
{"id":"1.4.10","title":"Reflow","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule defines responsive reflow requirements."},
|
|
29
|
+
{"id":"1.4.11","title":"Non-text Contrast","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule defines contrast for controls, states, or graphical objects."},
|
|
30
|
+
{"id":"1.4.12","title":"Text Spacing","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule protects content under user-adjusted text spacing."},
|
|
31
|
+
{"id":"1.4.13","title":"Content on Hover or Focus","level":"AA","status":"gap","semantic_ids":[],"note":"Pattern behavior exists for tooltips, but no semantic rule covers dismissibility, hoverability, and persistence together."},
|
|
32
|
+
{"id":"2.1.1","title":"Keyboard","level":"A","status":"covered","semantic_ids":["semantics.keyboard"]},
|
|
33
|
+
{"id":"2.1.2","title":"No Keyboard Trap","level":"A","status":"covered","semantic_ids":["semantics.keyboard"]},
|
|
34
|
+
{"id":"2.1.4","title":"Character Key Shortcuts","level":"A","status":"gap","semantic_ids":[],"note":"Keyboard operability does not define shortcut remapping or deactivation."},
|
|
35
|
+
{"id":"2.2.1","title":"Timing Adjustable","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule encodes timing adjustment and its exceptions."},
|
|
36
|
+
{"id":"2.2.2","title":"Pause, Stop, Hide","level":"A","status":"covered","semantic_ids":["semantics.motion-control"]},
|
|
37
|
+
{"id":"2.3.1","title":"Three Flashes or Below Threshold","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule limits flashing content."},
|
|
38
|
+
{"id":"2.4.1","title":"Bypass Blocks","level":"A","status":"gap","semantic_ids":[],"note":"Landmarks alone do not establish a required bypass mechanism."},
|
|
39
|
+
{"id":"2.4.2","title":"Page Titled","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule requires descriptive page titles."},
|
|
40
|
+
{"id":"2.4.3","title":"Focus Order","level":"A","status":"gap","semantic_ids":[],"note":"Pattern focus lifecycles do not establish document-wide focus order."},
|
|
41
|
+
{"id":"2.4.4","title":"Link Purpose (In Context)","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule explicitly defines contextual link purpose."},
|
|
42
|
+
{"id":"2.4.5","title":"Multiple Ways","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule requires multiple ways to locate pages."},
|
|
43
|
+
{"id":"2.4.6","title":"Headings and Labels","level":"AA","status":"partial","semantic_ids":["semantics.headings"],"note":"Heading structure is covered, but a unified descriptive-purpose rule for all headings and labels is absent."},
|
|
44
|
+
{"id":"2.4.7","title":"Focus Visible","level":"AA","status":"covered","semantic_ids":["semantics.focus.visible"]},
|
|
45
|
+
{"id":"2.4.11","title":"Focus Not Obscured (Minimum)","level":"AA","status":"covered","semantic_ids":["semantics.focus.visible"]},
|
|
46
|
+
{"id":"2.5.1","title":"Pointer Gestures","level":"A","status":"gap","semantic_ids":[],"note":"Keyboard operation does not guarantee a single-pointer alternative to multipoint or path-based gestures."},
|
|
47
|
+
{"id":"2.5.2","title":"Pointer Cancellation","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule defines down-event cancellation behavior."},
|
|
48
|
+
{"id":"2.5.3","title":"Label in Name","level":"A","status":"covered","semantic_ids":["semantics.accessible-name"]},
|
|
49
|
+
{"id":"2.5.4","title":"Motion Actuation","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule addresses device or user motion actuation."},
|
|
50
|
+
{"id":"2.5.7","title":"Dragging Movements","level":"AA","status":"covered","semantic_ids":["semantics.dragging-alternative"]},
|
|
51
|
+
{"id":"2.5.8","title":"Target Size (Minimum)","level":"AA","status":"covered","semantic_ids":["semantics.target-size"]},
|
|
52
|
+
{"id":"3.1.1","title":"Language of Page","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule explicitly requires the default page language."},
|
|
53
|
+
{"id":"3.1.2","title":"Language of Parts","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule explicitly identifies changes in human language."},
|
|
54
|
+
{"id":"3.2.1","title":"On Focus","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule prohibits unexpected context changes on focus."},
|
|
55
|
+
{"id":"3.2.2","title":"On Input","level":"A","status":"gap","semantic_ids":[],"note":"No semantic rule prohibits unexpected context changes on input."},
|
|
56
|
+
{"id":"3.2.3","title":"Consistent Navigation","level":"AA","status":"gap","semantic_ids":[],"note":"Landmarks do not establish consistent repeated navigation order."},
|
|
57
|
+
{"id":"3.2.4","title":"Consistent Identification","level":"AA","status":"gap","semantic_ids":[],"note":"No semantic rule requires consistent identification of repeated components."},
|
|
58
|
+
{"id":"3.2.6","title":"Consistent Help","level":"A","status":"covered","semantic_ids":["semantics.consistent-help"]},
|
|
59
|
+
{"id":"3.3.1","title":"Error Identification","level":"A","status":"covered","semantic_ids":["semantics.form-error"]},
|
|
60
|
+
{"id":"3.3.2","title":"Labels or Instructions","level":"A","status":"partial","semantic_ids":["semantics.form-label","semantics.form-required"],"note":"Labels and requiredness are covered, but a dedicated rule for format and task-specific input instructions is absent."},
|
|
61
|
+
{"id":"3.3.3","title":"Error Suggestion","level":"AA","status":"covered","semantic_ids":["semantics.form-error"]},
|
|
62
|
+
{"id":"3.3.4","title":"Error Prevention (Legal, Financial, Data)","level":"AA","status":"covered","semantic_ids":["semantics.consequential-action"]},
|
|
63
|
+
{"id":"3.3.7","title":"Redundant Entry","level":"A","status":"covered","semantic_ids":["semantics.redundant-entry"]},
|
|
64
|
+
{"id":"3.3.8","title":"Accessible Authentication (Minimum)","level":"AA","status":"covered","semantic_ids":["semantics.accessible-authentication"]},
|
|
65
|
+
{"id":"4.1.2","title":"Name, Role, Value","level":"A","status":"covered","semantic_ids":["semantics.accessible-name","semantics.expanded-state","semantics.name-role-value","semantics.native-dialog","semantics.roles-states-properties","semantics.selected-state"]},
|
|
66
|
+
{"id":"4.1.3","title":"Status Messages","level":"AA","status":"covered","semantic_ids":["semantics.alert","semantics.live-status"]}
|
|
67
|
+
]
|
|
68
|
+
}
|
|
@@ -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":{"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
|
+
{"id":"pattern.accordion","version":"1.0.0","title":"Accordion","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"accordion","url":"https://www.w3.org/WAI/ARIA/apg/patterns/accordion/","normative":false}],"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":{"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
|
+
{"id":"pattern.disclosure","version":"1.0.0","title":"Disclosure","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"disclosure","url":"https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/","normative":false}],"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"]}
|