@verndale/accessibility-standards 1.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 (148) hide show
  1. package/OPERATING.md +5 -0
  2. package/README.md +22 -0
  3. package/bin/accessibility-standards.mjs +32 -0
  4. package/dist/manifest.json +202 -0
  5. package/dist/profiles/ai-orchestration/coverage-manifest.json +202 -0
  6. package/dist/profiles/ai-orchestration/implementation/accessibility.md +329 -0
  7. package/dist/profiles/ai-orchestration/pattern-contracts.json +697 -0
  8. package/dist/profiles/ai-orchestration/patterns/accordion.md +12 -0
  9. package/dist/profiles/ai-orchestration/patterns/alert.md +11 -0
  10. package/dist/profiles/ai-orchestration/patterns/carousel.md +12 -0
  11. package/dist/profiles/ai-orchestration/patterns/combobox.md +11 -0
  12. package/dist/profiles/ai-orchestration/patterns/consequential-submission.md +11 -0
  13. package/dist/profiles/ai-orchestration/patterns/dialog.md +12 -0
  14. package/dist/profiles/ai-orchestration/patterns/disclosure.md +11 -0
  15. package/dist/profiles/ai-orchestration/patterns/dynamic-status.md +11 -0
  16. package/dist/profiles/ai-orchestration/patterns/field.md +11 -0
  17. package/dist/profiles/ai-orchestration/patterns/image.md +11 -0
  18. package/dist/profiles/ai-orchestration/patterns/listbox.md +12 -0
  19. package/dist/profiles/ai-orchestration/patterns/media-player.md +11 -0
  20. package/dist/profiles/ai-orchestration/patterns/menu-button.md +11 -0
  21. package/dist/profiles/ai-orchestration/patterns/pagination.md +11 -0
  22. package/dist/profiles/ai-orchestration/patterns/popover.md +11 -0
  23. package/dist/profiles/ai-orchestration/patterns/progress.md +11 -0
  24. package/dist/profiles/ai-orchestration/patterns/tabs.md +12 -0
  25. package/dist/profiles/ai-orchestration/patterns/tooltip.md +12 -0
  26. package/dist/profiles/ai-orchestration/patterns/validation.md +11 -0
  27. package/dist/profiles/ai-orchestration/review/accessibility.md +67 -0
  28. package/dist/profiles/ai-orchestration/semantics/accessible-name.md +8 -0
  29. package/dist/profiles/ai-orchestration/semantics/alert.md +8 -0
  30. package/dist/profiles/ai-orchestration/semantics/consequential-action.md +8 -0
  31. package/dist/profiles/ai-orchestration/semantics/data-table.md +8 -0
  32. package/dist/profiles/ai-orchestration/semantics/expanded-state.md +8 -0
  33. package/dist/profiles/ai-orchestration/semantics/focus.initial.md +8 -0
  34. package/dist/profiles/ai-orchestration/semantics/focus.return.md +8 -0
  35. package/dist/profiles/ai-orchestration/semantics/focus.visible.md +8 -0
  36. package/dist/profiles/ai-orchestration/semantics/form-error.md +8 -0
  37. package/dist/profiles/ai-orchestration/semantics/form-label.md +8 -0
  38. package/dist/profiles/ai-orchestration/semantics/form-required.md +8 -0
  39. package/dist/profiles/ai-orchestration/semantics/headings.md +8 -0
  40. package/dist/profiles/ai-orchestration/semantics/keyboard.escape.md +8 -0
  41. package/dist/profiles/ai-orchestration/semantics/keyboard.md +8 -0
  42. package/dist/profiles/ai-orchestration/semantics/landmarks.md +8 -0
  43. package/dist/profiles/ai-orchestration/semantics/live-status.md +8 -0
  44. package/dist/profiles/ai-orchestration/semantics/media-alternatives.md +8 -0
  45. package/dist/profiles/ai-orchestration/semantics/motion-control.md +8 -0
  46. package/dist/profiles/ai-orchestration/semantics/name-role-value.md +8 -0
  47. package/dist/profiles/ai-orchestration/semantics/native-dialog.md +8 -0
  48. package/dist/profiles/ai-orchestration/semantics/native-elements.md +8 -0
  49. package/dist/profiles/ai-orchestration/semantics/non-text-alternative.md +8 -0
  50. package/dist/profiles/ai-orchestration/semantics/roles-states-properties.md +8 -0
  51. package/dist/profiles/ai-orchestration/semantics/selected-state.md +8 -0
  52. package/dist/profiles/ai-orchestration/semantics/target-size.md +8 -0
  53. package/dist/profiles/ai-orchestration/semantics.json +289 -0
  54. package/dist/profiles/ai-orchestration/testing/accessibility.md +138 -0
  55. package/dist/profiles/conductor/a11y-semantics.md +152 -0
  56. package/dist/profiles/conductor/accessibility-quality.md +179 -0
  57. package/dist/profiles/conductor/applicability-matrix.json +428 -0
  58. package/dist/profiles/conductor/coverage-manifest.json +202 -0
  59. package/dist/profiles/conductor/pattern-contracts.json +697 -0
  60. package/dist/profiles/conductor/patterns/accordion.json +44 -0
  61. package/dist/profiles/conductor/patterns/alert.json +34 -0
  62. package/dist/profiles/conductor/patterns/carousel.json +45 -0
  63. package/dist/profiles/conductor/patterns/combobox.json +44 -0
  64. package/dist/profiles/conductor/patterns/consequential-submission.json +38 -0
  65. package/dist/profiles/conductor/patterns/dialog.json +47 -0
  66. package/dist/profiles/conductor/patterns/disclosure.json +39 -0
  67. package/dist/profiles/conductor/patterns/dynamic-status.json +36 -0
  68. package/dist/profiles/conductor/patterns/field.json +39 -0
  69. package/dist/profiles/conductor/patterns/image.json +35 -0
  70. package/dist/profiles/conductor/patterns/listbox.json +43 -0
  71. package/dist/profiles/conductor/patterns/media-player.json +45 -0
  72. package/dist/profiles/conductor/patterns/menu-button.json +41 -0
  73. package/dist/profiles/conductor/patterns/pagination.json +39 -0
  74. package/dist/profiles/conductor/patterns/popover.json +40 -0
  75. package/dist/profiles/conductor/patterns/progress.json +37 -0
  76. package/dist/profiles/conductor/patterns/tabs.json +42 -0
  77. package/dist/profiles/conductor/patterns/tooltip.json +37 -0
  78. package/dist/profiles/conductor/patterns/validation.json +42 -0
  79. package/dist/profiles/conductor/semantics.json +289 -0
  80. package/dist/projection-manifest.json +90 -0
  81. package/dist/requirements-to-implementation.md +21 -0
  82. package/lib/build-manifest.mjs +20 -0
  83. package/lib/build.mjs +31 -0
  84. package/lib/compile-applicability.mjs +56 -0
  85. package/lib/digest.mjs +11 -0
  86. package/lib/index.mjs +4 -0
  87. package/lib/load.mjs +40 -0
  88. package/lib/render.mjs +71 -0
  89. package/lib/sync.mjs +94 -0
  90. package/lib/validate.mjs +31 -0
  91. package/package.json +46 -0
  92. package/profiles/ai-orchestration/profile.json +1 -0
  93. package/profiles/ai-orchestration/templates/implementation/README.md +3 -0
  94. package/profiles/ai-orchestration/templates/patterns/README.md +3 -0
  95. package/profiles/ai-orchestration/templates/review/README.md +3 -0
  96. package/profiles/ai-orchestration/templates/semantics/README.md +3 -0
  97. package/profiles/ai-orchestration/templates/testing/README.md +3 -0
  98. package/profiles/conductor/profile.json +1 -0
  99. package/profiles/conductor/templates/applicability/README.md +3 -0
  100. package/profiles/conductor/templates/evidence/README.md +3 -0
  101. package/profiles/conductor/templates/patterns/README.md +3 -0
  102. package/profiles/conductor/templates/semantics/README.md +3 -0
  103. package/schemas/applicability-matrix.schema.json +1 -0
  104. package/schemas/consumer-config.schema.json +1 -0
  105. package/schemas/consumer-routes.schema.json +1 -0
  106. package/schemas/manifest.schema.json +1 -0
  107. package/schemas/pattern.schema.json +1 -0
  108. package/schemas/profile.schema.json +1 -0
  109. package/schemas/projection-manifest.schema.json +1 -0
  110. package/schemas/record.schema.json +1 -0
  111. package/schemas/semantic.schema.json +1 -0
  112. package/src/applicability/facts.yml +1 -0
  113. package/src/applicability/matrix.yml +20 -0
  114. package/src/evidence/proof-routing.yml +1 -0
  115. package/src/foundations/conformance-boundary.yml +1 -0
  116. package/src/foundations/standards-hierarchy.yml +1 -0
  117. package/src/foundations/wcag-2.2.yml +1 -0
  118. package/src/patterns/disclosure/accordion.yml +1 -0
  119. package/src/patterns/disclosure/disclosure.yml +1 -0
  120. package/src/patterns/feedback/alert.yml +1 -0
  121. package/src/patterns/feedback/dynamic-status.yml +1 -0
  122. package/src/patterns/feedback/progress.yml +1 -0
  123. package/src/patterns/forms/consequential-submission.yml +1 -0
  124. package/src/patterns/forms/field.yml +1 -0
  125. package/src/patterns/forms/validation.yml +1 -0
  126. package/src/patterns/media/carousel.yml +1 -0
  127. package/src/patterns/media/image.yml +1 -0
  128. package/src/patterns/media/media-player.yml +1 -0
  129. package/src/patterns/navigation/menu-button.yml +1 -0
  130. package/src/patterns/navigation/pagination.yml +1 -0
  131. package/src/patterns/navigation/tabs.yml +1 -0
  132. package/src/patterns/overlays/dialog.yml +1 -0
  133. package/src/patterns/overlays/popover.yml +1 -0
  134. package/src/patterns/overlays/tooltip.yml +1 -0
  135. package/src/patterns/selection/combobox.yml +1 -0
  136. package/src/patterns/selection/listbox.yml +1 -0
  137. package/src/policies/enhanced-quality.yml +1 -0
  138. package/src/policies/target-size.yml +1 -0
  139. package/src/semantics/accessible-names.yml +1 -0
  140. package/src/semantics/forms.yml +1 -0
  141. package/src/semantics/headings-landmarks.yml +1 -0
  142. package/src/semantics/keyboard-focus.yml +1 -0
  143. package/src/semantics/live-regions.yml +1 -0
  144. package/src/semantics/media.yml +1 -0
  145. package/src/semantics/native-elements.yml +1 -0
  146. package/src/semantics/roles-states-properties.yml +1 -0
  147. package/src/semantics/tables.yml +1 -0
  148. package/src/sources.yml +1 -0
@@ -0,0 +1,44 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.accordion",
6
+ "version": "1.0.0",
7
+ "title": "Accordion",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.native-elements",
11
+ "semantics.accessible-name",
12
+ "semantics.expanded-state",
13
+ "semantics.keyboard",
14
+ "semantics.focus.visible"
15
+ ],
16
+ "activation": {
17
+ "fact": "component.pattern",
18
+ "equals": "accordion"
19
+ },
20
+ "scope": "Grouped disclosure sections",
21
+ "behavior": [
22
+ "Toggle only the controlled panel",
23
+ "Preserve DOM and focus order"
24
+ ],
25
+ "product_decisions": [
26
+ "single_or_multiple_open"
27
+ ],
28
+ "functional_spec_bindings": [
29
+ "behavior",
30
+ "states",
31
+ "keyboard"
32
+ ],
33
+ "implementation_outcomes": [
34
+ "accordion-control",
35
+ "accordion-panel"
36
+ ],
37
+ "evidence_routes": [
38
+ "unit",
39
+ "axe",
40
+ "e2e",
41
+ "human"
42
+ ]
43
+ }
44
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.alert",
6
+ "version": "1.0.0",
7
+ "title": "Alert",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.alert"
11
+ ],
12
+ "activation": {
13
+ "fact": "component.pattern",
14
+ "equals": "alert"
15
+ },
16
+ "scope": "Urgent message",
17
+ "behavior": [
18
+ "Announce once without moving focus"
19
+ ],
20
+ "product_decisions": [
21
+ "urgency"
22
+ ],
23
+ "functional_spec_bindings": [
24
+ "messaging"
25
+ ],
26
+ "implementation_outcomes": [
27
+ "alert-announcement"
28
+ ],
29
+ "evidence_routes": [
30
+ "unit",
31
+ "human"
32
+ ]
33
+ }
34
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.carousel",
6
+ "version": "1.0.0",
7
+ "title": "Carousel",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.accessible-name",
11
+ "semantics.keyboard",
12
+ "semantics.focus.visible",
13
+ "semantics.motion-control",
14
+ "semantics.live-status"
15
+ ],
16
+ "activation": {
17
+ "fact": "component.pattern",
18
+ "equals": "carousel"
19
+ },
20
+ "scope": "Rotating content set",
21
+ "behavior": [
22
+ "Pause rotation on interaction",
23
+ "Provide named controls and current position"
24
+ ],
25
+ "product_decisions": [
26
+ "auto_rotation",
27
+ "looping"
28
+ ],
29
+ "functional_spec_bindings": [
30
+ "behavior",
31
+ "states",
32
+ "controls"
33
+ ],
34
+ "implementation_outcomes": [
35
+ "carousel-controls",
36
+ "carousel-rotation"
37
+ ],
38
+ "evidence_routes": [
39
+ "unit",
40
+ "axe",
41
+ "e2e",
42
+ "human"
43
+ ]
44
+ }
45
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.combobox",
6
+ "version": "1.0.0",
7
+ "title": "Combobox",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.accessible-name",
11
+ "semantics.expanded-state",
12
+ "semantics.selected-state",
13
+ "semantics.keyboard",
14
+ "semantics.live-status"
15
+ ],
16
+ "activation": {
17
+ "fact": "component.pattern",
18
+ "equals": "combobox"
19
+ },
20
+ "scope": "Input with selectable popup",
21
+ "behavior": [
22
+ "Keyboard controls popup, option, and input independently"
23
+ ],
24
+ "product_decisions": [
25
+ "editable",
26
+ "autocomplete",
27
+ "selection_commit"
28
+ ],
29
+ "functional_spec_bindings": [
30
+ "behavior",
31
+ "states",
32
+ "keyboard"
33
+ ],
34
+ "implementation_outcomes": [
35
+ "combobox-state-machine"
36
+ ],
37
+ "evidence_routes": [
38
+ "unit",
39
+ "axe",
40
+ "e2e",
41
+ "human"
42
+ ]
43
+ }
44
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.consequential-submission",
6
+ "version": "1.0.0",
7
+ "title": "Consequential submission",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.consequential-action",
11
+ "semantics.form-error",
12
+ "semantics.keyboard"
13
+ ],
14
+ "activation": {
15
+ "fact": "component.submission_consequence",
16
+ "contains": "consequential"
17
+ },
18
+ "scope": "Legal, financial, destructive, or irreversible submission",
19
+ "behavior": [
20
+ "Support review, correction, confirmation, or reversal"
21
+ ],
22
+ "product_decisions": [
23
+ "safeguard",
24
+ "reversal_window"
25
+ ],
26
+ "functional_spec_bindings": [
27
+ "submission",
28
+ "confirmation"
29
+ ],
30
+ "implementation_outcomes": [
31
+ "submission-safeguard"
32
+ ],
33
+ "evidence_routes": [
34
+ "e2e",
35
+ "human"
36
+ ]
37
+ }
38
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.dialog",
6
+ "version": "1.0.0",
7
+ "title": "Dialog",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.native-dialog",
11
+ "semantics.accessible-name",
12
+ "semantics.keyboard.escape",
13
+ "semantics.focus.initial",
14
+ "semantics.focus.return"
15
+ ],
16
+ "activation": {
17
+ "fact": "component.pattern",
18
+ "equals": "dialog"
19
+ },
20
+ "scope": "Modal and non-modal dialogs",
21
+ "behavior": [
22
+ "Manage initial, contained, and return focus",
23
+ "Dismiss topmost dialog with Escape"
24
+ ],
25
+ "product_decisions": [
26
+ "modal",
27
+ "initial_focus",
28
+ "dismissal"
29
+ ],
30
+ "functional_spec_bindings": [
31
+ "behavior",
32
+ "states",
33
+ "focus",
34
+ "keyboard"
35
+ ],
36
+ "implementation_outcomes": [
37
+ "dialog-semantics",
38
+ "dialog-focus-lifecycle"
39
+ ],
40
+ "evidence_routes": [
41
+ "unit",
42
+ "axe",
43
+ "e2e",
44
+ "human"
45
+ ]
46
+ }
47
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.disclosure",
6
+ "version": "1.0.0",
7
+ "title": "Disclosure",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.native-elements",
11
+ "semantics.accessible-name",
12
+ "semantics.expanded-state",
13
+ "semantics.keyboard"
14
+ ],
15
+ "activation": {
16
+ "fact": "component.pattern",
17
+ "equals": "disclosure"
18
+ },
19
+ "scope": "Show and hide supplementary content",
20
+ "behavior": [
21
+ "Control toggles one region"
22
+ ],
23
+ "product_decisions": [
24
+ "initial_state"
25
+ ],
26
+ "functional_spec_bindings": [
27
+ "behavior",
28
+ "states"
29
+ ],
30
+ "implementation_outcomes": [
31
+ "disclosure-control"
32
+ ],
33
+ "evidence_routes": [
34
+ "unit",
35
+ "axe",
36
+ "e2e"
37
+ ]
38
+ }
39
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "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
+ "activation": {
13
+ "fact": "component.has_dynamic_status",
14
+ "equals": true
15
+ },
16
+ "scope": "Asynchronous status message",
17
+ "behavior": [
18
+ "Announce meaningful changes once"
19
+ ],
20
+ "product_decisions": [
21
+ "announcement_copy"
22
+ ],
23
+ "functional_spec_bindings": [
24
+ "messaging",
25
+ "states"
26
+ ],
27
+ "implementation_outcomes": [
28
+ "status-live-region"
29
+ ],
30
+ "evidence_routes": [
31
+ "unit",
32
+ "e2e",
33
+ "human"
34
+ ]
35
+ }
36
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "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
+ "activation": {
15
+ "fact": "component.has_form_fields",
16
+ "equals": true
17
+ },
18
+ "scope": "Labeled form input",
19
+ "behavior": [
20
+ "Expose label, instructions, and requiredness before interaction"
21
+ ],
22
+ "product_decisions": [
23
+ "required",
24
+ "instructions"
25
+ ],
26
+ "functional_spec_bindings": [
27
+ "fields",
28
+ "requiredness"
29
+ ],
30
+ "implementation_outcomes": [
31
+ "field-associations"
32
+ ],
33
+ "evidence_routes": [
34
+ "unit",
35
+ "axe",
36
+ "human"
37
+ ]
38
+ }
39
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "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
+ "activation": {
13
+ "fact": "content.has_non_text",
14
+ "equals": true
15
+ },
16
+ "scope": "Informative, functional, complex, or decorative image",
17
+ "behavior": [
18
+ "Alternative follows image purpose"
19
+ ],
20
+ "product_decisions": [
21
+ "purpose",
22
+ "long_description"
23
+ ],
24
+ "functional_spec_bindings": [
25
+ "content"
26
+ ],
27
+ "implementation_outcomes": [
28
+ "image-alternative"
29
+ ],
30
+ "evidence_routes": [
31
+ "axe",
32
+ "human"
33
+ ]
34
+ }
35
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "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
+ "activation": {
16
+ "fact": "component.pattern",
17
+ "equals": "listbox"
18
+ },
19
+ "scope": "Single or multi-select option list",
20
+ "behavior": [
21
+ "Arrow keys move active option",
22
+ "Selection follows declared model"
23
+ ],
24
+ "product_decisions": [
25
+ "single_or_multi",
26
+ "selection_follows_focus"
27
+ ],
28
+ "functional_spec_bindings": [
29
+ "behavior",
30
+ "states",
31
+ "keyboard"
32
+ ],
33
+ "implementation_outcomes": [
34
+ "listbox-keyboard-model"
35
+ ],
36
+ "evidence_routes": [
37
+ "unit",
38
+ "axe",
39
+ "e2e",
40
+ "human"
41
+ ]
42
+ }
43
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "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
+ "activation": {
17
+ "fact": "content.has_media",
18
+ "equals": true
19
+ },
20
+ "scope": "Audio or video playback",
21
+ "behavior": [
22
+ "Provide keyboard-operable named controls and required alternatives"
23
+ ],
24
+ "product_decisions": [
25
+ "captions",
26
+ "transcript",
27
+ "audio_description",
28
+ "autoplay"
29
+ ],
30
+ "functional_spec_bindings": [
31
+ "content",
32
+ "controls",
33
+ "behavior"
34
+ ],
35
+ "implementation_outcomes": [
36
+ "media-alternatives",
37
+ "media-controls"
38
+ ],
39
+ "evidence_routes": [
40
+ "axe",
41
+ "e2e",
42
+ "human"
43
+ ]
44
+ }
45
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "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
+ "activation": {
17
+ "fact": "component.pattern",
18
+ "equals": "menu-button"
19
+ },
20
+ "scope": "Button opening a command menu",
21
+ "behavior": [
22
+ "Open and navigate menu by keyboard"
23
+ ],
24
+ "product_decisions": [
25
+ "focus_strategy"
26
+ ],
27
+ "functional_spec_bindings": [
28
+ "behavior",
29
+ "keyboard",
30
+ "focus"
31
+ ],
32
+ "implementation_outcomes": [
33
+ "menu-button-keyboard"
34
+ ],
35
+ "evidence_routes": [
36
+ "unit",
37
+ "e2e",
38
+ "human"
39
+ ]
40
+ }
41
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.pagination",
6
+ "version": "1.0.0",
7
+ "title": "Pagination",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.native-elements",
11
+ "semantics.accessible-name",
12
+ "semantics.landmarks",
13
+ "semantics.focus.visible"
14
+ ],
15
+ "activation": {
16
+ "fact": "component.pattern",
17
+ "equals": "pagination"
18
+ },
19
+ "scope": "Paged result navigation",
20
+ "behavior": [
21
+ "Expose current page and named navigation"
22
+ ],
23
+ "product_decisions": [
24
+ "url_behavior"
25
+ ],
26
+ "functional_spec_bindings": [
27
+ "states",
28
+ "navigation"
29
+ ],
30
+ "implementation_outcomes": [
31
+ "pagination-current-page"
32
+ ],
33
+ "evidence_routes": [
34
+ "unit",
35
+ "axe",
36
+ "human"
37
+ ]
38
+ }
39
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.popover",
6
+ "version": "1.0.0",
7
+ "title": "Popover",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.native-elements",
11
+ "semantics.accessible-name",
12
+ "semantics.keyboard.escape",
13
+ "semantics.focus.return"
14
+ ],
15
+ "activation": {
16
+ "fact": "component.pattern",
17
+ "equals": "popover"
18
+ },
19
+ "scope": "Non-modal transient surface",
20
+ "behavior": [
21
+ "Dismiss without trapping focus"
22
+ ],
23
+ "product_decisions": [
24
+ "dismissal",
25
+ "focus_entry"
26
+ ],
27
+ "functional_spec_bindings": [
28
+ "behavior",
29
+ "focus"
30
+ ],
31
+ "implementation_outcomes": [
32
+ "popover-dismissal"
33
+ ],
34
+ "evidence_routes": [
35
+ "unit",
36
+ "e2e",
37
+ "human"
38
+ ]
39
+ }
40
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "_generated": "GENERATED by @verndale/accessibility-standards; DO NOT EDIT",
3
+ "schema_version": 1,
4
+ "pattern": {
5
+ "id": "pattern.progress",
6
+ "version": "1.0.0",
7
+ "title": "Progress",
8
+ "kind": "pattern",
9
+ "requires": [
10
+ "semantics.name-role-value",
11
+ "semantics.live-status"
12
+ ],
13
+ "activation": {
14
+ "fact": "component.pattern",
15
+ "equals": "progress"
16
+ },
17
+ "scope": "Determinate or indeterminate progress",
18
+ "behavior": [
19
+ "Expose value and completion changes without announcement noise"
20
+ ],
21
+ "product_decisions": [
22
+ "determinate"
23
+ ],
24
+ "functional_spec_bindings": [
25
+ "states",
26
+ "messaging"
27
+ ],
28
+ "implementation_outcomes": [
29
+ "progress-value"
30
+ ],
31
+ "evidence_routes": [
32
+ "unit",
33
+ "axe",
34
+ "human"
35
+ ]
36
+ }
37
+ }