@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 @@
|
|
|
1
|
-
{"id":"pattern.alert","version":"1.0.0","title":"Alert","kind":"pattern","requires":["semantics.alert"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.alert"}},"scope":"Urgent message","behavior":["Announce once without moving focus"],"product_decisions":["urgency"],"functional_spec_bindings":["messaging"],"implementation_outcomes":["alert-announcement"],"evidence_routes":["unit","human"]}
|
|
1
|
+
{"id":"pattern.alert","version":"1.0.0","title":"Alert","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"alert","url":"https://www.w3.org/WAI/ARIA/apg/patterns/alert/","normative":false}],"requires":["semantics.alert"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.alert"}},"scope":"Urgent message","behavior":["Announce once without moving focus"],"product_decisions":["urgency"],"functional_spec_bindings":["messaging"],"implementation_outcomes":["alert-announcement"],"evidence_routes":["unit","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.dynamic-status","version":"1.0.0","title":"Dynamic status","kind":"pattern","requires":["semantics.live-status"],"activation":{"equals":{"fact":"component.has_dynamic_status","value":true}},"scope":"Asynchronous status message","behavior":["Announce meaningful changes once"],"product_decisions":["announcement_copy"],"functional_spec_bindings":["messaging","states"],"implementation_outcomes":["status-live-region"],"evidence_routes":["unit","e2e","human"]}
|
|
1
|
+
{"id":"pattern.dynamic-status","version":"1.0.0","title":"Dynamic status","kind":"pattern","standards_refs":[{"authority":"wcag-2.2","identifier":"4.1.3","url":"https://www.w3.org/TR/WCAG22/#status-messages","normative":true,"level":"AA"}],"requires":["semantics.live-status"],"activation":{"equals":{"fact":"component.has_dynamic_status","value":true}},"scope":"Asynchronous status message","behavior":["Announce meaningful changes once"],"product_decisions":["announcement_copy"],"functional_spec_bindings":["messaging","states"],"implementation_outcomes":["status-live-region"],"evidence_routes":["unit","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.progress","version":"1.0.0","title":"Progress","kind":"pattern","requires":["semantics.name-role-value","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.progress"}},"scope":"Determinate or indeterminate progress","behavior":["Expose value and completion changes without announcement noise"],"product_decisions":["determinate"],"functional_spec_bindings":["states","messaging"],"implementation_outcomes":["progress-value"],"evidence_routes":["unit","axe","human"]}
|
|
1
|
+
{"id":"pattern.progress","version":"1.0.0","title":"Progress","kind":"pattern","standards_refs":[{"authority":"wai-aria-1.2","identifier":"progressbar","url":"https://www.w3.org/TR/wai-aria-1.2/#progressbar","normative":true},{"authority":"wcag-2.2","identifier":"4.1.2","url":"https://www.w3.org/TR/WCAG22/#name-role-value","normative":true,"level":"A"}],"requires":["semantics.name-role-value","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.progress"}},"scope":"Determinate or indeterminate progress","behavior":["Expose value and completion changes without announcement noise"],"product_decisions":["determinate"],"functional_spec_bindings":["states","messaging"],"implementation_outcomes":["progress-value"],"evidence_routes":["unit","axe","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.consequential-submission","version":"1.0.0","title":"Consequential submission","kind":"pattern","requires":["semantics.consequential-action","semantics.form-error","semantics.keyboard"],"activation":{"contains":{"fact":"component.submission_consequence","value":"consequential"}},"scope":"Legal, financial,
|
|
1
|
+
{"id":"pattern.consequential-submission","version":"1.0.0","title":"Consequential submission","kind":"pattern","standards_refs":[{"authority":"wcag-2.2","identifier":"3.3.4","url":"https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data","normative":true,"level":"AA"}],"requires":["semantics.consequential-action","semantics.form-error","semantics.keyboard"],"activation":{"contains":{"fact":"component.submission_consequence","value":"consequential"}},"scope":"Legal commitments, financial transactions, stored user-controllable data changes, or user test-response submissions","behavior":["Provide at least one declared safeguard: make the submission reversible; check user-entered data for errors and let the user correct them; or let the user review, confirm, and correct information before finalizing"],"product_decisions":["safeguard","reversal_window"],"functional_spec_bindings":["submission","confirmation"],"implementation_outcomes":["submission-safeguard"],"evidence_routes":["e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.field","version":"1.0.0","title":"Form field","kind":"pattern","requires":["semantics.form-label","semantics.form-required","semantics.focus.visible"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.field"}},{"equals":{"fact":"component.has_form_fields","value":true}}]},"scope":"Labeled form input","behavior":["Expose label, instructions, and requiredness before interaction"],"product_decisions":["required","instructions"],"functional_spec_bindings":["fields","requiredness"],"implementation_outcomes":["field-associations"],"evidence_routes":["unit","axe","human"]}
|
|
1
|
+
{"id":"pattern.field","version":"1.0.0","title":"Form field","kind":"pattern","standards_refs":[{"authority":"wcag-2.2","identifier":"3.3.2","url":"https://www.w3.org/TR/WCAG22/#labels-or-instructions","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"4.1.2","url":"https://www.w3.org/TR/WCAG22/#name-role-value","normative":true,"level":"A"}],"requires":["semantics.form-label","semantics.form-required","semantics.focus.visible"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.field"}},{"equals":{"fact":"component.has_form_fields","value":true}}]},"scope":"Labeled form input","behavior":["Expose label, instructions, and requiredness before interaction"],"product_decisions":["required","instructions"],"functional_spec_bindings":["fields","requiredness"],"implementation_outcomes":["field-associations"],"evidence_routes":["unit","axe","human"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"pattern.spinbutton","version":"1.0.0","title":"Spinbutton","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"spinbutton","url":"https://www.w3.org/WAI/ARIA/apg/patterns/spinbutton/","normative":false}],"requires":["semantics.accessible-name","semantics.focus.visible","semantics.form-label","semantics.keyboard","semantics.name-role-value","semantics.native-elements","semantics.roles-states-properties"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.spinbutton"}},"scope":"Value input constrained to a discrete set or range, with optional direct text editing","behavior":["Use a native number input when it supplies the required range, step, editing, labeling, and validation behavior; otherwise expose a named spinbutton with synchronized current, minimum, maximum, user-friendly value text, and invalid state when a value is outside the allowed range","Keep focus on the spinbutton while Up and Down change its value, Home and End apply known bounds, and optional Page Up and Page Down apply the declared larger step","Treat the editable decision as permission for direct text entry, not as whether the spinbutton is adjustable; when direct editing is disabled, the declared increment and decrement controls still change the value and the spinbutton is not exposed as read-only","When direct editing is allowed, preserve platform text editing commands and do not intercept keys needed to enter, navigate, select, or modify text"],"product_decisions":["editable","large_step","native_or_custom","range_bounds","step","value_text"],"functional_spec_bindings":["fields","states","keyboard","validation"],"implementation_outcomes":["spinbutton-keyboard-model","spinbutton-native-control-selection","spinbutton-range-state","spinbutton-validation"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.validation","version":"1.0.0","title":"Form validation","kind":"pattern","requires":["semantics.form-error","semantics.live-status","semantics.focus.initial"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.validation"}},{"equals":{"fact":"component.has_validation","value":true}}]},"scope":"Client or server validation","behavior":["Identify, associate, summarize, and focus errors deterministically"],"product_decisions":["validation_timing","error_summary"],"functional_spec_bindings":["validation","messaging","focus"],"implementation_outcomes":["validation-associations","error-summary"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
1
|
+
{"id":"pattern.validation","version":"1.0.0","title":"Form validation","kind":"pattern","standards_refs":[{"authority":"wcag-2.2","identifier":"3.3.1","url":"https://www.w3.org/TR/WCAG22/#error-identification","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"3.3.3","url":"https://www.w3.org/TR/WCAG22/#error-suggestion","normative":true,"level":"AA"}],"requires":["semantics.form-error","semantics.live-status","semantics.focus.initial"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.validation"}},{"equals":{"fact":"component.has_validation","value":true}}]},"scope":"Client or server validation","behavior":["Identify, associate, summarize, and focus errors deterministically"],"product_decisions":["validation_timing","error_summary"],"functional_spec_bindings":["validation","messaging","focus"],"implementation_outcomes":["validation-associations","error-summary"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.carousel","version":"1.0.0","title":"Carousel","kind":"pattern","requires":["semantics.accessible-name","semantics.keyboard","semantics.focus.visible","semantics.motion-control","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.carousel"}},"scope":"Rotating content set","behavior":["Pause rotation on interaction","Provide named controls and current position"],"product_decisions":["auto_rotation","looping"],"functional_spec_bindings":["behavior","states","controls"],"implementation_outcomes":["carousel-controls","carousel-rotation"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
1
|
+
{"id":"pattern.carousel","version":"1.0.0","title":"Carousel","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"carousel","url":"https://www.w3.org/WAI/ARIA/apg/patterns/carousel/","normative":false}],"requires":["semantics.accessible-name","semantics.keyboard","semantics.focus.visible","semantics.motion-control","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.carousel"}},"scope":"Rotating content set","behavior":["Pause rotation on interaction","Provide named controls and current position"],"product_decisions":["auto_rotation","looping"],"functional_spec_bindings":["behavior","states","controls"],"implementation_outcomes":["carousel-controls","carousel-rotation"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.image","version":"1.0.0","title":"Image","kind":"pattern","requires":["semantics.non-text-alternative"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.image"}},{"equals":{"fact":"content.has_non_text","value":true}}]},"scope":"Informative, functional, complex, or decorative image","behavior":["Alternative follows image purpose"],"product_decisions":["purpose","long_description"],"functional_spec_bindings":["content"],"implementation_outcomes":["image-alternative"],"evidence_routes":["axe","human"]}
|
|
1
|
+
{"id":"pattern.image","version":"1.0.0","title":"Image","kind":"pattern","standards_refs":[{"authority":"wcag-2.2","identifier":"1.1.1","url":"https://www.w3.org/TR/WCAG22/#non-text-content","normative":true,"level":"A"}],"requires":["semantics.non-text-alternative"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.image"}},{"equals":{"fact":"content.has_non_text","value":true}}]},"scope":"Informative, functional, complex, or decorative image","behavior":["Alternative follows image purpose"],"product_decisions":["purpose","long_description"],"functional_spec_bindings":["content"],"implementation_outcomes":["image-alternative"],"evidence_routes":["axe","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.media-player","version":"1.0.0","title":"Media player","kind":"pattern","requires":["semantics.media-alternatives","semantics.accessible-name","semantics.keyboard","semantics.focus.visible","semantics.motion-control"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.media-player"}},{"equals":{"fact":"content.has_media","value":true}}]},"scope":"Audio or video playback","behavior":["Provide keyboard-operable named controls and required alternatives"],"product_decisions":["captions","transcript","audio_description","autoplay"],"functional_spec_bindings":["content","controls","behavior"],"implementation_outcomes":["media-alternatives","media-controls"],"evidence_routes":["axe","e2e","human"]}
|
|
1
|
+
{"id":"pattern.media-player","version":"1.0.0","title":"Media player","kind":"pattern","standards_refs":[{"authority":"wcag-2.2","identifier":"1.2.1","url":"https://www.w3.org/TR/WCAG22/#audio-only-and-video-only-prerecorded","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"1.2.2","url":"https://www.w3.org/TR/WCAG22/#captions-prerecorded","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"1.2.3","url":"https://www.w3.org/TR/WCAG22/#audio-description-or-media-alternative-prerecorded","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"1.2.5","url":"https://www.w3.org/TR/WCAG22/#audio-description-prerecorded","normative":true,"level":"AA"}],"requires":["semantics.media-alternatives","semantics.accessible-name","semantics.keyboard","semantics.focus.visible","semantics.motion-control"],"activation":{"any":[{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.media-player"}},{"equals":{"fact":"content.has_media","value":true}}]},"scope":"Audio or video playback","behavior":["Provide keyboard-operable named controls and required alternatives"],"product_decisions":["captions","transcript","audio_description","autoplay"],"functional_spec_bindings":["content","controls","behavior"],"implementation_outcomes":["media-alternatives","media-controls"],"evidence_routes":["axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.menu-button","version":"1.0.0","title":"Menu button","kind":"pattern","requires":["semantics.accessible-name","semantics.expanded-state","semantics.keyboard","semantics.focus.initial","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.menu-button"}},"scope":"Button opening a command menu","behavior":["Open and navigate menu by keyboard"],"product_decisions":["focus_strategy"],"functional_spec_bindings":["behavior","keyboard","focus"],"implementation_outcomes":["menu-button-keyboard"],"evidence_routes":["unit","e2e","human"]}
|
|
1
|
+
{"id":"pattern.menu-button","version":"1.0.0","title":"Menu button","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"menu-button","url":"https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/","normative":false}],"requires":["semantics.accessible-name","semantics.expanded-state","semantics.keyboard","semantics.focus.initial","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.menu-button"}},"scope":"Button opening a command menu","behavior":["Open and navigate menu by keyboard"],"product_decisions":["focus_strategy"],"functional_spec_bindings":["behavior","keyboard","focus"],"implementation_outcomes":["menu-button-keyboard"],"evidence_routes":["unit","e2e","human"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"pattern.menu","version":"1.0.0","title":"Menu and menubar","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"menubar","url":"https://www.w3.org/WAI/ARIA/apg/patterns/menubar/","normative":false}],"requires":["semantics.accessible-name","semantics.expanded-state","semantics.focus.initial","semantics.focus.return","semantics.focus.visible","semantics.keyboard","semantics.keyboard.escape","semantics.roles-states-properties"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.menu"}},"scope":"Command menus, submenus, and persistent menubars","behavior":["Expose menu or menubar containers with menuitem, menuitemcheckbox, or menuitemradio children; synchronize submenu expanded state, checkable-item checked state, orientation, and disabled state","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","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","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","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","Escape closes the menu containing focus and restores focus to its parent item, menu button, or invoking context"],"product_decisions":["entry_focus","focus_strategy","menu_or_menubar","orientation","space_behavior","submenu_model","typeahead","wrap_navigation"],"functional_spec_bindings":["behavior","states","keyboard","focus"],"implementation_outcomes":["menu-composite-focus","menu-keyboard-model","menu-state-model"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.pagination","version":"1.0.0","title":"Pagination","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.landmarks","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.pagination"}},"scope":"Paged result navigation","behavior":["Expose current page and named navigation"],"product_decisions":["url_behavior"],"functional_spec_bindings":["states","navigation"],"implementation_outcomes":["pagination-current-page"],"evidence_routes":["unit","axe","human"]}
|
|
1
|
+
{"id":"pattern.pagination","version":"1.0.0","title":"Pagination","kind":"pattern","standards_refs":[{"authority":"wcag-2.2","identifier":"2.4.4","url":"https://www.w3.org/TR/WCAG22/#link-purpose-in-context","normative":true,"level":"A"}],"requires":["semantics.native-elements","semantics.accessible-name","semantics.landmarks","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.pagination"}},"scope":"Paged result navigation","behavior":["Expose current page and named navigation"],"product_decisions":["url_behavior"],"functional_spec_bindings":["states","navigation"],"implementation_outcomes":["pagination-current-page"],"evidence_routes":["unit","axe","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.tabs","version":"1.0.0","title":"Tabs","kind":"pattern","requires":["semantics.accessible-name","semantics.selected-state","semantics.keyboard","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tabs"}},"scope":"Tabbed interfaces","behavior":["Arrow keys move between tabs","Selection and activation follow the documented model"],"product_decisions":["automatic_or_manual_activation"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["tabs-keyboard-model"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
1
|
+
{"id":"pattern.tabs","version":"1.0.0","title":"Tabs","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"tabs","url":"https://www.w3.org/WAI/ARIA/apg/patterns/tabs/","normative":false}],"requires":["semantics.accessible-name","semantics.selected-state","semantics.keyboard","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tabs"}},"scope":"Tabbed interfaces","behavior":["Arrow keys move between tabs","Selection and activation follow the documented model"],"product_decisions":["automatic_or_manual_activation"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["tabs-keyboard-model"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"pattern.tree-view","version":"1.0.0","title":"Tree view","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"treeview","url":"https://www.w3.org/WAI/ARIA/apg/patterns/treeview/","normative":false}],"requires":["semantics.accessible-name","semantics.expanded-state","semantics.focus.visible","semantics.keyboard","semantics.roles-states-properties","semantics.selected-state"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tree-view"}},"scope":"Hierarchical single-select or multi-select tree widgets","behavior":["Expose tree, treeitem, and group relationships, set aria-multiselectable for a multi-select tree, and provide level, position, and set-size metadata when the complete hierarchy is not represented in the DOM","On tree entry, focus the selected node or first selected node when one exists and otherwise focus the first node; keep one composite tab stop and keep focus visually distinct from selection","In a vertical tree, Right Arrow opens a closed parent without moving focus, moves from an open parent to its first child, and does nothing on an end node; Left Arrow closes an open parent, moves from a closed parent or end node to its parent, and does nothing on a root node that cannot close","In a vertical tree, Down Arrow moves to the next visible focusable node and Up Arrow moves to the previous visible focusable node without changing expansion; Home and End move to the first and last visible focusable nodes, Enter performs the node's declared default action, and type-ahead moves to the next matching node","For a horizontal tree, remap Down Arrow to the vertical Right Arrow behavior, Right Arrow to vertical Down Arrow, Up Arrow to vertical Left Arrow, and Left Arrow to vertical Up Arrow","Keep focus distinct from selection and synchronize expansion and the declared aria-selected or aria-checked state model without exposing both states for the same selection purpose","For a multi-select tree using the recommended modifier-free model, navigation does not clear selection, Space toggles selection of the focused node, and declared Shift combinations extend contiguous selection; for the alternative modifier-required model, unmodified navigation selects only the focused node while Control plus an arrow moves focus without changing selection and Control plus Space toggles the focused node"],"product_decisions":["focus_strategy","multi_select_keyboard_model","orientation","selection_follows_focus","selection_state","single_or_multi_select","typeahead","virtualization"],"functional_spec_bindings":["behavior","states","keyboard","focus"],"implementation_outcomes":["tree-hierarchy-semantics","tree-keyboard-model","tree-selection-model"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.dialog","version":"1.0.0","title":"Dialog","kind":"pattern","requires":["semantics.native-dialog","semantics.accessible-name","semantics.keyboard.escape","semantics.focus.initial","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.dialog"}},"scope":"Modal and non-modal dialogs","behavior":["Manage initial, contained, and return focus","Dismiss topmost dialog with Escape"],"product_decisions":["modal","initial_focus","dismissal"],"functional_spec_bindings":["behavior","states","focus","keyboard"],"implementation_outcomes":["dialog-semantics","dialog-focus-lifecycle"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
1
|
+
{"id":"pattern.dialog","version":"1.0.0","title":"Dialog","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"dialog-modal","url":"https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/","normative":false}],"requires":["semantics.native-dialog","semantics.accessible-name","semantics.keyboard.escape","semantics.focus.initial","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.dialog"}},"scope":"Modal and non-modal dialogs","behavior":["Manage initial, contained, and return focus","Dismiss topmost dialog with Escape"],"product_decisions":["modal","initial_focus","dismissal"],"functional_spec_bindings":["behavior","states","focus","keyboard"],"implementation_outcomes":["dialog-semantics","dialog-focus-lifecycle"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.popover","version":"1.0.0","title":"Popover","kind":"pattern","requires":["semantics.native-elements","semantics.accessible-name","semantics.keyboard.escape","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.popover"}},"scope":"Non-modal transient surface","behavior":["Dismiss without trapping focus"],"product_decisions":["dismissal","focus_entry"],"functional_spec_bindings":["behavior","focus"],"implementation_outcomes":["popover-dismissal"],"evidence_routes":["unit","e2e","human"]}
|
|
1
|
+
{"id":"pattern.popover","version":"1.0.0","title":"Popover","kind":"pattern","standards_refs":[{"authority":"wcag-2.2","identifier":"2.1.1","url":"https://www.w3.org/TR/WCAG22/#keyboard","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"2.4.3","url":"https://www.w3.org/TR/WCAG22/#focus-order","normative":true,"level":"A"}],"requires":["semantics.native-elements","semantics.accessible-name","semantics.keyboard.escape","semantics.focus.return"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.popover"}},"scope":"Non-modal transient surface","behavior":["Dismiss without trapping focus"],"product_decisions":["dismissal","focus_entry"],"functional_spec_bindings":["behavior","focus"],"implementation_outcomes":["popover-dismissal"],"evidence_routes":["unit","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.tooltip","version":"1.0.0","title":"Tooltip","kind":"pattern","requires":["semantics.accessible-name","semantics.keyboard.escape"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tooltip"}},"scope":"Supplementary description","behavior":["Available on hover and focus","Never contains interactive content"],"product_decisions":["delay"],"functional_spec_bindings":["behavior"],"implementation_outcomes":["tooltip-description"],"evidence_routes":["unit","e2e","human"]}
|
|
1
|
+
{"id":"pattern.tooltip","version":"1.0.0","title":"Tooltip","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"tooltip","url":"https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/","normative":false}],"requires":["semantics.accessible-name","semantics.keyboard.escape"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.tooltip"}},"scope":"Supplementary description","behavior":["Available on hover and focus","Never contains interactive content"],"product_decisions":["delay"],"functional_spec_bindings":["behavior"],"implementation_outcomes":["tooltip-description"],"evidence_routes":["unit","e2e","human"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"pattern.checkbox","version":"1.0.0","title":"Checkbox","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"checkbox","url":"https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/","normative":false}],"requires":["semantics.accessible-name","semantics.focus.visible","semantics.form-label","semantics.keyboard","semantics.name-role-value","semantics.native-elements","semantics.roles-states-properties"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.checkbox"}},"scope":"Standalone, grouped, dual-state, or tri-state checkboxes","behavior":["Use a native checkbox when it provides the required behavior; otherwise expose checkbox semantics and synchronize checked, unchecked, or mixed state","Space toggles the focused checkbox without changing unrelated controls","Associate logical groups and any relevant descriptions with programmatic group labels"],"product_decisions":["dual_or_tri_state","group_labeling","mixed_state_cycle"],"functional_spec_bindings":["fields","states","keyboard"],"implementation_outcomes":["checkbox-group-semantics","checkbox-state-machine"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.combobox","version":"1.0.0","title":"Combobox","kind":"pattern","requires":["semantics.accessible-name","semantics.expanded-state","semantics.selected-state","semantics.keyboard","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.combobox"}},"scope":"Input with selectable popup","behavior":["Keyboard controls popup, option, and input independently"],"product_decisions":["editable","autocomplete","selection_commit"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["combobox-state-machine"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
1
|
+
{"id":"pattern.combobox","version":"1.0.0","title":"Combobox","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"combobox","url":"https://www.w3.org/WAI/ARIA/apg/patterns/combobox/","normative":false}],"requires":["semantics.accessible-name","semantics.expanded-state","semantics.selected-state","semantics.keyboard","semantics.live-status"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.combobox"}},"scope":"Input with selectable popup","behavior":["Keyboard controls popup, option, and input independently"],"product_decisions":["editable","autocomplete","selection_commit"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["combobox-state-machine"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"pattern.listbox","version":"1.0.0","title":"Listbox","kind":"pattern","requires":["semantics.accessible-name","semantics.selected-state","semantics.keyboard","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.listbox"}},"scope":"Single or multi-select option list","behavior":["Arrow keys move active option","Selection follows declared model"],"product_decisions":["single_or_multi","selection_follows_focus"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["listbox-keyboard-model"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
1
|
+
{"id":"pattern.listbox","version":"1.0.0","title":"Listbox","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"listbox","url":"https://www.w3.org/WAI/ARIA/apg/patterns/listbox/","normative":false}],"requires":["semantics.accessible-name","semantics.selected-state","semantics.keyboard","semantics.focus.visible"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.listbox"}},"scope":"Single or multi-select option list","behavior":["Arrow keys move active option","Selection follows declared model"],"product_decisions":["single_or_multi","selection_follows_focus"],"functional_spec_bindings":["behavior","states","keyboard"],"implementation_outcomes":["listbox-keyboard-model"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"pattern.radio-group","version":"1.0.0","title":"Radio group","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"radio","url":"https://www.w3.org/WAI/ARIA/apg/patterns/radio/","normative":false}],"requires":["semantics.accessible-name","semantics.focus.visible","semantics.form-label","semantics.keyboard","semantics.native-elements","semantics.roles-states-properties"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.radio-group"}},"scope":"Mutually exclusive choices presented as a radio group","behavior":["Use native grouped radio inputs when they provide the required behavior; otherwise expose a named radiogroup containing named radio controls with exactly one checked item when selected","Use one tab stop for group entry, focusing the checked radio or the first radio when none is checked","Outside a toolbar, Space selects the focused radio and arrow keys move focus and selection with wrapping; inside a toolbar, toolbar navigation moves focus without changing selection, while Space or optionally Enter checks the focused radio"],"product_decisions":["initial_selection","native_or_custom","toolbar_context","wrap_navigation"],"functional_spec_bindings":["fields","states","keyboard","focus"],"implementation_outcomes":["radio-group-keyboard-model","radio-group-labeling","radio-group-selection-model"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"pattern.slider","version":"1.0.0","title":"Slider","kind":"pattern","standards_refs":[{"authority":"aria-apg","identifier":"slider","url":"https://www.w3.org/WAI/ARIA/apg/patterns/slider/","normative":false},{"authority":"aria-apg","identifier":"slider-multithumb","url":"https://www.w3.org/WAI/ARIA/apg/patterns/slider-multithumb/","normative":false}],"requires":["semantics.accessible-name","semantics.dragging-alternative","semantics.focus.visible","semantics.keyboard","semantics.name-role-value","semantics.native-elements","semantics.roles-states-properties"],"activation":{"contains":{"fact":"component.accessibility_pattern_ids","value":"pattern.slider"}},"scope":"Single-thumb or multi-thumb bounded range input","behavior":["Use a native input[type=range] for a single-thumb slider when it supplies the required range, step, orientation, labeling, and value presentation; use a custom slider only when native behavior cannot satisfy the declared interaction","Expose every focusable thumb as a distinct named slider with synchronized current, minimum, maximum, orientation, and user-friendly value text when the numeric value is insufficient","Right and Up increase by one step while Left and Down decrease by one step unless a documented orientation and value presentation makes reversal more intuitive; Home and End move to range bounds, and optional Page Up and Page Down apply the declared larger step","Provide an equivalent single-pointer method for every drag operation that does not require dragging, such as track activation or an adjacent value input","Keep every thumb in a constant tab order for multi-thumb sliders and update dependent thumb bounds whenever another thumb changes them","Verify operation with touch-based assistive technology on target devices before production use"],"product_decisions":["direction_mapping","large_step","native_or_custom","orientation","single_or_multi_thumb","step","thumb_constraints","value_text"],"functional_spec_bindings":["fields","states","keyboard","controls"],"implementation_outcomes":["slider-keyboard-model","slider-native-control-selection","slider-range-state","slider-touch-at-compatibility"],"evidence_routes":["unit","axe","e2e","human"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.accessible-name","version":"1.0.0","title":"Accessible name","kind":"semantic","requirement":"Every interactive or meaning-bearing control has a concise programmatic name
|
|
1
|
+
[{"id":"semantics.accessible-name","version":"1.0.0","title":"Accessible name","kind":"semantic","requirement":"Every interactive or meaning-bearing control has a concise programmatic name. For user interface components whose visible labels include text or images of text, the accessible name contains the text presented visually; preserve that text's order where practical.","proof":["unit","axe","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"2.5.3","url":"https://www.w3.org/TR/WCAG22/#label-in-name","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"4.1.2","url":"https://www.w3.org/TR/WCAG22/#name-role-value","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"2.5.3","url":"https://www.w3.org/WAI/WCAG22/Understanding/label-in-name.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"4.1.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html","normative":false,"level":"A"}]},{"id":"semantics.name-role-value","version":"1.0.0","title":"Name role value","kind":"semantic","requirement":"For every user interface component, the name and role can be programmatically determined; states, properties, and values that users can set can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.","proof":["unit","axe","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"4.1.2","url":"https://www.w3.org/TR/WCAG22/#name-role-value","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"4.1.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html","normative":false,"level":"A"}]}]
|
package/src/semantics/forms.yml
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.form-label","version":"1.0.0","title":"Form label","kind":"semantic","requirement":"Every form control has a persistent programmatically associated label.","proof":["unit","axe"]},{"id":"semantics.form-error","version":"1.0.0","title":"Form error","kind":"semantic","requirement":"
|
|
1
|
+
[{"id":"semantics.form-label","version":"1.0.0","title":"Form label","kind":"semantic","requirement":"Every form control has a persistent programmatically associated label.","proof":["unit","axe"],"standards_refs":[{"authority":"wcag-2.2","identifier":"1.3.1","url":"https://www.w3.org/TR/WCAG22/#info-and-relationships","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"3.3.2","url":"https://www.w3.org/TR/WCAG22/#labels-or-instructions","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"1.3.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"3.3.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/labels-or-instructions.html","normative":false,"level":"A"}]},{"id":"semantics.form-error","version":"1.0.0","title":"Form error","kind":"semantic","requirement":"When an input error is automatically detected, identify the item in error and describe the error to the user in text. When correction suggestions are known, provide them unless doing so would jeopardize the security or purpose of the content.","proof":["unit","axe","e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"3.3.1","url":"https://www.w3.org/TR/WCAG22/#error-identification","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"3.3.3","url":"https://www.w3.org/TR/WCAG22/#error-suggestion","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"3.3.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/error-identification.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"3.3.3","url":"https://www.w3.org/WAI/WCAG22/Understanding/error-suggestion.html","normative":false,"level":"AA"}]},{"id":"semantics.form-required","version":"1.0.0","title":"Required field","kind":"semantic","requirement":"Requiredness is communicated visually and programmatically before submission.","proof":["unit","axe"],"standards_refs":[{"authority":"wcag-2.2","identifier":"1.3.1","url":"https://www.w3.org/TR/WCAG22/#info-and-relationships","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"3.3.2","url":"https://www.w3.org/TR/WCAG22/#labels-or-instructions","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"1.3.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"3.3.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/labels-or-instructions.html","normative":false,"level":"A"}]},{"id":"semantics.consequential-action","version":"1.0.0","title":"Consequential action","kind":"semantic","requirement":"For web pages that cause legal commitments or financial transactions, modify or delete user-controllable data in data storage systems, or submit user test responses, at least one safeguard is provided: submissions are reversible; user-entered data is checked for input errors and the user can correct them; or a mechanism lets the user review, confirm, and correct information before finalizing the submission.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"3.3.4","url":"https://www.w3.org/TR/WCAG22/#error-prevention-legal-financial-data","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"3.3.4","url":"https://www.w3.org/WAI/WCAG22/Understanding/error-prevention-legal-financial-data.html","normative":false,"level":"AA"}]}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.headings","version":"1.0.0","title":"Heading structure","kind":"semantic","requirement":"Headings describe document structure without choosing levels for visual appearance.","proof":["axe","human"]},{"id":"semantics.landmarks","version":"1.0.0","title":"Landmarks","kind":"semantic","requirement":"Use native landmarks and name repeated landmarks only when a name is required to distinguish them.","proof":["axe","human"]}]
|
|
1
|
+
[{"id":"semantics.headings","version":"1.0.0","title":"Heading structure","kind":"semantic","requirement":"Headings describe document structure without choosing levels for visual appearance.","proof":["axe","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"1.3.1","url":"https://www.w3.org/TR/WCAG22/#info-and-relationships","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"2.4.6","url":"https://www.w3.org/TR/WCAG22/#headings-and-labels","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"1.3.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"2.4.6","url":"https://www.w3.org/WAI/WCAG22/Understanding/headings-and-labels.html","normative":false,"level":"AA"}]},{"id":"semantics.landmarks","version":"1.0.0","title":"Landmarks","kind":"semantic","requirement":"Use native landmarks and name repeated landmarks only when a name is required to distinguish them.","proof":["axe","human"],"standards_refs":[{"authority":"aria-apg","identifier":"landmark-regions","url":"https://www.w3.org/WAI/ARIA/apg/practices/landmark-regions/","normative":false},{"authority":"wcag-2.2","identifier":"1.3.1","url":"https://www.w3.org/TR/WCAG22/#info-and-relationships","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"1.3.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html","normative":false,"level":"A"}]}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.keyboard","version":"1.0.0","title":"Keyboard operation","kind":"semantic","requirement":"All functionality is operable with a keyboard without traps.","proof":["e2e","human"]},{"id":"semantics.keyboard.escape","version":"1.0.0","title":"Escape dismissal","kind":"semantic","requirement":"Escape closes the topmost dismissible overlay without activating its trigger.","proof":["unit","e2e"]},{"id":"semantics.focus.visible","version":"1.0.0","title":"Visible focus","kind":"semantic","requirement":"
|
|
1
|
+
[{"id":"semantics.keyboard","version":"1.0.0","title":"Keyboard operation","kind":"semantic","requirement":"All functionality is operable with a keyboard without traps.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"2.1.1","url":"https://www.w3.org/TR/WCAG22/#keyboard","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"2.1.2","url":"https://www.w3.org/TR/WCAG22/#no-keyboard-trap","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"2.1.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"2.1.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/no-keyboard-trap.html","normative":false,"level":"A"}]},{"id":"semantics.keyboard.escape","version":"1.0.0","title":"Escape dismissal","kind":"semantic","requirement":"Escape closes the topmost dismissible overlay without activating its trigger.","proof":["unit","e2e"],"standards_refs":[{"authority":"aria-apg","identifier":"dialog-modal","url":"https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/#keyboard_interaction","normative":false}]},{"id":"semantics.focus.visible","version":"1.0.0","title":"Visible focus","kind":"semantic","requirement":"A visible keyboard focus indicator is available, and focused components are not entirely hidden by author-created content.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"2.4.11","url":"https://www.w3.org/TR/WCAG22/#focus-not-obscured-minimum","normative":true,"level":"AA"},{"authority":"wcag-2.2","identifier":"2.4.7","url":"https://www.w3.org/TR/WCAG22/#focus-visible","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"2.4.11","url":"https://www.w3.org/WAI/WCAG22/Understanding/focus-not-obscured-minimum.html","normative":false,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"2.4.7","url":"https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html","normative":false,"level":"AA"}]},{"id":"semantics.focus.initial","version":"1.0.0","title":"Initial focus","kind":"semantic","requirement":"On activation, focus moves to the deterministic target appropriate to the pattern.","proof":["unit","e2e"],"standards_refs":[{"authority":"aria-apg","identifier":"dialog-modal","url":"https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/#keyboard_interaction","normative":false}]},{"id":"semantics.focus.return","version":"1.0.0","title":"Focus return","kind":"semantic","requirement":"On dismissal, focus returns to the invoking control or a documented logical successor.","proof":["unit","e2e"],"standards_refs":[{"authority":"aria-apg","identifier":"dialog-modal","url":"https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/#keyboard_interaction","normative":false}]},{"id":"semantics.target-size","version":"1.0.0","title":"Target size","kind":"semantic","requirement":"Each pointer target contains an axis-aligned 24 by 24 CSS pixel square unless one of these exceptions applies: an undersized target is positioned so that a 24 CSS pixel diameter circle centered on its bounding box does not intersect another target or the corresponding circle for another undersized target; an equivalent control on the same page meets this criterion; the target is in a sentence or its size is otherwise constrained by the line-height of non-target text; the target size is determined by an unmodified user agent; or the target's particular presentation is essential or legally required for the information being conveyed.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"2.5.8","url":"https://www.w3.org/TR/WCAG22/#target-size-minimum","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"2.5.8","url":"https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html","normative":false,"level":"AA"}]}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.live-status","version":"1.0.0","title":"Status announcements","kind":"semantic","requirement":"
|
|
1
|
+
[{"id":"semantics.live-status","version":"1.0.0","title":"Status announcements","kind":"semantic","requirement":"Status messages that can be programmatically determined are exposed to assistive technology through appropriate roles or properties without receiving focus, using correctly scoped and non-duplicative live regions where needed.","proof":["unit","e2e","human"],"standards_refs":[{"authority":"wai-aria-1.2","identifier":"status","url":"https://www.w3.org/TR/wai-aria-1.2/#status","normative":true},{"authority":"wcag-2.2","identifier":"4.1.3","url":"https://www.w3.org/TR/WCAG22/#status-messages","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"4.1.3","url":"https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html","normative":false,"level":"AA"}]},{"id":"semantics.alert","version":"1.0.0","title":"Urgent alert","kind":"semantic","requirement":"Use alert semantics only for urgent, time-sensitive messages that require immediate announcement.","proof":["unit","human"],"standards_refs":[{"authority":"aria-apg","identifier":"alert","url":"https://www.w3.org/WAI/ARIA/apg/patterns/alert/","normative":false},{"authority":"wai-aria-1.2","identifier":"alert","url":"https://www.w3.org/TR/wai-aria-1.2/#alert","normative":true},{"authority":"wcag-2.2","identifier":"4.1.3","url":"https://www.w3.org/TR/WCAG22/#status-messages","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"4.1.3","url":"https://www.w3.org/WAI/WCAG22/Understanding/status-messages.html","normative":false,"level":"AA"}]}]
|
package/src/semantics/media.yml
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.non-text-alternative","version":"1.0.0","title":"Non-text alternative","kind":"semantic","requirement":"Meaningful non-text content has an equivalent alternative and decorative content is ignored by assistive technology.","proof":["axe","human"]},{"id":"semantics.media-alternatives","version":"1.0.0","title":"Media alternatives","kind":"semantic","requirement":"Prerecorded media provides applicable captions, transcripts, and audio description.","proof":["human"]},{"id":"semantics.motion-control","version":"1.0.0","title":"Motion control","kind":"semantic","requirement":"
|
|
1
|
+
[{"id":"semantics.non-text-alternative","version":"1.0.0","title":"Non-text alternative","kind":"semantic","requirement":"Meaningful non-text content has an equivalent alternative and decorative content is ignored by assistive technology.","proof":["axe","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"1.1.1","url":"https://www.w3.org/TR/WCAG22/#non-text-content","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"1.1.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/non-text-content.html","normative":false,"level":"A"}]},{"id":"semantics.media-alternatives","version":"1.0.0","title":"Media alternatives","kind":"semantic","requirement":"Prerecorded media provides applicable captions, transcripts, and audio description.","proof":["human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"1.2.1","url":"https://www.w3.org/TR/WCAG22/#audio-only-and-video-only-prerecorded","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"1.2.2","url":"https://www.w3.org/TR/WCAG22/#captions-prerecorded","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"1.2.3","url":"https://www.w3.org/TR/WCAG22/#audio-description-or-media-alternative-prerecorded","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"1.2.5","url":"https://www.w3.org/TR/WCAG22/#audio-description-prerecorded","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"1.2.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/audio-only-and-video-only-prerecorded.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"1.2.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/captions-prerecorded.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"1.2.3","url":"https://www.w3.org/WAI/WCAG22/Understanding/audio-description-or-media-alternative-prerecorded.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"1.2.5","url":"https://www.w3.org/WAI/WCAG22/Understanding/audio-description-prerecorded.html","normative":false,"level":"AA"}]},{"id":"semantics.motion-control","version":"1.0.0","title":"Motion control","kind":"semantic","requirement":"Moving, blinking, or scrolling content that starts automatically, lasts more than five seconds, and appears alongside other content provides pause, stop, or hide controls unless essential. Automatically starting, parallel auto-updating content provides pause, stop, or hide controls or lets the user control update frequency unless essential. Honor reduced-motion preferences as a mechanism for disabling non-essential interaction-triggered animation.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"2.2.2","url":"https://www.w3.org/TR/WCAG22/#pause-stop-hide","normative":true,"level":"A"},{"authority":"wcag-2.2","identifier":"2.3.3","url":"https://www.w3.org/TR/WCAG22/#animation-from-interactions","normative":true,"level":"AAA"},{"authority":"wcag-2.2-understanding","identifier":"2.2.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/pause-stop-hide.html","normative":false,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"2.3.3","url":"https://www.w3.org/WAI/WCAG22/Understanding/animation-from-interactions.html","normative":false,"level":"AAA"}]}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.native-elements","version":"1.0.0","title":"Native elements","kind":"semantic","requirement":"Use the native HTML element whose semantics and behavior match the control before adding ARIA.","proof":["axe","human"]},{"id":"semantics.native-dialog","version":"1.0.0","title":"Native dialog semantics","kind":"semantic","requirement":"Use dialog semantics with a programmatic name and modal state only when interaction is modal.","proof":["axe","e2e","human"]}]
|
|
1
|
+
[{"id":"semantics.native-elements","version":"1.0.0","title":"Native elements","kind":"semantic","requirement":"Use the native HTML element whose semantics and behavior match the control before adding ARIA.","proof":["axe","human"],"standards_refs":[{"authority":"aria-apg","identifier":"read-me-first","url":"https://www.w3.org/WAI/ARIA/apg/practices/read-me-first/","normative":false},{"authority":"wai-aria-1.2","identifier":"host_general_conflict","url":"https://www.w3.org/TR/wai-aria-1.2/#host_general_conflict","normative":true}]},{"id":"semantics.native-dialog","version":"1.0.0","title":"Native dialog semantics","kind":"semantic","requirement":"Use dialog semantics with a programmatic name and modal state only when interaction is modal.","proof":["axe","e2e","human"],"standards_refs":[{"authority":"aria-apg","identifier":"dialog-modal","url":"https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/","normative":false},{"authority":"wai-aria-1.2","identifier":"dialog","url":"https://www.w3.org/TR/wai-aria-1.2/#dialog","normative":true},{"authority":"wcag-2.2","identifier":"4.1.2","url":"https://www.w3.org/TR/WCAG22/#name-role-value","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"4.1.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html","normative":false,"level":"A"}]}]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.roles-states-properties","version":"1.0.0","title":"Roles states and properties","kind":"semantic","requirement":"Apply only valid ARIA roles, states, and properties and keep exposed state synchronized with rendered behavior.","proof":["unit","axe","e2e"]},{"id":"semantics.expanded-state","version":"1.0.0","title":"Expanded state","kind":"semantic","requirement":"Expandable controls expose aria-expanded and identify the controlled region when needed.","proof":["unit","axe","e2e"]},{"id":"semantics.selected-state","version":"1.0.0","title":"Selected state","kind":"semantic","requirement":"Selection widgets expose current selection with the state required by their role.","proof":["unit","e2e"]}]
|
|
1
|
+
[{"id":"semantics.roles-states-properties","version":"1.0.0","title":"Roles states and properties","kind":"semantic","requirement":"Apply only valid ARIA roles, states, and properties and keep exposed state synchronized with rendered behavior.","proof":["unit","axe","e2e"],"standards_refs":[{"authority":"wai-aria-1.2","identifier":"roles","url":"https://www.w3.org/TR/wai-aria-1.2/#roles","normative":true},{"authority":"wcag-2.2","identifier":"4.1.2","url":"https://www.w3.org/TR/WCAG22/#name-role-value","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"4.1.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html","normative":false,"level":"A"}]},{"id":"semantics.expanded-state","version":"1.0.0","title":"Expanded state","kind":"semantic","requirement":"Expandable controls expose aria-expanded and identify the controlled region when needed.","proof":["unit","axe","e2e"],"standards_refs":[{"authority":"wai-aria-1.2","identifier":"aria-expanded","url":"https://www.w3.org/TR/wai-aria-1.2/#aria-expanded","normative":true},{"authority":"wcag-2.2","identifier":"4.1.2","url":"https://www.w3.org/TR/WCAG22/#name-role-value","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"4.1.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html","normative":false,"level":"A"}]},{"id":"semantics.selected-state","version":"1.0.0","title":"Selected state","kind":"semantic","requirement":"Selection widgets expose current selection with the state required by their role.","proof":["unit","e2e"],"standards_refs":[{"authority":"wai-aria-1.2","identifier":"aria-selected","url":"https://www.w3.org/TR/wai-aria-1.2/#aria-selected","normative":true},{"authority":"wcag-2.2","identifier":"4.1.2","url":"https://www.w3.org/TR/WCAG22/#name-role-value","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"4.1.2","url":"https://www.w3.org/WAI/WCAG22/Understanding/name-role-value.html","normative":false,"level":"A"}]}]
|
package/src/semantics/tables.yml
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"id":"semantics.data-table","version":"1.0.0","title":"Data table","kind":"semantic","requirement":"Tabular relationships use table
|
|
1
|
+
[{"id":"semantics.data-table","version":"1.0.0","title":"Data table","kind":"semantic","requirement":"Tabular relationships use table semantics with programmatically associated row and column headers.","proof":["axe","e2e","human"],"standards_refs":[{"authority":"aria-apg","identifier":"table","url":"https://www.w3.org/WAI/ARIA/apg/patterns/table/","normative":false},{"authority":"wcag-2.2","identifier":"1.3.1","url":"https://www.w3.org/TR/WCAG22/#info-and-relationships","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"1.3.1","url":"https://www.w3.org/WAI/WCAG22/Understanding/info-and-relationships.html","normative":false,"level":"A"}]}]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"id":"semantics.accessible-authentication","version":"1.0.0","title":"Accessible authentication","kind":"semantic","requirement":"Do not require a cognitive function test at any authentication step unless that step provides a non-cognitive alternative or an assistive mechanism such as password-manager support or copy and paste, including pasting a complete one-time code, or the test is limited to the object-recognition or user-provided personal-content exception.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"3.3.8","url":"https://www.w3.org/TR/WCAG22/#accessible-authentication-minimum","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"3.3.8","url":"https://www.w3.org/WAI/WCAG22/Understanding/accessible-authentication-minimum.html","normative":false,"level":"AA"}]},{"id":"semantics.consistent-help","version":"1.0.0","title":"Consistent help","kind":"semantic","requirement":"When human contact details or mechanisms, self-help, or fully automated contact mechanisms repeat across pages in the same set, they occur in the same serialized order relative to other content for the same page variation unless the user initiates a change. This does not require adding help.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"3.2.6","url":"https://www.w3.org/TR/WCAG22/#consistent-help","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"3.2.6","url":"https://www.w3.org/WAI/WCAG22/Understanding/consistent-help.html","normative":false,"level":"A"}]},{"id":"semantics.dragging-alternative","version":"1.0.0","title":"Dragging alternative","kind":"semantic","requirement":"Author-provided functionality operated by dragging also provides an equivalent single-pointer method that does not require dragging, unless dragging is essential or the functionality is determined by the user agent and not modified by the author.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"2.5.7","url":"https://www.w3.org/TR/WCAG22/#dragging-movements","normative":true,"level":"AA"},{"authority":"wcag-2.2-understanding","identifier":"2.5.7","url":"https://www.w3.org/WAI/WCAG22/Understanding/dragging-movements.html","normative":false,"level":"AA"}]},{"id":"semantics.redundant-entry","version":"1.0.0","title":"Redundant entry","kind":"semantic","requirement":"Information previously entered by or provided to the user and required again in the same process is auto-populated or available to select, unless re-entry is essential, required for security, or the prior information is no longer valid.","proof":["e2e","human"],"standards_refs":[{"authority":"wcag-2.2","identifier":"3.3.7","url":"https://www.w3.org/TR/WCAG22/#redundant-entry","normative":true,"level":"A"},{"authority":"wcag-2.2-understanding","identifier":"3.3.7","url":"https://www.w3.org/WAI/WCAG22/Understanding/redundant-entry.html","normative":false,"level":"A"}]}]
|
package/src/sources.yml
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":1,"authorities":[{"id":"wcag-2.2","url":"https://www.w3.org/TR/WCAG22/","normative":true},{"id":"wai-aria-1.2","url":"https://www.w3.org/TR/wai-aria-1.2/","normative":true},{"id":"aria-apg","url":"https://www.w3.org/WAI/ARIA/apg/","normative":false}],"precedence":["platform-semantics","wcag-2.2","wai-aria-1.2","aria-apg","product-policy"]}
|
|
1
|
+
{"version":1,"authorities":[{"id":"wcag-2.2","url":"https://www.w3.org/TR/WCAG22/","normative":true},{"id":"wcag-2.2-understanding","url":"https://www.w3.org/WAI/WCAG22/Understanding/","normative":false},{"id":"wai-aria-1.2","url":"https://www.w3.org/TR/wai-aria-1.2/","normative":true},{"id":"aria-apg","url":"https://www.w3.org/WAI/ARIA/apg/","normative":false}],"precedence":["platform-semantics","wcag-2.2","wcag-2.2-understanding","wai-aria-1.2","aria-apg","product-policy"]}
|