In this release you'll find:
- A new
aria-tab-namerule that tests role="tab" elements have an accessible name - The
landmark-complementary-is-top-levelrule is deprecated, as ARIA no longer requires this - Preparations for Element Internal support (behind a feature flag)
- Various other bug fixes for target-size, scrollable-region-focusable, and more
This release can see reveal new issues, as well as close out a few existing ones that might have come from false positives or the now deprecated rule.
Features
- add gather-internals.js external script (#5099) (c61d58b), closes #5080
- aria-allowed/prohibited-attr, aria-required-parent/children: partially support element internals role (#5080) (417b48a), closes #5039 #4259
- axe.externalAPIs: add public api for setting elementInternal data (#5105) (63bab8f)
- core: expose normalizeRunOptions (#4998) (b8e6a59)
- expose axe.resetLocale() to restore the default locale (#5108) (c2b5292), closes #5107
- getRules: include rule enabled state in returned objects (#5118) (75bf772), closes #5116
- list,listitem: support element internals role (#5119) (7d9d696)
- new-rule: check that aria-tab have an accessible name (#5001) (0d4e4e7), closes #4842
- rules: deprecate landmark-complementary-is-top-level rules (#4992) (9e09139), closes #4950
- utils: add
getElementInternalsfunction (#5077) (1c15f82)
Bug Fixes
- aria-allowed-attr: restrict br and wbr elements to aria-hidden only (#4974) (c6245e7)
- aria-conditional-attr: add support for radio (#5100) (8223c98)
- aria-valid-attr-value: handle multiple aria-errormessage IDs (#4973) (0489e30)
- aria: prevent getOwnedVirtual from returning duplicate nodes (#4987) (48ca955), closes #4840
- commons/text: exclude natively hidden elements from aria-labelledby accessible name (#5076) (ea7202c), closes #4704
- DqElement: avoid calling constructors with cloneNode (#5013) (0281fa1)
- existing-rule: aria-busy now shows an error message for a use with unallowed children (#5017) (2067b87)
- helpUrl: ensure axe.configure always updates the help URLs (#5114) (c4f60ff)
- label-content-name-mismatch: match visible text with aria-label and exclude invisible text (#5096) (3a012a1)
- locale: ensure all subtags are correctly set (#5112) (13005ed)
- scrollable-region-focusable: clarify the issue is in safari (#4995) (4ec5211), closes WebKit#190870 WebKit#277290
- scrollable-region-focusable: do not fail scroll areas when all content is visible without scrolling (#4993) (838707a)
- target-size: determine offset using clientRects if target is display:inline (#5012) (a4b8091)
- target-size: ignore position: fixed elements that are offscreen when page is scrolled (#5066) (1229a6e), closes #5065
- target-size: ignore widgets that are inline with other inline elements (#5000) (a8dd81b)
- utils/getAncestry: escape node name (#5079) (d1fabaa), closes #5078
- utils: Add null check to parseCrossOriginStylesheet, closes #5074 (#5075) (f12ef32)
- utils: update isShadowRoot to use spec-compliant custom element regex (#5059) (edc6ce2), closes #5030