@verndale/accessibility-standards 1.0.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/OPERATING.md +3 -1
  2. package/README.md +4 -0
  3. package/bin/accessibility-standards.mjs +1 -1
  4. package/dist/manifest.json +159 -101
  5. package/dist/profiles/ai-orchestration/coverage-manifest.json +724 -68
  6. package/dist/profiles/ai-orchestration/implementation/accessibility.md +825 -10
  7. package/dist/profiles/ai-orchestration/pattern-contracts.json +1015 -343
  8. package/dist/profiles/ai-orchestration/patterns/accordion.md +14 -0
  9. package/dist/profiles/ai-orchestration/patterns/alert.md +14 -0
  10. package/dist/profiles/ai-orchestration/patterns/carousel.md +14 -0
  11. package/dist/profiles/ai-orchestration/patterns/checkbox.md +27 -0
  12. package/dist/profiles/ai-orchestration/patterns/combobox.md +14 -0
  13. package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +15 -1
  14. package/dist/profiles/ai-orchestration/patterns/dialog.md +14 -0
  15. package/dist/profiles/ai-orchestration/patterns/disclosure.md +14 -0
  16. package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +14 -0
  17. package/dist/profiles/ai-orchestration/patterns/field.md +15 -0
  18. package/dist/profiles/ai-orchestration/patterns/image.md +14 -0
  19. package/dist/profiles/ai-orchestration/patterns/listbox.md +14 -0
  20. package/dist/profiles/ai-orchestration/patterns/media-player.md +17 -0
  21. package/dist/profiles/ai-orchestration/patterns/menu-button.md +14 -0
  22. package/dist/profiles/ai-orchestration/patterns/menu.md +30 -0
  23. package/dist/profiles/ai-orchestration/patterns/pagination.md +14 -0
  24. package/dist/profiles/ai-orchestration/patterns/popover.md +15 -0
  25. package/dist/profiles/ai-orchestration/patterns/progress.md +15 -0
  26. package/dist/profiles/ai-orchestration/patterns/radio-group.md +27 -0
  27. package/dist/profiles/ai-orchestration/patterns/slider.md +31 -0
  28. package/dist/profiles/ai-orchestration/patterns/spinbutton.md +28 -0
  29. package/dist/profiles/ai-orchestration/patterns/tabs.md +14 -0
  30. package/dist/profiles/ai-orchestration/patterns/tooltip.md +14 -0
  31. package/dist/profiles/ai-orchestration/patterns/tree-view.md +31 -0
  32. package/dist/profiles/ai-orchestration/patterns/validation.md +15 -0
  33. package/dist/profiles/ai-orchestration/review/accessibility.md +21 -6
  34. package/dist/profiles/ai-orchestration/semantics/accessible-authentication.md +13 -0
  35. package/dist/profiles/ai-orchestration/semantics/accessible-name.md +8 -1
  36. package/dist/profiles/ai-orchestration/semantics/alert.md +7 -0
  37. package/dist/profiles/ai-orchestration/semantics/consequential-action.md +6 -1
  38. package/dist/profiles/ai-orchestration/semantics/consistent-help.md +13 -0
  39. package/dist/profiles/ai-orchestration/semantics/data-table.md +7 -1
  40. package/dist/profiles/ai-orchestration/semantics/dragging-alternative.md +13 -0
  41. package/dist/profiles/ai-orchestration/semantics/expanded-state.md +6 -0
  42. package/dist/profiles/ai-orchestration/semantics/focus.initial.md +4 -0
  43. package/dist/profiles/ai-orchestration/semantics/focus.return.md +4 -0
  44. package/dist/profiles/ai-orchestration/semantics/focus.visible.md +8 -1
  45. package/dist/profiles/ai-orchestration/semantics/form-error.md +8 -1
  46. package/dist/profiles/ai-orchestration/semantics/form-label.md +7 -0
  47. package/dist/profiles/ai-orchestration/semantics/form-required.md +7 -0
  48. package/dist/profiles/ai-orchestration/semantics/headings.md +7 -0
  49. package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +4 -0
  50. package/dist/profiles/ai-orchestration/semantics/keyboard.md +7 -0
  51. package/dist/profiles/ai-orchestration/semantics/landmarks.md +6 -0
  52. package/dist/profiles/ai-orchestration/semantics/live-status.md +7 -1
  53. package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +11 -0
  54. package/dist/profiles/ai-orchestration/semantics/motion-control.md +8 -1
  55. package/dist/profiles/ai-orchestration/semantics/name-role-value.md +6 -1
  56. package/dist/profiles/ai-orchestration/semantics/native-dialog.md +7 -0
  57. package/dist/profiles/ai-orchestration/semantics/native-elements.md +5 -0
  58. package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +5 -0
  59. package/dist/profiles/ai-orchestration/semantics/redundant-entry.md +13 -0
  60. package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +6 -0
  61. package/dist/profiles/ai-orchestration/semantics/selected-state.md +6 -0
  62. package/dist/profiles/ai-orchestration/semantics/target-size.md +6 -1
  63. package/dist/profiles/ai-orchestration/semantics.json +843 -100
  64. package/dist/profiles/ai-orchestration/testing/accessibility.md +33 -3
  65. package/dist/profiles/ai-orchestration/ui-design-brain-bindings.json +836 -0
  66. package/dist/profiles/conductor/a11y-semantics.md +270 -10
  67. package/dist/profiles/conductor/accessibility-quality.md +557 -1
  68. package/dist/profiles/conductor/applicability-matrix.json +270 -230
  69. package/dist/profiles/conductor/coverage-manifest.json +724 -68
  70. package/dist/profiles/conductor/pattern-contracts.json +1015 -343
  71. package/dist/profiles/conductor/patterns/accordion.json +42 -24
  72. package/dist/profiles/conductor/patterns/alert.json +36 -18
  73. package/dist/profiles/conductor/patterns/carousel.json +43 -25
  74. package/dist/profiles/conductor/patterns/checkbox.json +67 -0
  75. package/dist/profiles/conductor/patterns/combobox.json +44 -26
  76. package/dist/profiles/conductor/patterns/consequential-submission.json +41 -22
  77. package/dist/profiles/conductor/patterns/dialog.json +44 -26
  78. package/dist/profiles/conductor/patterns/disclosure.json +40 -22
  79. package/dist/profiles/conductor/patterns/dynamic-status.json +38 -19
  80. package/dist/profiles/conductor/patterns/field.json +58 -22
  81. package/dist/profiles/conductor/patterns/image.json +48 -19
  82. package/dist/profiles/conductor/patterns/listbox.json +42 -24
  83. package/dist/profiles/conductor/patterns/media-player.json +76 -26
  84. package/dist/profiles/conductor/patterns/menu-button.json +41 -23
  85. package/dist/profiles/conductor/patterns/menu.json +78 -0
  86. package/dist/profiles/conductor/patterns/pagination.json +41 -22
  87. package/dist/profiles/conductor/patterns/popover.json +49 -23
  88. package/dist/profiles/conductor/patterns/progress.json +45 -20
  89. package/dist/profiles/conductor/patterns/radio-group.json +69 -0
  90. package/dist/profiles/conductor/patterns/slider.json +84 -0
  91. package/dist/profiles/conductor/patterns/spinbutton.json +74 -0
  92. package/dist/profiles/conductor/patterns/tabs.json +41 -23
  93. package/dist/profiles/conductor/patterns/tooltip.json +38 -20
  94. package/dist/profiles/conductor/patterns/tree-view.json +77 -0
  95. package/dist/profiles/conductor/patterns/validation.json +59 -23
  96. package/dist/profiles/conductor/semantics.json +843 -100
  97. package/dist/profiles/conductor/ui-design-brain-bindings.json +836 -0
  98. package/dist/projection-manifest.json +123 -82
  99. package/dist/requirements-to-implementation.md +8 -0
  100. package/lib/build-manifest.mjs +12 -6
  101. package/lib/build.mjs +21 -7
  102. package/lib/compile-applicability.mjs +131 -10
  103. package/lib/coverage.mjs +20 -0
  104. package/lib/digest.mjs +8 -0
  105. package/lib/index.mjs +1 -1
  106. package/lib/load.mjs +44 -1
  107. package/lib/provenance.mjs +51 -0
  108. package/lib/render.mjs +115 -31
  109. package/lib/sync.mjs +242 -28
  110. package/lib/validate.mjs +557 -24
  111. package/package.json +27 -10
  112. package/profiles/ai-orchestration/profile.json +1 -1
  113. package/profiles/ai-orchestration/templates/patterns/README.md +1 -1
  114. package/profiles/ai-orchestration/templates/review/README.md +1 -1
  115. package/profiles/ai-orchestration/templates/semantics/README.md +1 -1
  116. package/profiles/ai-orchestration/templates/testing/README.md +1 -1
  117. package/profiles/conductor/profile.json +1 -1
  118. package/profiles/conductor/templates/evidence/README.md +1 -1
  119. package/profiles/conductor/templates/patterns/README.md +1 -1
  120. package/profiles/conductor/templates/semantics/README.md +1 -1
  121. package/schemas/consumer-config.schema.json +1 -1
  122. package/schemas/contract.schema.json +1 -0
  123. package/schemas/manifest.schema.json +1 -1
  124. package/schemas/pattern.schema.json +98 -1
  125. package/schemas/profile.schema.json +1 -1
  126. package/schemas/projection-manifest.schema.json +84 -1
  127. package/schemas/semantic.schema.json +26 -1
  128. package/schemas/standards-reference.schema.json +105 -0
  129. package/schemas/ui-design-brain-bindings.schema.json +86 -0
  130. package/schemas/wcag-coverage.schema.json +93 -0
  131. package/src/applicability/facts.yml +27 -1
  132. package/src/applicability/matrix.yml +8 -9
  133. package/src/applicability/ui-design-brain-bindings.yml +196 -0
  134. package/src/contract.yml +1 -0
  135. package/src/coverage/wcag-2.2.yml +68 -0
  136. package/src/patterns/disclosure/accordion.yml +1 -1
  137. package/src/patterns/disclosure/disclosure.yml +1 -1
  138. package/src/patterns/feedback/alert.yml +1 -1
  139. package/src/patterns/feedback/dynamic-status.yml +1 -1
  140. package/src/patterns/feedback/progress.yml +1 -1
  141. package/src/patterns/forms/consequential-submission.yml +1 -1
  142. package/src/patterns/forms/field.yml +1 -1
  143. package/src/patterns/forms/spinbutton.yml +1 -0
  144. package/src/patterns/forms/validation.yml +1 -1
  145. package/src/patterns/media/carousel.yml +1 -1
  146. package/src/patterns/media/image.yml +1 -1
  147. package/src/patterns/media/media-player.yml +1 -1
  148. package/src/patterns/navigation/menu-button.yml +1 -1
  149. package/src/patterns/navigation/menu.yml +1 -0
  150. package/src/patterns/navigation/pagination.yml +1 -1
  151. package/src/patterns/navigation/tabs.yml +1 -1
  152. package/src/patterns/navigation/tree-view.yml +1 -0
  153. package/src/patterns/overlays/dialog.yml +1 -1
  154. package/src/patterns/overlays/popover.yml +1 -1
  155. package/src/patterns/overlays/tooltip.yml +1 -1
  156. package/src/patterns/selection/checkbox.yml +1 -0
  157. package/src/patterns/selection/combobox.yml +1 -1
  158. package/src/patterns/selection/listbox.yml +1 -1
  159. package/src/patterns/selection/radio-group.yml +1 -0
  160. package/src/patterns/selection/slider.yml +1 -0
  161. package/src/semantics/accessible-names.yml +1 -1
  162. package/src/semantics/forms.yml +1 -1
  163. package/src/semantics/headings-landmarks.yml +1 -1
  164. package/src/semantics/keyboard-focus.yml +1 -1
  165. package/src/semantics/live-regions.yml +1 -1
  166. package/src/semantics/media.yml +1 -1
  167. package/src/semantics/native-elements.yml +1 -1
  168. package/src/semantics/roles-states-properties.yml +1 -1
  169. package/src/semantics/tables.yml +1 -1
  170. package/src/semantics/wcag-2.2.yml +1 -0
  171. package/src/sources.yml +1 -1
@@ -1,36 +1,55 @@
1
1
  {
2
2
  "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
- "schema_version": 1,
3
+ "_provenance": {
4
+ "package": "@verndale/accessibility-standards@3.0.0",
5
+ "profile": "conductor",
6
+ "profile_digest": "beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491",
7
+ "profile_version": "3.0.0",
8
+ "schema_version": 3,
9
+ "source_digest": "708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af"
10
+ },
4
11
  "pattern": {
5
- "id": "pattern.dynamic-status",
6
- "version": "1.0.0",
7
- "title": "Dynamic status",
8
- "kind": "pattern",
9
- "requires": [
10
- "semantics.live-status"
11
- ],
12
12
  "activation": {
13
- "fact": "component.has_dynamic_status",
14
- "equals": true
13
+ "equals": {
14
+ "fact": "component.has_dynamic_status",
15
+ "value": true
16
+ }
15
17
  },
16
- "scope": "Asynchronous status message",
17
18
  "behavior": [
18
19
  "Announce meaningful changes once"
19
20
  ],
20
- "product_decisions": [
21
- "announcement_copy"
21
+ "evidence_routes": [
22
+ "unit",
23
+ "e2e",
24
+ "human"
22
25
  ],
23
26
  "functional_spec_bindings": [
24
27
  "messaging",
25
28
  "states"
26
29
  ],
30
+ "id": "pattern.dynamic-status",
27
31
  "implementation_outcomes": [
28
32
  "status-live-region"
29
33
  ],
30
- "evidence_routes": [
31
- "unit",
32
- "e2e",
33
- "human"
34
- ]
35
- }
34
+ "kind": "pattern",
35
+ "product_decisions": [
36
+ "announcement_copy"
37
+ ],
38
+ "requires": [
39
+ "semantics.live-status"
40
+ ],
41
+ "scope": "Asynchronous status message",
42
+ "standards_refs": [
43
+ {
44
+ "authority": "wcag-2.2",
45
+ "identifier": "4.1.3",
46
+ "level": "AA",
47
+ "normative": true,
48
+ "url": "https://www.w3.org/TR/WCAG22/#status-messages"
49
+ }
50
+ ],
51
+ "title": "Dynamic status",
52
+ "version": "1.0.0"
53
+ },
54
+ "schema_version": 3
36
55
  }
@@ -1,39 +1,75 @@
1
1
  {
2
2
  "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
- "schema_version": 1,
3
+ "_provenance": {
4
+ "package": "@verndale/accessibility-standards@3.0.0",
5
+ "profile": "conductor",
6
+ "profile_digest": "beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491",
7
+ "profile_version": "3.0.0",
8
+ "schema_version": 3,
9
+ "source_digest": "708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af"
10
+ },
4
11
  "pattern": {
5
- "id": "pattern.field",
6
- "version": "1.0.0",
7
- "title": "Form field",
8
- "kind": "pattern",
9
- "requires": [
10
- "semantics.form-label",
11
- "semantics.form-required",
12
- "semantics.focus.visible"
13
- ],
14
12
  "activation": {
15
- "fact": "component.has_form_fields",
16
- "equals": true
13
+ "any": [
14
+ {
15
+ "contains": {
16
+ "fact": "component.accessibility_pattern_ids",
17
+ "value": "pattern.field"
18
+ }
19
+ },
20
+ {
21
+ "equals": {
22
+ "fact": "component.has_form_fields",
23
+ "value": true
24
+ }
25
+ }
26
+ ]
17
27
  },
18
- "scope": "Labeled form input",
19
28
  "behavior": [
20
29
  "Expose label, instructions, and requiredness before interaction"
21
30
  ],
22
- "product_decisions": [
23
- "required",
24
- "instructions"
31
+ "evidence_routes": [
32
+ "unit",
33
+ "axe",
34
+ "human"
25
35
  ],
26
36
  "functional_spec_bindings": [
27
37
  "fields",
28
38
  "requiredness"
29
39
  ],
40
+ "id": "pattern.field",
30
41
  "implementation_outcomes": [
31
42
  "field-associations"
32
43
  ],
33
- "evidence_routes": [
34
- "unit",
35
- "axe",
36
- "human"
37
- ]
38
- }
44
+ "kind": "pattern",
45
+ "product_decisions": [
46
+ "required",
47
+ "instructions"
48
+ ],
49
+ "requires": [
50
+ "semantics.form-label",
51
+ "semantics.form-required",
52
+ "semantics.focus.visible"
53
+ ],
54
+ "scope": "Labeled form input",
55
+ "standards_refs": [
56
+ {
57
+ "authority": "wcag-2.2",
58
+ "identifier": "3.3.2",
59
+ "level": "A",
60
+ "normative": true,
61
+ "url": "https://www.w3.org/TR/WCAG22/#labels-or-instructions"
62
+ },
63
+ {
64
+ "authority": "wcag-2.2",
65
+ "identifier": "4.1.2",
66
+ "level": "A",
67
+ "normative": true,
68
+ "url": "https://www.w3.org/TR/WCAG22/#name-role-value"
69
+ }
70
+ ],
71
+ "title": "Form field",
72
+ "version": "1.0.0"
73
+ },
74
+ "schema_version": 3
39
75
  }
@@ -1,35 +1,64 @@
1
1
  {
2
2
  "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
- "schema_version": 1,
3
+ "_provenance": {
4
+ "package": "@verndale/accessibility-standards@3.0.0",
5
+ "profile": "conductor",
6
+ "profile_digest": "beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491",
7
+ "profile_version": "3.0.0",
8
+ "schema_version": 3,
9
+ "source_digest": "708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af"
10
+ },
4
11
  "pattern": {
5
- "id": "pattern.image",
6
- "version": "1.0.0",
7
- "title": "Image",
8
- "kind": "pattern",
9
- "requires": [
10
- "semantics.non-text-alternative"
11
- ],
12
12
  "activation": {
13
- "fact": "content.has_non_text",
14
- "equals": true
13
+ "any": [
14
+ {
15
+ "contains": {
16
+ "fact": "component.accessibility_pattern_ids",
17
+ "value": "pattern.image"
18
+ }
19
+ },
20
+ {
21
+ "equals": {
22
+ "fact": "content.has_non_text",
23
+ "value": true
24
+ }
25
+ }
26
+ ]
15
27
  },
16
- "scope": "Informative, functional, complex, or decorative image",
17
28
  "behavior": [
18
29
  "Alternative follows image purpose"
19
30
  ],
20
- "product_decisions": [
21
- "purpose",
22
- "long_description"
31
+ "evidence_routes": [
32
+ "axe",
33
+ "human"
23
34
  ],
24
35
  "functional_spec_bindings": [
25
36
  "content"
26
37
  ],
38
+ "id": "pattern.image",
27
39
  "implementation_outcomes": [
28
40
  "image-alternative"
29
41
  ],
30
- "evidence_routes": [
31
- "axe",
32
- "human"
33
- ]
34
- }
42
+ "kind": "pattern",
43
+ "product_decisions": [
44
+ "purpose",
45
+ "long_description"
46
+ ],
47
+ "requires": [
48
+ "semantics.non-text-alternative"
49
+ ],
50
+ "scope": "Informative, functional, complex, or decorative image",
51
+ "standards_refs": [
52
+ {
53
+ "authority": "wcag-2.2",
54
+ "identifier": "1.1.1",
55
+ "level": "A",
56
+ "normative": true,
57
+ "url": "https://www.w3.org/TR/WCAG22/#non-text-content"
58
+ }
59
+ ],
60
+ "title": "Image",
61
+ "version": "1.0.0"
62
+ },
63
+ "schema_version": 3
35
64
  }
@@ -1,43 +1,61 @@
1
1
  {
2
2
  "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
- "schema_version": 1,
3
+ "_provenance": {
4
+ "package": "@verndale/accessibility-standards@3.0.0",
5
+ "profile": "conductor",
6
+ "profile_digest": "beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491",
7
+ "profile_version": "3.0.0",
8
+ "schema_version": 3,
9
+ "source_digest": "708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af"
10
+ },
4
11
  "pattern": {
5
- "id": "pattern.listbox",
6
- "version": "1.0.0",
7
- "title": "Listbox",
8
- "kind": "pattern",
9
- "requires": [
10
- "semantics.accessible-name",
11
- "semantics.selected-state",
12
- "semantics.keyboard",
13
- "semantics.focus.visible"
14
- ],
15
12
  "activation": {
16
- "fact": "component.pattern",
17
- "equals": "listbox"
13
+ "contains": {
14
+ "fact": "component.accessibility_pattern_ids",
15
+ "value": "pattern.listbox"
16
+ }
18
17
  },
19
- "scope": "Single or multi-select option list",
20
18
  "behavior": [
21
19
  "Arrow keys move active option",
22
20
  "Selection follows declared model"
23
21
  ],
24
- "product_decisions": [
25
- "single_or_multi",
26
- "selection_follows_focus"
22
+ "evidence_routes": [
23
+ "unit",
24
+ "axe",
25
+ "e2e",
26
+ "human"
27
27
  ],
28
28
  "functional_spec_bindings": [
29
29
  "behavior",
30
30
  "states",
31
31
  "keyboard"
32
32
  ],
33
+ "id": "pattern.listbox",
33
34
  "implementation_outcomes": [
34
35
  "listbox-keyboard-model"
35
36
  ],
36
- "evidence_routes": [
37
- "unit",
38
- "axe",
39
- "e2e",
40
- "human"
41
- ]
42
- }
37
+ "kind": "pattern",
38
+ "product_decisions": [
39
+ "single_or_multi",
40
+ "selection_follows_focus"
41
+ ],
42
+ "requires": [
43
+ "semantics.accessible-name",
44
+ "semantics.selected-state",
45
+ "semantics.keyboard",
46
+ "semantics.focus.visible"
47
+ ],
48
+ "scope": "Single or multi-select option list",
49
+ "standards_refs": [
50
+ {
51
+ "authority": "aria-apg",
52
+ "identifier": "listbox",
53
+ "normative": false,
54
+ "url": "https://www.w3.org/WAI/ARIA/apg/patterns/listbox/"
55
+ }
56
+ ],
57
+ "title": "Listbox",
58
+ "version": "1.0.0"
59
+ },
60
+ "schema_version": 3
43
61
  }
@@ -1,45 +1,95 @@
1
1
  {
2
2
  "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
- "schema_version": 1,
3
+ "_provenance": {
4
+ "package": "@verndale/accessibility-standards@3.0.0",
5
+ "profile": "conductor",
6
+ "profile_digest": "beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491",
7
+ "profile_version": "3.0.0",
8
+ "schema_version": 3,
9
+ "source_digest": "708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af"
10
+ },
4
11
  "pattern": {
5
- "id": "pattern.media-player",
6
- "version": "1.0.0",
7
- "title": "Media player",
8
- "kind": "pattern",
9
- "requires": [
10
- "semantics.media-alternatives",
11
- "semantics.accessible-name",
12
- "semantics.keyboard",
13
- "semantics.focus.visible",
14
- "semantics.motion-control"
15
- ],
16
12
  "activation": {
17
- "fact": "content.has_media",
18
- "equals": true
13
+ "any": [
14
+ {
15
+ "contains": {
16
+ "fact": "component.accessibility_pattern_ids",
17
+ "value": "pattern.media-player"
18
+ }
19
+ },
20
+ {
21
+ "equals": {
22
+ "fact": "content.has_media",
23
+ "value": true
24
+ }
25
+ }
26
+ ]
19
27
  },
20
- "scope": "Audio or video playback",
21
28
  "behavior": [
22
29
  "Provide keyboard-operable named controls and required alternatives"
23
30
  ],
24
- "product_decisions": [
25
- "captions",
26
- "transcript",
27
- "audio_description",
28
- "autoplay"
31
+ "evidence_routes": [
32
+ "axe",
33
+ "e2e",
34
+ "human"
29
35
  ],
30
36
  "functional_spec_bindings": [
31
37
  "content",
32
38
  "controls",
33
39
  "behavior"
34
40
  ],
41
+ "id": "pattern.media-player",
35
42
  "implementation_outcomes": [
36
43
  "media-alternatives",
37
44
  "media-controls"
38
45
  ],
39
- "evidence_routes": [
40
- "axe",
41
- "e2e",
42
- "human"
43
- ]
44
- }
46
+ "kind": "pattern",
47
+ "product_decisions": [
48
+ "captions",
49
+ "transcript",
50
+ "audio_description",
51
+ "autoplay"
52
+ ],
53
+ "requires": [
54
+ "semantics.media-alternatives",
55
+ "semantics.accessible-name",
56
+ "semantics.keyboard",
57
+ "semantics.focus.visible",
58
+ "semantics.motion-control"
59
+ ],
60
+ "scope": "Audio or video playback",
61
+ "standards_refs": [
62
+ {
63
+ "authority": "wcag-2.2",
64
+ "identifier": "1.2.1",
65
+ "level": "A",
66
+ "normative": true,
67
+ "url": "https://www.w3.org/TR/WCAG22/#audio-only-and-video-only-prerecorded"
68
+ },
69
+ {
70
+ "authority": "wcag-2.2",
71
+ "identifier": "1.2.2",
72
+ "level": "A",
73
+ "normative": true,
74
+ "url": "https://www.w3.org/TR/WCAG22/#captions-prerecorded"
75
+ },
76
+ {
77
+ "authority": "wcag-2.2",
78
+ "identifier": "1.2.3",
79
+ "level": "A",
80
+ "normative": true,
81
+ "url": "https://www.w3.org/TR/WCAG22/#audio-description-or-media-alternative-prerecorded"
82
+ },
83
+ {
84
+ "authority": "wcag-2.2",
85
+ "identifier": "1.2.5",
86
+ "level": "AA",
87
+ "normative": true,
88
+ "url": "https://www.w3.org/TR/WCAG22/#audio-description-prerecorded"
89
+ }
90
+ ],
91
+ "title": "Media player",
92
+ "version": "1.0.0"
93
+ },
94
+ "schema_version": 3
45
95
  }
@@ -1,41 +1,59 @@
1
1
  {
2
2
  "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
- "schema_version": 1,
3
+ "_provenance": {
4
+ "package": "@verndale/accessibility-standards@3.0.0",
5
+ "profile": "conductor",
6
+ "profile_digest": "beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491",
7
+ "profile_version": "3.0.0",
8
+ "schema_version": 3,
9
+ "source_digest": "708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af"
10
+ },
4
11
  "pattern": {
5
- "id": "pattern.menu-button",
6
- "version": "1.0.0",
7
- "title": "Menu button",
8
- "kind": "pattern",
9
- "requires": [
10
- "semantics.accessible-name",
11
- "semantics.expanded-state",
12
- "semantics.keyboard",
13
- "semantics.focus.initial",
14
- "semantics.focus.return"
15
- ],
16
12
  "activation": {
17
- "fact": "component.pattern",
18
- "equals": "menu-button"
13
+ "contains": {
14
+ "fact": "component.accessibility_pattern_ids",
15
+ "value": "pattern.menu-button"
16
+ }
19
17
  },
20
- "scope": "Button opening a command menu",
21
18
  "behavior": [
22
19
  "Open and navigate menu by keyboard"
23
20
  ],
24
- "product_decisions": [
25
- "focus_strategy"
21
+ "evidence_routes": [
22
+ "unit",
23
+ "e2e",
24
+ "human"
26
25
  ],
27
26
  "functional_spec_bindings": [
28
27
  "behavior",
29
28
  "keyboard",
30
29
  "focus"
31
30
  ],
31
+ "id": "pattern.menu-button",
32
32
  "implementation_outcomes": [
33
33
  "menu-button-keyboard"
34
34
  ],
35
- "evidence_routes": [
36
- "unit",
37
- "e2e",
38
- "human"
39
- ]
40
- }
35
+ "kind": "pattern",
36
+ "product_decisions": [
37
+ "focus_strategy"
38
+ ],
39
+ "requires": [
40
+ "semantics.accessible-name",
41
+ "semantics.expanded-state",
42
+ "semantics.keyboard",
43
+ "semantics.focus.initial",
44
+ "semantics.focus.return"
45
+ ],
46
+ "scope": "Button opening a command menu",
47
+ "standards_refs": [
48
+ {
49
+ "authority": "aria-apg",
50
+ "identifier": "menu-button",
51
+ "normative": false,
52
+ "url": "https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/"
53
+ }
54
+ ],
55
+ "title": "Menu button",
56
+ "version": "1.0.0"
57
+ },
58
+ "schema_version": 3
41
59
  }
@@ -0,0 +1,78 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "_provenance": {
4
+ "package": "@verndale/accessibility-standards@3.0.0",
5
+ "profile": "conductor",
6
+ "profile_digest": "beadcb5fe8151303b3e3241de4fee0ece3be9ff2f4dbdb3a6f93a363b0a2d491",
7
+ "profile_version": "3.0.0",
8
+ "schema_version": 3,
9
+ "source_digest": "708ac82783bfb5ebcce31e4dada15d8580863f5e37b32d1807adf61e415ed5af"
10
+ },
11
+ "pattern": {
12
+ "activation": {
13
+ "contains": {
14
+ "fact": "component.accessibility_pattern_ids",
15
+ "value": "pattern.menu"
16
+ }
17
+ },
18
+ "behavior": [
19
+ "Expose menu or menubar containers with menuitem, menuitemcheckbox, or menuitemradio children; synchronize submenu expanded state, checkable-item checked state, orientation, and disabled state",
20
+ "When a popup menu opens, move focus to its first item; when a persistent menubar receives focus through Tab or Shift+Tab, restore its declared last-focused item or use its first enabled item; Tab and Shift+Tab do not move among items and, from an item, exit the composite and close all open menus",
21
+ "For the default horizontal menubar with vertical popup menus, Right and Left move among menubar items, Down opens a submenu and focuses its first item, Up may open it and focus its last item, Down and Up move among popup items, Right opens a child submenu, and Left closes a child submenu and returns focus to its parent item; reverse the declared axes for alternate orientations",
22
+ "Enter opens an item's submenu and focuses its first item, or otherwise activates the item and closes the menu; declare whether Space mirrors Enter on plain items, toggles menuitemcheckbox without closing, and checks a menuitemradio while unchecking its group peers without closing",
23
+ "Keep disabled menu items focusable but non-activatable, keep separators non-focusable, and apply Home, End, optional type-ahead, and the declared wrapping policy within the current menu or menubar",
24
+ "Escape closes the menu containing focus and restores focus to its parent item, menu button, or invoking context"
25
+ ],
26
+ "evidence_routes": [
27
+ "unit",
28
+ "axe",
29
+ "e2e",
30
+ "human"
31
+ ],
32
+ "functional_spec_bindings": [
33
+ "behavior",
34
+ "states",
35
+ "keyboard",
36
+ "focus"
37
+ ],
38
+ "id": "pattern.menu",
39
+ "implementation_outcomes": [
40
+ "menu-composite-focus",
41
+ "menu-keyboard-model",
42
+ "menu-state-model"
43
+ ],
44
+ "kind": "pattern",
45
+ "product_decisions": [
46
+ "entry_focus",
47
+ "focus_strategy",
48
+ "menu_or_menubar",
49
+ "orientation",
50
+ "space_behavior",
51
+ "submenu_model",
52
+ "typeahead",
53
+ "wrap_navigation"
54
+ ],
55
+ "requires": [
56
+ "semantics.accessible-name",
57
+ "semantics.expanded-state",
58
+ "semantics.focus.initial",
59
+ "semantics.focus.return",
60
+ "semantics.focus.visible",
61
+ "semantics.keyboard",
62
+ "semantics.keyboard.escape",
63
+ "semantics.roles-states-properties"
64
+ ],
65
+ "scope": "Command menus, submenus, and persistent menubars",
66
+ "standards_refs": [
67
+ {
68
+ "authority": "aria-apg",
69
+ "identifier": "menubar",
70
+ "normative": false,
71
+ "url": "https://www.w3.org/WAI/ARIA/apg/patterns/menubar/"
72
+ }
73
+ ],
74
+ "title": "Menu and menubar",
75
+ "version": "1.0.0"
76
+ },
77
+ "schema_version": 3
78
+ }