Full Code of dequelabs/axe-core for AI

develop 3af1fb77a538 cached
1977 files
5.9 MB
1.6M tokens
1622 symbols
1 requests
Download .txt
Showing preview only (6,528K chars total). Download the full file or copy to clipboard to get everything.
Repository: dequelabs/axe-core
Branch: develop
Commit: 3af1fb77a538
Files: 1977
Total size: 5.9 MB

Directory structure:
gitextract_cjgil3o8/

├── .babelrc
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── config.yml
│   │   ├── documentation.yml
│   │   ├── feature-request.yml
│   │   ├── possible-bug.yml
│   │   └── question.yaml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   └── install-deps/
│   │       └── action.yml
│   ├── axe-linter.yml
│   ├── bin/
│   │   ├── determine-version.sh
│   │   ├── validate-npm-deploy.sh
│   │   ├── validate-package.mjs
│   │   ├── wait-for-npm-ready.sh
│   │   └── wait-for-workflow-success.sh
│   ├── dependabot.yml
│   ├── review.yml
│   └── workflows/
│       ├── deploy.yml
│       ├── format.yml
│       ├── label-extension-linter-issues.yml
│       ├── nightly-tests.yml
│       ├── release.yml
│       ├── semantic-pr-title.yml
│       ├── sync-master-develop.yml
│       ├── test.yml
│       └── update-generated-files.yaml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .jsdoc.json
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .prettierrc.json
├── .vscode/
│   ├── extensions.json
│   └── launch.json
├── CHANGELOG.md
├── CLAUDE.md
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE
├── LICENSE-3RD-PARTY.txt
├── README.md
├── SECURITY.md
├── axe-linter.yml
├── axe.d.ts
├── bower.json
├── build/
│   ├── build-manual.js
│   ├── check-node-version.js
│   ├── cherry-pick.js
│   ├── configure.js
│   ├── rule-generator/
│   │   ├── directories.js
│   │   ├── get-answers.js
│   │   ├── get-files-metadata.js
│   │   └── questions.js
│   ├── rule-generator.js
│   ├── shared/
│   │   ├── create-file.js
│   │   └── format.js
│   ├── sri-update.js
│   ├── tasks/
│   │   ├── add-locale.js
│   │   ├── aria-supported.js
│   │   ├── configure.js
│   │   ├── esbuild.js
│   │   ├── langs.js
│   │   ├── metadata-function-map.js
│   │   ├── notify.js
│   │   ├── test.js
│   │   ├── update-help.js
│   │   └── validate.js
│   └── templates.js
├── code-of-conduct.md
├── doc/
│   ├── API.md
│   ├── accessibility-supported.md
│   ├── act-rules-format.md
│   ├── aria-supported.md
│   ├── backwards-compatibility-doc.md
│   ├── check-message-template.md
│   ├── check-options.md
│   ├── code-submission-guidelines.md
│   ├── context.md
│   ├── developer-guide.md
│   ├── examples/
│   │   ├── chrome-debugging-protocol/
│   │   │   ├── README.md
│   │   │   ├── axe-cdp.js
│   │   │   └── package.json
│   │   ├── code-patterns.md
│   │   ├── html-handlebars.md
│   │   ├── jasmine/
│   │   │   ├── README.md
│   │   │   ├── karma.conf.js
│   │   │   ├── package.json
│   │   │   └── spec/
│   │   │       └── a11y.js
│   │   ├── jest_react/
│   │   │   ├── .babelrc
│   │   │   ├── README.md
│   │   │   ├── link.js
│   │   │   ├── link.test.js
│   │   │   └── package.json
│   │   ├── jsdom/
│   │   │   ├── package.json
│   │   │   └── test/
│   │   │       └── a11y.js
│   │   ├── mocha/
│   │   │   ├── README.md
│   │   │   ├── karma.conf.js
│   │   │   ├── package.json
│   │   │   └── test/
│   │   │       └── a11y.js
│   │   ├── pr-review-patterns.md
│   │   ├── puppeteer/
│   │   │   ├── README.md
│   │   │   ├── axe-puppeteer.js
│   │   │   ├── package.json
│   │   │   └── set-content.js
│   │   ├── qunit/
│   │   │   ├── Gruntfile.js
│   │   │   ├── README.md
│   │   │   ├── package.json
│   │   │   └── test/
│   │   │       ├── a11y.js
│   │   │       └── test.html
│   │   ├── rule-check-templates.md
│   │   ├── test-examples.js
│   │   └── test-patterns.md
│   ├── frame-messenger.md
│   ├── issue_impact.md
│   ├── plugins.md
│   ├── projects.md
│   ├── pull-request-checklist.md
│   ├── release-and-support.md
│   ├── rule-descriptions.md
│   ├── rule-development.md
│   ├── rule-proposal.md
│   ├── run-partial.md
│   └── standards-object.md
├── eslint.config.js
├── lib/
│   ├── checks/
│   │   ├── aria/
│   │   │   ├── abstractrole-evaluate.js
│   │   │   ├── abstractrole.json
│   │   │   ├── aria-allowed-attr-evaluate.js
│   │   │   ├── aria-allowed-attr.json
│   │   │   ├── aria-allowed-role-evaluate.js
│   │   │   ├── aria-allowed-role.json
│   │   │   ├── aria-busy-evaluate.js
│   │   │   ├── aria-busy.json
│   │   │   ├── aria-conditional-attr-evaluate.js
│   │   │   ├── aria-conditional-attr.json
│   │   │   ├── aria-conditional-checkbox-attr-evaluate.js
│   │   │   ├── aria-conditional-row-attr-evaluate.js
│   │   │   ├── aria-errormessage-evaluate.js
│   │   │   ├── aria-errormessage.json
│   │   │   ├── aria-hidden-body-evaluate.js
│   │   │   ├── aria-hidden-body.json
│   │   │   ├── aria-level-evaluate.js
│   │   │   ├── aria-level.json
│   │   │   ├── aria-prohibited-attr-evaluate.js
│   │   │   ├── aria-prohibited-attr.json
│   │   │   ├── aria-required-attr-evaluate.js
│   │   │   ├── aria-required-attr.json
│   │   │   ├── aria-required-children-evaluate.js
│   │   │   ├── aria-required-children.json
│   │   │   ├── aria-required-parent-evaluate.js
│   │   │   ├── aria-required-parent.json
│   │   │   ├── aria-roledescription-evaluate.js
│   │   │   ├── aria-roledescription.json
│   │   │   ├── aria-unsupported-attr-evaluate.js
│   │   │   ├── aria-unsupported-attr.json
│   │   │   ├── aria-valid-attr-evaluate.js
│   │   │   ├── aria-valid-attr-value-evaluate.js
│   │   │   ├── aria-valid-attr-value.json
│   │   │   ├── aria-valid-attr.json
│   │   │   ├── braille-label-equivalent-evaluate.js
│   │   │   ├── braille-label-equivalent.json
│   │   │   ├── braille-roledescription-equivalent-evaluate.js
│   │   │   ├── braille-roledescription-equivalent.json
│   │   │   ├── deprecatedrole-evaluate.js
│   │   │   ├── deprecatedrole.json
│   │   │   ├── fallbackrole-evaluate.js
│   │   │   ├── fallbackrole.json
│   │   │   ├── has-global-aria-attribute-evaluate.js
│   │   │   ├── has-global-aria-attribute.json
│   │   │   ├── has-widget-role-evaluate.js
│   │   │   ├── has-widget-role.json
│   │   │   ├── invalidrole-evaluate.js
│   │   │   ├── invalidrole.json
│   │   │   ├── is-element-focusable-evaluate.js
│   │   │   ├── is-element-focusable.json
│   │   │   ├── no-implicit-explicit-label-evaluate.js
│   │   │   ├── no-implicit-explicit-label.json
│   │   │   ├── unsupportedrole-evaluate.js
│   │   │   ├── unsupportedrole.json
│   │   │   ├── valid-scrollable-semantics-evaluate.js
│   │   │   └── valid-scrollable-semantics.json
│   │   ├── color/
│   │   │   ├── color-contrast-enhanced.json
│   │   │   ├── color-contrast-evaluate.js
│   │   │   ├── color-contrast.json
│   │   │   ├── link-in-text-block-evaluate.js
│   │   │   ├── link-in-text-block-style-evaluate.js
│   │   │   ├── link-in-text-block-style.json
│   │   │   └── link-in-text-block.json
│   │   ├── forms/
│   │   │   ├── autocomplete-appropriate-evaluate.js
│   │   │   ├── autocomplete-appropriate.json
│   │   │   ├── autocomplete-valid-evaluate.js
│   │   │   └── autocomplete-valid.json
│   │   ├── generic/
│   │   │   ├── README.md
│   │   │   ├── attr-non-space-content-evaluate.js
│   │   │   ├── has-descendant-after.js
│   │   │   ├── has-descendant-evaluate.js
│   │   │   ├── has-text-content-evaluate.js
│   │   │   ├── matches-definition-evaluate.js
│   │   │   ├── page-no-duplicate-after.js
│   │   │   └── page-no-duplicate-evaluate.js
│   │   ├── index.js
│   │   ├── keyboard/
│   │   │   ├── accesskeys-after.js
│   │   │   ├── accesskeys-evaluate.js
│   │   │   ├── accesskeys.json
│   │   │   ├── focusable-content-evaluate.js
│   │   │   ├── focusable-content.json
│   │   │   ├── focusable-disabled-evaluate.js
│   │   │   ├── focusable-disabled.json
│   │   │   ├── focusable-element-evaluate.js
│   │   │   ├── focusable-element.json
│   │   │   ├── focusable-modal-open-evaluate.js
│   │   │   ├── focusable-modal-open.json
│   │   │   ├── focusable-no-name-evaluate.js
│   │   │   ├── focusable-no-name.json
│   │   │   ├── focusable-not-tabbable-evaluate.js
│   │   │   ├── focusable-not-tabbable.json
│   │   │   ├── frame-focusable-content-evaluate.js
│   │   │   ├── frame-focusable-content.json
│   │   │   ├── landmark-is-top-level-evaluate.js
│   │   │   ├── landmark-is-top-level.json
│   │   │   ├── no-focusable-content-evaluate.js
│   │   │   ├── no-focusable-content.json
│   │   │   ├── page-has-heading-one.json
│   │   │   ├── page-has-main.json
│   │   │   ├── page-no-duplicate-banner.json
│   │   │   ├── page-no-duplicate-contentinfo.json
│   │   │   ├── page-no-duplicate-main.json
│   │   │   ├── tabindex-evaluate.js
│   │   │   └── tabindex.json
│   │   ├── label/
│   │   │   ├── alt-space-value-evaluate.js
│   │   │   ├── alt-space-value.json
│   │   │   ├── duplicate-img-label-evaluate.js
│   │   │   ├── duplicate-img-label.json
│   │   │   ├── explicit-evaluate.js
│   │   │   ├── explicit.json
│   │   │   ├── help-same-as-label-evaluate.js
│   │   │   ├── help-same-as-label.json
│   │   │   ├── hidden-explicit-label-evaluate.js
│   │   │   ├── hidden-explicit-label.json
│   │   │   ├── implicit-evaluate.js
│   │   │   ├── implicit.json
│   │   │   ├── label-content-name-mismatch-evaluate.js
│   │   │   ├── label-content-name-mismatch.json
│   │   │   ├── multiple-label-evaluate.js
│   │   │   ├── multiple-label.json
│   │   │   ├── title-only-evaluate.js
│   │   │   └── title-only.json
│   │   ├── landmarks/
│   │   │   ├── landmark-is-unique-after.js
│   │   │   ├── landmark-is-unique-evaluate.js
│   │   │   └── landmark-is-unique.json
│   │   ├── language/
│   │   │   ├── has-lang-evaluate.js
│   │   │   ├── has-lang.json
│   │   │   ├── valid-lang-evaluate.js
│   │   │   ├── valid-lang.json
│   │   │   ├── xml-lang-mismatch-evaluate.js
│   │   │   └── xml-lang-mismatch.json
│   │   ├── lists/
│   │   │   ├── dlitem-evaluate.js
│   │   │   ├── dlitem.json
│   │   │   ├── invalid-children-evaluate.js
│   │   │   ├── listitem-evaluate.js
│   │   │   ├── listitem.json
│   │   │   ├── only-dlitems-evaluate.js
│   │   │   ├── only-dlitems.json
│   │   │   ├── only-listitems-evaluate.js
│   │   │   ├── only-listitems.json
│   │   │   ├── structured-dlitems-evaluate.js
│   │   │   └── structured-dlitems.json
│   │   ├── media/
│   │   │   ├── caption-evaluate.js
│   │   │   ├── caption.json
│   │   │   ├── frame-tested-after.js
│   │   │   ├── frame-tested-evaluate.js
│   │   │   ├── frame-tested.json
│   │   │   ├── no-autoplay-audio-evaluate.js
│   │   │   └── no-autoplay-audio.json
│   │   ├── mobile/
│   │   │   ├── css-orientation-lock-evaluate.js
│   │   │   ├── css-orientation-lock.json
│   │   │   ├── meta-viewport-large.json
│   │   │   ├── meta-viewport-scale-evaluate.js
│   │   │   ├── meta-viewport.json
│   │   │   ├── target-offset-evaluate.js
│   │   │   ├── target-offset.json
│   │   │   ├── target-size-evaluate.js
│   │   │   └── target-size.json
│   │   ├── navigation/
│   │   │   ├── header-present.json
│   │   │   ├── heading-order-after.js
│   │   │   ├── heading-order-evaluate.js
│   │   │   ├── heading-order.json
│   │   │   ├── identical-links-same-purpose-after.js
│   │   │   ├── identical-links-same-purpose-evaluate.js
│   │   │   ├── identical-links-same-purpose.json
│   │   │   ├── internal-link-present-evaluate.js
│   │   │   ├── internal-link-present.json
│   │   │   ├── landmark.json
│   │   │   ├── meta-refresh-evaluate.js
│   │   │   ├── meta-refresh-no-exceptions.json
│   │   │   ├── meta-refresh.json
│   │   │   ├── p-as-heading-evaluate.js
│   │   │   ├── p-as-heading.json
│   │   │   ├── region-after.js
│   │   │   ├── region-evaluate.js
│   │   │   ├── region.json
│   │   │   ├── skip-link-evaluate.js
│   │   │   ├── skip-link.json
│   │   │   ├── unique-frame-title-after.js
│   │   │   ├── unique-frame-title-evaluate.js
│   │   │   └── unique-frame-title.json
│   │   ├── parsing/
│   │   │   ├── duplicate-id-active.json
│   │   │   ├── duplicate-id-after.js
│   │   │   ├── duplicate-id-aria.json
│   │   │   ├── duplicate-id-evaluate.js
│   │   │   └── duplicate-id.json
│   │   ├── shared/
│   │   │   ├── aria-label-evaluate.js
│   │   │   ├── aria-label.json
│   │   │   ├── aria-labelledby-evaluate.js
│   │   │   ├── aria-labelledby.json
│   │   │   ├── avoid-inline-spacing-evaluate.js
│   │   │   ├── avoid-inline-spacing.json
│   │   │   ├── button-has-visible-text.json
│   │   │   ├── doc-has-title-evaluate.js
│   │   │   ├── doc-has-title.json
│   │   │   ├── error-occurred.json
│   │   │   ├── exists-evaluate.js
│   │   │   ├── exists.json
│   │   │   ├── has-alt-evaluate.js
│   │   │   ├── has-alt.json
│   │   │   ├── has-visible-text.json
│   │   │   ├── important-letter-spacing.json
│   │   │   ├── important-line-height.json
│   │   │   ├── important-word-spacing.json
│   │   │   ├── inline-style-property-evaluate.js
│   │   │   ├── is-on-screen-evaluate.js
│   │   │   ├── is-on-screen.json
│   │   │   ├── non-empty-alt.json
│   │   │   ├── non-empty-if-present-evaluate.js
│   │   │   ├── non-empty-if-present.json
│   │   │   ├── non-empty-placeholder.json
│   │   │   ├── non-empty-title.json
│   │   │   ├── non-empty-value.json
│   │   │   ├── presentational-role-evaluate.js
│   │   │   ├── presentational-role.json
│   │   │   ├── role-none.json
│   │   │   ├── role-presentation.json
│   │   │   ├── svg-non-empty-title-evaluate.js
│   │   │   └── svg-non-empty-title.json
│   │   ├── tables/
│   │   │   ├── caption-faked-evaluate.js
│   │   │   ├── caption-faked.json
│   │   │   ├── html5-scope-evaluate.js
│   │   │   ├── html5-scope.json
│   │   │   ├── same-caption-summary-evaluate.js
│   │   │   ├── same-caption-summary.json
│   │   │   ├── scope-value-evaluate.js
│   │   │   ├── scope-value.json
│   │   │   ├── td-has-header-evaluate.js
│   │   │   ├── td-has-header.json
│   │   │   ├── td-headers-attr-evaluate.js
│   │   │   ├── td-headers-attr.json
│   │   │   ├── th-has-data-cells-evaluate.js
│   │   │   └── th-has-data-cells.json
│   │   └── visibility/
│   │       ├── hidden-content-evaluate.js
│   │       └── hidden-content.json
│   ├── commons/
│   │   ├── aria/
│   │   │   ├── allowed-attr.js
│   │   │   ├── arialabel-text.js
│   │   │   ├── arialabelledby-text.js
│   │   │   ├── get-accessible-refs.js
│   │   │   ├── get-element-unallowed-roles.js
│   │   │   ├── get-explicit-role.js
│   │   │   ├── get-owned-virtual.js
│   │   │   ├── get-role-type.js
│   │   │   ├── get-role.js
│   │   │   ├── get-roles-by-type.js
│   │   │   ├── get-roles-with-name-from-contents.js
│   │   │   ├── implicit-nodes.js
│   │   │   ├── implicit-role.js
│   │   │   ├── index.js
│   │   │   ├── is-accessible-ref.js
│   │   │   ├── is-aria-role-allowed-on-element.js
│   │   │   ├── is-combobox-popup.js
│   │   │   ├── is-unsupported-role.js
│   │   │   ├── is-valid-role.js
│   │   │   ├── label-virtual.js
│   │   │   ├── label.js
│   │   │   ├── lookup-table.js
│   │   │   ├── named-from-contents.js
│   │   │   ├── required-attr.js
│   │   │   ├── required-context.js
│   │   │   ├── required-owned.js
│   │   │   ├── validate-attr-value.js
│   │   │   └── validate-attr.js
│   │   ├── color/
│   │   │   ├── center-point-of-rect.js
│   │   │   ├── color.js
│   │   │   ├── element-has-image.js
│   │   │   ├── element-is-distinct.js
│   │   │   ├── filtered-rect-stack.js
│   │   │   ├── flatten-colors.js
│   │   │   ├── flatten-shadow-colors.js
│   │   │   ├── get-background-color.js
│   │   │   ├── get-background-stack.js
│   │   │   ├── get-contrast.js
│   │   │   ├── get-foreground-color.js
│   │   │   ├── get-own-background-color.js
│   │   │   ├── get-rect-stack.js
│   │   │   ├── get-stroke-colors-from-shadows.js
│   │   │   ├── get-text-shadow-colors.js
│   │   │   ├── has-valid-contrast-ratio.js
│   │   │   ├── incomplete-data.js
│   │   │   ├── index.js
│   │   │   ├── parse-text-shadows.js
│   │   │   └── stacking-context.js
│   │   ├── dom/
│   │   │   ├── create-grid.js
│   │   │   ├── find-elms-in-context.js
│   │   │   ├── find-nearby-elms.js
│   │   │   ├── find-up-virtual.js
│   │   │   ├── find-up.js
│   │   │   ├── focus-disabled.js
│   │   │   ├── get-composed-parent.js
│   │   │   ├── get-element-by-reference.js
│   │   │   ├── get-element-coordinates.js
│   │   │   ├── get-element-stack.js
│   │   │   ├── get-modal-dialog.js
│   │   │   ├── get-node-grid.js
│   │   │   ├── get-overflow-hidden-ancestors.js
│   │   │   ├── get-rect-stack.js
│   │   │   ├── get-root-node.js
│   │   │   ├── get-scroll-offset.js
│   │   │   ├── get-tabbable-elements.js
│   │   │   ├── get-target-rects.js
│   │   │   ├── get-target-size.js
│   │   │   ├── get-text-element-stack.js
│   │   │   ├── get-viewport-size.js
│   │   │   ├── get-visible-child-text-rects.js
│   │   │   ├── has-content-virtual.js
│   │   │   ├── has-content.js
│   │   │   ├── has-lang-text.js
│   │   │   ├── idrefs.js
│   │   │   ├── index.js
│   │   │   ├── inserted-into-focus-order.js
│   │   │   ├── is-current-page-link.js
│   │   │   ├── is-focusable.js
│   │   │   ├── is-hidden-for-everyone.js
│   │   │   ├── is-hidden-with-css.js
│   │   │   ├── is-html5.js
│   │   │   ├── is-in-tab-order.js
│   │   │   ├── is-in-text-block.js
│   │   │   ├── is-inert.js
│   │   │   ├── is-modal-open.js
│   │   │   ├── is-multiline.js
│   │   │   ├── is-natively-focusable.js
│   │   │   ├── is-node.js
│   │   │   ├── is-offscreen.js
│   │   │   ├── is-opaque.js
│   │   │   ├── is-skip-link.js
│   │   │   ├── is-visible-on-screen.js
│   │   │   ├── is-visible-to-screenreader.js
│   │   │   ├── is-visible.js
│   │   │   ├── is-visual-content.js
│   │   │   ├── reduce-to-elements-below-floating.js
│   │   │   ├── shadow-elements-from-point.js
│   │   │   ├── url-props-from-attribute.js
│   │   │   ├── visibility-methods.js
│   │   │   ├── visually-contains.js
│   │   │   ├── visually-overlaps.js
│   │   │   └── visually-sort.js
│   │   ├── forms/
│   │   │   ├── index.js
│   │   │   ├── is-aria-combobox.js
│   │   │   ├── is-aria-listbox.js
│   │   │   ├── is-aria-range.js
│   │   │   ├── is-aria-textbox.js
│   │   │   ├── is-disabled.js
│   │   │   ├── is-native-select.js
│   │   │   └── is-native-textbox.js
│   │   ├── index.js
│   │   ├── matches/
│   │   │   ├── attributes.js
│   │   │   ├── condition.js
│   │   │   ├── explicit-role.js
│   │   │   ├── from-definition.js
│   │   │   ├── from-function.js
│   │   │   ├── from-primative.js
│   │   │   ├── has-accessible-name.js
│   │   │   ├── implicit-role.js
│   │   │   ├── index.js
│   │   │   ├── matches.js
│   │   │   ├── node-name.js
│   │   │   ├── properties.js
│   │   │   └── semantic-role.js
│   │   ├── math/
│   │   │   ├── get-bounding-rect.js
│   │   │   ├── get-intersection-rect.js
│   │   │   ├── get-offset.js
│   │   │   ├── get-rect-center.js
│   │   │   ├── has-visual-overlap.js
│   │   │   ├── index.js
│   │   │   ├── is-point-in-rect.js
│   │   │   ├── rect-has-minimum-size.js
│   │   │   ├── rects-overlap.js
│   │   │   └── split-rects.js
│   │   ├── standards/
│   │   │   ├── get-aria-roles-by-type.js
│   │   │   ├── get-aria-roles-supporting-name-from-content.js
│   │   │   ├── get-element-spec.js
│   │   │   ├── get-elements-by-content-type.js
│   │   │   ├── get-global-aria-attrs.js
│   │   │   ├── implicit-html-roles.js
│   │   │   └── index.js
│   │   ├── table/
│   │   │   ├── get-all-cells.js
│   │   │   ├── get-cell-position.js
│   │   │   ├── get-headers.js
│   │   │   ├── get-scope.js
│   │   │   ├── index.js
│   │   │   ├── is-column-header.js
│   │   │   ├── is-data-cell.js
│   │   │   ├── is-data-table.js
│   │   │   ├── is-header.js
│   │   │   ├── is-row-header.js
│   │   │   ├── to-grid.js
│   │   │   └── traverse.js
│   │   └── text/
│   │       ├── accessible-text-virtual.js
│   │       ├── accessible-text.js
│   │       ├── form-control-value.js
│   │       ├── has-unicode.js
│   │       ├── index.js
│   │       ├── is-human-interpretable.js
│   │       ├── is-icon-ligature.js
│   │       ├── is-valid-autocomplete.js
│   │       ├── label-text.js
│   │       ├── label-virtual.js
│   │       ├── label.js
│   │       ├── native-element-type.js
│   │       ├── native-text-alternative.js
│   │       ├── native-text-methods.js
│   │       ├── remove-unicode.js
│   │       ├── sanitize.js
│   │       ├── subtree-text.js
│   │       ├── title-text.js
│   │       ├── unicode.js
│   │       ├── unsupported.js
│   │       ├── visible-text-nodes.js
│   │       ├── visible-virtual.js
│   │       └── visible.js
│   ├── core/
│   │   ├── _exposed-for-testing.js
│   │   ├── base/
│   │   │   ├── audit.js
│   │   │   ├── cache.js
│   │   │   ├── check-result.js
│   │   │   ├── check.js
│   │   │   ├── context/
│   │   │   │   ├── create-frame-context.js
│   │   │   │   ├── normalize-context.js
│   │   │   │   └── parse-selector-array.js
│   │   │   ├── context.js
│   │   │   ├── rule-result.js
│   │   │   ├── rule.js
│   │   │   └── virtual-node/
│   │   │       ├── abstract-virtual-node.js
│   │   │       ├── serial-virtual-node.js
│   │   │       └── virtual-node.js
│   │   ├── constants.js
│   │   ├── core.js
│   │   ├── imports/
│   │   │   ├── index.js
│   │   │   └── polyfills.js
│   │   ├── index.js
│   │   ├── log.js
│   │   ├── public/
│   │   │   ├── cleanup.js
│   │   │   ├── configure.js
│   │   │   ├── finish-run.js
│   │   │   ├── frame-messenger.js
│   │   │   ├── get-rules.js
│   │   │   ├── load.js
│   │   │   ├── plugins.js
│   │   │   ├── reporter.js
│   │   │   ├── reset.js
│   │   │   ├── run/
│   │   │   │   ├── globals-setup.js
│   │   │   │   └── normalize-run-params.js
│   │   │   ├── run-partial.js
│   │   │   ├── run-rules.js
│   │   │   ├── run-virtual-rule.js
│   │   │   ├── run.js
│   │   │   ├── setup.js
│   │   │   └── teardown.js
│   │   ├── reporters/
│   │   │   ├── helpers/
│   │   │   │   ├── failure-summary.js
│   │   │   │   ├── incomplete-fallback-msg.js
│   │   │   │   ├── index.js
│   │   │   │   └── process-aggregate.js
│   │   │   ├── na.js
│   │   │   ├── no-passes.js
│   │   │   ├── raw-env.js
│   │   │   ├── raw.js
│   │   │   ├── v1.js
│   │   │   └── v2.js
│   │   └── utils/
│   │       ├── aggregate-checks.js
│   │       ├── aggregate-node-results.js
│   │       ├── aggregate-result.js
│   │       ├── aggregate.js
│   │       ├── are-styles-set.js
│   │       ├── assert.js
│   │       ├── check-helper.js
│   │       ├── clone.js
│   │       ├── closest.js
│   │       ├── collect-results-from-frames.js
│   │       ├── contains.js
│   │       ├── css-parser.js
│   │       ├── deep-merge.js
│   │       ├── dq-element.js
│   │       ├── element-matches.js
│   │       ├── escape-selector.js
│   │       ├── extend-meta-data.js
│   │       ├── filter-html-attrs.js
│   │       ├── finalize-result.js
│   │       ├── find-by.js
│   │       ├── frame-messenger/
│   │       │   ├── assert-window.js
│   │       │   ├── channel-store.js
│   │       │   ├── create-responder.js
│   │       │   ├── message-handler.js
│   │       │   ├── message-id.js
│   │       │   ├── message-parser.js
│   │       │   ├── post-message.js
│   │       │   └── process-error.js
│   │       ├── frame-messenger.js
│   │       ├── get-all-checks.js
│   │       ├── get-ancestry.js
│   │       ├── get-base-lang.js
│   │       ├── get-check-message.js
│   │       ├── get-check-option.js
│   │       ├── get-element-source.js
│   │       ├── get-environment-data.js
│   │       ├── get-flattened-tree.js
│   │       ├── get-frame-contexts.js
│   │       ├── get-friendly-uri-end.js
│   │       ├── get-node-attributes.js
│   │       ├── get-node-from-tree.js
│   │       ├── get-root-node.js
│   │       ├── get-rule.js
│   │       ├── get-scroll-state.js
│   │       ├── get-scroll.js
│   │       ├── get-selector.js
│   │       ├── get-shadow-selector.js
│   │       ├── get-standards.js
│   │       ├── get-stylesheet-factory.js
│   │       ├── get-xpath.js
│   │       ├── index.js
│   │       ├── inject-style.js
│   │       ├── is-array-like.js
│   │       ├── is-context.js
│   │       ├── is-hidden.js
│   │       ├── is-html-element.js
│   │       ├── is-node-in-context.js
│   │       ├── is-shadow-root.js
│   │       ├── is-xhtml.js
│   │       ├── match-ancestry.js
│   │       ├── matches.js
│   │       ├── memoize.js
│   │       ├── merge-results.js
│   │       ├── node-lookup.js
│   │       ├── node-serializer.js
│   │       ├── node-sorter.js
│   │       ├── normalize-run-options.js
│   │       ├── object-has-own.js
│   │       ├── parse-crossorigin-stylesheet.js
│   │       ├── parse-sameorigin-stylesheet.js
│   │       ├── parse-stylesheet.js
│   │       ├── parse-tabindex.js
│   │       ├── performance-timer.js
│   │       ├── pollyfill-elements-from-point.js
│   │       ├── preload-cssom.js
│   │       ├── preload-media.js
│   │       ├── preload.js
│   │       ├── process-message.js
│   │       ├── publish-metadata.js
│   │       ├── query-selector-all-filter.js
│   │       ├── query-selector-all.js
│   │       ├── queue.js
│   │       ├── respondable.js
│   │       ├── rule-error.js
│   │       ├── rule-should-run.js
│   │       ├── select.js
│   │       ├── selector-cache.js
│   │       ├── send-command-to-frame.js
│   │       ├── serialize-error.js
│   │       ├── set-scroll-state.js
│   │       ├── shadow-select-all.js
│   │       ├── shadow-select.js
│   │       ├── to-array.js
│   │       ├── token-list.js
│   │       ├── unique-array.js
│   │       ├── uuid.js
│   │       ├── valid-input-type.js
│   │       └── valid-langs.js
│   ├── intro.stub
│   ├── misc/
│   │   ├── any-failure-summary.json
│   │   ├── incomplete-fallback.json
│   │   └── none-failure-summary.json
│   ├── outro.stub
│   ├── rules/
│   │   ├── accesskeys.json
│   │   ├── area-alt.json
│   │   ├── aria-allowed-attr-matches.js
│   │   ├── aria-allowed-attr.json
│   │   ├── aria-allowed-role-matches.js
│   │   ├── aria-allowed-role.json
│   │   ├── aria-braille-equivalent.json
│   │   ├── aria-command-name.json
│   │   ├── aria-conditional-attr.json
│   │   ├── aria-deprecated-role.json
│   │   ├── aria-dialog-name.json
│   │   ├── aria-has-attr-matches.js
│   │   ├── aria-hidden-body.json
│   │   ├── aria-hidden-focus-matches.js
│   │   ├── aria-hidden-focus.json
│   │   ├── aria-input-field-name.json
│   │   ├── aria-meter-name.json
│   │   ├── aria-progressbar-name.json
│   │   ├── aria-prohibited-attr.json
│   │   ├── aria-required-attr.json
│   │   ├── aria-required-children-matches.js
│   │   ├── aria-required-children.json
│   │   ├── aria-required-parent-matches.js
│   │   ├── aria-required-parent.json
│   │   ├── aria-roledescription.json
│   │   ├── aria-roles.json
│   │   ├── aria-tab-name.json
│   │   ├── aria-text.json
│   │   ├── aria-toggle-field-name.json
│   │   ├── aria-tooltip-name.json
│   │   ├── aria-treeitem-name.json
│   │   ├── aria-valid-attr-value.json
│   │   ├── aria-valid-attr.json
│   │   ├── audio-caption.json
│   │   ├── autocomplete-matches.js
│   │   ├── autocomplete-valid.json
│   │   ├── avoid-inline-spacing.json
│   │   ├── blink.json
│   │   ├── button-name.json
│   │   ├── bypass-matches.js
│   │   ├── bypass.json
│   │   ├── color-contrast-enhanced.json
│   │   ├── color-contrast-matches.js
│   │   ├── color-contrast.json
│   │   ├── css-orientation-lock.json
│   │   ├── data-table-large-matches.js
│   │   ├── data-table-matches.js
│   │   ├── definition-list.json
│   │   ├── dlitem.json
│   │   ├── document-title.json
│   │   ├── duplicate-id-active-matches.js
│   │   ├── duplicate-id-active.json
│   │   ├── duplicate-id-aria-matches.js
│   │   ├── duplicate-id-aria.json
│   │   ├── duplicate-id-misc-matches.js
│   │   ├── duplicate-id.json
│   │   ├── empty-heading.json
│   │   ├── empty-table-header.json
│   │   ├── focus-order-semantics.json
│   │   ├── form-field-multiple-labels.json
│   │   ├── frame-focusable-content-matches.js
│   │   ├── frame-focusable-content.json
│   │   ├── frame-tested.json
│   │   ├── frame-title-has-text-matches.js
│   │   ├── frame-title-unique.json
│   │   ├── frame-title.json
│   │   ├── has-implicit-chromium-role-matches.js
│   │   ├── heading-matches.js
│   │   ├── heading-order.json
│   │   ├── hidden-content.json
│   │   ├── html-has-lang.json
│   │   ├── html-lang-valid.json
│   │   ├── html-namespace-matches.js
│   │   ├── html-xml-lang-mismatch.json
│   │   ├── identical-links-same-purpose-matches.js
│   │   ├── identical-links-same-purpose.json
│   │   ├── image-alt.json
│   │   ├── img-redundant-alt.json
│   │   ├── input-button-name.json
│   │   ├── input-image-alt.json
│   │   ├── inserted-into-focus-order-matches.js
│   │   ├── is-initiator-matches.js
│   │   ├── is-visible-matches.js
│   │   ├── is-visible-on-screen-matches.js
│   │   ├── label-content-name-mismatch-matches.js
│   │   ├── label-content-name-mismatch.json
│   │   ├── label-matches.js
│   │   ├── label-title-only.json
│   │   ├── label.json
│   │   ├── landmark-banner-is-top-level.json
│   │   ├── landmark-complementary-is-top-level.json
│   │   ├── landmark-contentinfo-is-top-level.json
│   │   ├── landmark-has-body-context-matches.js
│   │   ├── landmark-main-is-top-level.json
│   │   ├── landmark-no-duplicate-banner.json
│   │   ├── landmark-no-duplicate-contentinfo.json
│   │   ├── landmark-no-duplicate-main.json
│   │   ├── landmark-one-main.json
│   │   ├── landmark-unique-matches.js
│   │   ├── landmark-unique.json
│   │   ├── layout-table-matches.js
│   │   ├── link-in-text-block-matches.js
│   │   ├── link-in-text-block.json
│   │   ├── link-name.json
│   │   ├── list.json
│   │   ├── listitem.json
│   │   ├── marquee.json
│   │   ├── meta-refresh-no-exceptions.json
│   │   ├── meta-refresh.json
│   │   ├── meta-viewport-large.json
│   │   ├── meta-viewport.json
│   │   ├── nested-interactive-matches.js
│   │   ├── nested-interactive.json
│   │   ├── no-autoplay-audio-matches.js
│   │   ├── no-autoplay-audio.json
│   │   ├── no-empty-role-matches.js
│   │   ├── no-explicit-name-required-matches.js
│   │   ├── no-naming-method-matches.js
│   │   ├── no-negative-tabindex-matches.js
│   │   ├── no-role-matches.js
│   │   ├── not-html-matches.js
│   │   ├── object-alt.json
│   │   ├── object-is-loaded-matches.js
│   │   ├── p-as-heading-matches.js
│   │   ├── p-as-heading.json
│   │   ├── page-has-heading-one.json
│   │   ├── presentation-role-conflict-matches.js
│   │   ├── presentation-role-conflict.json
│   │   ├── region.json
│   │   ├── role-img-alt.json
│   │   ├── scope-attr-valid.json
│   │   ├── scrollable-region-focusable-matches.js
│   │   ├── scrollable-region-focusable.json
│   │   ├── select-name.json
│   │   ├── server-side-image-map.json
│   │   ├── skip-link-matches.js
│   │   ├── skip-link.json
│   │   ├── summary-interactive-matches.js
│   │   ├── summary-name.json
│   │   ├── svg-img-alt.json
│   │   ├── svg-namespace-matches.js
│   │   ├── tabindex.json
│   │   ├── table-duplicate-name.json
│   │   ├── table-fake-caption.json
│   │   ├── table-or-grid-role-matches.js
│   │   ├── target-size.json
│   │   ├── td-has-header.json
│   │   ├── td-headers-attr.json
│   │   ├── th-has-data-cells.json
│   │   ├── valid-lang.json
│   │   ├── video-caption.json
│   │   ├── widget-not-inline-matches.js
│   │   ├── window-is-top-matches.js
│   │   └── xml-lang-mismatch-matches.js
│   └── standards/
│       ├── aria-attrs.js
│       ├── aria-roles.js
│       ├── css-colors.js
│       ├── dpub-roles.js
│       ├── graphics-roles.js
│       ├── html-elms.js
│       └── index.js
├── locales/
│   ├── README.md
│   ├── _template.json
│   ├── da.json
│   ├── de.json
│   ├── el.json
│   ├── es.json
│   ├── eu.json
│   ├── fr.json
│   ├── he.json
│   ├── it.json
│   ├── ja.json
│   ├── ko.json
│   ├── nl.json
│   ├── no_NB.json
│   ├── pl.json
│   ├── pt_BR.json
│   ├── pt_PT.json
│   ├── ru.json
│   ├── zh_CN.json
│   └── zh_TW.json
├── package.json
├── patches/
│   └── colorjs.io+0.4.3.patch
├── sri-history.json
├── test/
│   ├── act-rules/
│   │   ├── README.md
│   │   ├── act-runner.js
│   │   ├── aria-attr-defined-5f99a7.spec.js
│   │   ├── aria-hidden-no-focusable-content-6cfa84.spec.js
│   │   ├── aria-required-context-ff89c9.spec.js
│   │   ├── aria-required-id-references-in6db8.spec.js
│   │   ├── aria-required-owned-element-bc4a75.spec.js
│   │   ├── aria-state-or-property-permitted-5c01ea.spec.js
│   │   ├── autocomplete-valid-value-73f2c2.spec.js
│   │   ├── button-non-empty-accessible-name-97a4e1.spec.js
│   │   ├── css-restrict-orientation-b33eff.spec.js
│   │   ├── element-lang-valid-de46e4.spec.js
│   │   ├── element-marked-decorative-is-not-exposed-46ca7f.spec.js
│   │   ├── explicit-SVG-image-non-empty-accessible-name-7d6734.spec.js
│   │   ├── form-field-non-empty-accessible-name-e086e5.spec.js
│   │   ├── heading-non-empty-accessible-name-ffd0e9.spec.js
│   │   ├── html-page-lang-b5c3f8.spec.js
│   │   ├── html-page-lang-valid-bf051a.spec.js
│   │   ├── html-page-lang-xml-lang-match-5b7ae0.spec.js
│   │   ├── html-page-non-empty-title-2779a5.spec.js
│   │   ├── id-value-unique-3ea0c8.spec.js
│   │   ├── iframe-non-empty-accessible-name-cae760.spec.js
│   │   ├── image-button-non-empty-accessible-name-59796f.spec.js
│   │   ├── image-non-empty-accessible-name-23a2a8.spec.js
│   │   ├── letter-spacing-not-important-24afc2.spec.js
│   │   ├── line-height-not-important-78fd32.spec.js
│   │   ├── link-non-empty-accessible-name-c487ae.spec.js
│   │   ├── links-identical-name-equivalent-purpose-b20e66.spec.js
│   │   ├── links-with-identical-names-and-context-serve-equivalent-purpose-fd3a94.spec.js
│   │   ├── menuitem-non-empty-name-m6b1q3.spec.js
│   │   ├── meta-viewport-b4f0c3.spec.js
│   │   ├── object-has-acessible-name-8fc3b6.spec.js
│   │   ├── presentational-children-no-focusable-content-307n5z.spec.js
│   │   ├── role-required-states-and-properties-4e8ab6.spec.js
│   │   ├── scrollable-element-keyboard-accessible-0ssw9k.spec.js
│   │   ├── table-headers-attribute-refer-to-data-cells-a25f45.spec.js
│   │   ├── text-contrast-afw4f7.spec.js
│   │   ├── text-contrast-enhanced-09o5cg.spec.js
│   │   ├── visible-label-in-accessible-name-2ee8b8.spec.js
│   │   └── word-spacing-not-important-9e45ec.spec.js
│   ├── aria-practices/
│   │   ├── README.md
│   │   └── apg.spec.js
│   ├── assets/
│   │   ├── video.webm
│   │   └── webfont-attribution-license.md
│   ├── checks/
│   │   ├── aria/
│   │   │   ├── aria-allowed-attr.js
│   │   │   ├── aria-allowed-role.js
│   │   │   ├── aria-busy.js
│   │   │   ├── aria-conditional-attr.js
│   │   │   ├── aria-hidden-body.js
│   │   │   ├── aria-level.js
│   │   │   ├── aria-prohibited-attr.js
│   │   │   ├── aria-required-attr.js
│   │   │   ├── aria-roledescription.js
│   │   │   ├── braille-label-equivalent.js
│   │   │   ├── braille-roledescription-equivalent.js
│   │   │   ├── deprecatedrole.js
│   │   │   ├── errormessage.js
│   │   │   ├── fallbackrole.js
│   │   │   ├── has-global-aria-attribute.js
│   │   │   ├── has-widget-role.js
│   │   │   ├── is-element-focusable.js
│   │   │   ├── no-implicit-explicit-label.js
│   │   │   ├── required-children.js
│   │   │   ├── required-parent.js
│   │   │   ├── unsupportedattr.js
│   │   │   ├── unsupportedrole.js
│   │   │   ├── valid-attr-value.js
│   │   │   ├── valid-attr.js
│   │   │   └── valid-scrollable-semantics.js
│   │   ├── color/
│   │   │   ├── color-contrast.js
│   │   │   ├── link-in-text-block-style.js
│   │   │   └── link-in-text-block.js
│   │   ├── forms/
│   │   │   ├── autocomplete-appropriate.js
│   │   │   └── autocomplete-valid.js
│   │   ├── keyboard/
│   │   │   ├── accesskeys.js
│   │   │   ├── focusable-content.js
│   │   │   ├── focusable-disabled.js
│   │   │   ├── focusable-element.js
│   │   │   ├── focusable-modal-open.js
│   │   │   ├── focusable-no-name.js
│   │   │   ├── focusable-not-tabbable.js
│   │   │   ├── frame-focusable-content.js
│   │   │   ├── landmark-is-top-level.js
│   │   │   ├── no-focusable-content.js
│   │   │   ├── page-has-elm.js
│   │   │   ├── page-no-duplicate.js
│   │   │   └── tabindex.js
│   │   ├── label/
│   │   │   ├── alt-space-value.js
│   │   │   ├── duplicate-img-label.js
│   │   │   ├── explicit.js
│   │   │   ├── help-same-as-label.js
│   │   │   ├── hidden-explicit-label.js
│   │   │   ├── implicit.js
│   │   │   ├── label-content-name-mismatch.js
│   │   │   ├── multiple-label.js
│   │   │   └── title-only.js
│   │   ├── landmarks/
│   │   │   ├── landmark-is-unique-after.js
│   │   │   └── landmark-is-unique.js
│   │   ├── language/
│   │   │   ├── has-lang.js
│   │   │   ├── valid-lang.js
│   │   │   └── xml-lang-mismatch.js
│   │   ├── lists/
│   │   │   ├── dlitem.js
│   │   │   ├── listitem.js
│   │   │   ├── only-dlitems.js
│   │   │   ├── only-listitems.js
│   │   │   └── structured-dlitems.js
│   │   ├── media/
│   │   │   ├── caption.js
│   │   │   ├── frame-tested.js
│   │   │   └── no-autoplay-audio.js
│   │   ├── mobile/
│   │   │   ├── css-orientation-lock.js
│   │   │   ├── meta-viewport-scale.js
│   │   │   ├── target-offset.js
│   │   │   └── target-size.js
│   │   ├── navigation/
│   │   │   ├── header-present.js
│   │   │   ├── heading-order.js
│   │   │   ├── identical-links-same-purpose-after.js
│   │   │   ├── identical-links-same-purpose.js
│   │   │   ├── internal-link-present.js
│   │   │   ├── landmark.js
│   │   │   ├── meta-refresh.js
│   │   │   ├── p-as-heading.js
│   │   │   ├── region-after.js
│   │   │   ├── region.js
│   │   │   ├── skip-link.js
│   │   │   ├── unique-frame-title-after.js
│   │   │   └── unique-frame-title.js
│   │   ├── parser/
│   │   │   └── duplicate-id.js
│   │   ├── shared/
│   │   │   ├── abstractrole.js
│   │   │   ├── aria-label.js
│   │   │   ├── aria-labelledby.js
│   │   │   ├── avoid-inline-spacing.js
│   │   │   ├── button-has-visible-text.js
│   │   │   ├── doc-has-title.js
│   │   │   ├── exists.js
│   │   │   ├── has-alt.js
│   │   │   ├── has-visible-text.js
│   │   │   ├── inline-style-property.js
│   │   │   ├── invalidrole.js
│   │   │   ├── is-on-screen.js
│   │   │   ├── non-empty-alt.js
│   │   │   ├── non-empty-if-present.js
│   │   │   ├── non-empty-placeholder.js
│   │   │   ├── non-empty-title.js
│   │   │   ├── non-empty-value.js
│   │   │   ├── presentational-role.js
│   │   │   ├── role-none.js
│   │   │   ├── role-presentation.js
│   │   │   └── svg-non-empty-title.js
│   │   ├── tables/
│   │   │   ├── caption-faked.js
│   │   │   ├── html5-scope.js
│   │   │   ├── same-caption-summary.js
│   │   │   ├── scope-value.js
│   │   │   ├── td-has-header.js
│   │   │   ├── td-headers-attr.js
│   │   │   └── th-has-data-cells.js
│   │   ├── theme.css
│   │   └── visibility/
│   │       └── hidden-content.js
│   ├── commons/
│   │   ├── aria/
│   │   │   ├── allowed-attr.js
│   │   │   ├── arialabel-text.js
│   │   │   ├── arialabelledby-text.js
│   │   │   ├── get-accessible-refs.js
│   │   │   ├── get-element-unallowed-roles.js
│   │   │   ├── get-explicit-role.js
│   │   │   ├── get-owned-virtual.js
│   │   │   ├── get-role-type.js
│   │   │   ├── get-role.js
│   │   │   ├── get-roles-by-type.js
│   │   │   ├── get-roles-with-name-from-contents.js
│   │   │   ├── implicit-role.js
│   │   │   ├── is-accessible-ref.js
│   │   │   ├── is-aria-role-allowed-on-element.js
│   │   │   ├── is-combobox-popup.js
│   │   │   ├── is-unsupported-role.js
│   │   │   ├── is-valid-role.js
│   │   │   ├── label-virtual.js
│   │   │   ├── named-from-contents.js
│   │   │   ├── required-attr.js
│   │   │   ├── required-context.js
│   │   │   ├── required-owned.js
│   │   │   ├── roles.js
│   │   │   ├── validate-attr-value.js
│   │   │   └── validate-attr.js
│   │   ├── color/
│   │   │   ├── center-point-of-rect.js
│   │   │   ├── color.js
│   │   │   ├── element-has-image.js
│   │   │   ├── element-is-distinct.js
│   │   │   ├── flatten-colors.js
│   │   │   ├── get-background-color.js
│   │   │   ├── get-contrast.js
│   │   │   ├── get-foreground-color.js
│   │   │   ├── get-own-background-color.js
│   │   │   ├── get-stroke-colors-from-shadows.js
│   │   │   ├── get-text-shadow-colors.js
│   │   │   ├── has-valid-contrast-ratio.js
│   │   │   ├── incomplete-data.js
│   │   │   ├── parse-text-shadows.js
│   │   │   └── stacking-context.js
│   │   ├── dom/
│   │   │   ├── create-grid.js
│   │   │   ├── find-elms-in-context.js
│   │   │   ├── find-nearby-elms.js
│   │   │   ├── find-up.js
│   │   │   ├── focus-disabled.js
│   │   │   ├── get-composed-parent.js
│   │   │   ├── get-element-by-reference.js
│   │   │   ├── get-element-coordinates.js
│   │   │   ├── get-element-stack.js
│   │   │   ├── get-modal-dialog.js
│   │   │   ├── get-node-grid.js
│   │   │   ├── get-overflow-hidden-ancestors.js
│   │   │   ├── get-scroll-offset.js
│   │   │   ├── get-tabbable-elements.js
│   │   │   ├── get-target-rects.js
│   │   │   ├── get-target-size.js
│   │   │   ├── get-text-element-stack.js
│   │   │   ├── get-viewport-size.js
│   │   │   ├── get-visible-child-text-rects.js
│   │   │   ├── has-content-virtual.js
│   │   │   ├── has-lang-text.js
│   │   │   ├── idrefs.js
│   │   │   ├── inserted-into-focus-order.js
│   │   │   ├── is-current-page-link.js
│   │   │   ├── is-focusable.js
│   │   │   ├── is-hidden-for-everyone.js
│   │   │   ├── is-hidden-with-css.js
│   │   │   ├── is-html5.js
│   │   │   ├── is-in-tab-order.js
│   │   │   ├── is-in-text-block.js
│   │   │   ├── is-inert.js
│   │   │   ├── is-modal-open.js
│   │   │   ├── is-multiline.js
│   │   │   ├── is-natively-focusable.js
│   │   │   ├── is-node.js
│   │   │   ├── is-offscreen.js
│   │   │   ├── is-skip-link.js
│   │   │   ├── is-visible-on-screen.js
│   │   │   ├── is-visible-to-screenreader.js
│   │   │   ├── is-visible.js
│   │   │   ├── is-visual-content.js
│   │   │   ├── shadow-elements-from-point.js
│   │   │   ├── url-props-from-attribute.js
│   │   │   ├── visibility-methods.js
│   │   │   ├── visually-contains.js
│   │   │   ├── visually-overlaps.js
│   │   │   └── visually-sort.js
│   │   ├── forms/
│   │   │   ├── is-aria-combobox.js
│   │   │   ├── is-aria-listbox.js
│   │   │   ├── is-aria-range.js
│   │   │   ├── is-aria-textbox.js
│   │   │   ├── is-disabled.js
│   │   │   ├── is-native-select.js
│   │   │   └── is-native-textbox.js
│   │   ├── index.js
│   │   ├── matches/
│   │   │   ├── attributes.js
│   │   │   ├── condition.js
│   │   │   ├── explicit-role.js
│   │   │   ├── from-definition.js
│   │   │   ├── from-function.js
│   │   │   ├── from-primative.js
│   │   │   ├── has-accessible-name.js
│   │   │   ├── implicit-role.js
│   │   │   ├── node-name.js
│   │   │   ├── properties.js
│   │   │   └── semantic-role.js
│   │   ├── math/
│   │   │   ├── get-bounding-rect.js
│   │   │   ├── get-intersection-rect.js
│   │   │   ├── get-offset.js
│   │   │   ├── get-rect-center.js
│   │   │   ├── has-visual-overlap.js
│   │   │   ├── is-point-in-rect.js
│   │   │   ├── rect-has-minimum-size.js
│   │   │   ├── rects-overlap.js
│   │   │   └── split-rects.js
│   │   ├── standards/
│   │   │   ├── get-aria-roles-by-type.js
│   │   │   ├── get-aria-roles-supporting-name-from-content.js
│   │   │   ├── get-element-spec.js
│   │   │   ├── get-elements-by-content-type.js
│   │   │   └── get-global-aria-attrs.js
│   │   ├── table/
│   │   │   ├── get-cell-position.js
│   │   │   ├── get-headers.js
│   │   │   ├── get-scope.js
│   │   │   ├── is-column-header.js
│   │   │   ├── is-data-cell.js
│   │   │   ├── is-data-table.js
│   │   │   ├── is-header.js
│   │   │   ├── is-row-header.js
│   │   │   ├── to-grid.js
│   │   │   └── traverse.js
│   │   ├── text/
│   │   │   ├── accessible-text.js
│   │   │   ├── form-control-value.js
│   │   │   ├── is-human-interpretable.js
│   │   │   ├── is-icon-ligature.js
│   │   │   ├── is-valid-autocomplete.js
│   │   │   ├── label-text.js
│   │   │   ├── label-virtual.js
│   │   │   ├── native-text-alternative.js
│   │   │   ├── native-text-methods.js
│   │   │   ├── sanitize.js
│   │   │   ├── subtree-text.js
│   │   │   ├── unicode.js
│   │   │   ├── visible-text-nodes.js
│   │   │   └── visible-virtual.js
│   │   └── utils/
│   │       └── index.js
│   ├── core/
│   │   ├── base/
│   │   │   ├── audit.js
│   │   │   ├── cache.js
│   │   │   ├── check-result.js
│   │   │   ├── check.js
│   │   │   ├── context.js
│   │   │   ├── rule-result.js
│   │   │   ├── rule.js
│   │   │   └── virtual-node/
│   │   │       ├── abstract-virtual-node.js
│   │   │       ├── serial-virtual-node.js
│   │   │       └── virtual-node.js
│   │   ├── constants.js
│   │   ├── export.js
│   │   ├── index.js
│   │   ├── log.js
│   │   ├── public/
│   │   │   ├── cleanup.js
│   │   │   ├── configure.js
│   │   │   ├── finish-run.js
│   │   │   ├── frame-messenger.js
│   │   │   ├── get-rules.js
│   │   │   ├── load.js
│   │   │   ├── plugins.js
│   │   │   ├── reporter.js
│   │   │   ├── reset.js
│   │   │   ├── run-partial.js
│   │   │   ├── run-rules.js
│   │   │   ├── run-virtual-rule.js
│   │   │   ├── run.js
│   │   │   ├── setup.js
│   │   │   └── teardown.js
│   │   ├── reporters/
│   │   │   ├── helpers/
│   │   │   │   ├── 000_runfirst.js
│   │   │   │   ├── failure-summary.js
│   │   │   │   ├── incomplete-fallback-msg.js
│   │   │   │   └── process-aggregate.js
│   │   │   ├── na.js
│   │   │   ├── no-passes.js
│   │   │   ├── raw-env.js
│   │   │   ├── raw.js
│   │   │   ├── v1.js
│   │   │   └── v2.js
│   │   └── utils/
│   │       ├── aggregate.js
│   │       ├── aggregateChecks.js
│   │       ├── aggregateNodeResults.js
│   │       ├── aggregateResult.js
│   │       ├── are-styles-set.js
│   │       ├── assert.js
│   │       ├── check-helper.js
│   │       ├── clone.js
│   │       ├── closest.js
│   │       ├── collect-results-from-frames.js
│   │       ├── contains.js
│   │       ├── deep-merge.js
│   │       ├── dq-element.js
│   │       ├── element-matches.js
│   │       ├── escape-selector.js
│   │       ├── extend-meta-data.js
│   │       ├── filter-html-attrs.js
│   │       ├── finalize-result.js
│   │       ├── find-by.js
│   │       ├── flattened-tree.js
│   │       ├── frame-messenger/
│   │       │   ├── frame-messenger.js
│   │       │   └── subscribe.js
│   │       ├── get-all-checks.js
│   │       ├── get-ancestry.js
│   │       ├── get-base-lang.js
│   │       ├── get-check-message.js
│   │       ├── get-check-option.js
│   │       ├── get-element-source.js
│   │       ├── get-environment-data.js
│   │       ├── get-frame-contexts.js
│   │       ├── get-friendly-uri-end.js
│   │       ├── get-node-attributes.js
│   │       ├── get-root-node.js
│   │       ├── get-rule.js
│   │       ├── get-scroll.js
│   │       ├── get-selector.js
│   │       ├── get-shadow-selector.js
│   │       ├── get-standards.js
│   │       ├── get-stylesheet-factory.js
│   │       ├── get-xpath.js
│   │       ├── is-array-like.js
│   │       ├── is-context.js
│   │       ├── is-hidden.js
│   │       ├── is-html-element.js
│   │       ├── is-node-in-context.js
│   │       ├── is-shadow-root.js
│   │       ├── is-xhtml.js
│   │       ├── matchAncestry.js
│   │       ├── matches.js
│   │       ├── memoize.js
│   │       ├── merge-results.js
│   │       ├── node-lookup.js
│   │       ├── node-serializer.js
│   │       ├── node-sorter.js
│   │       ├── normalize-run-options.js
│   │       ├── object-has-own.js
│   │       ├── parse-crossorigin-stylesheet.js
│   │       ├── parse-sameorigin-stylesheet.js
│   │       ├── parse-tabindex.js
│   │       ├── performance-timer.js
│   │       ├── pollyfills.elements-from-point.js
│   │       ├── preload-cssom.js
│   │       ├── preload-media.js
│   │       ├── preload.js
│   │       ├── process-message.js
│   │       ├── publish-metadata.js
│   │       ├── qsa.js
│   │       ├── queue.js
│   │       ├── respondable.js
│   │       ├── rule-error.js
│   │       ├── rule-should-run.js
│   │       ├── scroll-state.js
│   │       ├── select.js
│   │       ├── selector-cache.js
│   │       ├── send-command-to-frame.js
│   │       ├── serialize-error.js
│   │       ├── shadow-select-all.js
│   │       ├── shadow-select.js
│   │       ├── to-array.js
│   │       ├── token-list.js
│   │       └── valid-langs.js
│   ├── get-webdriver.js
│   ├── integration/
│   │   ├── adapter.js
│   │   ├── api/
│   │   │   └── external/
│   │   │       └── index.js
│   │   ├── full/
│   │   │   ├── README.md
│   │   │   ├── all-rules/
│   │   │   │   ├── all-rules.html
│   │   │   │   ├── all-rules.js
│   │   │   │   └── frames/
│   │   │   │       └── focusable.html
│   │   │   ├── aria-hidden-body/
│   │   │   │   ├── fail.html
│   │   │   │   ├── fail.js
│   │   │   │   ├── frames/
│   │   │   │   │   └── frame-hidden-body.html
│   │   │   │   ├── pass.html
│   │   │   │   └── pass.js
│   │   │   ├── aria-hidden-focus/
│   │   │   │   ├── modal.html
│   │   │   │   └── modal.js
│   │   │   ├── async/
│   │   │   │   ├── async.html
│   │   │   │   └── async.js
│   │   │   ├── bypass/
│   │   │   │   ├── aria-header.html
│   │   │   │   ├── fail.html
│   │   │   │   ├── fail.js
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── header-iframe-fail.html
│   │   │   │   ├── header-iframe-fail.js
│   │   │   │   ├── header-iframe-pass.html
│   │   │   │   ├── header-iframe-pass.js
│   │   │   │   ├── header1.html
│   │   │   │   ├── header2.html
│   │   │   │   ├── pass-tests.js
│   │   │   │   ├── region.html
│   │   │   │   └── skip-link.html
│   │   │   ├── configuration/
│   │   │   │   ├── tag-exclude.html
│   │   │   │   └── tag-exclude.js
│   │   │   ├── configure-options/
│   │   │   │   ├── configure-options.html
│   │   │   │   └── configure-options.js
│   │   │   ├── context/
│   │   │   │   ├── context.html
│   │   │   │   ├── context.js
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   ├── level2-b.html
│   │   │   │   │   └── shadow-frame.html
│   │   │   │   ├── shadow-dom.html
│   │   │   │   └── shadow-dom.js
│   │   │   ├── contrast/
│   │   │   │   ├── blending.html
│   │   │   │   ├── blending.js
│   │   │   │   ├── code-highlighting.html
│   │   │   │   ├── code-highlighting.js
│   │   │   │   ├── memory.html
│   │   │   │   ├── memory.js
│   │   │   │   ├── prototype-lib-1.7.3.js
│   │   │   │   ├── prototype.html
│   │   │   │   ├── prototype.js
│   │   │   │   ├── shadow-dom.html
│   │   │   │   ├── shadow-dom.js
│   │   │   │   ├── sticky-header.html
│   │   │   │   └── sticky-header.js
│   │   │   ├── contrast-enhanced/
│   │   │   │   ├── simple.html
│   │   │   │   └── simple.js
│   │   │   ├── css-orientation-lock/
│   │   │   │   ├── incomplete.html
│   │   │   │   ├── incomplete.js
│   │   │   │   ├── passes.html
│   │   │   │   ├── passes.js
│   │   │   │   ├── violations.css
│   │   │   │   ├── violations.html
│   │   │   │   └── violations.js
│   │   │   ├── definition-list/
│   │   │   │   ├── dl-role.html
│   │   │   │   ├── dl-role.js
│   │   │   │   ├── dlitem-role.html
│   │   │   │   └── dlitem-role.js
│   │   │   ├── dialog/
│   │   │   │   ├── dialog.html
│   │   │   │   └── dialog.js
│   │   │   ├── document-title/
│   │   │   │   ├── document-title-fail.html
│   │   │   │   ├── document-title-fail.js
│   │   │   │   ├── document-title-pass.html
│   │   │   │   ├── document-title-pass.js
│   │   │   │   └── frames/
│   │   │   │       ├── level1.html
│   │   │   │       ├── level2-a.html
│   │   │   │       └── level2.html
│   │   │   ├── error-occurred/
│   │   │   │   ├── error-frame.html
│   │   │   │   ├── error-frame.js
│   │   │   │   ├── error-occurred.html
│   │   │   │   ├── error-occurred.js
│   │   │   │   ├── error-ruleset.js
│   │   │   │   └── frames/
│   │   │   │       └── error.html
│   │   │   ├── frame-tested/
│   │   │   │   ├── frame-tested-fail.html
│   │   │   │   ├── frame-tested-fail.js
│   │   │   │   ├── frame-tested-incomplete.html
│   │   │   │   ├── frame-tested-incomplete.js
│   │   │   │   ├── frame-tested-pass.html
│   │   │   │   ├── frame-tested-pass.js
│   │   │   │   └── frames/
│   │   │   │       ├── nested-no-axe.html
│   │   │   │       ├── no-axe.html
│   │   │   │       └── with-axe.html
│   │   │   ├── frame-wait-time/
│   │   │   │   ├── frame-wait-time.html
│   │   │   │   ├── frame-wait-time.js
│   │   │   │   └── frames/
│   │   │   │       └── frame.html
│   │   │   ├── get-selector/
│   │   │   │   ├── get-selector.js
│   │   │   │   └── get-selector.xhtml
│   │   │   ├── heading-order/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── heading.html
│   │   │   │   │   └── nested-heading.html
│   │   │   │   ├── no-heading-page.html
│   │   │   │   ├── no-heading-page.js
│   │   │   │   ├── partial-context-with-iframe-excluded.html
│   │   │   │   ├── partial-context-with-iframe-excluded.js
│   │   │   │   ├── partial-context-with-iframe.html
│   │   │   │   ├── partial-context-with-iframe.js
│   │   │   │   ├── partial-context.html
│   │   │   │   └── partial-context.js
│   │   │   ├── html-has-lang/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── html-has-lang-fail-xml-lang.html
│   │   │   │   ├── html-has-lang-fail-xml-lang.js
│   │   │   │   ├── html-has-lang-fail.html
│   │   │   │   ├── html-has-lang-fail.js
│   │   │   │   ├── html-has-lang-pass-xhtml.js
│   │   │   │   ├── html-has-lang-pass-xhtml.xhtml
│   │   │   │   ├── html-has-lang-pass.html
│   │   │   │   └── html-has-lang-pass.js
│   │   │   ├── html-lang-valid/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   ├── level2-b.html
│   │   │   │   │   ├── level2-c.html
│   │   │   │   │   ├── level2-d.html
│   │   │   │   │   ├── level2-e.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── html-lang-valid.html
│   │   │   │   └── html-lang-valid.js
│   │   │   ├── identical-links-same-purpose/
│   │   │   │   ├── frames/
│   │   │   │   │   └── level1.html
│   │   │   │   ├── page.html
│   │   │   │   └── page.js
│   │   │   ├── incomplete/
│   │   │   │   ├── color-contrast.html
│   │   │   │   ├── color-contrast.js
│   │   │   │   ├── th-has-data-cells.html
│   │   │   │   └── th-has-data-cells.js
│   │   │   ├── is-xhtml/
│   │   │   │   ├── is-xhtml.js
│   │   │   │   └── is-xhtml.xhtml
│   │   │   ├── isolated-env/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── focusable.html
│   │   │   │   │   └── isolated.html
│   │   │   │   ├── isolated-env.html
│   │   │   │   └── isolated-env.js
│   │   │   ├── jquery/
│   │   │   │   ├── run-include-exclude.html
│   │   │   │   ├── run-include-exclude.js
│   │   │   │   ├── run-object.html
│   │   │   │   └── run-object.js
│   │   │   ├── landmark-banner-is-top-level/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-banner-is-top-level-fail.html
│   │   │   │   ├── landmark-banner-is-top-level-fail.js
│   │   │   │   ├── landmark-banner-is-top-level-pass.html
│   │   │   │   └── landmark-banner-is-top-level-pass.js
│   │   │   ├── landmark-complementary-is-top-level/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-complementary-is-top-level-fail.html
│   │   │   │   ├── landmark-complementary-is-top-level-fail.js
│   │   │   │   ├── landmark-complementary-is-top-level-pass.html
│   │   │   │   └── landmark-complementary-is-top-level-pass.js
│   │   │   ├── landmark-contentinfo-is-top-level/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-contentinfo-is-top-level-fail.html
│   │   │   │   ├── landmark-contentinfo-is-top-level-fail.js
│   │   │   │   ├── landmark-contentinfo-is-top-level-pass.html
│   │   │   │   └── landmark-contentinfo-is-top-level-pass.js
│   │   │   ├── landmark-main-is-top-level/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-main-is-top-level-fail.html
│   │   │   │   ├── landmark-main-is-top-level-fail.js
│   │   │   │   ├── landmark-main-is-top-level-pass.html
│   │   │   │   └── landmark-main-is-top-level-pass.js
│   │   │   ├── landmark-no-duplicate-banner/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-no-duplicate-banner-fail.html
│   │   │   │   ├── landmark-no-duplicate-banner-fail.js
│   │   │   │   ├── landmark-no-duplicate-banner-pass.html
│   │   │   │   └── landmark-no-duplicate-banner-pass.js
│   │   │   ├── landmark-no-duplicate-contentinfo/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-no-duplicate-contentinfo-fail.html
│   │   │   │   ├── landmark-no-duplicate-contentinfo-fail.js
│   │   │   │   ├── landmark-no-duplicate-contentinfo-pass.html
│   │   │   │   └── landmark-no-duplicate-contentinfo-pass.js
│   │   │   ├── landmark-no-duplicate-main/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-no-duplicate-main-fail.html
│   │   │   │   ├── landmark-no-duplicate-main-fail.js
│   │   │   │   ├── landmark-no-duplicate-main-pass.html
│   │   │   │   └── landmark-no-duplicate-main-pass.js
│   │   │   ├── landmark-one-main/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-one-main-fail.html
│   │   │   │   ├── landmark-one-main-fail.js
│   │   │   │   ├── landmark-one-main-pass1.html
│   │   │   │   ├── landmark-one-main-pass1.js
│   │   │   │   ├── landmark-one-main-pass2.html
│   │   │   │   ├── landmark-one-main-pass2.js
│   │   │   │   ├── landmark-one-main-pass3.html
│   │   │   │   ├── landmark-one-main-pass3.js
│   │   │   │   ├── landmark-one-main-pass4.html
│   │   │   │   └── landmark-one-main-pass4.js
│   │   │   ├── list/
│   │   │   │   ├── li-role.html
│   │   │   │   ├── li-role.js
│   │   │   │   ├── list-role.html
│   │   │   │   └── list-role.js
│   │   │   ├── meta-refresh/
│   │   │   │   ├── meta-refresh-fail.js
│   │   │   │   ├── meta-refresh-fail1.html
│   │   │   │   ├── meta-refresh-inapplicable.js
│   │   │   │   ├── meta-refresh-inapplicable1.html
│   │   │   │   ├── meta-refresh-inapplicable2.html
│   │   │   │   ├── meta-refresh-pass.js
│   │   │   │   ├── meta-refresh-pass1.html
│   │   │   │   └── meta-refresh-pass2.html
│   │   │   ├── meta-refresh-no-exceptions/
│   │   │   │   ├── meta-refresh-fail.js
│   │   │   │   ├── meta-refresh-fail1.html
│   │   │   │   ├── meta-refresh-inapplicable.js
│   │   │   │   ├── meta-refresh-inapplicable1.html
│   │   │   │   ├── meta-refresh-inapplicable2.html
│   │   │   │   ├── meta-refresh-pass.js
│   │   │   │   ├── meta-refresh-pass1.html
│   │   │   │   └── meta-refresh-pass2.html
│   │   │   ├── no-autoplay-audio/
│   │   │   │   ├── no-autoplay-audio.html
│   │   │   │   └── no-autoplay-audio.js
│   │   │   ├── options-parameter/
│   │   │   │   ├── frames/
│   │   │   │   │   └── frame.html
│   │   │   │   ├── options-parameter.html
│   │   │   │   └── options-parameter.js
│   │   │   ├── page-has-heading-one/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── page-has-heading-one-fail.html
│   │   │   │   ├── page-has-heading-one-fail.js
│   │   │   │   ├── page-has-heading-one-pass1.html
│   │   │   │   ├── page-has-heading-one-pass1.js
│   │   │   │   ├── page-has-heading-one-pass10.html
│   │   │   │   ├── page-has-heading-one-pass10.js
│   │   │   │   ├── page-has-heading-one-pass2.html
│   │   │   │   ├── page-has-heading-one-pass2.js
│   │   │   │   ├── page-has-heading-one-pass3.html
│   │   │   │   ├── page-has-heading-one-pass3.js
│   │   │   │   ├── page-has-heading-one-pass4.html
│   │   │   │   ├── page-has-heading-one-pass4.js
│   │   │   │   ├── page-has-heading-one-pass5.html
│   │   │   │   ├── page-has-heading-one-pass5.js
│   │   │   │   ├── page-has-heading-one-pass6.html
│   │   │   │   ├── page-has-heading-one-pass6.js
│   │   │   │   ├── page-has-heading-one-pass7.html
│   │   │   │   ├── page-has-heading-one-pass7.js
│   │   │   │   ├── page-has-heading-one-pass8.html
│   │   │   │   ├── page-has-heading-one-pass8.js
│   │   │   │   ├── page-has-heading-one-pass9.html
│   │   │   │   └── page-has-heading-one-pass9.js
│   │   │   ├── patch/
│   │   │   │   ├── patch.html
│   │   │   │   └── patch.mjs
│   │   │   ├── plugin/
│   │   │   │   ├── plugin.html
│   │   │   │   └── plugin.js
│   │   │   ├── preload/
│   │   │   │   ├── import-non-existing-cross-origin.css
│   │   │   │   ├── preload.html
│   │   │   │   └── preload.js
│   │   │   ├── preload-cssom/
│   │   │   │   ├── base.css
│   │   │   │   ├── cyclic-cross-origin-import-1.css
│   │   │   │   ├── cyclic-cross-origin-import-2.css
│   │   │   │   ├── cyclic-import-1.css
│   │   │   │   ├── cyclic-import-2.css
│   │   │   │   ├── frames/
│   │   │   │   │   └── level1.html
│   │   │   │   ├── import-non-existing-cross-origin.css
│   │   │   │   ├── multiple-import-1.css
│   │   │   │   ├── multiple-import-2.css
│   │   │   │   ├── multiple-import-3.css
│   │   │   │   ├── nested-import-1.css
│   │   │   │   ├── nested-import-2.css
│   │   │   │   ├── nested-import-3.css
│   │   │   │   ├── preload-cssom.html
│   │   │   │   └── preload-cssom.js
│   │   │   ├── region/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── region-fail.html
│   │   │   │   │   ├── region-nested.html
│   │   │   │   │   └── region.html
│   │   │   │   ├── region-fail-iframe.html
│   │   │   │   ├── region-fail-iframe.js
│   │   │   │   ├── region-fail-nested-iframe.html
│   │   │   │   ├── region-fail-nested-iframe.js
│   │   │   │   ├── region-fail.html
│   │   │   │   ├── region-fail.js
│   │   │   │   ├── region-iframe-with-landmarks.html
│   │   │   │   ├── region-iframe-within-landmark.html
│   │   │   │   ├── region-pass-nested-iframe.html
│   │   │   │   ├── region-pass.html
│   │   │   │   └── region-pass.js
│   │   │   ├── rerun/
│   │   │   │   ├── frames/
│   │   │   │   │   └── frame.html
│   │   │   │   ├── rerun.html
│   │   │   │   └── rerun.js
│   │   │   ├── run-partial/
│   │   │   │   ├── after-method.html
│   │   │   │   ├── after-method.js
│   │   │   │   ├── context-size-focusable.html
│   │   │   │   ├── context-size-focusable.js
│   │   │   │   ├── frames/
│   │   │   │   │   ├── heading-frame-h3.html
│   │   │   │   │   ├── heading-h2.html
│   │   │   │   │   ├── link-nested.html
│   │   │   │   │   └── link.html
│   │   │   │   ├── initiator.html
│   │   │   │   ├── initiator.js
│   │   │   │   ├── page-level.html
│   │   │   │   └── page-level.js
│   │   │   ├── serializer/
│   │   │   │   ├── custom-source-serializer.js
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2-b.html
│   │   │   │   ├── serializer.html
│   │   │   │   └── serializer.js
│   │   │   ├── skip-link/
│   │   │   │   ├── skip-link-fail.html
│   │   │   │   ├── skip-link-fail.js
│   │   │   │   ├── skip-link-pass.html
│   │   │   │   └── skip-link-pass.js
│   │   │   ├── strict-csp/
│   │   │   │   ├── strict-csp.html
│   │   │   │   └── strict-csp.js
│   │   │   ├── target-size/
│   │   │   │   ├── shadow-dom.html
│   │   │   │   ├── shadow-dom.js
│   │   │   │   ├── target-size.html
│   │   │   │   ├── target-size.js
│   │   │   │   ├── too-many-rects.html
│   │   │   │   └── too-many-rects.js
│   │   │   ├── test-webdriver.js
│   │   │   ├── umd/
│   │   │   │   ├── mock-define.js
│   │   │   │   ├── mock-module-exports.js
│   │   │   │   ├── umd-define.html
│   │   │   │   ├── umd-define.js
│   │   │   │   ├── umd-module-exports.html
│   │   │   │   ├── umd-module-exports.js
│   │   │   │   ├── umd-window.html
│   │   │   │   └── umd-window.js
│   │   │   └── xml-lang-mismatch/
│   │   │       ├── xml-lang-mismatch.fail.js
│   │   │       ├── xml-lang-mismatch.fail1.html
│   │   │       ├── xml-lang-mismatch.fail2.html
│   │   │       ├── xml-lang-mismatch.inapplicable.js
│   │   │       ├── xml-lang-mismatch.inapplicable1.html
│   │   │       ├── xml-lang-mismatch.inapplicable2.html
│   │   │       ├── xml-lang-mismatch.pass.js
│   │   │       ├── xml-lang-mismatch.pass1.html
│   │   │       ├── xml-lang-mismatch.pass2.html
│   │   │       ├── xml-lang-mismatch.pass3.html
│   │   │       ├── xml-lang-mismatch.pass4.html
│   │   │       └── xml-lang-mismatch.pass5.html
│   │   ├── no-ui-reporter.js
│   │   ├── rules/
│   │   │   ├── README.md
│   │   │   ├── accesskeys/
│   │   │   │   ├── accesskeys.html
│   │   │   │   ├── accesskeys.json
│   │   │   │   └── frame.html
│   │   │   ├── area-alt/
│   │   │   │   ├── area-alt.html
│   │   │   │   └── area-alt.json
│   │   │   ├── aria-allowed-attr/
│   │   │   │   ├── failures.html
│   │   │   │   ├── failures.json
│   │   │   │   ├── incomplete.html
│   │   │   │   ├── incomplete.json
│   │   │   │   ├── passes.html
│   │   │   │   └── passes.json
│   │   │   ├── aria-allowed-role/
│   │   │   │   ├── aria-allowed-role.html
│   │   │   │   ├── aria-allowed-role.json
│   │   │   │   └── dummy.html
│   │   │   ├── aria-braille-equivalent/
│   │   │   │   ├── aria-braille-equivalent.html
│   │   │   │   └── aria-braille-equivalent.json
│   │   │   ├── aria-command-name/
│   │   │   │   ├── aria-command-name.html
│   │   │   │   └── aria-command-name.json
│   │   │   ├── aria-conditional-attr/
│   │   │   │   ├── aria-conditional-attr.html
│   │   │   │   └── aria-conditional-attr.json
│   │   │   ├── aria-deprecated-role/
│   │   │   │   ├── aria-deprecated-role.html
│   │   │   │   └── aria-deprecated-role.json
│   │   │   ├── aria-dialog-name/
│   │   │   │   ├── aria-dialog-name.html
│   │   │   │   └── aria-dialog-name.json
│   │   │   ├── aria-hidden-focus/
│   │   │   │   ├── aria-hidden-focus.html
│   │   │   │   └── aria-hidden-focus.json
│   │   │   ├── aria-input-field-name/
│   │   │   │   ├── aria-input-field-name.html
│   │   │   │   └── aria-input-field-name.json
│   │   │   ├── aria-meter-name/
│   │   │   │   ├── aria-meter-name.html
│   │   │   │   └── aria-meter-name.json
│   │   │   ├── aria-progressbar-name/
│   │   │   │   ├── aria-progressbar-name.html
│   │   │   │   └── aria-progressbar-name.json
│   │   │   ├── aria-prohibited-attr/
│   │   │   │   ├── aria-prohibited-attr.html
│   │   │   │   └── aria-prohibited-attr.json
│   │   │   ├── aria-required-attr/
│   │   │   │   ├── required-attr.html
│   │   │   │   └── required-attr.json
│   │   │   ├── aria-required-children/
│   │   │   │   ├── aria-required-children.html
│   │   │   │   └── aria-required-children.json
│   │   │   ├── aria-required-parent/
│   │   │   │   ├── aria-required-parent.html
│   │   │   │   └── aria-required-parent.json
│   │   │   ├── aria-roledescription/
│   │   │   │   ├── aria-roledescription.html
│   │   │   │   └── aria-roledescription.json
│   │   │   ├── aria-roles/
│   │   │   │   ├── aria-roles.html
│   │   │   │   └── aria-roles.json
│   │   │   ├── aria-tab-name/
│   │   │   │   ├── aria-tab-name.html
│   │   │   │   └── aria-tab-name.json
│   │   │   ├── aria-text/
│   │   │   │   ├── aria-text.html
│   │   │   │   └── aria-text.json
│   │   │   ├── aria-toggle-field-name/
│   │   │   │   ├── aria-toggle-field-name.html
│   │   │   │   └── aria-toggle-field-name.json
│   │   │   ├── aria-tooltip-name/
│   │   │   │   ├── aria-tooltip-name.html
│   │   │   │   └── aria-tooltip-name.json
│   │   │   ├── aria-treeitem-name/
│   │   │   │   ├── aria-treeitem-name.html
│   │   │   │   └── aria-treeitem-name.json
│   │   │   ├── aria-valid-attr/
│   │   │   │   ├── aria-valid-attr.html
│   │   │   │   └── aria-valid-attr.json
│   │   │   ├── aria-valid-attr-value/
│   │   │   │   ├── aria-valid-attr-value.html
│   │   │   │   └── aria-valid-attr-value.json
│   │   │   ├── audio-caption/
│   │   │   │   ├── audio-caption.html
│   │   │   │   └── audio-caption.json
│   │   │   ├── autocomplete-valid/
│   │   │   │   ├── autocomplete-valid.html
│   │   │   │   └── autocomplete-valid.json
│   │   │   ├── avoid-inline-spacing/
│   │   │   │   ├── avoid-inline-spacing.html
│   │   │   │   └── avoid-inline-spacing.json
│   │   │   ├── blink/
│   │   │   │   ├── blink.html
│   │   │   │   └── blink.json
│   │   │   ├── button-name/
│   │   │   │   ├── button-name.html
│   │   │   │   └── button-name.json
│   │   │   ├── color-contrast/
│   │   │   │   ├── color-contrast.html
│   │   │   │   ├── color-contrast.json
│   │   │   │   ├── text-shadows.html
│   │   │   │   └── text-shadows.json
│   │   │   ├── color-contrast-enhanced/
│   │   │   │   ├── color-contrast-enhanced.html
│   │   │   │   └── color-contrast-enhanced.json
│   │   │   ├── definition-list/
│   │   │   │   ├── definition-list.html
│   │   │   │   └── definition-list.json
│   │   │   ├── dlitem/
│   │   │   │   ├── dlitem.html
│   │   │   │   └── dlitem.json
│   │   │   ├── duplicate-id/
│   │   │   │   ├── duplicate-id.html
│   │   │   │   └── duplicate-id.json
│   │   │   ├── duplicate-id-active/
│   │   │   │   ├── duplicate-id-active.html
│   │   │   │   └── duplicate-id-active.json
│   │   │   ├── duplicate-id-aria/
│   │   │   │   ├── duplicate-id-aria.html
│   │   │   │   └── duplicate-id-aria.json
│   │   │   ├── empty-heading/
│   │   │   │   ├── empty-heading.html
│   │   │   │   └── empty-heading.json
│   │   │   ├── empty-table-header/
│   │   │   │   ├── empty-table-header.html
│   │   │   │   └── empty-table-header.json
│   │   │   ├── focus-order-semantics/
│   │   │   │   ├── focus-order-semantics.html
│   │   │   │   └── focus-order-semantics.json
│   │   │   ├── form-field-multiple-labels/
│   │   │   │   ├── form-field-multiple-labels.html
│   │   │   │   └── form-field-multiple-labels.json
│   │   │   ├── frame-focusable-content/
│   │   │   │   ├── frame-focusable-content.html
│   │   │   │   ├── frame-focusable-content.json
│   │   │   │   └── frames/
│   │   │   │       ├── focusable-negative-tabindex.html
│   │   │   │       ├── focusable.html
│   │   │   │       └── not-focusable.html
│   │   │   ├── frame-title/
│   │   │   │   ├── frame-title.html
│   │   │   │   ├── frame-title.json
│   │   │   │   └── frames/
│   │   │   │       ├── level1.html
│   │   │   │       ├── level1a.html
│   │   │   │       ├── level2-a.html
│   │   │   │       └── level2.html
│   │   │   ├── frame-title-unique/
│   │   │   │   ├── frame-title-unique.html
│   │   │   │   ├── frame-title-unique.json
│   │   │   │   └── frames/
│   │   │   │       ├── level1.html
│   │   │   │       ├── level1a.html
│   │   │   │       ├── level2-a.html
│   │   │   │       └── level2.html
│   │   │   ├── heading-order/
│   │   │   │   ├── heading-order.html
│   │   │   │   └── heading-order.json
│   │   │   ├── hidden-content/
│   │   │   │   ├── hidden-content.html
│   │   │   │   └── hidden-content.json
│   │   │   ├── identical-links-same-purpose/
│   │   │   │   ├── identical-links-same-purpose.html
│   │   │   │   └── identical-links-same-purpose.json
│   │   │   ├── image-alt/
│   │   │   │   ├── image-alt.html
│   │   │   │   └── image-alt.json
│   │   │   ├── image-redundant-alt/
│   │   │   │   ├── image-redundant-alt.html
│   │   │   │   └── image-redundant-alt.json
│   │   │   ├── input-button-name/
│   │   │   │   ├── input-button-name.html
│   │   │   │   └── input-button-name.json
│   │   │   ├── input-image-alt/
│   │   │   │   ├── input-image-alt.html
│   │   │   │   └── input-image-alt.json
│   │   │   ├── label/
│   │   │   │   ├── label.html
│   │   │   │   └── label.json
│   │   │   ├── label-content-name-mismatch/
│   │   │   │   ├── label-content-name-mismatch.html
│   │   │   │   └── label-content-name-mismatch.json
│   │   │   ├── label-title-only/
│   │   │   │   ├── label-title-only.html
│   │   │   │   └── label-title-only.json
│   │   │   ├── landmark-unique/
│   │   │   │   ├── frame.html
│   │   │   │   ├── landmark-unique-fail.html
│   │   │   │   ├── landmark-unique-fail.json
│   │   │   │   ├── landmark-unique-pass.html
│   │   │   │   └── landmark-unique-pass.json
│   │   │   ├── link-in-text-block/
│   │   │   │   ├── link-in-text-block.html
│   │   │   │   └── link-in-text-block.json
│   │   │   ├── link-name/
│   │   │   │   ├── link-name.html
│   │   │   │   └── link-name.json
│   │   │   ├── list/
│   │   │   │   ├── list.html
│   │   │   │   └── list.json
│   │   │   ├── listitem/
│   │   │   │   ├── listitem.html
│   │   │   │   └── listitem.json
│   │   │   ├── marquee/
│   │   │   │   ├── marquee.html
│   │   │   │   └── marquee.json
│   │   │   ├── meta-refresh/
│   │   │   │   ├── meta-refresh.html
│   │   │   │   └── meta-refresh.json
│   │   │   ├── meta-viewport/
│   │   │   │   ├── frames/
│   │   │   │   │   └── iframe-with-zooming-disabled.html
│   │   │   │   ├── meta-viewport-fail1.html
│   │   │   │   ├── meta-viewport-fail1.json
│   │   │   │   ├── meta-viewport-fail2.html
│   │   │   │   ├── meta-viewport-fail2.json
│   │   │   │   ├── meta-viewport-pass1.html
│   │   │   │   ├── meta-viewport-pass1.json
│   │   │   │   ├── meta-viewport-pass2.html
│   │   │   │   ├── meta-viewport-pass2.json
│   │   │   │   ├── meta-viewport-pass3.html
│   │   │   │   └── meta-viewport-pass3.json
│   │   │   ├── meta-viewport-large/
│   │   │   │   ├── meta-viewport-large-fail1.html
│   │   │   │   ├── meta-viewport-large-fail1.json
│   │   │   │   ├── meta-viewport-large-fail2.html
│   │   │   │   ├── meta-viewport-large-fail2.json
│   │   │   │   ├── meta-viewport-large-pass1.html
│   │   │   │   ├── meta-viewport-large-pass1.json
│   │   │   │   ├── meta-viewport-large-pass2.html
│   │   │   │   ├── meta-viewport-large-pass2.json
│   │   │   │   ├── meta-viewport-large-pass3.html
│   │   │   │   ├── meta-viewport-large-pass3.json
│   │   │   │   ├── meta-viewport-large-pass4.html
│   │   │   │   └── meta-viewport-large-pass4.json
│   │   │   ├── nested-interactive/
│   │   │   │   ├── nested-interactive.html
│   │   │   │   └── nested-interactive.json
│   │   │   ├── object-alt/
│   │   │   │   ├── object-alt.html
│   │   │   │   └── object-alt.json
│   │   │   ├── p-as-heading/
│   │   │   │   ├── p-as-heading.html
│   │   │   │   └── p-as-heading.json
│   │   │   ├── preprocessor.js
│   │   │   ├── presentation-role-conflict/
│   │   │   │   ├── presentation-role-conflict.html
│   │   │   │   └── presentation-role-conflict.json
│   │   │   ├── role-img-alt/
│   │   │   │   ├── role-img-alt.html
│   │   │   │   └── role-img-alt.json
│   │   │   ├── runner.js
│   │   │   ├── scope-attr-valid/
│   │   │   │   ├── scope-attr-valid.html
│   │   │   │   └── scope-attr-valid.json
│   │   │   ├── scrollable-region-focusable/
│   │   │   │   ├── scrollable-region-focusable.html
│   │   │   │   └── scrollable-region-focusable.json
│   │   │   ├── select-name/
│   │   │   │   ├── select-name.html
│   │   │   │   └── select-name.json
│   │   │   ├── server-side-image-map/
│   │   │   │   ├── server-side-image-map.html
│   │   │   │   └── server-side-image-map.json
│   │   │   ├── summary-name/
│   │   │   │   ├── summary-name.html
│   │   │   │   └── summary-name.json
│   │   │   ├── svg-img-alt/
│   │   │   │   ├── svg-img-alt.html
│   │   │   │   └── svg-img-alt.json
│   │   │   ├── tabindex/
│   │   │   │   ├── tabindex.html
│   │   │   │   └── tabindex.json
│   │   │   ├── table-duplicate-name/
│   │   │   │   ├── table-duplicate-name.html
│   │   │   │   └── table-duplicate-name.json
│   │   │   ├── table-fake-caption/
│   │   │   │   ├── table-fake-caption.html
│   │   │   │   └── table-fake-caption.json
│   │   │   ├── target-size/
│   │   │   │   ├── target-size.html
│   │   │   │   └── target-size.json
│   │   │   ├── td-has-header/
│   │   │   │   ├── td-has-header.html
│   │   │   │   └── td-has-header.json
│   │   │   ├── td-headers-attr/
│   │   │   │   ├── td-headers-attr.html
│   │   │   │   └── td-headers-attr.json
│   │   │   ├── th-has-data-cells/
│   │   │   │   ├── th-has-data-cells.html
│   │   │   │   └── th-has-data-cells.json
│   │   │   ├── valid-lang/
│   │   │   │   ├── valid-lang.html
│   │   │   │   └── valid-lang.json
│   │   │   └── video-caption/
│   │   │       ├── video-caption.html
│   │   │       └── video-caption.json
│   │   └── virtual-rules/
│   │       ├── area-alt.js
│   │       ├── aria-allowed-attr.js
│   │       ├── aria-allowed-role.js
│   │       ├── aria-braille-equivalent.js
│   │       ├── aria-command-name.js
│   │       ├── aria-conditional-attr.js
│   │       ├── aria-dialog-name.js
│   │       ├── aria-input-field-name.js
│   │       ├── aria-meter-name.js
│   │       ├── aria-progressbar-name.js
│   │       ├── aria-prohibited-attr.js
│   │       ├── aria-required-attr.js
│   │       ├── aria-roledescription.js
│   │       ├── aria-roles.js
│   │       ├── aria-tab-name.js
│   │       ├── aria-text.js
│   │       ├── aria-toggle-field-name.js
│   │       ├── aria-tooltip-name.js
│   │       ├── aria-treeitem-name.js
│   │       ├── aria-valid-attr-value.js
│   │       ├── aria-valid-attr.js
│   │       ├── autocomplete-valid.js
│   │       ├── button-name.js
│   │       ├── definition-list.js
│   │       ├── empty-heading.js
│   │       ├── empty-table-header.js
│   │       ├── frame-title.js
│   │       ├── html-has-lang.js
│   │       ├── html-lang-valid.js
│   │       ├── image-alt.js
│   │       ├── input-button-name.js
│   │       ├── input-image-alt.js
│   │       ├── label.js
│   │       ├── link-name.js
│   │       ├── list.js
│   │       ├── meta-refresh-no-exceptions.js
│   │       ├── meta-refresh.js
│   │       ├── meta-viewport.js
│   │       ├── nested-interactive.js
│   │       ├── object-alt.js
│   │       ├── presentation-role-conflict.js
│   │       ├── role-img-alt.js
│   │       ├── select-name.js
│   │       ├── summary-name.js
│   │       ├── svg-img-alt.js
│   │       ├── tabindex.js
│   │       ├── table-duplicate-name.js
│   │       └── valid-lang.js
│   ├── karma.conf.js
│   ├── mock/
│   │   └── frames/
│   │       ├── context.html
│   │       ├── e2e.html
│   │       ├── frame-frame.html
│   │       ├── frame1.html
│   │       ├── nested0.html
│   │       ├── nested1.html
│   │       ├── nested2.html
│   │       ├── noHtml-config.html
│   │       ├── nocode.html
│   │       ├── results-timeout.html
│   │       ├── rule-error.html
│   │       ├── test.html
│   │       ├── throwing.html
│   │       ├── with-echo-axe.html
│   │       ├── with-echo.html
│   │       └── zombie-frame.html
│   ├── node/
│   │   ├── jsdom.js
│   │   ├── node.js
│   │   └── package.json
│   ├── playground.html
│   ├── rule-matches/
│   │   ├── aria-allowed-attr-matches.js
│   │   ├── aria-allowed-role-matches.js
│   │   ├── aria-has-attr-matches.js
│   │   ├── aria-hidden-focus-matches.js
│   │   ├── aria-required-children-matches.js
│   │   ├── aria-required-parent-matches.js
│   │   ├── autocomplete-matches.js
│   │   ├── color-contrast-matches.js
│   │   ├── data-table-matches.js
│   │   ├── duplicate-id-active-matches.js
│   │   ├── duplicate-id-aria-matches.js
│   │   ├── duplicate-id-misc-matches.js
│   │   ├── frame-focusable-content-matches.js
│   │   ├── frame-title-has-text-matches.js
│   │   ├── has-implicit-chromium-role-matches.js
│   │   ├── heading-matches.js
│   │   ├── html-namespace-matches.js
│   │   ├── html-xml-lang-mismatch.js
│   │   ├── identical-links-same-purpose-matches.js
│   │   ├── inserted-into-focus-order-matches.js
│   │   ├── is-initiator-matches.js
│   │   ├── is-visible-matches.js
│   │   ├── is-visible-on-screen-matches.js
│   │   ├── label-content-name-mismatch-matches.js
│   │   ├── label-matches.js
│   │   ├── landmark-has-body-context.js
│   │   ├── landmark-unique-matches.js
│   │   ├── layout-table-matches.js
│   │   ├── link-in-text-block-matches.js
│   │   ├── nested-interactive-matches.js
│   │   ├── no-autoplay-audio-matches.js
│   │   ├── no-empty-role-matches.js
│   │   ├── no-explicit-name-required-matches.js
│   │   ├── no-naming-method-matches.js
│   │   ├── no-negative-tabindex.js
│   │   ├── no-role-matches.js
│   │   ├── object-is-loaded-matches.js
│   │   ├── p-as-heading-matches.js
│   │   ├── scrollable-region-focusable-matches.js
│   │   ├── skip-link-matches.js
│   │   ├── summary-interactive-matches.js
│   │   ├── svg-namespace-matches.js
│   │   ├── table-or-grid-role-matches.js
│   │   └── widget-not-inline-matches.js
│   ├── test-locales.js
│   ├── test-rule-help-version.js
│   ├── test-virtual-rules.js
│   └── testutils.js
├── tsconfig.json
└── typings/
    └── axe-core/
        └── axe-core-tests.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc
================================================
{
  "presets": ["@babel/preset-env"],
  "plugins": [
    [
      "@babel/plugin-proposal-object-rest-spread",
      {
        "loose": true
      }
    ]
  ]
}


================================================
FILE: .editorconfig
================================================
# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_style = tab
trim_trailing_whitespace = true

[*.json]
indent_style = space
indent_size = 2

[*.yml]
indent_style = space
indent_size = 2

[*.md]
indent_style = space
indent_size = 2


================================================
FILE: .gitattributes
================================================
.npmignore merge=ours


================================================
FILE: .github/CODEOWNERS
================================================
# Reference - https://help.github.com/articles/about-code-owners/

# Complete repo
* @dequelabs/axe-codeowners

# Localisation
locales/ja.json @mlca11y/mlca11y @dequelabs/axe-codeowners


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
contact_links:
  - name: Join the axe Slack Community
    url: https://accessibility.deque.com/axe-community
    about: Connect with other people passionate about digital accessibility and axe tools.


================================================
FILE: .github/ISSUE_TEMPLATE/documentation.yml
================================================
name: Improve our documentation
description: Report issues in our documentation or things we could document better.
labels: ['docs', 'ungroomed']
body:
  - type: markdown
    attributes:
      value: |
        Documentation reports can be made for axe-core, [axe Extension](https://www.deque.com/axe/browser-extensions/), and [axe Linter](https://marketplace.visualstudio.com/items?itemName=deque-systems.vscode-axe-linter). If you have a documentation report for one of our npm integrations (e.g. `@axe-core/webdriverjs`), please open an issue in https://github.com/dequelabs/axe-core-npm.
  - type: dropdown
    id: product
    attributes:
      label: Product
      description: Which product is the documentation report for?
      options:
        - axe-core
        - axe Extension
        - axe Linter
    validations:
      required: true
  - type: textarea
    id: description
    attributes:
      label: Description
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: Request a feature
description: Request an enhancement, improvement, or new rule.
labels: ['feat', 'ungroomed']
body:
  - type: markdown
    attributes:
      value: |
        Feature requests can be made for axe-core, [axe Extension](https://www.deque.com/axe/browser-extensions/), and [axe Linter](https://marketplace.visualstudio.com/items?itemName=deque-systems.vscode-axe-linter). If you have a feature request for one of our npm integrations (e.g. `@axe-core/webdriverjs`), please open an issue in https://github.com/dequelabs/axe-core-npm.
  - type: dropdown
    id: product
    attributes:
      label: Product
      description: Which product is the feature for?
      options:
        - axe-core
        - axe Extension
        - axe Linter
    validations:
      required: true
  - type: textarea
    id: description
    attributes:
      label: Feature Description
      description: What do you wish the product did? If the feature is about adding a new rule to axe-core, please follow our [rule template](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-proposal.md).
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/possible-bug.yml
================================================
name: Report an issue
description: Report a bug or an issue that you've encountered.
labels: ['ungroomed']
body:
  - type: markdown
    attributes:
      value: |
        Thanks for reporting an issue to one of our products. Please provide all necessary information to reproduce the issue. Without adequate details, your issue may be closed without investigation.

        Issues can be reported for axe-core, [axe Extension](https://www.deque.com/axe/browser-extensions/), and [axe Linter](https://marketplace.visualstudio.com/items?itemName=deque-systems.vscode-axe-linter). If you're having an issue with one of our npm integrations (e.g. `@axe-core/webdriverjs`), please open an issue in https://github.com/dequelabs/axe-core-npm.
  - type: dropdown
    id: product
    attributes:
      label: Product
      description: Which product did you encounter the issue?
      options:
        - axe-core
        - axe Extension
        - axe Linter
    validations:
      required: true
  - type: input
    id: version
    attributes:
      label: Product Version
      description: For axe-core use `axe.version`. For axe Extension go to the settings screen in the extension. For axe Linter look at the installed extension list for the version.
  - type: checkboxes
    id: latest-axe
    attributes:
      label: Latest Version
      options:
        - label: I have tested the issue with the latest version of the product
          required: true
  - type: textarea
    id: description
    attributes:
      label: Issue Description
      description: Please include a description of the issue and a page or code snippet where it can be reproduced.
      value: |
        #### Expectation
        Describe what you expected the product to do.

        #### Actual
        Describe what the product actually does.

        #### How to Reproduce
        Provide a code sample or link to a webpage that reproduces the issue. Without this, your issue may be closed without investigation.

        #### Additional context
        Any thing else we should know about the issue?
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/question.yaml
================================================
name: Ask a question
description: General questions for us, the product, or why things are the way they are.
labels: ['question', 'ungroomed']
body:
  - type: markdown
    attributes:
      value: |
        Questions can be asked for axe-core, [axe Extension](https://www.deque.com/axe/browser-extensions/), and [axe Linter](https://marketplace.visualstudio.com/items?itemName=deque-systems.vscode-axe-linter). If you have a question about one of our npm integrations (e.g. `@axe-core/webdriverjs`), please open an issue in https://github.com/dequelabs/axe-core-npm.
  - type: dropdown
    id: product
    attributes:
      label: Product
      description: Which product is the question for?
      options:
        - axe-core
        - axe Extension
        - axe Linter
    validations:
      required: true
  - type: textarea
    id: question
    attributes:
      label: Question
    validations:
      required: true


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<< Describe the changes >>

Closes:


================================================
FILE: .github/actions/install-deps/action.yml
================================================
name: 'Install Dependencies'
description: 'Install OS and Project dependencies'

inputs:
  node-version:
    description: 'Node.js version to install'
    required: false
  start-xvfb:
    description: 'If provided, this is the display number to run xvfb on. Should be in `:N` format, e.g., `:99`.'
    required: false
  nightly:
    description: 'If true, installs the nightly versions of browsers.'
    required: false
outputs:
  chrome-path:
    description: 'Path to the installed Chrome binary'
    value: ${{ steps.setup-chrome.outputs.chrome-path }}
  firefox-path:
    description: 'Path to the installed Firefox binary'
    value: ${{ steps.setup-firefox.outputs.firefox-path }}
  chromedriver-path:
    description: 'Path to the installed ChromeDriver binary'
    value: ${{ steps.setup-chrome.outputs.chromedriver-path }}
  chrome-version:
    description: 'Version of the installed Chrome binary'
    value: ${{ steps.setup-chrome.outputs.chrome-version }}
  chromedriver-version:
    description: 'Version of the installed ChromeDriver binary'
    value: ${{ steps.setup-chrome.outputs.chromedriver-version }}
  firefox-version:
    description: 'Version of the installed Firefox binary'
    value: ${{ steps.setup-firefox.outputs.firefox-version }}

runs:
  using: 'composite'
  steps:
    - name: Setup Node.js
      uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
      with:
        registry-url: 'https://registry.npmjs.org'
        node-version: ${{ inputs.node-version }}
        node-version-file: ${{ inputs.node-version == '' && '.nvmrc' || '' }}
        cache: npm
    - name: Fix Chrome Sandbox Permissions
      shell: bash
      run: |
        sudo chown root:root /opt/google/chrome/chrome-sandbox
        sudo chmod 4755 /opt/google/chrome/chrome-sandbox
    - name: Install Xvfb
      shell: bash
      if: ${{ inputs.start-xvfb }}
      run: |
        sudo apt-get update
        sudo apt-get install -y xvfb x11-xserver-utils
    - name: Install Google Chrome for Testing
      id: setup-chrome
      uses: browser-actions/setup-chrome@b94431e051d1c52dcbe9a7092a4f10f827795416 # v2.1.0
      with:
        # @see https://github.com/dequelabs/axe-core/issues/5027
        chrome-version: ${{ inputs.nightly == 'true' && 'beta' || 145 }}
        install-chromedriver: true
        install-dependencies: true
    - name: Install Firefox
      id: setup-firefox
      uses: browser-actions/setup-firefox@5914774dda97099441f02628f8d46411fcfbd208 # v1.7.0
      with:
        firefox-version: ${{ inputs.nightly == 'true' && 'latest-nightly' || 'latest' }}
    - name: Install Project Dependencies
      shell: bash
      run: npm ci
    - name: Start Xvfb
      if: ${{ inputs.start-xvfb }}
      env:
        DISPLAY: ${{ inputs.start-xvfb }}
      shell: bash
      # This is the same resolution as what CircleCI used.
      # Maintaining it for consistency between the environments
      # since something may be resolution dependent.
      run: Xvfb "$DISPLAY" -screen 0 1280x1024x24 &


================================================
FILE: .github/axe-linter.yml
================================================
exclude:
  - CHANGELOG.md
  - test/**/*


================================================
FILE: .github/bin/determine-version.sh
================================================
#!/usr/bin/env bash

set -eo pipefail

echo "::group::Determining new prerelease version"

NAME=$(npm pkg get name | tr -d '"')
LATEST_VERSION=$(npm pkg get version | tr -d '"')

SHORT_SHA=$(echo "${GITHUB_SHA}" | cut -c1-7)
NEW_VERSION="$LATEST_VERSION-canary.${SHORT_SHA}"

echo "Latest version in package.json: $LATEST_VERSION"
echo "New prerelease version: $NEW_VERSION"

echo "version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
echo "name=$NAME" >> "$GITHUB_OUTPUT"

echo "::endgroup::"


================================================
FILE: .github/bin/validate-npm-deploy.sh
================================================
#!/usr/bin/env bash

set -eo pipefail

if [ -z "$PACKAGE_NAME" ] || [ -z "$VERSION" ]; then
  echo "::error::PACKAGE_NAME and VERSION environment variables must be set."
  exit 1
fi

NPM_ROOT_PATH=$(npm root -g)

npm install -g "${PACKAGE_NAME}@${VERSION}" || {
  echo "::error::✗ Failed to install package: ${PACKAGE_NAME}@${VERSION}"
  exit 1
}

cd "$NPM_ROOT_PATH" || {
  echo "::error::✗ Failed to change directory to global npm root: $NPM_ROOT_PATH"
  exit 1
}

node -pe "window={}; document={}; require('${PACKAGE_NAME}');" || {
  echo "::error::✗ Failed to import CommonJS module for package: ${PACKAGE_NAME}"
  exit 1
}

cd "${NPM_ROOT_PATH}/${PACKAGE_NAME}" || {
  echo "::error::✗ Failed to change directory to package path: ${NPM_ROOT_PATH}/${PACKAGE_NAME}"
  exit 1
}

types=$(node -pe "require('./package.json').types")
if [ "$types" == "undefined" ]
then
  types=$(node -pe "require('./package.json').typings")
fi
if [ "$types" != "undefined" ] && [ ! -f "$types" ]
then
  echo "::error::The types file is missing"
  exit 1;
fi
echo "Types file '$types' is present in the package"


================================================
FILE: .github/bin/validate-package.mjs
================================================
#!/usr/bin/env node

/**
 * @fileoverview Validates the package before publishing.
 * This script performs several checks to ensure the package
 * is correctly set up, including:
 * - Verifying the existence of files listed in `package.json`'s `files` array.
 * - Ensuring the package can be imported using both ESM `import` and CommonJS `require()`.
 * - Validating Subresource Integrity (SRI) hashes for the built files.
 *
 * The script generates a summary report compatible with
 * GitHub Actions, providing detailed feedback on each
 * validation step.
 *
 * Running this script locally has a few implications to be
 * aware of:
 * 1. It links and unlinks the package globally. So this
 * could impact other workspaces where current links are used.
 * 2. To test the step summary, set the `GITHUB_STEP_SUMMARY`
 * environment variable to a file path. If this file does not
 * exist, it will be created.
 */

import { resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
import { createRequire } from 'node:module';
import { access, appendFile, readFile } from 'node:fs/promises';
import { execSync } from 'node:child_process';
import pkg from '../../package.json' with { type: 'json' };

const isDebug = process.env.DEBUG === 'true';
const repoRoot = resolve(import.meta.dirname, '..', '..');
/**
 * Start the exit code at 0 for a successful run. If any checks
 * fail, we increment by 1 for each failure. When every check is done,
 * we exit with the final exit code.
 *
 * This means our exit code informs us of how many failures happened.
 *
 * For anyone unfamiliar with exit codes in shell programs,
 * an exit code of `0` means success, and any non-zero exit code
 * means failure.
 *
 * Special note as well, in theory this _could_ go above `255`,
 * causing the actual exit code to wrap around back to `0` and
 * keep counting. But, if we have that many checks in here down
 * the road then all the validation will need a major refactor.
 */
let exitCode = 0;
const missing = [];
const summaryFile = process.env.GITHUB_STEP_SUMMARY;
let summary = `# Package Validation

<dl>
  <dt>Package Name</dt>
  <dd>${pkg.name}</dd>
  <dt>Package Version</dt>
  <dd>${pkg.version}</dd>
  <dt>License</dt>
  <dd>${pkg.license}</dd>
</dl>

`;

console.group('Package Information');
console.log('Name:', pkg.name);
console.log('Version:', pkg.version);
console.log('License:', pkg.license);
console.groupEnd();

/**
 * Checks if a file or folder exists on the filesystem.
 *
 * @param {string} path - The path to check (relative to repo root)
 * @returns {Promise<boolean>} True if the path exists, false otherwise
 */
const exists = async path => {
  const absolutePath = resolve(repoRoot, path);
  try {
    await access(absolutePath);
    return true;
  } catch {
    return false;
  }
};

/**
 * Appends text to the GitHub Actions step summary file if it
 * exists. This is mostly useful for local testing where the
 * summary file may not be set. However if we want to set it
 * for testing, we can.
 *
 * Since we build the summary in chunks, this function
 * appends the current summary and then clears it for the
 * next section.
 *
 * @param {string} text - The text to append to the summary file
 * @returns {Promise<void>}
 */
const appendToSummaryFile = async text => {
  if (summaryFile) {
    await appendFile(summaryFile, text);
    summary = '';
  }
};

/**
 * Verifies that all files and folders listed in the `files`
 * array of `package.json` exist in the repository.
 */
const fileExistenceCheck = async () => {
  summary += `
\n## File Existence Check

The following results table shows the status of files and folders
listed in the \`files\` array of \`package.json\`.

> [!NOTE]
> This check only validates the existence of files and folders
> defined. It does not validate the contents. Thus a folder
> could exist but be empty and still pass this check. Or
> a file could exist but have incorrect syntax.

| File | Status |\n|------|--------|
`;

  console.log('Checking for existence of package files:');

  for (const file of pkg.files) {
    if (await exists(file)) {
      console.info(`✓ ${file}`);
      summary += `| \`${file}\` | ✓ Found |\n`;
    } else {
      console.error(`✗ ${file}`);
      summary += `| \`${file}\` | ✗ Missing |\n`;
      missing.push(file);
    }
  }

  await appendToSummaryFile(summary);

  if (missing.length > 0) {
    await appendToSummaryFile(
      `\n**ERROR: Missing files: ${missing.join(', ')}**\n`
    );
    console.error(`::error::Missing files: ${missing.join(', ')}`);
    exitCode++;
  }
};

/**
 * Validates that the main package file can be loaded via
 * CommonJS require. This ensures backward compatibility
 * for projects using CommonJS.
 */
const validateCommonJS = async () => {
  summary += `\n## CommonJS Compatibility Check

This check validates that the main package file can be loaded
using CommonJS \`require()\`, ensuring backward compatibility.

| File | Status | Version |\n|------|--------|--------|
`;

  const require = createRequire(import.meta.url);

  console.log('Validating CommonJS compatibility:');

  try {
    const axe = require(`${pkg.name}`);

    if (!axe || typeof axe !== 'object') {
      throw new Error('Module did not export an object');
    }

    if (!axe.version) {
      throw new Error('Missing version property');
    }

    console.info(`✓ ${pkg.name} (CommonJS)`);
    summary += `| \`${pkg.name}\` | ✓ CommonJS Compatible | ${axe.version} |\n`;
  } catch (error) {
    console.error(`✗ ${pkg.name} (CommonJS):`, error.message);
    summary += `| \`${pkg.name}\` | ✗ CommonJS Failed | Not Found |\n`;
    summary += `\n\`\`\`\n${error.message}\n\`\`\`\n`;
    exitCode++;
  }

  await appendToSummaryFile(summary);
};

/**
 * Validates that the package and all files listed in the
 * `files` array of `package.json` can be imported using
 * ESM `import` statements.
 */
const validateImportable = async () => {
  summary += `\n## Importable Check

This check attempts to import the package. As well as all
defined files in the \`files\` array of \`package.json\`.

> [!NOTE]
> This check fails anything that resolves to \`node_modules\`,
> this is because \`axe-core\` should be linked before
> this is called. When \`exports\` can be added to the
> package definition, then we can self reference imports and
> the link will no longer be required.

| File | Status | Version |\n|------|--------|--------|
`;

  const importTargets = [...pkg.files.map(file => `${pkg.name}/${file}`)];
  let anyCaught = false;

  console.log('Validating package files are importable:');

  try {
    const axe = await import(pkg.name);
    console.info(`✓ ${pkg.name}`);

    if (!axe.default?.version) {
      throw new Error('Missing version property');
    }

    summary += `| \`${pkg.name}\` | ✓ Importable | ${axe.default.version} |\n`;
  } catch {
    console.error(`✗ ${pkg.name}`);
    summary += `| \`${pkg.name}\` | ✗ Not Importable | Not Found |\n`;
    anyCaught = true;
  }

  for (const target of importTargets) {
    // Skip things that can't be imported directly
    // One day we can hopefully import anything as bytes to validate.
    // Ref: https://github.com/tc39/proposal-import-bytes
    if (
      target.endsWith('.txt') ||
      target.endsWith('/') ||
      target.endsWith('.d.ts')
    ) {
      continue;
    }

    // `import.meta.resolve` is used here to determine
    // where the import would be resolved from, following
    // any symlinks. Since this package is linked, it
    // should never have `node_modules` in the resolved
    // path. It *could* happen if a dev is writing code
    // within a parent folder named as such, but that is
    // unsafe anyways.
    // -------------------------------------------------
    // If this is ever setup to run in the post-deploy
    // test, then this will cause issues as that runs
    // from this folder specifically.
    if (import.meta.resolve(target).includes('node_modules')) {
      exitCode++;
      summary += `| \`${target}\` | ✗ Resolves to node_modules |\n`;
      console.error(`✗ ${target} resolves to node_modules`);
      continue;
    }

    try {
      let version = '';
      if (target.endsWith('.json')) {
        const data = await import(target, { with: { type: 'json' } });
        version = Object.keys(data.default).at(-1);
      } else {
        const axe = await import(target);

        if (!axe.default?.version) {
          throw new Error('Missing version property');
        }

        version = axe.default.version;
      }
      console.info(`✓ ${target}`);
      summary += `| \`${target}\` | ✓ Importable | ${version} |\n`;
    } catch (error) {
      console.error(`✗ ${target}`);
      summary += `| \`${target}\` | ✗ Not Importable | Not Found |\n`;
      summary += `\n\`\`\`\n${error.message}\n\`\`\`\n`;
      anyCaught = true;
    }
  }

  if (anyCaught) {
    exitCode++;
  }

  await appendToSummaryFile(summary);
};

/**
 * When a PR targets `master` or a `release-*` branch,
 * or these branches are pushed to, we run SRI validation.
 * Otherwise, it is skipped since the SRI hashes are only
 * updated when releasing.
 *
 * The history file is deprecated. However, until it is removed
 * we should be prudent and continue to validate it.
 */
const validateSriHashes = async () => {
  const currentBranch =
    process.env.GITHUB_REF_NAME || process.env.GITHUB_HEAD_REF || '';

  if (!/^release-.+/.test(currentBranch) && currentBranch !== 'master') {
    console.log(`Skipping SRI validation (current branch: ${currentBranch})`);
    return;
  }

  summary += `\n## Subresource Integrity Check

This check validates the current build against the SRI hash
for the version defined in \`sri-history.json\`.

| File | Status |
|------|--------|
`;

  const sriHistory = await import(`${pkg.name}/sri-history.json`, {
    with: { type: 'json' }
  });
  const expectedSri = sriHistory.default[pkg.version];
  // calculate the SRI hash for `axe.js` and `axe.min.js`
  // Using `sri-toolbox` as that is what is used in the build process
  const { generate } = await import('sri-toolbox');

  const filesToCheck = [
    {
      name: 'axe.js',
      path: fileURLToPath(import.meta.resolve(`${pkg.name}/axe.js`))
    },
    {
      name: 'axe.min.js',
      path: fileURLToPath(import.meta.resolve(`${pkg.name}/axe.min.js`))
    }
  ];
  const mismatches = [];

  for (const file of filesToCheck) {
    const calculatedSri = generate(
      { algorithms: ['sha256'] },
      await readFile(file.path)
    );

    console.log(`Expected SRI for ${file.name}:`, expectedSri[file.name]);
    console.log(`Calculated SRI for ${file.name}:`, calculatedSri);
    if (calculatedSri !== expectedSri[file.name]) {
      console.error(`✗ ${file.name}`);
      summary += `| \`${file.name}\` | ✗ Invalid SRI |\n`;
      mismatches.push({
        name: file.name,
        expected: expectedSri[file.name],
        calculated: calculatedSri
      });
      continue;
    }

    console.info(`✓ ${file.name}`);
    summary += `| \`${file.name}\` | ✓ Valid SRI |\n`;
  }

  if (mismatches.length > 0) {
    summary += `\n### SRI Mismatches\n\n`;

    for (const mismatch of mismatches) {
      summary += `**${mismatch.name}:**\n`;
      summary += `- Expected: \`${mismatch.expected}\`\n`;
      summary += `- Calculated: \`${mismatch.calculated}\`\n\n`;
    }

    exitCode++;
  }

  await appendToSummaryFile(summary);
};

// Start running checks that don't require linking first.
await fileExistenceCheck();

/**
 * @type {import('child_process').ExecSyncOptionsWithBufferEncoding}
 */
const execOptions = {
  cwd: repoRoot,
  stdio: isDebug ? 'inherit' : 'pipe',
  timeout: 200000
};

console.log('Creating npm link for package validation...');

try {
  // Link the package globally, then update the package
  // internally to use the linked version.
  // This is needed because we don't have `exports` defined
  // yet, so self referencing imports won't work.
  // We also have a circular dependency on the package.
  // That means if we try to resolve the import without
  // linking, it will resolve the version in `node_modules`
  // from npm.
  execSync('npm link', execOptions);
  execSync(`npm link ${pkg.name}`, execOptions);

  // Run any checks that require the package to reference itself.
  await validateCommonJS();
  await validateImportable();
  await validateSriHashes();
} catch (error) {
  console.error('Failed to create npm link:', error.message);
  await appendToSummaryFile(`
    ## Failed to create npm link

    <details><summary>Click to expand error details</summary>

    \n\`\`\`\n${error.message}\n\`\`\`\n

    </details>

    This failure prevented running critical validation checks.
    Therefore the entire validation has failed.
  `);
  console.error(`Failed to create npm link: ${error.message}`);
  exitCode++;
}

console.log('Removing npm link...');
try {
  execSync(`npm unlink ${pkg.name}`, execOptions);
  execSync('npm unlink -g', execOptions);
} catch (error) {
  // Not a hard failure if unlinking fails since all these
  // checks are last. As long as they completed fine,
  // validation is acceptable.
  // This is more for when running locally to test if
  // something goes wrong. As the developer's machine state
  // is impacted and they need to know about it.
  console.error('Failed to remove npm link:', error.message);
}

process.exit(exitCode);


================================================
FILE: .github/bin/wait-for-npm-ready.sh
================================================
#!/usr/bin/env bash

set -eo pipefail

if [ -z "$VERSION" ] || [ -z "$PACKAGE_NAME" ]; then
  echo "✗ ERROR: VERSION and PACKAGE_NAME environment variables must be set."
  exit 1
fi

SLEEP_SECONDS=${SLEEP_SECONDS:-10}
MAX_ATTEMPTS=${MAX_ATTEMPTS:-30}

echo "::group::Waiting for ${PACKAGE_NAME}@${VERSION} to be available on npm registry..."

for i in $(seq 1 "$MAX_ATTEMPTS"); do
  echo "Attempt $i of $MAX_ATTEMPTS..."

  if npm view "${PACKAGE_NAME}@${VERSION}" version > /dev/null 2>&1; then
    PUBLISHED_VERSION=$(npm view "${PACKAGE_NAME}@${VERSION}" version)
    echo "✓ Package ${PACKAGE_NAME}@${PUBLISHED_VERSION} is now available on npm!"
    echo "::endgroup::"
    exit 0
  fi

  if [ "$i" -lt "$MAX_ATTEMPTS" ]; then
    echo "Package not yet available, waiting ${SLEEP_SECONDS} seconds..."
    sleep "$SLEEP_SECONDS"
  fi
done

echo "✗ Timeout: Package ${PACKAGE_NAME}@${VERSION} not available after $((MAX_ATTEMPTS * SLEEP_SECONDS)) seconds"
echo "::endgroup::"

exit 1


================================================
FILE: .github/bin/wait-for-workflow-success.sh
================================================
#!/usr/bin/env bash

# This script waits for a specified GitHub Actions workflow to complete successfully.
# Debug mode can be enabled by setting the DEBUG environment variable to "true".
# Exit codes are as follows:
# 0 - Workflow completed successfully
# 1 - Workflow completed with failure
# 2 - Missing required tools on the host system
# 3 - Missing required environment variables for configuration
# 20 - Timeout waiting for workflow to complete

set -eo pipefail

if ! command -v jq &> /dev/null; then
  echo "::error::jq is not installed. Please install jq to use this script."
  exit 2
fi

if ! command -v gh &> /dev/null; then
  echo "::error::GitHub CLI (gh) is not installed. Please install gh to use this script."
  exit 2
fi

if [ -z "$REPOSITORY" ]; then
  echo "::error::REPOSITORY environment variable must be set."
  exit 3
fi

if [ -z "$SHA" ]; then
  echo "::error::SHA environment variable must be set."
  exit 3
fi

if [ -z "$WORKFLOW_NAME" ]; then
  echo "::error::WORKFLOW_NAME environment variable must be set."
  exit 3
fi

if [ -z "$BRANCH" ]; then
  echo "::error::BRANCH environment variable must be set."
  exit 3
fi

# When running locally for testing, this might be forgotten to get set.
# Create a temp file just so there is something to write to that will get thrown away.
if [ -z "$GITHUB_STEP_SUMMARY" ]; then
  GITHUB_STEP_SUMMARY=$(mktemp)
fi

echo "Waiting for '$WORKFLOW_NAME' workflow to complete for commit $SHA"

# If not provided, default to 5 minutes for the job runner to time out.
TIMEOUT_MINUTES=${TIMEOUT_MINUTES:-5}
# Round down if given a fractional number by just removing the decimal portion.
TIMEOUT_MINUTES=${TIMEOUT_MINUTES%.*}
sleep_seconds=30
max_attempts=$(( (TIMEOUT_MINUTES * 60) / sleep_seconds ))
attempt=0

# We *could* do `status=success` as a query parameter. But then we lose visibility
# into "in-progress" for debugging purposes to at least know if it found a run
# while waiting.
# Ref: https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-repository
api_url="repos/$REPOSITORY/actions/runs?head_sha=$SHA&branch=$BRANCH&exclude_pull_requests=true&event=push"

# This jq filter can seem complicated. So here is the breakdown:
# 1. `.workflow_runs` - Get the array of workflow runs from the API response
# 2. `sort_by(.created_at) | reverse` - Sort the runs by creation date in descending order. Since the API has no guaranteed order.
# 3. `[.[] | select(.name == "'"$WORKFLOW_NAME"'")][0]` - Filter the runs to only include those with the specified workflow name. Then take the first one (most recent)
# 4. `{status: .status, conclusion: .conclusion}` - Extract only the status and conclusion fields. Since we know this is the most recent run, we only care about these fields later.
# 5. `select(. != null)` - Ensure that we only get a result if there is a matching workflow run
jq_filter='.workflow_runs | sort_by(.created_at) | reverse | [.[] | select(.name == "'"$WORKFLOW_NAME"'")][0] | {status: .status, conclusion: .conclusion} | select(. != null)'

cat >> "$GITHUB_STEP_SUMMARY" <<EOF
# Wait for Workflow Success

## Config Data

### Environment Inputs

* Repository: \`$REPOSITORY\`
* Commit SHA: \`$SHA\`
* Branch: \`$BRANCH\`
* Workflow Name: \`$WORKFLOW_NAME\`
* Debug Mode: \`${DEBUG:-false}\`
* Timeout Minutes: \`$TIMEOUT_MINUTES\`

### Internal Configuration

* Sleep Seconds: \`$sleep_seconds\`
* Max Attempts: \`$max_attempts\`

### API Input

* API URL: \`$api_url\`
* JQ Filter: \`$jq_filter\`

EOF

if [ "$DEBUG" = "true" ]; then
  log_output=$(mktemp)
else
  log_output="/dev/null"
fi

# Logs API errors to the summary if debug is enabled.
function writeLogToSummary() {
  if [ "$DEBUG" != "true" ]; then
    return
  fi

  {
    echo ""
    echo "## GH API Error Log"
    echo ""
    if [ ! -s "$log_output" ]; then
      echo "No errors captured."
    else
      echo '```'
      cat "$log_output"
      echo '```'
    fi
    echo ""
  } >> "$GITHUB_STEP_SUMMARY"
}

while [ "$attempt" -lt "$max_attempts" ]; do
  # Redirect errors to /dev/null to avoid unusable data in the variable in case of failure.
  # If we seem to be having issues in CI later, it would be valuable to setup debugging to log to $GITHUB_STEP_SUMMARY.
  workflow_data=$(gh api "$api_url" --jq "$jq_filter" 2>"$log_output" || echo "")

  if [ -z "$workflow_data" ]; then
    echo "Attempt $((attempt + 1))/$max_attempts - Workflow run not found yet"
  else
    status=$(echo "$workflow_data" | jq -r '.status')
    conclusion=$(echo "$workflow_data" | jq -r '.conclusion')

    echo "Attempt $((attempt + 1))/$max_attempts - Status: $status, Conclusion: $conclusion"

    if [ "$status" = "completed" ]; then
      # Write the result to the summary file
      function writeResultToSummary() {
        cat >> "$GITHUB_STEP_SUMMARY" <<EOF
## Result of workflow - $WORKFLOW_NAME

* Status: \`$status\`
* Conclusion: \`$conclusion\`

### API Details

* Total Attempts: \`$((attempt + 1))\`
* Time Elapsed: \`$(((attempt + 1) * sleep_seconds)) seconds\`
* Remaining allocated time: \`$(((max_attempts - attempt - 1) * sleep_seconds)) seconds\`

EOF
      }

      if [ "$conclusion" = "success" ]; then
        echo "'$WORKFLOW_NAME' workflow completed successfully!"
        writeResultToSummary
        writeLogToSummary
        exit 0
      else
        echo "::error::'$WORKFLOW_NAME' workflow completed with status: $conclusion"
        writeResultToSummary
        writeLogToSummary
        exit 1
      fi
    fi
  fi

  attempt=$((attempt + 1))
  sleep "$sleep_seconds"
done

cat >> "$GITHUB_STEP_SUMMARY" <<EOF
## Result of workflow - $WORKFLOW_NAME

The maximum number of attempts was reached without the workflow completing.
Therefore, the resolution could not be determined to proceed with deployment.

> [!TIP]
> Re-running this workflow with debug mode enabled will capture API error logs to help diagnose issues.

> [!WARNING]
> This can typically indicate that GitHub Action runners are experiencing delays.
> Please check the [GitHub Status Page](https://www.githubstatus.com/) for any ongoing incidents.
> If the status is normal, or if it already is, wait a little bit before re-running the workflow.

> [!CAUTION]
> If another commit is already deployed, then do *not* re-run this deployment workflow.
> Re-running this would cause an older commit to be the next tag.
> If multiple deployments are failed in a row, then re-run them sequentially as the incident is resolved.

EOF
writeLogToSummary

echo "::error::Timeout waiting for '$WORKFLOW_NAME' workflow to complete"
exit 20


================================================
FILE: .github/dependabot.yml
================================================
version: 2

updates:
  - package-ecosystem: 'github-actions'
    directory: '/'
    schedule:
      interval: 'monthly'
    open-pull-requests-limit: 10
    commit-message:
      prefix: 'chore'
    groups:
      # Any updates not caught by the group config will get individual PRs
      gha-low-risk:
        update-types:
          - 'minor'
          - 'patch'
    cooldown:
      default-days: 7

  - package-ecosystem: 'npm'
    directory: '/'
    schedule:
      interval: 'monthly'
    open-pull-requests-limit: 10
    commit-message:
      prefix: 'chore'
    ignore:
      # Prevent updates to ESM-only versions
      - dependency-name: 'chalk'
        versions: ['>=5.0.0']
      - dependency-name: 'execa'
        versions: ['>=6.0.0']
      - dependency-name: 'inquirer'
        versions: ['>=9.0.0']
      - dependency-name: 'chai'
        versions: ['>=5.0.0']
      - dependency-name: 'conventional-commits-parser'
        versions: ['>=6.0.0']
      # Prevent Webpack error caused by v0.11+ of esbuild
      # @see https://github.com/dequelabs/axe-core/issues/3771
      - dependency-name: 'esbuild'
        versions: ['>=0.11.0']
      # Prevent colorjs.io issue caused by >v0.4.3
      # @see https://github.com/dequelabs/axe-core/issues/4428
      - dependency-name: 'colorjs.io'
        versions: ['>0.4.3']
      # Still need to support node 18 in our tests
      - dependency-name: 'glob'
        versions: ['>=11.0.0']
      # Use node 4 types for backward compatibility
      - dependency-name: '@types/node'
        versions: ['>=5.0.0']
      # Breaking change that we need to handle in its own pr first
      # @see https://github.com/dequelabs/axe-core/pull/4264
      - dependency-name: 'css-selector-parser'
        versions: ['>=2.0.0']
    groups:
      # Any updates not caught by the group config will get individual PRs
      npm-low-risk:
        update-types:
          - 'minor'
          - 'patch'
    cooldown:
      default-days: 7


================================================
FILE: .github/review.yml
================================================
# Require that merge commits have security review performed on them.
review_merges: true

approve_button_tooltip: No security or PR title concerns
decline_button_tooltip: Found security or PR title concerns

pending_description: Pull request not yet approved for security and a correct PR title
pending_summary: >
  Awaiting security and PR title review. To approve this pull request, please click the "Approve" button above.
  You may **not** review your own Pull Request.

approved_description: Pull request has been reviewed and approved for security and a correct PR title
approved_summary: Pull request has been approved for security and having an incorrect PR title by @${approver}.

declined_description: Pull request contains security concerns or has an incorrect PR title
declined_summary: Commit was reviewed and declined for security and/or an incorrect PR title by @${approver}.


================================================
FILE: .github/workflows/deploy.yml
================================================
# Do not rename this file. The name "deploy.yml" is known to
# npm for trusted OIDC publishing.
name: Deploy

on:
  # Run on push and not `workflow_run` after tests finish.
  # Specifically because `workflow_run` only runs from the context
  # of the default branch, regardless of which branch triggered the tests.
  # That means no non-default branches could deploy.
  push:
    branches:
      - master
      - develop

concurrency:
  group: deploy/${{ github.ref_name }}
  cancel-in-progress: false

permissions:
  contents: read

jobs:
  # Since we can't run against `workflow_run`, we have to
  # wait for for the Tests to succeed first before any
  # processing can happen.
  wait-for-tests:
    name: Wait for Tests to Pass
    if: github.repository_owner == 'dequelabs'
    runs-on: ubuntu-24.04
    permissions:
      contents: read
      actions: read
      statuses: read
    timeout-minutes: 15
    steps:
      - &checkout
        name: Checkout repository
        timeout-minutes: 2
        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
        with:
          persist-credentials: false
      - name: Wait for Tests workflow to complete
        timeout-minutes: 13
        env:
          SHA: ${{ github.sha }}
          REPOSITORY: ${{ github.repository }}
          BRANCH: ${{ github.ref_name }}
          WORKFLOW_NAME: Tests
          DEBUG: ${{ runner.debug == '1' }}
          # One minute less than the job timeout to allow for the script to do cleanup work.
          TIMEOUT_MINUTES: 12
          GH_TOKEN: ${{ github.token }}
        run: ./.github/bin/wait-for-workflow-success.sh
  deploy-next:
    name: Deploy "next" to npm
    needs: wait-for-tests
    if: ${{ github.ref_name == 'develop' }}
    environment:
      name: registry.npmjs.org
    permissions:
      contents: read
      id-token: write # Required for OIDC
    runs-on: ubuntu-24.04
    outputs:
      version: ${{ steps.determine-version.outputs.version }}
      packageName: ${{ steps.determine-version.outputs.name }}
    steps:
      - *checkout
      - &setup-node
        name: Setup NodeJS
        uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
        with:
          registry-url: 'https://registry.npmjs.org'
          node-version-file: .nvmrc
          cache: npm
      - &install-project-deps
        name: Install Project Dependencies
        shell: bash
        run: npm ci
      - &build
        name: Build
        run: |
          npm run prepare
          npm run build
      - name: Determine prerelease version
        id: determine-version
        run: ./.github/bin/determine-version.sh
      - name: Bump version
        env:
          NEW_VERSION: ${{ steps.determine-version.outputs.version }}
        run: npm version "$NEW_VERSION" --no-git-tag-version --ignore-scripts
      - &validate-package
        name: Validate package is consumable
        env:
          # Ref: https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#runner-context
          # Linting shows this context might be invalid, but it shouldn't be per docs.
          # Probably something missing in the schema.
          DEBUG: ${{ runner.debug == '1' }}
        run: node .github/bin/validate-package.mjs
      - name: Publish "next" version to npm
        run: npm publish --tag=next
  validate-next-deploy:
    name: Validate Next Deployment
    needs: deploy-next
    runs-on: ubuntu-24.04
    steps:
      - *checkout
      - *setup-node
      # In theory since this is a new job now, by the time
      # this would kick off the package should be available.
      # But, to be safe in case of delays in propagation,
      # we'll implement a retry mechanism.
      - name: Wait for package to be available on npm
        env:
          VERSION: ${{ needs.deploy-next.outputs.version }}
          PACKAGE_NAME: ${{ needs.deploy-next.outputs.packageName }}
        run: ./.github/bin/wait-for-npm-ready.sh
      - name: Validate installation of "next" version
        env:
          PACKAGE_NAME: ${{ needs.deploy-next.outputs.packageName }}
          VERSION: ${{ needs.deploy-next.outputs.version }}
        run: ./.github/bin/validate-npm-deploy.sh
  prod-hold:
    name: Await approval to deploy to production
    needs: wait-for-tests
    if: ${{ github.ref_name == 'master' }}
    environment:
      name: production-hold
    runs-on: ubuntu-24.04
    steps:
      - name: Awaiting approval to deploy to production
        run: echo "Approval granted to proceed to production deployment."
  prod-deploy:
    name: Deploy stable to npm
    needs: prod-hold
    if: ${{ needs.prod-hold.result == 'success' }}
    environment:
      name: registry.npmjs.org
    permissions:
      contents: read
      id-token: write # Required for OIDC
    outputs:
      version: ${{ steps.get-data.outputs.version }}
      packageName: ${{ steps.get-data.outputs.name }}
    runs-on: ubuntu-24.04
    steps:
      - *checkout
      - *setup-node
      - *install-project-deps
      - *build
      - *validate-package
      - name: Publish stable version to npm
        run: npm publish
      - name: Get published package data
        id: get-data
        run: |
          VERSION=$(npm pkg get version | tr -d '"')
          NAME=$(npm pkg get name | tr -d '"')
          echo "version=$VERSION" >> $GITHUB_OUTPUT
          echo "name=$NAME" >> $GITHUB_OUTPUT
  create-github-release:
    name: Create GitHub Release
    needs: prod-deploy
    runs-on: ubuntu-24.04
    permissions:
      contents: write # Required to create releases
    steps:
      - *checkout
      - name: Install Release Helper
        run: go install gopkg.in/aktau/github-release.v0@latest
      - name: Download Release Script
        run: curl https://raw.githubusercontent.com/dequelabs/attest-release-scripts/develop/src/node-github-release.sh -s -o ./node-github-release.sh
      - name: Make Release Script Executable
        run: chmod +x ./node-github-release.sh
      - name: Create GitHub Release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: ./node-github-release.sh
  validate-deploy:
    name: Validate Deployment
    needs: prod-deploy
    runs-on: ubuntu-24.04
    steps:
      - *checkout
      - *setup-node
      # In theory since this is a new job now, by the time
      # this would kick off the package should be available.
      # But, to be safe in case of delays in propagation,
      # we'll implement a retry mechanism.
      - name: Wait for package to be available on npm
        env:
          VERSION: ${{ needs.prod-deploy.outputs.version }}
          PACKAGE_NAME: ${{ needs.prod-deploy.outputs.packageName }}
        run: ./.github/bin/wait-for-npm-ready.sh
      - name: Validate installation of stable version
        env:
          PACKAGE_NAME: ${{ needs.prod-deploy.outputs.packageName }}
          VERSION: ${{ needs.prod-deploy.outputs.version }}
        run: ./.github/bin/validate-npm-deploy.sh


================================================
FILE: .github/workflows/format.yml
================================================
name: Formatter

on:
  pull_request:
    branches:
      - develop

jobs:
  prettier:
    # This conditional prevents running the job on PRs from forks; won't
    # have permissions to commit changes, so the job would fail if it ran.
    # PRs from forks will instead rely on failing the fmt_check job in test.yml
    if: github.event.pull_request.head.repo.full_name == github.repository
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{ github.event.pull_request.head.ref }}
      - name: Install dependencies
        run: npm ci
      - uses: actions/setup-node@v6
        with:
          node-version-file: .nvmrc
          cache: 'npm'
      # Workflows are not allowed to edit workflows. As result, we need to prevent Prettier from formatting them.
      - name: Prevent workflows from being formatted
        run: echo ".github" >> .prettierignore && cat .prettierignore
      - run: npm run fmt
      # Prevent the prettierignore change from being committed.
      - run: git checkout .prettierignore
      - uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # tag=v5
        with:
          commit_message: ':robot: Automated formatting fixes'


================================================
FILE: .github/workflows/label-extension-linter-issues.yml
================================================
name: Add extension and linting labels to associated opened issues

on:
  issues:
    types: [opened]

jobs:
  label_extension_linting_issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write
    steps:
      - name: Label Extension Issues
        uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # tag=1
        if: contains(toJson(github.event.issue.body), '### Product\n\naxe Extension\n\n')
        with:
          add-labels: 'extension'
          repo-token: ${{ secrets.GITHUB_TOKEN }}
      - name: Label Linting Issues
        uses: andymckay/labeler@e6c4322d0397f3240f0e7e30a33b5c5df2d39e90 # tag=1
        if: contains(toJson(github.event.issue.body), '### Product\n\naxe Linter\n\n')
        with:
          add-labels: 'linting'
          repo-token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/nightly-tests.yml
================================================
name: Nightly Tests

on:
  schedule:
    # Runs every day at 2:17 AM UTC
    # Schedules should try to be offset from common times
    # to avoid high contention times on GitHub runners.
    - cron: '17 2 * * *'
  workflow_dispatch:

env:
  CHROME_DEVEL_SANDBOX: /opt/google/chrome/chrome-sandbox

permissions:
  contents: read

jobs:
  browsers:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    env:
      DISPLAY: ':99'
    steps:
      - &checkout
        name: Checkout repository
        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
        with:
          persist-credentials: false
      - name: Install Dependencies
        id: install-deps
        uses: ./.github/actions/install-deps
        with:
          nightly: 'true'
          start-xvfb: ${{ env.DISPLAY }}
      - &build
        name: Build
        id: build
        run: |
          npm run prepare
          npm run build
      - name: Run Firefox Nightly Browser Tests
        env:
          FIREFOX_NIGHTLY_BIN: ${{ steps.install-deps.outputs.firefox-path }}
        run: npm run test -- --browsers FirefoxNightly
      - name: Run Chrome Beta Browser Tests
        if: ${{ !cancelled() && steps.build.conclusion == 'success' }}
        env:
          CHROME_BIN: ${{ steps.install-deps.outputs.chrome-path }}
          CHROMEDRIVER_BIN: ${{ steps.install-deps.outputs.chromedriver-path }}
        run: npm run test -- --browsers Chrome
  act:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - *checkout
      - &install-deps
        name: Install Deps
        id: install-deps
        uses: ./.github/actions/install-deps
      - *build
      - name: Install Latest WCAG ACT Rules
        run: npm install w3c/wcag-act-rules#main
      - name: Run ACT Tests
        env:
          CHROME_BIN: ${{ steps.install-deps.outputs.chrome-path }}
          CHROMEDRIVER_BIN: ${{ steps.install-deps.outputs.chromedriver-path }}
        run: npm run test:act
  aria-practices:
    runs-on: ubuntu-24.04
    timeout-minutes: 7
    steps:
      - *checkout
      - *install-deps
      - *build
      - name: Install Latest W3C Aria Practices
        run: npm install w3c/aria-practices#main
      - name: Run ARIA Practices Tests
        env:
          CHROME_BIN: ${{ steps.install-deps.outputs.chrome-path }}
          CHROMEDRIVER_BIN: ${{ steps.install-deps.outputs.chromedriver-path }}
        run: npm run test:apg


================================================
FILE: .github/workflows/release.yml
================================================
name: Create release candidate

on: [workflow_dispatch]

jobs:
  create_release:
    name: Create release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v6
        with:
          node-version-file: .nvmrc
          cache: 'npm'
      - name: Run release script and open PR
        run: |
          git config user.name "API Team CI User"
          git config user.email "aciattestteamci@deque.com"

          Branch="release-$(date +%Y-%m-%d)"
          echo "Branch: $Branch"
          git checkout -b "$Branch"

          npm ci
          npm run release

          git push origin "$Branch" --force

          Version=$(jq -r .version ./package.json)
          echo "Version: $Version"

          # Get the additions to the changelog as the commit body and generate the PR url
          ReleaseNotes=$(
            git show \
              --no-color \
              --no-prefix \
              --output-indicator-new=! CHANGELOG.md | egrep '^!' | awk -F'^[!]' '{print $2}' | sed -e 's/\n/$0A/g'
          )

          echo "$ReleaseNotes" >> /tmp/pr.txt
          echo "" >> /tmp/pr.txt
          echo "This PR was opened by a robot :robot: :tada:" >> /tmp/pr.txt
          gh pr create --title "chore(release): v$Version" --body-file "/tmp/pr.txt" --base master
        env:
          GITHUB_TOKEN: ${{ secrets.PAT }}


================================================
FILE: .github/workflows/semantic-pr-title.yml
================================================
name: Semantic PR title

on:
  pull_request:
    types:
      - opened
      - reopened
      - edited
      - synchronize

jobs:
  semantic-pr-title:
    runs-on: ubuntu-latest
    steps:
      - uses: dequelabs/semantic-pr-title@v1


================================================
FILE: .github/workflows/sync-master-develop.yml
================================================
name: Sync master/develop branches
on:
  push:
    branches:
      - master
jobs:
  create_sync_pull_request:
    runs-on: ubuntu-latest
    steps:
      - uses: dequelabs/action-sync-branches@v1
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          pr-title: 'chore: merge master into develop'
          pr-reviewers: straker,WilcoFiers,stephenmathieson


================================================
FILE: .github/workflows/test.yml
================================================
name: Tests

on:
  pull_request:
  push:
    branches:
      - master
      - develop
      - release-*

# We want to group to the workflow for each branch.
# Non-push events will be cancelled if a new one is started.
# Push events will run sequentially. This helps ensure that
# the `next` tag isn't out of sync.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref_name }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

permissions: {}

env:
  CHROME_DEVEL_SANDBOX: /opt/google/chrome/chrome-sandbox

jobs:
  lint:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - &checkout
        name: Checkout repository
        uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
        with:
          persist-credentials: false
      - &setup-node
        name: Set up Node.js
        uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
        with:
          node-version-file: .nvmrc
          cache: 'npm'
      - &install-deps-directly
        name: Install Dependencies
        run: npm ci
      - name: Run ESLint
        run: npm run eslint

  fmt_check:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - *checkout
      - *setup-node
      - *install-deps-directly
      - run: npm run fmt:check

  build:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - *checkout
      - *setup-node
      - *install-deps-directly
      - &build
        name: Build
        run: |
          npm run prepare
          npm run build
      - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: axe-core
          path: axe.js
          retention-days: 1

  test_chrome:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    env:
      DISPLAY: :99
    steps:
      - *checkout
      - &install-deps-with-xvfb
        name: Install Deps
        uses: ./.github/actions/install-deps
        id: install-deps
        with:
          start-xvfb: ${{ env.DISPLAY }}
      - *build
      - name: Run Tests Against Chrome
        env:
          CHROME_BIN: ${{ steps.install-deps.outputs.chrome-path }}
          CHROMEDRIVER_BIN: ${{ steps.install-deps.outputs.chromedriver-path }}
        run: npm run test -- --browsers Chrome
      - name: Run Chrome Integration Tests
        env:
          CHROME_BIN: ${{ steps.install-deps.outputs.chrome-path }}
          CHROMEDRIVER_BIN: ${{ steps.install-deps.outputs.chromedriver-path }}
        run: npm run test:integration:chrome

  test_firefox:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    env:
      DISPLAY: :99
    steps:
      - *checkout
      - *install-deps-with-xvfb
      - *build
      - name: Run Tests Against Firefox
        env:
          FIREFOX_BIN: ${{ steps.install-deps.outputs.firefox-path }}
        run: npm run test -- --browsers Firefox
      - name: Run Firefox Integration Tests
        env:
          FIREFOX_BIN: ${{ steps.install-deps.outputs.firefox-path }}
        run: npm run test:integration:firefox

  # Run examples under `doc/examples`
  test_examples:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - *checkout
      - &install-deps
        name: Install Deps
        id: install-deps
        uses: ./.github/actions/install-deps
      - *build
      - name: Run Tests Against Examples
        run: npm run test:examples

  test_act:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    needs: build
    steps:
      - *checkout
      - *install-deps
      - &restore-axe-build
        name: Restore axe build
        uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
        with:
          name: axe-core
      - name: Run ACT Tests
        env:
          CHROME_BIN: ${{ steps.install-deps.outputs.chrome-path }}
          CHROMEDRIVER_BIN: ${{ steps.install-deps.outputs.chromedriver-path }}
        run: npm run test:act

  test_aria_practices:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    needs: build
    steps:
      - *checkout
      - *install-deps
      - *restore-axe-build
      - name: Run ARIA Practices Tests
        env:
          CHROME_BIN: ${{ steps.install-deps.outputs.chrome-path }}
          CHROMEDRIVER_BIN: ${{ steps.install-deps.outputs.chromedriver-path }}
        run: npm run test:apg

  test_locales:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    needs: build
    steps:
      - *checkout
      - *install-deps
      - *restore-axe-build
      - name: Run Locale Tests
        run: npm run test:locales

  test_virtual_rules:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    needs: build
    steps:
      - *checkout
      - *install-deps
      - *restore-axe-build
      - name: Run Virtual Rules Tests
        run: npm run test:virtual-rules

  test_jsdom:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    needs: build
    steps:
      - *checkout
      - *install-deps
      - *restore-axe-build
      - name: Run jsdom Tests
        run: npm run test:jsdom

  build_api_docs:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - *checkout
      - *install-deps
      - name: Run API Docs Build
        run: npm run api-docs

  test_rule_help_version:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    if: ${{ github.ref_name == 'master' }}
    steps:
      - *checkout
      - *install-deps
      - name: Run Rule Help Version Tests
        run: npm run test:rule-help-version

  sri-validate:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    needs: build
    # Run on master and RC branches along with PRs targeting those branches.
    if: ${{ github.ref_name == 'master' || startsWith(github.ref_name, 'release-') || github.event.pull_request.base.ref == 'master' || startsWith(github.event.pull_request.base.ref, 'release-') }}
    steps:
      - *checkout
      - *install-deps
      - *restore-axe-build
      - name: Validate Subresource Integrity
        run: npm run sri-validate

  test_node:
    # The package can't be built on Node 6 anymore, but should still run there.
    # So we need to pull in a previous build artifact.
    needs: build
    strategy:
      matrix:
        node:
          - 6
          - 18
          - 20
          - 22
          - 24
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    steps:
      - *checkout
      - name: Set up Node.js
        uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
        with:
          node-version: ${{ matrix.node }}
      - *restore-axe-build
      - name: Run Node.js Tests
        run: npm run test:node


================================================
FILE: .github/workflows/update-generated-files.yaml
================================================
name: Update generated files

on:
  push:
    branches:
      - develop

env:
  BRANCH_NAME: sync-generated-files

jobs:
  update_generated_files:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v6
        with:
          node-version-file: .nvmrc
          cache: 'npm'

      - name: Build
        run: |
          npm ci
          npm run build

      - name: Check for changes
        id: changes
        run: |
          changes=$(git status --porcelain | tr -d '\n')
          # see https://unix.stackexchange.com/a/509498
          echo $changes | grep . && echo "Changes detected" || echo "No changes"
          echo "changes=$changes" >> "$GITHUB_OUTPUT"

      - name: Check branch exists
        id: branchExists
        if: steps.changes.outputs.changes
        run: |
          exists=$(git ls-remote --heads origin $BRANCH_NAME)
          echo $exists | grep . && echo "Branch '$BRANCH_NAME' already exists on remote" || echo "Branch does not exists in remote"
          echo "exists=$exists" >> "$GITHUB_OUTPUT"

      - name: Create pull request
        if: ${{ steps.changes.outputs.changes && !steps.branchExists.outputs.exists }}
        run: |
          git status
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add .
          git checkout -b $BRANCH_NAME
          git commit -m "chore: sync generated files"
          git push origin $BRANCH_NAME
          gh pr create --base develop --head $BRANCH_NAME --title "chore: sync generated files" --body ""
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Update pull request
        if: ${{ steps.changes.outputs.changes && steps.branchExists.outputs.exists }}
        run: |
          git reset HEAD --hard
          git checkout $BRANCH_NAME
          npm run build
          git status
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add .
          git commit -m "chore: sync generated files"
          git push origin $BRANCH_NAME
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .gitignore
================================================
# defaults
node_modules
npm-shrinkwrap.json
doc/examples/*/package-lock.json
.DS_Store
.idea

# tmp - `dev` time generated assets
tmp

# test - runner generated assets
test/*/index.html
test/integration/*/index.html
!test/integration/virtual-rules/index.html

# dist
axe.js
axe.*.js

# generated src file
lib/core/base/metadata-function-map.js

# generated jsdoc api docs
doc/api/*

# ts generated file
typings/axe-core/axe-core-tests.js

# doc
doc/rule-descriptions.*.md


================================================
FILE: .husky/pre-commit
================================================
npx grunt configure
npx lint-staged

================================================
FILE: .jsdoc.json
================================================
{
  "tags": {
    "allowUnknownTags": true,
    "dictionaries": ["jsdoc"]
  },
  "source": {
    "include": ["lib", "README.md"],
    "includePattern": ".js$",
    "excludePattern": "(node_modules/|doc/api)"
  },
  "opts": {
    "destination": "./doc/api",
    "encoding": "utf8",
    "recurse": true,
    "template": "./node_modules/clean-jsdoc-theme"
  },
  "plugins": ["plugins/markdown"]
}


================================================
FILE: .npmrc
================================================
registry=https://registry.npmjs.org

================================================
FILE: .nvmrc
================================================
24


================================================
FILE: .prettierignore
================================================
node_modules/
doc/api


================================================
FILE: .prettierrc.json
================================================
{
  "printWidth": 80,
  "useTabs": false,
  "tabWidth": 2,
  "semi": true,
  "singleQuote": true,
  "trailingComma": "none",
  "bracketSpacing": true,
  "arrowParens": "avoid"
}


================================================
FILE: .vscode/extensions.json
================================================
{
  "recommendations": ["deque-systems.vscode-axe-linter"]
}


================================================
FILE: .vscode/launch.json
================================================
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "chrome",
      "request": "attach",
      "name": "Attach to Karma test:debug",
      "address": "localhost",
      "port": 9765, // keep in sync with debugPort in karma.conf.js
      "webRoot": "${workspaceFolder}",
      "sourceMaps": true,
      "sourceMapPathOverrides": {
        "*": "${webRoot}/*",
        "base/*": "${webRoot}/*"
      }
    }
  ]
}


================================================
FILE: CHANGELOG.md
================================================
# Changelog

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

### [4.11.1](https://github.com/dequelabs/axe-core/compare/v4.11.0...v4.11.1) (2026-01-06)

### Bug Fixes

- allow shadow roots in axe.run contexts ([#4952](https://github.com/dequelabs/axe-core/issues/4952)) ([d4aee16](https://github.com/dequelabs/axe-core/commit/d4aee16494f3225e9f5065f23a9e1deccb46fc9a)), closes [#4941](https://github.com/dequelabs/axe-core/issues/4941)
- color contrast fails for oklch and oklab with none ([#4959](https://github.com/dequelabs/axe-core/issues/4959)) ([8f249fd](https://github.com/dequelabs/axe-core/commit/8f249fdcffe379466fcff8ec8ac46e37b65fdbce))
- **color-contrast:** do not incomplete on textarea ([#4968](https://github.com/dequelabs/axe-core/issues/4968)) ([d271788](https://github.com/dequelabs/axe-core/commit/d27178866d4962e1157b1be435143d028873f545)), closes [#4947](https://github.com/dequelabs/axe-core/issues/4947)
- **commons/color:** Match browser behavior for out-of-gamut oklch colors ([#4908](https://github.com/dequelabs/axe-core/issues/4908)) ([5036be8](https://github.com/dequelabs/axe-core/commit/5036be811e0ede4bf061ab1f970f78b7e9c7ec0c))
- don't runs rules that select `html` on nested `html` elements ([#4969](https://github.com/dequelabs/axe-core/issues/4969)) ([1e9a5c3](https://github.com/dequelabs/axe-core/commit/1e9a5c36812ff69a75f23fed3d290497f9fba37d))
- replaced luminance threshold constant 0.03928 with 0.04045 ([#4934](https://github.com/dequelabs/axe-core/issues/4934)) ([316967d](https://github.com/dequelabs/axe-core/commit/316967d50c554e71bcdf59ac945d1d5bb2f0684b)), closes [#4933](https://github.com/dequelabs/axe-core/issues/4933)
- **rgaa:** adjust mapping of aria-hidden-\* and valid-lang ([#4935](https://github.com/dequelabs/axe-core/issues/4935)) ([77571f2](https://github.com/dequelabs/axe-core/commit/77571f2103a90a5703233729c78be008395f1572))
- **valid-lang:** update valid-langs for newer language codes ([#4966](https://github.com/dequelabs/axe-core/issues/4966)) ([c3f5446](https://github.com/dequelabs/axe-core/commit/c3f54464fd0995edc6619203b46b65d2984b218d)), closes [#4963](https://github.com/dequelabs/axe-core/issues/4963)

## [4.11.0](https://github.com/dequelabs/axe-core/compare/v4.10.3...v4.11.0) (2025-10-07)

### Features

- add RGAA tags to rules ([#4862](https://github.com/dequelabs/axe-core/issues/4862)) ([53a925a](https://github.com/dequelabs/axe-core/commit/53a925a31bb2bf4a1584252fa7a58c0662225320))
- **aria-prohibited-attr:** add support for fallback roles ([#4325](https://github.com/dequelabs/axe-core/issues/4325)) ([62a19a9](https://github.com/dequelabs/axe-core/commit/62a19a9f753f8c49885dafbab7a2a9468eb6571d))
- **axe.d.ts:** add nodeSerializer typings ([#4551](https://github.com/dequelabs/axe-core/issues/4551)) ([a2f3a48](https://github.com/dequelabs/axe-core/commit/a2f3a485d5e02993c0f35762cd9d80a6ce4ced5f)), closes [#4093](https://github.com/dequelabs/axe-core/issues/4093)
- **DqElement:** deprecate fromFrame function ([#4881](https://github.com/dequelabs/axe-core/issues/4881)) ([374c376](https://github.com/dequelabs/axe-core/commit/374c376d0b4a043e8beaa7cc9a47521314eee02c)), closes [#4093](https://github.com/dequelabs/axe-core/issues/4093)
- **DqElement:** Truncate large `html` strings when the element has a large outerHTML string ([#4796](https://github.com/dequelabs/axe-core/issues/4796)) ([404a4fb](https://github.com/dequelabs/axe-core/commit/404a4fb24a156dc433ac9c70dbefe415d41ca980)), closes [#4544](https://github.com/dequelabs/axe-core/issues/4544)
- **get-xpath:** return proper relative selector for id ([#4846](https://github.com/dequelabs/axe-core/issues/4846)) ([1035f9e](https://github.com/dequelabs/axe-core/commit/1035f9ef134cbfc02c91c37f881eb5759f602bf3)), closes [#4845](https://github.com/dequelabs/axe-core/issues/4845)
- **i18n:** Add Portugal Portuguese translation ([#4725](https://github.com/dequelabs/axe-core/issues/4725)) ([5b6a65a](https://github.com/dequelabs/axe-core/commit/5b6a65a103188251568862f46020488cf7fd8a94))
- incomplete with node on which an error occurred ([#4863](https://github.com/dequelabs/axe-core/issues/4863)) ([32ed8da](https://github.com/dequelabs/axe-core/commit/32ed8daad1111772559f6e1cf6c8171e83c0f299))
- **locale:** Added ru locale ([#4565](https://github.com/dequelabs/axe-core/issues/4565)) ([067b01d](https://github.com/dequelabs/axe-core/commit/067b01d66db1d2c276f26743a8d13d5d60d33446))
- **tap:** some best practice rules map to RGAA ([#4895](https://github.com/dequelabs/axe-core/issues/4895)) ([bc33f4c](https://github.com/dequelabs/axe-core/commit/bc33f4cf5d4d384118c08d8be1afc0c4fc9272ec))
- **td-headers-attr:** report headers attribute referencing other <td> elements as unsupported ([#4589](https://github.com/dequelabs/axe-core/issues/4589)) ([ec7c6c8](https://github.com/dequelabs/axe-core/commit/ec7c6c8875970388c4fe2c73147a3dd43497161e)), closes [#3987](https://github.com/dequelabs/axe-core/issues/3987)

### Bug Fixes

- **aria-allowed-role:** add form to allowed roles of form element ([#4588](https://github.com/dequelabs/axe-core/issues/4588)) ([8aa47ac](https://github.com/dequelabs/axe-core/commit/8aa47ac01f9959b9d47ac24dcd2fd8c88c9279f7)), closes [/github.com/dequelabs/axe-core/blob/develop/lib/standards/html-elms.js#L264](https://github.com/dequelabs//github.com/dequelabs/axe-core/blob/develop/lib/standards/html-elms.js/issues/L264)
- **aria-allowed-role:** Add math to allowed roles for img element ([#4658](https://github.com/dequelabs/axe-core/issues/4658)) ([95b6c18](https://github.com/dequelabs/axe-core/commit/95b6c184872cf70c7f54a96aa813a9e8bc2c066d)), closes [#4657](https://github.com/dequelabs/axe-core/issues/4657)
- **autocomplete-valid :** Ignore readonly autocomplete field ([#4721](https://github.com/dequelabs/axe-core/issues/4721)) ([491f4ec](https://github.com/dequelabs/axe-core/commit/491f4ecdbbb79d019daa63debc03ac0efb47adf8)), closes [#4708](https://github.com/dequelabs/axe-core/issues/4708)
- **autocomplete-valid:** treat values "xon" and "xoff" as non-WCAG-violations ([#4878](https://github.com/dequelabs/axe-core/issues/4878)) ([52bc611](https://github.com/dequelabs/axe-core/commit/52bc61162aa170a30a38246ade099ba3fc10cc2a)), closes [#4877](https://github.com/dequelabs/axe-core/issues/4877)
- **axe.d.ts:** add typings for preload options object ([#4543](https://github.com/dequelabs/axe-core/issues/4543)) ([cfd2974](https://github.com/dequelabs/axe-core/commit/cfd297498c0e34edd5ff7e62935060bb9dda4db7))
- **button-name,input-button-name,input-img-alt:** allow label to give accessible name ([#4607](https://github.com/dequelabs/axe-core/issues/4607)) ([a9710d7](https://github.com/dequelabs/axe-core/commit/a9710d757c6ca6ee0ce5d26be3427bab54b87a7a)), closes [#4472](https://github.com/dequelabs/axe-core/issues/4472) [#3696](https://github.com/dequelabs/axe-core/issues/3696) [#3696](https://github.com/dequelabs/axe-core/issues/3696)
- **captions:** fix grammar in captions check incomplete message ([#4661](https://github.com/dequelabs/axe-core/issues/4661)) ([11de515](https://github.com/dequelabs/axe-core/commit/11de515858a7c10a3d7400163fc2b834715152fc))
- **color-contrast:** do not run on elements with font-size: 0 ([#4822](https://github.com/dequelabs/axe-core/issues/4822)) ([d77c885](https://github.com/dequelabs/axe-core/commit/d77c8854c847573597eccf54c00091a4a2134cfd)), closes [#4820](https://github.com/dequelabs/axe-core/issues/4820)
- consistently parse tabindex, following HTML 5 spec ([#4637](https://github.com/dequelabs/axe-core/issues/4637)) ([645a850](https://github.com/dequelabs/axe-core/commit/645a850f601f4f3f18cc4aaca399aad18a9fa5d2)), closes [#4632](https://github.com/dequelabs/axe-core/issues/4632)
- **core:** measure perf for async checks ([#4609](https://github.com/dequelabs/axe-core/issues/4609)) ([7e9bacf](https://github.com/dequelabs/axe-core/commit/7e9bacf1ecb8c53404fac3eeed087e370e2a9cfa))
- fix grammar when using "alternative text" in a sentence ([#4811](https://github.com/dequelabs/axe-core/issues/4811)) ([237a586](https://github.com/dequelabs/axe-core/commit/237a5861b0fb044c885b154436696279deca7a13)), closes [#4394](https://github.com/dequelabs/axe-core/issues/4394)
- **get-ancestry:** add nth-child selector for multiple siblings of shadow root ([#4606](https://github.com/dequelabs/axe-core/issues/4606)) ([1cdd6c3](https://github.com/dequelabs/axe-core/commit/1cdd6c3e698a6a4c28604448284993c4c20ca272)), closes [#4563](https://github.com/dequelabs/axe-core/issues/4563)
- **get-ancestry:** don't error when there is no parent ([#4617](https://github.com/dequelabs/axe-core/issues/4617)) ([a005703](https://github.com/dequelabs/axe-core/commit/a0057039072f68bd605e8bacdca64692d57f612e))
- **locale:** fix typos in japanese (ja) locale ([#4856](https://github.com/dequelabs/axe-core/issues/4856)) ([3462cc5](https://github.com/dequelabs/axe-core/commit/3462cc57e8480334c125c38b7ecb42344b405dd4))
- **locale:** fixed typos in german (DE) locale ([#4631](https://github.com/dequelabs/axe-core/issues/4631)) ([b7736de](https://github.com/dequelabs/axe-core/commit/b7736deae9ec14a4e81182adb53be73f3cce9894))
- **locale:** proofread and updated de.json ([#4643](https://github.com/dequelabs/axe-core/issues/4643)) ([8060ada](https://github.com/dequelabs/axe-core/commit/8060ada737a23cdf68bb5b4c95b8c0e2cca45dad))
- **meta-viewport:** lower impact to moderate ([#4887](https://github.com/dequelabs/axe-core/issues/4887)) ([2f32aa5](https://github.com/dequelabs/axe-core/commit/2f32aa5bada78ffcfc965ed2b64be533263c6bd5)), closes [#4714](https://github.com/dequelabs/axe-core/issues/4714)
- **no-autoplay-audio:** don't timeout for preload=none media elements ([#4684](https://github.com/dequelabs/axe-core/issues/4684)) ([cdc871e](https://github.com/dequelabs/axe-core/commit/cdc871e68f3dbc6acbfed12d3ec63ea4da1a4065))
- **performanceTimer:** throwing in axe catch clause ([#4852](https://github.com/dequelabs/axe-core/issues/4852)) ([a4ade04](https://github.com/dequelabs/axe-core/commit/a4ade04bc2ba93dcad8a24094fb0dc5edb6da8b2)), closes [/github.com/dequelabs/axe-core/blob/e7dae4ec48cbfef74de9f833fdcfb178c1002985/lib/core/base/rule.js#L297-L300](https://github.com/dequelabs//github.com/dequelabs/axe-core/blob/e7dae4ec48cbfef74de9f833fdcfb178c1002985/lib/core/base/rule.js/issues/L297-L300)
- **performanceTimer:** work in frames ([#4834](https://github.com/dequelabs/axe-core/issues/4834)) ([d7dfebc](https://github.com/dequelabs/axe-core/commit/d7dfebc0271d2970c0937024ce693a771885002c))
- **rules:** Change "alternate text" to "alternative text" ([#4582](https://github.com/dequelabs/axe-core/issues/4582)) ([b03ada3](https://github.com/dequelabs/axe-core/commit/b03ada3dd3b6490bb88e366bf807b10e1a4038a4))
- **target-size:** do not treat focusable tabpanels as targets ([#4702](https://github.com/dequelabs/axe-core/issues/4702)) ([60d11f2](https://github.com/dequelabs/axe-core/commit/60d11f2d01b9e859e54a15ae0232b8b5d1c48d35)), closes [#4421](https://github.com/dequelabs/axe-core/issues/4421) [#4701](https://github.com/dequelabs/axe-core/issues/4701)
- **type:** correct RuleError type ([#4893](https://github.com/dequelabs/axe-core/issues/4893)) ([d1aa8e2](https://github.com/dequelabs/axe-core/commit/d1aa8e2094031159b041a3e9cf2c796a26b3daba))
- **types:** correct raw types ([#4903](https://github.com/dequelabs/axe-core/issues/4903)) ([3eade11](https://github.com/dequelabs/axe-core/commit/3eade110a7ac173e3537e8eb18dd0db026f13c75))

### [4.10.3](https://github.com/dequelabs/axe-core/compare/v4.10.2...v4.10.3) (2025-03-04)

### Bug Fixes

- **aria-allowed-role:** Add math to allowed roles for img element ([#4658](https://github.com/dequelabs/axe-core/issues/4658)) ([f6dddd9](https://github.com/dequelabs/axe-core/commit/f6dddd905bb86d2073d760d4c1ff39996e59a4f4)), closes [#4657](https://github.com/dequelabs/axe-core/issues/4657)
- **captions:** fix grammar in captions check incomplete message ([#4661](https://github.com/dequelabs/axe-core/issues/4661)) ([3ef7058](https://github.com/dequelabs/axe-core/commit/3ef7058d3a16a6898eaed718e39b34b45f9ed74f))
- consistently parse tabindex, following HTML5 spec ([#4637](https://github.com/dequelabs/axe-core/issues/4637)) ([3b0a361](https://github.com/dequelabs/axe-core/commit/3b0a3619d5e6147d8885725cce196868dac89f7f)), closes [#4632](https://github.com/dequelabs/axe-core/issues/4632)
- **core:** measure perf for async checks ([#4609](https://github.com/dequelabs/axe-core/issues/4609)) ([e7dc26e](https://github.com/dequelabs/axe-core/commit/e7dc26e6cbaf9089611853805e05216b6529e1f9))
- **locale:** fixed typos in german (DE) locale ([#4631](https://github.com/dequelabs/axe-core/issues/4631)) ([0740980](https://github.com/dequelabs/axe-core/commit/07409802115c199a68f58dcaf7467e35b4867140))
- **locale:** proofread and updated de.json ([#4643](https://github.com/dequelabs/axe-core/issues/4643)) ([910cdb2](https://github.com/dequelabs/axe-core/commit/910cdb20702ce116c781d58f021adc05095ffcbb))
- **no-autoplay-audio:** don't timeout for preload=none media elements ([#4684](https://github.com/dequelabs/axe-core/issues/4684)) ([b7f1ad1](https://github.com/dequelabs/axe-core/commit/b7f1ad1ccf719b7149a5ef1805b405707a474e31))
- **target-size:** do not treat focusable tabpanels as targets ([#4702](https://github.com/dequelabs/axe-core/issues/4702)) ([67d4e4f](https://github.com/dequelabs/axe-core/commit/67d4e4f7d0d0b803b66f216ff86f401649ed024f)), closes [#4421](https://github.com/dequelabs/axe-core/issues/4421) [#4701](https://github.com/dequelabs/axe-core/issues/4701)

### [4.10.2](https://github.com/dequelabs/axe-core/compare/v4.10.1...v4.10.2) (2024-10-21)

### Bug Fixes

- **get-ancestry:** don't error when there is no parent ([#4617](https://github.com/dequelabs/axe-core/issues/4617)) ([6c07102](https://github.com/dequelabs/axe-core/commit/6c07102b1d29145b8dc5f1d96229f3d0b8b38068))

### [4.10.1](https://github.com/dequelabs/axe-core/compare/v4.10.0...v4.10.1) (2024-10-16)

### Bug Fixes

- **aria-allowed-role:** add form to allowed roles of form element ([#4588](https://github.com/dequelabs/axe-core/issues/4588)) ([d462d67](https://github.com/dequelabs/axe-core/commit/d462d674bb7de0848ce2695f80b95d677c5016e0)), closes [/github.com/dequelabs/axe-core/blob/develop/lib/standards/html-elms.js#L264](https://github.com/dequelabs//github.com/dequelabs/axe-core/blob/develop/lib/standards/html-elms.js/issues/L264)
- **axe.d.ts:** add typings for preload options object ([#4543](https://github.com/dequelabs/axe-core/issues/4543)) ([72e269f](https://github.com/dequelabs/axe-core/commit/72e269f1e6d6039e70e614005f04ebfd3fe5aca5))
- **button-name,input-button-name,input-img-alt:** allow label to give accessible name ([#4607](https://github.com/dequelabs/axe-core/issues/4607)) ([364eb72](https://github.com/dequelabs/axe-core/commit/364eb72bb8f20b0ffc31be24cc96cbd349c301cb)), closes [#4472](https://github.com/dequelabs/axe-core/issues/4472) [#3696](https://github.com/dequelabs/axe-core/issues/3696) [#3696](https://github.com/dequelabs/axe-core/issues/3696)
- **get-ancestry:** add nth-child selector for multiple siblings of shadow root ([#4606](https://github.com/dequelabs/axe-core/issues/4606)) ([bdd94a2](https://github.com/dequelabs/axe-core/commit/bdd94a227a95cd5b9f8e2a1e0fd259ddd702810c)), closes [#4563](https://github.com/dequelabs/axe-core/issues/4563)
- **rules:** Change "alternate text" to "alternative text" ([#4582](https://github.com/dequelabs/axe-core/issues/4582)) ([31e0f61](https://github.com/dequelabs/axe-core/commit/31e0f61ca871b3df86468577c449a02c8ece12f0))

## [4.10.0](https://github.com/dequelabs/axe-core/compare/v4.9.1...v4.10.0) (2024-07-29)

### Features

- **new-rule:** summary elements must have an accessible name ([#4511](https://github.com/dequelabs/axe-core/issues/4511)) ([0d8a99e](https://github.com/dequelabs/axe-core/commit/0d8a99eadd8d49e5d3ea0f11ad77be732148431e)), closes [#4510](https://github.com/dequelabs/axe-core/issues/4510)

### Bug Fixes

- **aria-allowed-attr:** allow aria-multiline=false for element with contenteditable ([#4537](https://github.com/dequelabs/axe-core/issues/4537)) ([f019068](https://github.com/dequelabs/axe-core/commit/f0190685722495d00be644cabb1c9741d74acdea))
- **aria-allowed-attr:** allow aria-required=false when normally not allowed ([#4532](https://github.com/dequelabs/axe-core/issues/4532)) ([2e242e1](https://github.com/dequelabs/axe-core/commit/2e242e146929902c97e181e41fa45e656cf3eb51))
- **aria-prohibited-attr:** allow aria-label/ledby on descendants of widget ([#4541](https://github.com/dequelabs/axe-core/issues/4541)) ([07c5d91](https://github.com/dequelabs/axe-core/commit/07c5d91c658bda6bcd2743950bf70f25abd1f9ae))
- **aria-roledescription:** keep disabled with { runOnly: 'wcag2a' } ([#4526](https://github.com/dequelabs/axe-core/issues/4526)) ([5b4cb9d](https://github.com/dequelabs/axe-core/commit/5b4cb9d7992a4c07745e64708040777de64874bd)), closes [#4523](https://github.com/dequelabs/axe-core/issues/4523)
- **autocomplete-valid:** incomplete for invalid but safe values ([#4500](https://github.com/dequelabs/axe-core/issues/4500)) ([e31a974](https://github.com/dequelabs/axe-core/commit/e31a974de395845c08af345f9458a8091e2b1c4b)), closes [#4492](https://github.com/dequelabs/axe-core/issues/4492)
- **build:** limit locales to valid files when using the --all-lang option ([#4486](https://github.com/dequelabs/axe-core/issues/4486)) ([d3db593](https://github.com/dequelabs/axe-core/commit/d3db593991261ad44eef1c142d8a4646edde93fa)), closes [#4485](https://github.com/dequelabs/axe-core/issues/4485)
- Prevent errors when loading axe in Angular + Jest ([#4456](https://github.com/dequelabs/axe-core/issues/4456)) ([3ef9353](https://github.com/dequelabs/axe-core/commit/3ef93531a574c2be76a92d59599d978714cca9d0)), closes [#4400](https://github.com/dequelabs/axe-core/issues/4400)
- Minor grammatical fixes for some rules and checks ([#4499](https://github.com/dequelabs/axe-core/issues/4499)) ([11fad59](https://github.com/dequelabs/axe-core/commit/11fad598c25eadd29f35ef6be382d907057d4537))
- **landmark-unique:** follow spec, aside -> landmark ([#4469](https://github.com/dequelabs/axe-core/issues/4469)) ([e32f803](https://github.com/dequelabs/axe-core/commit/e32f8034246a92e4132dc04f6310e2b414d6d43f)), closes [#4460](https://github.com/dequelabs/axe-core/issues/4460)
- **required-attr:** allow aria-valuetext on slider instead of valuenow ([#4518](https://github.com/dequelabs/axe-core/issues/4518)) ([135898b](https://github.com/dequelabs/axe-core/commit/135898b38d5eb46c42170527a0ac9add425c5c3d)), closes [#4515](https://github.com/dequelabs/axe-core/issues/4515)

### [4.9.1](https://github.com/dequelabs/axe-core/compare/v4.9.0...v4.9.1) (2024-05-06)

### Bug Fixes

- Prevent errors when loading axe in a page with prototype.js
- **aria-allowed-attr:** allow meter role allowed aria-\* attributes on meter element ([#4435](https://github.com/dequelabs/axe-core/issues/4435)) ([7ac6392](https://github.com/dequelabs/axe-core/commit/7ac63921e7fab21f3359dcfc8affa7585bc9c25b))
- **aria-allowed-role:** add gridcell, separator, slider and treeitem to allowed roles of button element ([#4398](https://github.com/dequelabs/axe-core/issues/4398)) ([4788bf8](https://github.com/dequelabs/axe-core/commit/4788bf8d6fd963d7b017dad950b122ffcea8d151))
- **aria-roles:** correct abstract roles (types) for aria-roles([#4421](https://github.com/dequelabs/axe-core/pull/4421))
- **aria-valid-attr-value:** aria-controls & aria-haspopup incomplete ([#4418](https://github.com/dequelabs/axe-core/pull/4418))
- fix building axe-core translation files with region locales ([#4396](https://github.com/dequelabs/axe-core/issues/4396)) ([5c318f3](https://github.com/dequelabs/axe-core/commit/5c318f3537056be5779cb53374bc6f4785947c91)), closes [#4388](https://github.com/dequelabs/axe-core/issues/4388)
- **invalidrole:** allow upper and mixed case role names ([#4358](https://github.com/dequelabs/axe-core/issues/4358)) ([105016c](https://github.com/dequelabs/axe-core/commit/105016cfe9d82876cfed2ff5c656a7842c5b3761)), closes [#2695](https://github.com/dequelabs/axe-core/issues/2695)
- **isVisibleOnScreen:** account for position: absolute elements inside overflow container ([#4405](https://github.com/dequelabs/axe-core/issues/4405)) ([2940f6e](https://github.com/dequelabs/axe-core/commit/2940f6ee36ba52d8cf089be2a3c8e7c516c81dd6)), closes [#4016](https://github.com/dequelabs/axe-core/issues/4016)
- **label-content-name-mismatch:** better dismiss and wysiwyg symbolic text characters ([#4402](https://github.com/dequelabs/axe-core/issues/4402))
- **region:** Decorative images ignored by region rule ([#4412](https://github.com/dequelabs/axe-core/pull/4412))
- **target-size:** ignore descendant elements in shadow dom ([#4410](https://github.com/dequelabs/axe-core/issues/4410)) ([6091367](https://github.com/dequelabs/axe-core/commit/6091367a20f70e536fc7e8d77eae4fa7232bc7c0))
- **target-size:** pass for element that has nearby elements that are obscured ([#4422](https://github.com/dequelabs/axe-core/issues/4422)) ([3a90bb7](https://github.com/dequelabs/axe-core/commit/3a90bb70c8db087b2f03cc30a4aee756995c311c)), closes [#4387](https://github.com/dequelabs/axe-core/issues/4387)

## [4.9.0](https://github.com/dequelabs/axe-core/compare/v4.8.4...v4.9.0) (2024-03-25)

### Features

- adding the wcag131 tag to the aria-hidden-body rule ([#4349](https://github.com/dequelabs/axe-core/issues/4349)) ([dd4c3c3](https://github.com/dequelabs/axe-core/commit/dd4c3c34a42d2b96f5495890f5c5d5e8f6ca8d32)), closes [#4315](https://github.com/dequelabs/axe-core/issues/4315)
- **checks:** deprecate aria-busy check ([#4356](https://github.com/dequelabs/axe-core/issues/4356)) ([be0b555](https://github.com/dequelabs/axe-core/commit/be0b5558acfbeb6bbb176ac7fd7d8fdfb973b30b)), closes [#4347](https://github.com/dequelabs/axe-core/issues/4347) [#4340](https://github.com/dequelabs/axe-core/issues/4340)
- **color:** add color channel values and luminosity, saturation, clip functions ([#4366](https://github.com/dequelabs/axe-core/issues/4366)) ([9e70199](https://github.com/dequelabs/axe-core/commit/9e7019990bbbf5182ab50c5c968143b81d216dcb)), closes [/github.com/dequelabs/axe-core/pull/4365/files#r1517706612](https://github.com/dequelabs//github.com/dequelabs/axe-core/pull/4365/files/issues/r1517706612)
- **i18n:** add Greek Translations ([#3836](https://github.com/dequelabs/axe-core/issues/3836)) ([3ea9a48](https://github.com/dequelabs/axe-core/commit/3ea9a48cf88d02271db8b19651bff0415237b856))
- **i18n:** Add Italian translation ([#4344](https://github.com/dequelabs/axe-core/issues/4344)) ([de1baa9](https://github.com/dequelabs/axe-core/commit/de1baa9a9f6495f695d25d61d14ed55983dded76))
- **i18n:** Add Simplified Chinese translation ([#4379](https://github.com/dequelabs/axe-core/issues/4379)) ([bda7c8d](https://github.com/dequelabs/axe-core/commit/bda7c8d8bf5936a56c66240e1ea0373a3b769809))
- **i18n:** Add Taiwanese Mandarin translation ([#4299](https://github.com/dequelabs/axe-core/issues/4299)) ([c5e11de](https://github.com/dequelabs/axe-core/commit/c5e11de06973392b113906c05e3a3004af4c38ae))

### Bug Fixes

- Add LICENSE-3RD-PARTY.txt file ([#4304](https://github.com/dequelabs/axe-core/issues/4304)) ([daa0fe6](https://github.com/dequelabs/axe-core/commit/daa0fe677d4837c9c79bad8ee6c77aff11212339))
- add Object.values polyfill for node <=6 ([#4274](https://github.com/dequelabs/axe-core/issues/4274)) ([5eb867b](https://github.com/dequelabs/axe-core/commit/5eb867b04e174140122c62eb5c705a842a3489e1))
- **aria-required-children:** avoid confusing aria-busy message in failures ([#4347](https://github.com/dequelabs/axe-core/issues/4347)) ([591607d](https://github.com/dequelabs/axe-core/commit/591607dd829c11e2cca5beee12c75628d1a8235e)), closes [#fail13](https://github.com/dequelabs/axe-core/issues/fail13) [#4340](https://github.com/dequelabs/axe-core/issues/4340)
- avoid reading element-specific node properties of non-element node types ([#4317](https://github.com/dequelabs/axe-core/issues/4317)) ([b853b18](https://github.com/dequelabs/axe-core/commit/b853b18a24dd2d1c9408705b821cc11146ae1186)), closes [#4316](https://github.com/dequelabs/axe-core/issues/4316) [#4316](https://github.com/dequelabs/axe-core/issues/4316)
- **color-contrast:** handle text that is outside `overflow: hidden` ancestor ([#4357](https://github.com/dequelabs/axe-core/issues/4357)) ([bdb7300](https://github.com/dequelabs/axe-core/commit/bdb7300c67d451d3b0169707924a0c6bc4defe40)), closes [#4253](https://github.com/dequelabs/axe-core/issues/4253)
- **color-contrast:** support color blend modes hue, saturation, color, luminosity ([#4365](https://github.com/dequelabs/axe-core/issues/4365)) ([7ae4761](https://github.com/dequelabs/axe-core/commit/7ae476124d60eafd28d85abf48188cd85c99543a))
- **d.ts:** RawNodesResult issues ([#4229](https://github.com/dequelabs/axe-core/issues/4229)) ([d660518](https://github.com/dequelabs/axe-core/commit/d6605181ec942bcca46e3bfe889064b3781919ca))
- **d.ts:** RunOptions.reporter can be any string ([#4218](https://github.com/dequelabs/axe-core/issues/4218)) ([e53f5c5](https://github.com/dequelabs/axe-core/commit/e53f5c5184a0e5f75db65e7929a9da84d7ee6df6))
- **i18n:** update Italian translations ([#4377](https://github.com/dequelabs/axe-core/issues/4377)) ([4d65d4b](https://github.com/dequelabs/axe-core/commit/4d65d4bf40f4ee2697e079451dd84a0155e8fb51))
- **listitem:** clarify roleNotValid message ([#4374](https://github.com/dequelabs/axe-core/issues/4374)) ([0f8a9af](https://github.com/dequelabs/axe-core/commit/0f8a9af2a82d49e7d8ff3024da0e4c485ca46d38))
- **scrollable-region-focusable:** missing wcag213 tag ([#4201](https://github.com/dequelabs/axe-core/issues/4201)) ([0080a72](https://github.com/dequelabs/axe-core/commit/0080a7255eb7f246bb7b6f53974a95b65983b83a))
- **target-size:** always pass 10x targets (avoid perf bottleneck) ([#4376](https://github.com/dequelabs/axe-core/issues/4376)) ([be327c4](https://github.com/dequelabs/axe-core/commit/be327c422f67ac657218f711b3b799567ba3aa37))
- **target-size:** do not crash for nodes with many overlapping widgets ([#4373](https://github.com/dequelabs/axe-core/issues/4373)) ([1dbea83](https://github.com/dequelabs/axe-core/commit/1dbea83d4749f9f71f263883869b076b0d42021f)), closes [#4359](https://github.com/dequelabs/axe-core/issues/4359) [#4359](https://github.com/dequelabs/axe-core/issues/4359) [#4360](https://github.com/dequelabs/axe-core/issues/4360)
- **utils/get-selector:** ignore 'xmlns' attribute when generating a selector ([#4303](https://github.com/dequelabs/axe-core/issues/4303)) ([938b411](https://github.com/dequelabs/axe-core/commit/938b411bb0609b54e5c46a8e5b50c9ea4de4bdee))

### [4.8.4](https://github.com/dequelabs/axe-core/compare/v4.8.3...v4.8.4) (2024-02-07)

### Bug Fixes

- Add LICENSE-3RD-PARTY.txt file ([#4304](https://github.com/dequelabs/axe-core/issues/4304)) ([139c553](https://github.com/dequelabs/axe-core/commit/139c5535c72e926f03bb37a9ba0b7fd6b97cba8c))
- avoid reading element-specific node properties of non-element node types ([#4317](https://github.com/dequelabs/axe-core/issues/4317)) ([a2a6935](https://github.com/dequelabs/axe-core/commit/a2a69355ea5aafce14367cf967153f7958a8878c)), closes [#4316](https://github.com/dequelabs/axe-core/issues/4316) [#4316](https://github.com/dequelabs/axe-core/issues/4316)
- **d.ts:** RawNodesResult issues ([#4229](https://github.com/dequelabs/axe-core/issues/4229)) ([f105266](https://github.com/dequelabs/axe-core/commit/f1052662b3b8b57d520fcbd23a3e9d4a5660a7e1))
- **d.ts:** RunOptions.reporter can be any string ([#4218](https://github.com/dequelabs/axe-core/issues/4218)) ([80de793](https://github.com/dequelabs/axe-core/commit/80de793362bbbffde85654e874942a26df0108a8))
- **utils/get-selector:** ignore 'xmlns' attribute when generating a selector ([#4303](https://github.com/dequelabs/axe-core/issues/4303)) ([8c68546](https://github.com/dequelabs/axe-core/commit/8c6854661f4613d0b7a6ba98bbfdc0c9ca61b4d1))

### [4.8.3](https://github.com/dequelabs/axe-core/compare/v4.8.2...v4.8.3) (2023-12-18)

### Bug Fixes

- add Object.values polyfill for node <=6 ([#4274](https://github.com/dequelabs/axe-core/issues/4274)) ([b39b0e6](https://github.com/dequelabs/axe-core/commit/b39b0e60b68f8c1e34dc056809a04f8ccf8f24c7))

### [4.8.2](https://github.com/dequelabs/axe-core/compare/v4.8.1...v4.8.2) (2023-09-18)

### Bug Fixes

- polyfill Object.hasOwn for node 14 ([#4152](https://github.com/dequelabs/axe-core/issues/4152)) ([c7b597b](https://github.com/dequelabs/axe-core/commit/c7b597b9ec9c74009f4ddac16d5311ee642ab352))

### [4.8.1](https://github.com/dequelabs/axe-core/compare/v4.8.0...v4.8.1) (2023-09-08)

### Bug Fixes

- **target-size:** show closest offset in message ([#4151](https://github.com/dequelabs/axe-core/issues/4151)) ([a0882f6](https://github.com/dequelabs/axe-core/commit/a0882f64610279adce39b015c7e62bf955e04a22))

## [4.8.0](https://github.com/dequelabs/axe-core/compare/v4.7.2...v4.8.0) (2023-09-06)

### Consistent Rule Impact

This release changes it so that a rule never changes what impact it reports. To facilitate this while without changing the impact on certain issues, some rules have been split. The following changes were involved:

- Deprecate impact on checks; use rules instead ([#4114](https://github.com/dequelabs/axe-core/issues/4114)) ([2cc5547](https://github.com/dequelabs/axe-core/commit/2cc5547634ee783701675631ee3978129707e6f0))
- add rule aria-deprecated-role ([#4074](https://github.com/dequelabs/axe-core/issues/4074)) ([03f2771](https://github.com/dequelabs/axe-core/commit/03f2771ab43bd877b7919c29b4f5e737b5a69544))
- add rule aria-conditional-attr ([#4094](https://github.com/dequelabs/axe-core/issues/4094)) ([d417630](https://github.com/dequelabs/axe-core/commit/d417630e89a41603426c2bb545b49057f03ed8e5))
- **aria-input/toggle-field-name:** set impact always to serious ([#4095](https://github.com/dequelabs/axe-core/issues/4095)) ([e031d68](https://github.com/dequelabs/axe-core/commit/e031d68652229a80ba6ff7d02d29a50a846bfa5b))
- **aria-prohibited-attr:** add rule aria-prohibited-attr ([#4088](https://github.com/dequelabs/axe-core/issues/4088)) ([7b115d3](https://github.com/dequelabs/axe-core/commit/7b115d3a9e7256ae2c0a1d7d0f9ba791a06c8599))
- **impact:** aria-roles / aria-valid-attr-value is always "critical" ([#4112](https://github.com/dequelabs/axe-core/issues/4112)) ([5cc8041](https://github.com/dequelabs/axe-core/commit/5cc8041f74a6f015dcbca36ee7414767528277c2))
- **impact:** scope-attr-valid is always "moderate" ([#4113](https://github.com/dequelabs/axe-core/issues/4113)) ([131f552](https://github.com/dequelabs/axe-core/commit/131f5524e8c8022ace047ac6d69d779460c85fe6))

### Other Features

- deprecate & disable duplicate-id / duplicate-id-active ([#4071](https://github.com/dequelabs/axe-core/issues/4071)) ([733c45e](https://github.com/dequelabs/axe-core/commit/733c45e6a40a9f8ff6e75f7db864edff0b404ca2))
- **duplicate-id-aria:** set to review on fail and tag as wcag412 ([#4075](https://github.com/dequelabs/axe-core/issues/4075)) ([9f1a3e3](https://github.com/dequelabs/axe-core/commit/9f1a3e3cbffbe09eaf90fa254c6421fd4264cf4a))
- add EN.301.549 tags to rules ([#4063](https://github.com/dequelabs/axe-core/issues/4063)) ([de3da89](https://github.com/dequelabs/axe-core/commit/de3da897e56179d94ef8a0dc1a667b5663c489d1))
- **checks:** enable help-same-as-label, but remove from rules ([#4096](https://github.com/dequelabs/axe-core/issues/4096)) ([034038a](https://github.com/dequelabs/axe-core/commit/034038a625b390ed25b30fccc96e3fc1f384dbc1))
- **new-rule:** aria-braille-equivalent finds incorrect uses of aria-braille attributes ([#4107](https://github.com/dequelabs/axe-core/issues/4107)) ([6260a2f](https://github.com/dequelabs/axe-core/commit/6260a2f25781b465960aec0b1e7781be5496c9bd))
- **page-no-duplicate-banner/contentinfo:** deprecate options.nativeScopeFilter, take into ancestors with sectioning roles ([#4105](https://github.com/dequelabs/axe-core/issues/4105)) ([c6e07be](https://github.com/dequelabs/axe-core/commit/c6e07bec43ef1935f2afb9429e9f12a937c38f14))

### Type Fixes & Improvements

Various improvements were made to the types. Potentially the most impactful of which is that the `target` and `ancestry` property now return as `UnlabelledFrameSelector` instead of as `string[]`, which is incorrect for selectors involving shadow DOM. This may create some issues during migration for any code that has been incorrectly assuming these two properties have the `string[]` type. For more details and other type changes, see the commit itself:

- **d.ts:** improve axe.d.ts types ([#4081](https://github.com/dequelabs/axe-core/issues/4081)) ([7c5f991](https://github.com/dequelabs/axe-core/commit/7c5f99143a1d97e294d21e14917f4963013fc6f8)), closes [#3966](https://github.com/dequelabs/axe-core/issues/3966)

### Bug Fixes

- **access-name:** get name from header elements ([#4097](https://github.com/dequelabs/axe-core/issues/4097)) ([fbe99bf](https://github.com/dequelabs/axe-core/commit/fbe99bf87a3ebd7d6bc4b4eca7a58bbff28a5b23))
- add <search> element semantics ([#4115](https://github.com/dequelabs/axe-core/issues/4115)) ([637bf6c](https://github.com/dequelabs/axe-core/commit/637bf6c58c3e62877511687d8a6046f8aee63f03))
- **aria-allowed-attr:** pass aria-expanded on checkbox & switch ([#4110](https://github.com/dequelabs/axe-core/issues/4110)) ([fcf76e0](https://github.com/dequelabs/axe-core/commit/fcf76e04d8534dfed75caf1f2c4a74ef4faa29ae)), closes [#3339](https://github.com/dequelabs/axe-core/issues/3339)
- **aria-allowed-role:** Add doc-glossary to allowed roles for aside element ([#4083](https://github.com/dequelabs/axe-core/issues/4083)) ([6ca38f6](https://github.com/dequelabs/axe-core/commit/6ca38f65c28e9df0c429df1018b519394e22507e))
- **aria-allowed-role:** add meter to allowed roles for named img ([#4055](https://github.com/dequelabs/axe-core/issues/4055)) ([173f29d](https://github.com/dequelabs/axe-core/commit/173f29da9558a1fd0510609aacc9e4deebdf74b4)), closes [#4054](https://github.com/dequelabs/axe-core/issues/4054)
- **aria-required-childen:** test visibility of grandchildren ([#4091](https://github.com/dequelabs/axe-core/issues/4091)) ([a202b69](https://github.com/dequelabs/axe-core/commit/a202b69b955b45fc10abe06059925013bede07eb))
- **aria-text:** typo in rule description ([#4131](https://github.com/dequelabs/axe-core/issues/4131)) ([85a0e9c](https://github.com/dequelabs/axe-core/commit/85a0e9c358ae78b4ceb2093dc9891d523eaf25b2))
- **aria-valid-attr-value:** allow empty value on aria-braille\* & aria-valuetext ([#4109](https://github.com/dequelabs/axe-core/issues/4109)) ([c4c3e65](https://github.com/dequelabs/axe-core/commit/c4c3e658408d89b5ccd747d5fad9031c5d3a0de0))
- avoid memory issues by doing better cleanup ([#4059](https://github.com/dequelabs/axe-core/issues/4059)) ([16c5cfa](https://github.com/dequelabs/axe-core/commit/16c5cfa66615537b2131a5a381fbed9a5336d853))
- avoid problems from element IDs that exist on object prototype ([#4060](https://github.com/dequelabs/axe-core/issues/4060)) ([8d135dd](https://github.com/dequelabs/axe-core/commit/8d135dd58ccd72393b981464f66a01e770d9cf95))
- **color-contrast:** correctly handle flex and position ([#4086](https://github.com/dequelabs/axe-core/issues/4086)) ([9d5f496](https://github.com/dequelabs/axe-core/commit/9d5f496c4ee7e95d113cdceab284fb6ca7be98e3))
- **color-contrast:** get text stoke from offset shadows ([#4079](https://github.com/dequelabs/axe-core/issues/4079)) ([13acffe](https://github.com/dequelabs/axe-core/commit/13acffe540f834f5321f9c5c124b565cec92ce06))
- **color-contrast:** ignore format unicode characters ([#4102](https://github.com/dequelabs/axe-core/issues/4102)) ([049522e](https://github.com/dequelabs/axe-core/commit/049522e3ef0676b198763e39e8c8a300c8eeb195))
- **color-contrast:** ignore zero width characters ([#4103](https://github.com/dequelabs/axe-core/issues/4103)) ([4deb0a0](https://github.com/dequelabs/axe-core/commit/4deb0a0876d574c3d7d586b27ae07d4f5be586db))
- **color-contrast:** process non-rgb color functions ([#4092](https://github.com/dequelabs/axe-core/issues/4092)) ([9634282](https://github.com/dequelabs/axe-core/commit/963428256d7a119c7b6188868eb9d4a4651a8949))
- **commons/dom/createGrid:** only add the visible, non-overflow areas of an element to the grid ([#4101](https://github.com/dequelabs/axe-core/issues/4101)) ([d77f47b](https://github.com/dequelabs/axe-core/commit/d77f47b8dd346e205b6cddb4f6ce544ef5f699e4))
- ensure reporter errors can propagate ([#4111](https://github.com/dequelabs/axe-core/issues/4111)) ([080cc1b](https://github.com/dequelabs/axe-core/commit/080cc1b5f5ed048ab435c312dec291d1b4eb4393))
- ignore stylesheets fetching style tag in jsdom ([#4138](https://github.com/dequelabs/axe-core/issues/4138)) ([d7c16a4](https://github.com/dequelabs/axe-core/commit/d7c16a481d5a5f68c1e970040e01f125b2025378))
- **jsdom:** allow axe.setup() without a global window ([#4116](https://github.com/dequelabs/axe-core/issues/4116)) ([33b0314](https://github.com/dequelabs/axe-core/commit/33b0314922762c0e562b613219b5cc96e3ce31f5))
- **target-size:** correctly calculate bounding box ([#4125](https://github.com/dequelabs/axe-core/issues/4125)) ([1494b4c](https://github.com/dequelabs/axe-core/commit/1494b4c2159fbae2a937cc7c3dc1d269915ef4d4))
- **target-size:** update to match new spacing requirements ([#4117](https://github.com/dequelabs/axe-core/issues/4117)) ([49eaa0e](https://github.com/dequelabs/axe-core/commit/49eaa0e1663724f70b2571cc7393e306bf0c7321))
- Use correct copyright year ([#4098](https://github.com/dequelabs/axe-core/issues/4098)) ([cab6a2b](https://github.com/dequelabs/axe-core/commit/cab6a2b2f012f5963d0f4294217578c790508fcc))
- **utils/clone:** don't try to clone elements from different window context ([#4072](https://github.com/dequelabs/axe-core/issues/4072)) ([55000d0](https://github.com/dequelabs/axe-core/commit/55000d066f018e4c3f2b9ec4eabf23eb1781dfbb))

### [4.7.2](https://github.com/dequelabs/axe-core/compare/v4.7.1...v4.7.2) (2023-05-25)

### Bug Fixes

- **aria-allowed-attr:** Add 'aria-required' to switch role ([#4029](https://github.com/dequelabs/axe-core/issues/4029)) ([cb51be4](https://github.com/dequelabs/axe-core/commit/cb51be4e3ed69e8e8b3725cab5ad1a4671f64c0c)), closes [#4027](https://github.com/dequelabs/axe-core/issues/4027)
- **aria-allowed-attr:** allow aria-required on role=slider ([#4035](https://github.com/dequelabs/axe-core/issues/4035)) ([bb2bf60](https://github.com/dequelabs/axe-core/commit/bb2bf606d75409722c645a3b2e3240cbce7e97ef))
- **aria-required-children:** set related nodes for invalid children ([#4033](https://github.com/dequelabs/axe-core/issues/4033)) ([377f72b](https://github.com/dequelabs/axe-core/commit/377f72b16a4db5272b6c056a070e977dc0589cf5))
- **tags:** Add / correct several TTv5 tags ([#4031](https://github.com/dequelabs/axe-core/issues/4031)) ([25859dd](https://github.com/dequelabs/axe-core/commit/25859dd737e271f69e3912d69ede2a127d78caa4))

### [4.7.1](https://github.com/dequelabs/axe-core/compare/v4.7.0...v4.7.1) (2023-05-15)

### Bug Fixes

- **aria-allowed-attr:** no inconsistent aria-checked on HTML checkboxes ([#3895](https://github.com/dequelabs/axe-core/issues/3895)) ([704043e](https://github.com/dequelabs/axe-core/commit/704043e8a4b9359e871403c3b4fc294b9feee931))
- **aria-allowed-attrs:** add aria-expanded to allowed attrs for menuitemcheckbox and menuitemradio ([#3994](https://github.com/dequelabs/axe-core/issues/3994)) ([0f405c6](https://github.com/dequelabs/axe-core/commit/0f405c6da55570db2d536e2a4a5464865d73e821))
- **aria-required-children:** trigger reviewEmpty with hidden children ([#4012](https://github.com/dequelabs/axe-core/issues/4012)) ([a19b6cb](https://github.com/dequelabs/axe-core/commit/a19b6cb5252deb062f6170ab035d804742e7c1df))
- **color-contrast:** support CSS 4 color spaces ([#4020](https://github.com/dequelabs/axe-core/issues/4020)) ([65621c3](https://github.com/dequelabs/axe-core/commit/65621c339fd42798cb3ce66bac62865e62926e8c))
- **link-in-text-block:** set links with pseudo-content for review ([#4005](https://github.com/dequelabs/axe-core/issues/4005)) ([949f4f8](https://github.com/dequelabs/axe-core/commit/949f4f8dfccd018b88f929bd650dc8920ce4f6f0))

## [4.7.0](https://github.com/dequelabs/axe-core/compare/v4.6.3...v4.7.0) (2023-04-17)

### Features

- **aria-roledescription:** deprecate rule ([#3948](https://github.com/dequelabs/axe-core/issues/3948)) ([1913a9e](https://github.com/dequelabs/axe-core/commit/1913a9eaf0e669927c57d56710053303cda193f8))
- **aria-roles:** deprecate the ARIA directory role ([#3952](https://github.com/dequelabs/axe-core/issues/3952)) ([893fdd0](https://github.com/dequelabs/axe-core/commit/893fdd0901f9218d9add39c16b2e6b77227fbdcd))
- **d.ts:** setup/teardown, reporters & metadata definitions ([#3966](https://github.com/dequelabs/axe-core/issues/3966)) ([78264ee](https://github.com/dequelabs/axe-core/commit/78264ee663d528bc3fbfc9ea7dbba180259f01af))
- deprecate bower ([#3889](https://github.com/dequelabs/axe-core/issues/3889)) ([651d811](https://github.com/dequelabs/axe-core/commit/651d811f0f1d1dfc5ab899568eaeb83931011f34))
- deprecate color.filteredRectStack, color.getRectStack, and dom.visuallyContains ([#3859](https://github.com/dequelabs/axe-core/issues/3859)) ([3be2bad](https://github.com/dequelabs/axe-core/commit/3be2bad2a896e72a92fe70810500fc1ef67b7027))
- **dom.focusDisabled,dom.isVisibleForScreenreader:** support the inert attribute ([#3857](https://github.com/dequelabs/axe-core/issues/3857)) ([273c971](https://github.com/dequelabs/axe-core/commit/273c97199bd596a288378427becba672b4482678))
- **metadata:** add Trusted Tester tag ([#3986](https://github.com/dequelabs/axe-core/issues/3986)) ([1f6a2a6](https://github.com/dequelabs/axe-core/commit/1f6a2a68ac10c770091741b328de7efb2ccc6687))
- support the dialog element ([#3902](https://github.com/dequelabs/axe-core/issues/3902)) ([d4522cd](https://github.com/dequelabs/axe-core/commit/d4522cdd7a90018336098f9b2119e353bd5a71ee))

### Bug Fixes

- **aria-allowed-attrs:** allow aria-description and aria-braille\* attrs ([#3956](https://github.com/dequelabs/axe-core/issues/3956)) ([2842395](https://github.com/dequelabs/axe-core/commit/2842395f9a8990f670e7025749ff8301b68a15ae))
- **aria-input-field-name:** skip combobox popups ([#3886](https://github.com/dequelabs/axe-core/issues/3886)) ([3dcdd42](https://github.com/dequelabs/axe-core/commit/3dcdd42d9ce52817d0931aa4fea1ec2b1fc9d650))
- **aria-required-children:** allow separator in menu(bar) ([#3868](https://github.com/dequelabs/axe-core/issues/3868)) ([ec9f507](https://github.com/dequelabs/axe-core/commit/ec9f50708a233acfa4f9b851618077d6637e6582))
- **aria-required-children:** do not fail for children with aria-hidden ([#3949](https://github.com/dequelabs/axe-core/issues/3949)) ([8714d6b](https://github.com/dequelabs/axe-core/commit/8714d6ba6debec93d095f5f12385d92c55b0d4b3))
- **aria-required-children:** list elements that are not allowed ([#3951](https://github.com/dequelabs/axe-core/issues/3951)) ([cce7586](https://github.com/dequelabs/axe-core/commit/cce75869be032006dc505a2af853886943973319))
- **autocomplete-valid:** allow webauthn token ([#3866](https://github.com/dequelabs/axe-core/issues/3866)) ([fd3010f](https://github.com/dequelabs/axe-core/commit/fd3010ff74eb677d4a84198bb1ca314d54393cb7))
- **color-contrast:** correcly apply opacity to foreground color ([#3973](https://github.com/dequelabs/axe-core/issues/3973)) ([d7db279](https://github.com/dequelabs/axe-core/commit/d7db279549c443c1e2f43a6b33ebee0968c64325))
- **color-contrast:** correctly calculate contrast of flex/grid items with z-index ([#3884](https://github.com/dequelabs/axe-core/issues/3884)) ([cef96be](https://github.com/dequelabs/axe-core/commit/cef96be6740657047031c2019908822f957e6c63))
- **color-contrast:** correctly compute background color for elements with opacity ([#3944](https://github.com/dequelabs/axe-core/issues/3944)) ([c051fe8](https://github.com/dequelabs/axe-core/commit/c051fe851fb5eaa75e6dc0205c4db5e75d80f3a4)), closes [#3932](https://github.com/dequelabs/axe-core/issues/3932)
- **color-contrast:** correctly compute color contrast of <slot> elements ([#3847](https://github.com/dequelabs/axe-core/issues/3847)) ([4c3a00c](https://github.com/dequelabs/axe-core/commit/4c3a00c7bd6de68b2795be37113a59d804d0a313))
- **color-contrast:** do not check contrast on elemets that are inerted ([#3894](https://github.com/dequelabs/axe-core/issues/3894)) ([da19946](https://github.com/dequelabs/axe-core/commit/da19946db610c3ab8898431645274a8a76d61a33))
- **color-contrast:** skip ligature icons ([#3867](https://github.com/dequelabs/axe-core/issues/3867)) ([9486288](https://github.com/dequelabs/axe-core/commit/948628894e3119e7f6ad45a230fbee23ffe64ef2))
- **create-grid:** correctly compute stack order for non-positioned stacking contexts ([#3930](https://github.com/dequelabs/axe-core/issues/3930)) ([8db2c24](https://github.com/dequelabs/axe-core/commit/8db2c2492d55a903b7903ed71f8b792e58dc2e8c)), closes [#3932](https://github.com/dequelabs/axe-core/issues/3932)
- **css-orientation-lock:** support the css rotate property ([#3958](https://github.com/dequelabs/axe-core/issues/3958)) ([c51f8bf](https://github.com/dequelabs/axe-core/commit/c51f8bfea87b57c269e509f88d64855368a25493))
- **focus-order-semantics:** Add ARIA role article to list of valid roles for scrollable regions ([#3927](https://github.com/dequelabs/axe-core/issues/3927)) ([f029271](https://github.com/dequelabs/axe-core/commit/f0292714b94a1483f4148f3ca7206897cfb21318))
- **is-icon-ligature:** prevent canvas2d warning willReadFrequently ([#3931](https://github.com/dequelabs/axe-core/issues/3931)) ([b3c52bb](https://github.com/dequelabs/axe-core/commit/b3c52bbb6eccda67dabcbf4183d7c201a227a0ac))
- **link-in-text-block:** allow links with identical colors ([#3861](https://github.com/dequelabs/axe-core/issues/3861)) ([5f90040](https://github.com/dequelabs/axe-core/commit/5f900402470f925686a0d8b41ac01731492bbd30))
- **respondable:** work with CDP `Page.setDocumentContent` ([#3921](https://github.com/dequelabs/axe-core/issues/3921)) ([66f23e5](https://github.com/dequelabs/axe-core/commit/66f23e59b6deddd3b95035545d622d761abe5825))
- **scrollable-region-focusable:** change impact to serious ([#3959](https://github.com/dequelabs/axe-core/issues/3959)) ([e3a5c21](https://github.com/dequelabs/axe-core/commit/e3a5c211fe007736d98a16d69995318c2c651f2d))
- **scrollable-region-focusable:** skip native controls ([#3862](https://github.com/dequelabs/axe-core/issues/3862)) ([b0bdefa](https://github.com/dequelabs/axe-core/commit/b0bdefa34b85363e742ff04e319c014fe95f31f7))

### [4.6.3](https://github.com/dequelabs/axe-core/compare/v4.6.2...v4.6.3) (2023-01-23)

### Bug Fixes

- **aria-required-children:** allow separator in menu(bar) ([#3868](https://github.com/dequelabs/axe-core/issues/3868)) ([46c9499](https://github.com/dequelabs/axe-core/commit/46c9499ff46b2062098c33f2037ab31bff4fb656))
- **autocomplete-valid:** allow webauthn token ([#3866](https://github.com/dequelabs/axe-core/issues/3866)) ([a3d1b9d](https://github.com/dequelabs/axe-core/commit/a3d1b9dae840e1c6ad096895bbd3bbc19f6836f8))
- **color-contrast:** correctly compute color contrast of <slot> elements ([#3847](https://github.com/dequelabs/axe-core/issues/3847)) ([844cea1](https://github.com/dequelabs/axe-core/commit/844cea1238ccb30cc1c4d1510f2bb3d4cfbe1706))
- **color-contrast:** skip ligature icons ([#3867](https://github.com/dequelabs/axe-core/issues/3867)) ([7dfbd9a](https://github.com/dequelabs/axe-core/commit/7dfbd9a1b2c92a8aa289f42635ec93de9aa32d25))
- **link-in-text-block:** allow links with identical colors ([#3861](https://github.com/dequelabs/axe-core/issues/3861)) ([6761f36](https://github.com/dequelabs/axe-core/commit/6761f36bb7c9a2f05cea75ca88c8e0f199c032df))
- **scrollable-region-focusable:** skip native controls ([#3862](https://github.com/dequelabs/axe-core/issues/3862)) ([aaf44e9](https://github.com/dequelabs/axe-core/commit/aaf44e908337cbf81c97433f58ec05cd3b3eeded))

### [4.6.2](https://github.com/dequelabs/axe-core/compare/v4.6.1...v4.6.2) (2022-12-23)

### Bug Fixes

- **color-contrast:** fix color-contrast check when running in an extension ([#3838](https://github.com/dequelabs/axe-core/issues/3838)) ([31a3e01](https://github.com/dequelabs/axe-core/commit/31a3e01e3df2ff4ab9ae4eebe93c644ce706a200))

### [4.6.1](https://github.com/dequelabs/axe-core/compare/v4.6.0...v4.6.1) (2022-12-14)

### Bug Fixes

- **d.ts:** add optional include to ContextObject ([#3830](https://github.com/dequelabs/axe-core/issues/3830)) ([36ed242](https://github.com/dequelabs/axe-core/commit/36ed242ec152d6d9bd05889229c4d37ae25a80c0))

## [4.6.0](https://github.com/dequelabs/axe-core/compare/v4.5.2...v4.6.0) (2022-12-12)

### Features

- **aria-required-attr:** require aria-controls on combobox and aria-valuenow on focusable separator ([#3786](https://github.com/dequelabs/axe-core/issues/3786)) ([5259e88](https://github.com/dequelabs/axe-core/commit/5259e8842e49d291d35aada0fefecfde3627299f))
- **checks/label-content-name-mismatch:** deprecate occuranceThreshold option in favor of occurrenceThreshold to fix typo ([#3782](https://github.com/dequelabs/axe-core/issues/3782)) ([5026d65](https://github.com/dequelabs/axe-core/commit/5026d65b5c93ca7ad1e52881fb5379a4a75ed9a1))
- **commons:** deprecate flattenShadowColors in favor of flattenColors ([#3792](https://github.com/dequelabs/axe-core/issues/3792)) ([af49daf](https://github.com/dequelabs/axe-core/commit/af49dafcde281443823c2d878ce4de23ee573212))
- **context:** allow selecting shadow DOM nodes ([#3798](https://github.com/dequelabs/axe-core/issues/3798)) ([9e1e31b](https://github.com/dequelabs/axe-core/commit/9e1e31b253398cc2a3e840c7cb9c5527f4e4ba66))
- **list,listitem:** do not allow group as allowed parent or child ([#3784](https://github.com/dequelabs/axe-core/issues/3784)) ([d1cbf6f](https://github.com/dequelabs/axe-core/commit/d1cbf6fe20a1920649566e521c0c6668efd0d470))
- **required-attr:** require aria-checked for checkbox-like and radio-like roles ([#3785](https://github.com/dequelabs/axe-core/issues/3785)) ([563e4e9](https://github.com/dequelabs/axe-core/commit/563e4e90facc9b955c1b2395b466cd65d72bf04e))
- **utils:** new shadowSelectAll utility ([#3796](https://github.com/dequelabs/axe-core/issues/3796)) ([5865462](https://github.com/dequelabs/axe-core/commit/586546261a9523077e1710cecf1751a5e6f172e6))

### Bug Fixes

- **aria-allowed-role:** allow combobox on button, checkbox and combobox on input[type=button] ([#3354](https://github.com/dequelabs/axe-core/issues/3354)) ([ac688c0](https://github.com/dequelabs/axe-core/commit/ac688c04b70d6bcdfa13ac4d7faf824d2bc4af01)), closes [#3353](https://github.com/dequelabs/axe-core/issues/3353)
- **aria-required-children:** allow menu as child of menu ([#3820](https://github.com/dequelabs/axe-core/issues/3820)) ([a6569e5](https://github.com/dequelabs/axe-core/commit/a6569e5dcad2fd32160b78fba86c988e7cb3d323))
- **color-contrast:** consider -webkit-text-stroke & -webkit-text-fill-color ([#3791](https://github.com/dequelabs/axe-core/issues/3791)) ([228daf1](https://github.com/dequelabs/axe-core/commit/228daf153b3c6e45933a2ca8feac765f942663f4))
- **color-contrast:** correctly calculate background color of text nodes with different size than their container ([#3703](https://github.com/dequelabs/axe-core/issues/3703)) ([123b83c](https://github.com/dequelabs/axe-core/commit/123b83c00f0e770dd784ce72ab1fddddf4a4961e))
- **get-role:** handle presentation role inheritance for vnodes with no parent ([#3801](https://github.com/dequelabs/axe-core/issues/3801)) ([b971caf](https://github.com/dequelabs/axe-core/commit/b971caf3eea03170c0710c5b00272fe13f65e825))
- **html-lang-valid:** only run rule when attribute has value ([#3663](https://github.com/dequelabs/axe-core/issues/3663)) ([1a7eecb](https://github.com/dequelabs/axe-core/commit/1a7eecb72c3b1c772392b7c18feee75e0f51dbcb)), closes [#3624](https://github.com/dequelabs/axe-core/issues/3624)
- **metadata:** Map aria-required-children to ACT rule bc4a75 ([#3790](https://github.com/dequelabs/axe-core/issues/3790)) ([a33a523](https://github.com/dequelabs/axe-core/commit/a33a523eb4dfdc62743d78aab124e74afc98a59e))

### [4.5.2](https://github.com/dequelabs/axe-core/compare/v4.5.1...v4.5.2) (2022-11-14)

### Bug Fixes

- **aria-required-children:** allow menu and menubar to be empty ([#3770](https://github.com/dequelabs/axe-core/issues/3770)) ([d11aed8](https://github.com/dequelabs/axe-core/commit/d11aed8a04968674ff872cf832cea9252023490e))
- **create-grid:** include elements scrolled out of view in the grid ([#3773](https://github.com/dequelabs/axe-core/issues/3773)) ([a563263](https://github.com/dequelabs/axe-core/commit/a5632631c72f52a5cf38a955052f28b1a931f07c))
- do not warn when using webpack ([#3777](https://github.com/dequelabs/axe-core/issues/3777)) ([d6cef9a](https://github.com/dequelabs/axe-core/commit/d6cef9a83152256966b259881521c159b0cf21a8))
- **link-in-text-block:** don't match style or script text ([#3775](https://github.com/dequelabs/axe-core/issues/3775)) ([ab877f9](https://github.com/dequelabs/axe-core/commit/ab877f9d709205c2dadffc656f82dc631b66687b))
- prevent undefined relatedNodes from halting axe ([#3778](https://github.com/dequelabs/axe-core/issues/3778)) ([efefb18](https://github.com/dequelabs/axe-core/commit/efefb18f720590369a97c2937331f4e2e33ef6a5))

### [4.5.1](https://github.com/dequelabs/axe-core/compare/v4.5.0...v4.5.1) (2022-11-01)

### Bug Fixes

- allow axe to run in certain configurations of jsdom ([#3755](https://github.com/dequelabs/axe-core/issues/3755)) ([b74c5d4](https://github.com/dequelabs/axe-core/commit/b74c5d41c4041554c9dd1c00dfd6387cb069d1a5))
- prevent crash on jsdom when preloading CSSOM ([#3754](https://github.com/dequelabs/axe-core/issues/3754)) ([b1f0c6b](https://github.com/dequelabs/axe-core/commit/b1f0c6bba2debc6c6a106412da530975cd4ade24))

## [4.5.0](https://github.com/dequelabs/axe-core/compare/v4.4.3...v4.5.0) (2022-10-17)

### Features

#### Highlights

- **new rule:** Add WCAG 2.2 target-size rule (off by default) ([#3616](https://github.com/dequelabs/axe-core/issues/3616)) ([691f1b6](https://github.com/dequelabs/axe-core/commit/691f1b69775daa8d0a620c5a1b72f06f6edc72c3))
- **new rule:** Add meta-refresh-no-exceptions (off by default, wcag2aaa) ([#3530](https://github.com/dequelabs/axe-core/issues/3530)) ([27031a8](https://github.com/dequelabs/axe-core/commit/27031a827cf273c87449971a4c6aec467e56986d))
- **identical-links-same-purpose:** Disable by default (wcag2aaa rule) ([#3615](https://github.com/dequelabs/axe-core/issues/3615)) ([a2c2d2f](https://github.com/dequelabs/axe-core/commit/a2c2d2fba67270b16f2421984650cadc91c8f928))
- **link-in-text-block:** Remove experimental and enable by default ([#3706](https://github.com/dequelabs/axe-core/issues/3706)) ([37b6e7a](https://github.com/dequelabs/axe-core/commit/37b6e7a56f7fae15553ce103787546c8927a6492))
- **i18n:** Add Norwegian Bokmål locale ([#3375](https://github.com/dequelabs/axe-core/issues/3375)) ([2886d33](https://github.com/dequelabs/axe-core/commit/2886d330d9bd7193947b6f8d650492efdd7b04ec))
- **i18n:** Add Hebrew translation ([#3438](https://github.com/dequelabs/axe-core/issues/3438)) ([b4162ed](https://github.com/dequelabs/axe-core/commit/b4162ed181d47370284e2fbbd56d4ec9b4585d69))

#### Tags and Metadata Updates

Various changes of tags, for greater consistency with [ACT Rules](https://www.w3.org/WAI/standards-guidelines/act/rules/).

- **area-alt:** Remove the wcag111 tag ([#3479](https://github.com/dequelabs/axe-core/issues/3479)) ([1c3cc51](https://github.com/dequelabs/axe-core/commit/1c3cc510057398bdbe2735da87bebbc2781f8e69))
- **aria-hidden-focus:** Remove the wcag131 tag ([#3477](https://github.com/dequelabs/axe-core/issues/3477)) ([36ace76](https://github.com/dequelabs/axe-core/commit/36ace76cd3b3706b19e59dc5168a77a5462e78b6))
- **empty-table-headers:** Rule is now best-practice and fails instead of incompletes ([#3427](https://github.com/dequelabs/axe-core/issues/3427)) ([0a4397d](https://github.com/dequelabs/axe-core/commit/0a4397d0998a3e3035d002e5f724cce4faf0b541)), closes [#3404](https://github.com/dequelabs/axe-core/issues/3404)
- **frame-title:** Remove wcag241 tag ([#3519](https://github.com/dequelabs/axe-core/issues/3519)) ([9c6b828](https://github.com/dequelabs/axe-core/commit/9c6b828658d0a566e7b41801979e49115732bc86))
- **input-image-alt:** Add the wcag412 tag ([#3478](https://github.com/dequelabs/axe-core/issues/3478)) ([34272c6](https://github.com/dequelabs/axe-core/commit/34272c6469ff84b5aafd6ae575c5064931a62d80))
- **label,select-name:** Remove the sc131 tag ([#3476](https://github.com/dequelabs/axe-core/issues/3476)) ([7caef89](https://github.com/dequelabs/axe-core/commit/7caef89cdd0eddce7550b590eda3fb0cdc9be3ac))
- **meta-viewport:** Report as violation of wcag 1.4.4 ([#3704](https://github.com/dequelabs/axe-core/issues/3704)) ([6f7e4a9](https://github.com/dequelabs/axe-core/commit/6f7e4a9c08d0a9c8a9f74832883be9052a63684d))
- **metadata:** Update ACT tags & actIds ([#3498](https://github.com/dequelabs/axe-core/issues/3498)) ([571722b](https://github.com/dequelabs/axe-core/commit/571722bde4c2e0b84d7abdeece91a03e7b6613c8))

#### Deprecations

- Deprecate Internet Explorer support ([#3644](https://github.com/dequelabs/axe-core/issues/3644)) ([11f5163](https://github.com/dequelabs/axe-core/commit/11f51632491e265136c0284cd219225627a7415f))
- Deprecate sri-history.json file ([#3646](https://github.com/dequelabs/axe-core/issues/3646)) ([6f6a89e](https://github.com/dequelabs/axe-core/commit/6f6a89e13d56acdda5dbcc74d1f2d7ba2190f0a6))
- Deprecate and replace dom.isVisible, utils.isHidden, and dom.isHiddenWithCss ([#3351](https://github.com/dequelabs/axe-core/issues/3351)) ([1ae2ac0](https://github.com/dequelabs/axe-core/commit/1ae2ac045d1f709d1695fa76886e13604d415229))
- Deprecate only-dlitems-evaluate & only-listitems-evaluate methods ([#3724](https://github.com/dequelabs/axe-core/issues/3724)) ([322e9ed](https://github.com/dequelabs/axe-core/commit/322e9edff389d407021d94a7dadf9b80e1c935de))
- Deprecate presentation-role-conflict-matchess ([#3638](https://github.com/dequelabs/axe-core/issues/3638)) ([0f02a15](https://github.com/dequelabs/axe-core/commit/0f02a1530b91dd38cbc620e358e403f5250cba4c))
- Deprecate is-visible-matches, use is-visible-on-screen-matches ([#3679](https://github.com/dequelabs/axe-core/issues/3679)) ([738dd8f](https://github.com/dequelabs/axe-core/commit/738dd8f38f241c061773b44dba3194281749eb15))
- Deprecate not-html-matches, use :not(html) instead ([#3540](https://github.com/dequelabs/axe-core/issues/3540)) ([e0010d9](https://github.com/dequelabs/axe-core/commit/e0010d9f2c4f80b41dcd1e1821de269dd5a63dac))

#### Others

- **aria-roles:** Permit fallback roles ([#3683](https://github.com/dequelabs/axe-core/issues/3683)) ([5665260](https://github.com/dequelabs/axe-core/commit/5665260320543665d9df2b8620940b553bf17a19))
- **aria-required-children:** Allow aria-busy on children ([#3569](https://github.com/dequelabs/axe-core/issues/3569)) ([3618f50](https://github.com/dequelabs/axe-core/commit/3618f5017b698bfa7ebd5d36e37978ed8d2e77f9))
- **aria-required-children:** Fail for children which are not listed as required ([#3597](https://github.com/dequelabs/axe-core/issues/3597)) ([b5ceabc](https://github.com/dequelabs/axe-core/commit/b5ceabc25e4a17e8f3c114acdb1c2fe0d2ba96f3))
- **getRules:** Return actIds when set ([#3470](https://github.com/dequelabs/axe-core/issues/3470)) ([a3d5cef](https://github.com/dequelabs/axe-core/commit/a3d5cef612013ffe0db5383a4047508654444d3c))
- **is-in-tab-order:** Add isInTabOrder to commons ([#3619](https://github.com/dequelabs/axe-core/issues/3619)) ([77afe90](https://github.com/dequelabs/axe-core/commit/77afe903484343500ebe5fe6126cf6e029607f64)), closes [#3500](https://github.com/dequelabs/axe-core/issues/3500)
- **list/definition-list:** Only allow required owned roles ([#3707](https://github.com/dequelabs/axe-core/issues/3707)) ([a920d35](https://github.com/dequelabs/axe-core/commit/a920d35f8d8e6f3590a01d47f20a0e3321e45a6c))
- **presentation-role-conflict:** Test img elements with empty alt ([#3717](https://github.com/dequelabs/axe-core/issues/3717)) ([ea32fa7](https://github.com/dequelabs/axe-core/commit/ea32fa794bfc72e863997dfa85a60e23a53f0cda))

### Bug Fixes

- **utils:** greatly improve the speed of querySelectorAll ([#3423](https://github.com/dequelabs/axe-core/issues/3423)) ([1cae5ea](https://github.com/dequelabs/axe-core/commit/1cae5eae49abe01e6f84c8ee18b5b0c2ff700492))
- **aria-hidden-focus:** Do not fail for focus trap bumper elements ([#3667](https://github.com/dequelabs/axe-core/issues/3667)) ([46b6658](https://github.com/dequelabs/axe-core/commit/46b6658af6ee21735b59c4c00455c13dddbce761))
- **aria-required-attr:** aria-valuenow is no longer required for spinbutton ([#3552](https://github.com/dequelabs/axe-core/issues/3552)) ([a22cf56](https://github.com/dequelabs/axe-core/commit/a22cf564be1f3e73fc21bff59ba895d34755f889))
- **aria-required-parent:** Allow nested group and presentational roles ([#3492](https://github.com/dequelabs/axe-core/issues/3492)) ([4685270](https://github.com/dequelabs/axe-core/commit/4685270af0d1f737d38a0c06b59137c967679227))
- **aria-valid-attr-value:** Report empty values as incomplete ([#3635](https://github.com/dequelabs/axe-core/issues/3635)) ([fff39db](https://github.com/dequelabs/axe-core/commit/fff39dba1408d2a11b15485191b843b0661e0790))
- **avoid-inline-spacing:** Add spacing threshold ([#3533](https://github.com/dequelabs/axe-core/issues/3533)) ([92add05](https://github.com/dequelabs/axe-core/commit/92add056355cc4106caaaf523854f82afb06e191))
- **checks/no-focusable-disable:** Don't count non-disableable elements as disabled ([#3393](https://github.com/dequelabs/axe-core/issues/3393)) ([bb8b5ca](https://github.com/dequelabs/axe-core/commit/bb8b5ca760f45755ba628ac5873350b5dc4c47d1)), closes [#2466](https://github.com/dequelabs/axe-core/issues/2466) [#2934](https://github.com/dequelabs/axe-core/issues/2934) [#2934](https://github.com/dequelabs/axe-core/issues/2934) [#3315](https://github.com/dequelabs/axe-core/issues/3315)
- **checks/unsupportedrole:** Support unsupported dpub and fallback roles, add role to message ([#3395](https://github.com/dequelabs/axe-core/issues/3395)) ([3c0f10f](https://github.com/dequelabs/axe-core/commit/3c0f10f979ae1e3377dd6ef0d2b445ea5ec90eb3)), closes [#2466](https://github.com/dequelabs/axe-core/issues/2466) [#2934](https://github.com/dequelabs/axe-core/issues/2934) [#2934](https://github.com/dequelabs/axe-core/issues/2934) [#3282](https://github.com/dequelabs/axe-core/issues/3282)
- **color-contrast-enhanced:** Avoid duplicates between color-contrast and color-contrast-enhanced ([#3714](https://github.com/dequelabs/axe-core/issues/3714)) ([2811f77](https://github.com/dequelabs/axe-core/commit/2811f778e1d0293148375bb4028d5ba0379f1b21))
- **color-contrast:** Correctly determine color contrast for element that exactly overlaps midpoint of node ([#3565](https://github.com/dequelabs/axe-core/issues/3565)) ([90de9aa](https://github.com/dequelabs/axe-core/commit/90de9aa241d9dbbd39ccb2714194ae3a7c0cb2ce))
- **frame-focusable-content:** don't fail for elements with negative tabindex ([#3493](https://github.com/dequelabs/axe-core/issues/3493)) ([94e75ac](https://github.com/dequelabs/axe-core/commit/94e75ac80689145297fbc2dc8298b772412c7525))
- **frame-title-unique:** Make frame-title-unique reviewOnly and WCAG412 ([#3610](https://github.com/dequelabs/axe-core/issues/3610)) ([8401b8e](https://github.com/dequelabs/axe-core/commit/8401b8e8fbf691d8252e090b13864b826c5e8591)), closes [#3487](https://github.com/dequelabs/axe-core/issues/3487)
- **frame-title:** ignore frames with negative tabindex ([f61f825](https://github.com/dequelabs/axe-core/commit/f61f825843ec323fbe7ebb7096bf4c7341f10feb))
- **frame-title:** return incomplete for presentational iframe with empty title ([#3594](https://github.com/dequelabs/axe-core/issues/3594)) ([c2cfd84](https://github.com/dequelabs/axe-core/commit/c2cfd845bd1b0ff684b9cda4f7fb5f6f30fcfda7))
- **is-hidden-for-everyone:** count elements inside closed details as hidden ([#3726](https://github.com/dequelabs/axe-core/issues/3726)) ([e65e962](https://github.com/dequelabs/axe-core/commit/e65e9627cd709f6202dd2151ba39bac5a50a8fbb))
- **is-hidden-for-everyone:** support content-visibility: hidden ([#3690](https://github.com/dequelabs/axe-core/issues/3690)) ([95cf6e7](https://github.com/dequelabs/axe-core/commit/95cf6e7c3019358570b7dd7ea1206ce24a980b65))
- **is-visible-on-screen:** ignore elements hidden by overflow:hidden ([#3676](https://github.com/dequelabs/axe-core/issues/3676)) ([2935950](https://github.com/dequelabs/axe-core/commit/293595066cea9a5c18d2ed7bf4de69cbfffe1ed1))
- **label:** avoid passing labels because of an input[value] ([#3688](https://github.com/dequelabs/axe-core/issues/3688)) ([54a8116](https://github.com/dequelabs/axe-core/commit/54a8116546b056569d1551b8ea3c8b01fa7d8df5))
- **link-in-text-block:** Update rule to match current guidance, revise tests ([#3575](https://github.com/dequelabs/axe-core/issues/3575)) ([edb88ed](https://github.com/dequelabs/axe-core/commit/edb88edf48e91df87497b471e1b101842adf9e1f))
- **meta-refresh:** Add WCAG's 20-hour exception ([#3525](https://github.com/dequelabs/axe-core/issues/3525)) ([5beb6c3](https://github.com/dequelabs/axe-core/commit/5beb6c3c31936a8cb787709ef2bd11730916b5b2))
- **no-autoplay-audio:** add reviewOnFail and update tests ([#3557](https://github.com/dequelabs/axe-core/issues/3557)) ([60ec997](https://github.com/dequelabs/axe-core/commit/60ec99735b2872d7f992b379900acd25918e3f86))
- **object-alt:** ignore unloaded objects ([#3680](https://github.com/dequelabs/axe-core/issues/3680)) ([8e03e2c](https://github.com/dequelabs/axe-core/commit/8e03e2cabe628b036a48575ec84569e7e0e333ae))
- **page-has-heading-one,landmark-one-main:** do not fail if modal is open ([#3501](https://github.com/dequelabs/axe-core/issues/3501)) ([c6af316](https://github.com/dequelabs/axe-core/commit/c6af31600a804f1643d404e439391f3b810e8da5))
- **td-headers-attr:** ignore hidden cells with headers attr ([#3684](https://github.com/dequelabs/axe-core/issues/3684)) ([e0403f4](https://github.com/dequelabs/axe-core/commit/e0403f48ee86e883548cd1f40927a3b5edaeb974))
- **td-headers-attr:** ignore table elements with their role changed ([#3687](https://github.com/dequelabs/axe-core/issues/3687)) ([902d07c](https://github.com/dequelabs/axe-core/commit/902d07c8d2268dc4ab0a6573909bd348ede706b1))
- **utils.matches:** fix attribute exists selector to match empty attributes ([#3669](https://github.com/dequelabs/axe-core/issues/3669)) ([4b768ea](https://github.com/dequelabs/axe-core/commit/4b768ea2170291038be80b29f277206f21719dff))
- **valid-lang:** ignore lang on elements with no text ([#3523](https://github.com/dequelabs/axe-core/issues/3523)) ([fd85f39](https://github.com/dequelabs/axe-core/commit/fd85f3927ef85543887ff9c0bda67e46f8e9c316))
- **valid-lang:** run on aria-hidden text ([#3634](https://github.com/dequelabs/axe-core/issues/3634)) ([a0860bd](https://github.com/dequelabs/axe-core/commit/a0860bd7b5afaabf8f2aee2bd516b9015eb7b5cf))
- **video-caption:** remove excludeHidden: false ([#3554](https://github.com/dequelabs/axe-core/issues/3554)) ([a3e4bbe](https://github.com/dequelabs/axe-core/commit/a3e4bbec30fd7cf0f197fdf69d0886cd475b06c1))

### [4.4.3](https://github.com/dequelabs/axe-core/compare/v4.4.2...v4.4.3) (2022-07-13)

### Bug Fixes

- **axe.d.ts:** updates type definition for Rule to add reviewOnFail ([#3521](https://github.com/dequelabs/axe-core/issues/3521)) ([afb2478](https://github.com/dequelabs/axe-core/commit/afb247844e697475f5bf81fd7b03ed30c2c65830))
- Continue supporting Node >=4 ([#3538](https://github.com/dequelabs/axe-core/issues/3538)) ([da7923b](https://github.com/dequelabs/axe-core/commit/da7923bd5bcaa71f52f6b4e6b8eece1ea12c1c2a)), closes [#3537](https://github.com/dequelabs/axe-core/issues/3537)

### [4.4.2](https://github.com/dequelabs/axe-core/compare/v4.4.1...v4.4.2) (2022-05-12)

### Bug Fixes

- **aria-hidden-focusable:** report incomplete with onfocus ([#3407](https://github.com/dequelabs/axe-core/issues/3407)) ([6755e89](https://github.com/dequelabs/axe-core/commit/6755e8961389ba2fcf87c7877737482b819a0553))
- **aria-hidden-focus:** Update rule help & description ([#3422](https://github.com/dequelabs/axe-core/issues/3422)) ([7cfb4b1](https://github.com/dequelabs/axe-core/commit/7cfb4b1c468231022838bbbe9edef69fa50de891))
- **aria-valid-attr-value:** add note about element id being in a different shadow DOM tree ([#3421](https://github.com/dequelabs/axe-core/issues/3421)) ([24f74df](https://github.com/dequelabs/axe-core/commit/24f74df8474cfd4f602cb368563955ff42cc2870))
- **color-contrast:** consistently return color contrast information in the data object for pseudo elements ([#3453](https://github.com/dequelabs/axe-core/issues/3453)) ([1a9d95e](https://github.com/dequelabs/axe-core/commit/1a9d95effeaca26e2d7cf7aa867e6a76f8cf50ad))
- **deprecatedrole,color-contrast:** fix message to properly include deprecated role, improve color-contrast pass messages ([#3387](https://github.com/dequelabs/axe-core/issues/3387)) ([650e503](https://github.com/dequelabs/axe-core/commit/650e5037dc1f8908897e834ee1ab3aa8e87ac1e7))
- **html-elms:** update role allowances for nav element ([#3402](https://github.com/dequelabs/axe-core/issues/3402)) ([8aa816a](https://github.com/dequelabs/axe-core/commit/8aa816a15fbd667ee2bf8256a984dcc8aa7c0392)), closes [#3401](https://github.com/dequelabs/axe-core/issues/3401)
- **standards:** fix address typo in html-elms.js ([#3418](https://github.com/dequelabs/axe-core/issues/3418)) ([f235cc7](https://github.com/dequelabs/axe-core/commit/f235cc7069734096df8db434d4c1e68f11fcc88d)), closes [#3417](https://github.com/dequelabs/axe-core/issues/3417)

## [4.4.1](https://github.com/dequelabs/axe-core/compare/v4.4.0...v4.4.1) (2022-02-03)

### Bug Fixes

- **DPUB:** deprecate endnote, rather than endnotes (plural) ([#3373](https://github.com/dequelabs/axe-core/issues/3373)) ([1ba9917](https://github.com/dequelabs/axe-core/pull/3377/commits/1ba9917801df9194092769c7c58f048884bc25fd))
- **d.ts:** correct getFrameContexts return type ([#3370](https://github.com/dequelabs/axe-core/issues/3370)) ([a1b9611](https://github.com/dequelabs/axe-core/commit/a1b96113add29756a421e3934cb089d3734dec16))

## [4.4.0](https://github.com/dequelabs/axe-core/compare/v4.3.5...v4.4.0) (2022-01-26)

### Features

- add new ARIA roles ([#3138](https://github.com/dequelabs/axe-core/issues/3138)) ([61be7e5](https://github.com/dequelabs/axe-core/commit/61be7e555152d89c6770679fd6fdac10038f7cd3))
- **aria-allowed-attr:** report violation for non-global ARIA attrs on element without role ([#3342](https://github.com/dequelabs/axe-core/issues/3342)) ([fb5d990](https://github.com/dequelabs/axe-core/commit/fb5d99005cf5e989a51b276b88ad67011cc02d49))
- **aria-allowed-attr:** report violations for non-global ARIA attributes on elements without a role ([#3102](https://github.com/dequelabs/axe-core/issues/3102)) ([87cfc0b](https://github.com/dequelabs/axe-core/commit/87cfc0b4f4d998a88a2d534438e4f2ccf9427a86))
- **color-contrast:** add support for CSS mix-blend-mode ([#3226](https://github.com/dequelabs/axe-core/issues/3226)) ([d497f40](https://github.com/dequelabs/axe-core/commit/d497f40026ba2266e31e7e8802511eb242ef0066))
- **commons:** deprecate shadowElementsFromPoint ([#3311](https://github.com/dequelabs/axe-core/issues/3311)) ([c3a7d16](https://github.com/dequelabs/axe-core/commit/c3a7d1648d0e319003f573f6b4cfe94a1a043808))
- **configure:** Deprecate branding: Object, use a string instead. ([#3278](https://github.com/dequelabs/axe-core/issues/3278)) ([1f01309](https://github.com/dequelabs/axe-core/commit/1f0130993b64e2016fcc9ea17f63f8da380de513))
- **dpub:** upgrade to DPUB 1.1 and report deprecated roles ([#3280](https://github.com/dequelabs/axe-core/issues/3280)) ([034a846](https://github.com/dequelabs/axe-core/commit/034a846cf38bff4ff5836b22c78c0f44e2cb3f6d))
- **options:** make axe.ping configurable with pingWaitTime ([#3273](https://github.com/dequelabs/axe-core/issues/3273)) ([ce4dfaf](https://github.com/dequelabs/axe-core/commit/ce4dfaff7b98c69e15290b71f76e1c523c78ed8d))
- **rule:** add new color-contrast-enhanced rule (WCAG AAA) ([#3235](https://github.com/dequelabs/axe-core/issues/3235)) ([bec20fc](https://github.com/dequelabs/axe-core/commit/bec20fcbf2f407ecab2fc6d0d829d23525989d48)), closes [#2934](https://github.com/dequelabs/axe-core/issues/2934)

### Bug Fixes

- **allowed-role:** area without href can have a button or link role ([#3275](https://github.com/dequelabs/axe-core/issues/3275)) ([bf7e60a](https://github.com/dequelabs/axe-core/commit/bf7e60aad9b00844c2b18691d463d5478b53aa2a))
- **aria-allowed-attr:** check for invalid `aria-attributes` for `role="row"` ([#3160](https://github.com/dequelabs/axe-core/issues/3160)) ([cfa900d](https://github.com/dequelabs/axe-core/commit/cfa900d57265907b638dad36ba405a5b40dbde9c))
- **aria-allowed-attr:** revert violation for non-global ARIA attrs on element without role ([#3243](https://github.com/dequelabs/axe-core/issues/3243)) ([112b960](https://github.com/dequelabs/axe-core/commit/112b960ee95b6a6abfb38a15b7092d9847512f0f))
- **aria-allowed-children,aria-allowed-parent:** allow group role in listbox ([#3195](https://github.com/dequelabs/axe-core/issues/3195)) ([cb01975](https://github.com/dequelabs/axe-core/commit/cb019755d9cb52b997aae340f406ac26d0cf90e5))
- **aria-allowed-role:** allow title, aria-label and aria-labelledby on a img element with a supported role ([#3224](https://github.com/dequelabs/axe-core/issues/3224)) ([006a681](https://github.com/dequelabs/axe-core/commit/006a681395422bbd0603bab346dbdc6b38087d83))
- **aria-allowed-role:** landmark roles banner on header and contentinfo on footer to only report on top-level rule ([#3142](https://github.com/dequelabs/axe-core/issues/3142)) ([1fd4b00](https://github.com/dequelabs/axe-core/commit/1fd4b004b2543727d4a3775f355934327765baa1))
- **aria-allowed-roles:** allow role=radio on img with non-empty name ([#3320](https://github.com/dequelabs/axe-core/issues/3320)) ([accafdf](https://github.com/dequelabs/axe-core/commit/accafdfe170b8ad4b3706134d60808a614e40b00))
- **aria-allowed-roles:** update role allowances for section element ([#3238](https://github.com/dequelabs/axe-core/issues/3238)) ([99676ec](https://github.com/dequelabs/axe-core/commit/99676ece547be39d71e776a5b9cae2da41c31572)), closes [#3237](https://github.com/dequelabs/axe-core/issues/3237)
- **aria-allowed-role:** Update allowed roles based on ARIA spec updates ([#3124](https://github.com/dequelabs/axe-core/issues/3124)) ([00f6efc](https://github.com/dequelabs/axe-core/commit/00f6efcd55eb0a4c56cc3ca1acc7c79e3d22f58d))
- **aria-allowed-role:** updates the allowed roles for the wbr element to none and presentation ([#3192](https://github.com/dequelabs/axe-core/issues/3192)) ([2f439b3](https://github.com/dequelabs/axe-core/commit/2f439b3fdb7e7fa3228e663c5313af0f08aa4327)), closes [#3177](https://github.com/dequelabs/axe-core/issues/3177)
- **aria-prohibited-attr:** update metadata message ([#3206](https://github.com/dequelabs/axe-core/issues/3206)) ([d1a768e](https://github.com/dequelabs/axe-core/commit/d1a768eaefe6d1c95e925174bc979bc7a95ee7d9))
- **autocomplete-valid:** Allow custom autocomplete attribute values ([#3225](https://github.com/dequelabs/axe-core/issues/3225)) ([6076ee8](https://github.com/dequelabs/axe-core/commit/6076ee8a7ba7527c9886916db1eda5d90cd26259))
- **axe.configure:** do not remove newline characters from locale doT strings ([#3216](https://github.com/dequelabs/axe-core/issues/3216)) ([ea2ce17](https://github.com/dequelabs/axe-core/commit/ea2ce171fd7562e6b85471e72dddc84be23a4297))
- **axe.d.ts:** allow Node for include/exclude object ([#3338](https://github.com/dequelabs/axe-core/issues/3338)) ([e699939](https://github.com/dequelabs/axe-core/commit/e699939bfd43fcc66b357d0e7329adce6f29cd6b))
- **axe.run:** add option to increase iframe ping timeout ([#3233](https://github.com/dequelabs/axe-core/issues/3233)) ([ec937e3](https://github.com/dequelabs/axe-core/commit/ec937e3e147274cbdbba2b046a651c90623130e4))
- check for hidden elements on `aria-errormessage` ([#3156](https://github.com/dequelabs/axe-core/issues/3156)) ([95d37dd](https://github.com/dequelabs/axe-core/commit/95d37dd794dc8552d731fabf45244b260da53d8f))
- **color-contrast:** account for 0 width scroll regions with children ([#3172](https://github.com/dequelabs/axe-core/issues/3172)) ([5908f0d](https://github.com/dequelabs/axe-core/commit/5908f0d644c20e7091329bd8bbeb191837d27feb))
- **color-contrast:** account for elements that do not fill entire bounding size ([#3186](https://github.com/dequelabs/axe-core/issues/3186)) ([699697b](https://github.com/dequelabs/axe-core/commit/699697bc237b6c69050e4572ba5cfdc5f338f450))
- **color-contrast:** check bg on fg contrast for thin text-shadows ([#3350](https://github.com/dequelabs/axe-core/issues/3350)) ([d92a7e5](https://github.com/dequelabs/axe-core/commit/d92a7e527eb61e5c62a59019b024f288ebac3663))
- **color-contrast:** correctly apply page background color ([#3207](https://github.com/dequelabs/axe-core/issues/3207)) ([fbc581d](https://github.com/dequelabs/axe-core/commit/fbc581d77e457fe092ecc2b95015e667292f1a08))
- **color-contrast:** correctly compute color-contrast of truncated children ([#3203](https://github.com/dequelabs/axe-core/issues/3203)) ([ac7b2b5](https://github.com/dequelabs/axe-core/commit/ac7b2b5ec402e9de91c50ef39aefd5843f0d62bb))
- **color-contrast:** correctly handle nested scroll regions ([#3212](https://github.com/dequelabs/axe-core/issues/3212)) ([22db29c](https://github.com/dequelabs/axe-core/commit/22db29ca7e9964a8447392fba45a09057a926ab9))
- **color-contrast:** correctly work with positioned elements without z-index ([#3209](https://github.com/dequelabs/axe-core/issues/3209)) ([725a20c](https://github.com/dequelabs/axe-core/commit/725a20c91b9006e64009059f0ab9d1a0098d29df))
- **color-contrast:** inconsistency of bgOverlap message based on scroll ([#3310](https://github.com/dequelabs/axe-core/issues/3310)) ([25eff98](https://github.com/dequelabs/axe-core/commit/25eff98e698f8dd00e5efd05a9b325a5202eae9b))
- **color-contrast:** properly blend multiple alpha colors ([#3193](https://github.com/dequelabs/axe-core/issues/3193)) ([e930a70](https://github.com/dequelabs/axe-core/commit/e930a7081d4308549370f74e9d341badd9661584))
- **core:** Incomplete fallback was missing, and could cause infinite loop ([#3302](https://github.com/dequelabs/axe-core/issues/3302)) ([f23d8c8](https://github.com/dequelabs/axe-core/commit/f23d8c8e305d27c8323547731b335d2900e03239))
- **custom-elms:** Don't error on custom Element.children prop ([#3326](https://github.com/dequelabs/axe-core/issues/3326)) ([2ad92f6](https://github.com/dequelabs/axe-core/commit/2ad92f67205fd370c3ad5ba44274248c2b9fe6e5))
- **d.ts:** Add PartialResults type ([#3126](https://github.com/dequelabs/axe-core/issues/3126)) ([544b6d5](https://github.com/dequelabs/axe-core/commit/544b6d579f3eecf8e102a53a911bbce0bd53b74f))
- **get-selector:** do not URL encode or token escape attribute selectors ([#3215](https://github.com/dequelabs/axe-core/issues/3215)) ([6f7e183](https://github.com/dequelabs/axe-core/commit/6f7e183553206afa2ca21914bf388e019b4acfdc))
- **getFrameContext:** option.iframe=false always returns an empty array ([#3279](https://github.com/dequelabs/axe-core/issues/3279)) ([dfa9725](https://github.com/dequelabs/axe-core/commit/dfa9725e39b8b4bca5a1856d44ff21c9894fc958))
- greater consistency of help / description text ([#3204](https://github.com/dequelabs/axe-core/issues/3204)) ([0677565](https://github.com/dequelabs/axe-core/commit/0677565941486cf339e7267760d4e533d4a29a05))
- **is-visible:** do not error if window.Node does not exist ([#3168](https://github.com/dequelabs/axe-core/issues/3168)) ([4046087](https://github.com/dequelabs/axe-core/commit/404608773abf7b4d069a64931adf4ac7e942b663))
- **jsdoc:** typo Sting -> String ([d1cc205](https://github.com/dequelabs/axe-core/commit/d1cc205629cb159ca760b18ece1f1e9aea22ec3a))
- **label-content-name-mismatch:** account for formatting elements ([#3349](https://github.com/dequelabs/axe-core/issues/3349)) ([53a6684](https://github.com/dequelabs/axe-core/commit/53a6684a6ebef004d451ff1be63bbfe4503e9447))
- **label-title-only:** allow hidden labels ([#3183](https://github.com/dequelabs/axe-core/issues/3183)) ([cad3994](https://github.com/dequelabs/axe-core/commit/cad39949c29bc3f83863e3484feef82e89e12118))
- **listitem:** allow as child of menu ([#3286](https://github.com/dequelabs/axe-core/issues/3286)) ([4bf7d35](https://github.com/dequelabs/axe-core/commit/4bf7d35a1f283a181205bb31f8f4c64c450772ca))
- **nativeSelectValue:** update selected value on change ([#3154](https://github.com/dequelabs/axe-core/issues/3154)) ([1ee88cb](https://github.com/dequelabs/axe-core/commit/1ee88cb4bb557560f10eab136464c321d4dee81e))
- **nested-interactive/aria-text:** allow "tabindex=-1" on elements with no role ([#3165](https://github.com/dequelabs/axe-core/issues/3165)) ([0ddc00b](https://github.com/dequelabs/axe-core/commit/0ddc00bb2d0eed457d9ce8ba5cd05606ef3bdc9e)), closes [#2466](https://github.com/dequelabs/axe-core/issues/2466) [#2934](https://github.com/dequelabs/axe-core/issues/2934) [#2934](https://github.com/dequelabs/axe-core/issues/2934)
- **nested-interactive:** add focusable descendants as related nodes ([#3261](https://github.com/dequelabs/axe-core/issues/3261)) ([3b2fdda](https://github.com/dequelabs/axe-core/commit/3b2fdda5ff90703dd20e9b19c4c0331a3d32cd5e))
- **nested-interactive:** add message for negative tabindex ([#3194](https://github.com/dequelabs/axe-core/issues/3194)) ([b445291](https://github.com/dequelabs/axe-core/commit/b44529130568347816fa810c959b68f980161241)), closes [#2466](https://github.com/dequelabs/axe-core/issues/2466) [#2934](https://github.com/dequelabs/axe-core/issues/2934) [/github.com/dequelabs/axe-core/issues/3163#issuecomment-949804464](https://github.com/dequelabs//github.com/dequelabs/axe-core/issues/3163/issues/issuecomment-949804464)
- **nested-interactive:** update negative tabindex message to include asssistive technologies ([#3262](https://github.com/dequelabs/axe-core/issues/3262)) ([b985776](https://github.com/dequelabs/axe-core/commit/b985776b6fdb2c96f40df38cf86f7241039d4f5b))
- **p-as-heading:** `p-as-heading` rule to account for `textContent` length ([#3145](https://github.com/dequelabs/axe-core/issues/3145)) ([400a230](https://github.com/dequelabs/axe-core/commit/400a2308510246d64d37fac3db375201610cd7e7))
- **prohibited-attr:** always report incomplete if there is text in the subtree ([#3347](https://github.com/dequelabs/axe-core/issues/3347)) ([2e27dca](https://github.com/dequelabs/axe-core/commit/2e27dca551d1aee273ad8ac055f7dfd45578dad0))
- **region:** Allow skip menu buttons ([#3277](https://github.com/dequelabs/axe-core/issues/3277)) ([6b6f2e3](https://github.com/dequelabs/axe-core/commit/6b6f2e36b09f70633b36da1cbcf2bcab59edebcf))
- remove optional crypto dependency (webpack compatibility) ([#3358](https://github.com/dequelabs/axe-core/issues/3358)) ([aa9d095](https://github.com/dequelabs/axe-core/commit/aa9d0957cbe1a91d7491a27cdea643f800ec7384))
- **reporter:** Run inside isolated contexts ([#3129](https://github.com/dequelabs/axe-core/issues/3129)) ([afe6675](https://github.com/dequelabs/axe-core/commit/afe6675d2452089602dcc6c9e931987936e9a55a))
- **respondable:** avoid crashes if the data in `window.postMessage` is `null` ([#3249](https://github.com/dequelabs/axe-core/issues/3249)) ([b37b2f6](https://github.com/dequelabs/axe-core/commit/b37b2f67ac4f2204cf63be351a70cb8a680812a3))
- **scrollable-region-focusable:** treat overflow:clip as hidden ([#3304](https://github.com/dequelabs/axe-core/issues/3304)) ([ef45377](https://github.com/dequelabs/axe-core/commit/ef453771b252a04fb5854f7d4d5b10281889f395))
- Separate Level AAA rules from A and best-practices ([#3191](https://github.com/dequelabs/axe-core/issues/3191)) ([828e526](https://github.com/dequelabs/axe-core/commit/828e526fd06ee596df73f4825e750aad459ca75e))
- **skip-link:** work with absolute and relative paths ([#2875](https://github.com/dequelabs/axe-core/issues/2875)) ([ee49d3e](https://github.com/dequelabs/axe-core/commit/ee49d3e83e8c77159d22b475c7d6d801d921b114))
- **typescript:** allow passing a NodeList to ElementContext ([#3161](https://github.com/dequelabs/axe-core/issues/3161)) ([ad4b165](https://github.com/dequelabs/axe-core/commit/ad4b165a0e019cd65f70fa5d085d83cea3e7338c))

### [4.3.5](https://github.com/dequelabs/axe-core/compare/v4.3.4...v4.3.5) (2021-10-29)

### Bug Fixes

- **aria-allowed-attr:** revert violation for non-global ARIA attrs on element without role ([#3243](https://github.com/dequelabs/axe-core/issues/3243)) ([e138fd6](https://github.com/dequelabs/axe-core/commit/e138fd6a00a8da6c48a74a614adc5dae8f2044e1))

### [4.3.4](https://github.com/dequelabs/axe-core/compare/v4.3.3...v4.3.4) (2021-10-22)

### Bug Fixes

- **aria-allowed-attr:** check for invalid `aria-attributes` for `role="row"` ([#3160](https://github.com/dequelabs/axe-core/issues/3160)) ([76aa5ec](https://github.com/dequelabs/axe-core/commit/76aa5ec5ac8a311b90974f0dba9cf92594f92019))
- **aria-allowed-children,aria-allowed-parent:** allow group role in listbox ([#3195](https://github.com/dequelabs/axe-core/issues/3195)) ([d742b29](https://github.com/dequelabs/axe-core/commit/d742b299370afa23645b1292ffc15f753113e05a))
- **aria-allowed-role:** updates the allowed roles for the wbr element to none and presentation ([#3192](https://github.com/dequelabs/axe-core/issues/3192)) ([66db765](https://github.com/dequelabs/axe-core/commit/66db765a17b5dc0904fcafe83aeb7c3eb5d60c12)), closes [#3177](https://github.com/dequelabs/axe-core/issues/3177)
- **aria-prohibited-attr:** update metadata message ([#3206](https://github.com/dequelabs/axe-core/issues/3206)) ([f9cf9fa](https://github.com/dequelabs/axe-core/commit/f9cf9fafe10e944be643d642cffda4fc762d0fc5))
- **axe.configure:** do not remove newline characters from locale doT strings ([#3216](https://github.com/dequelabs/axe-core/issues/3216)) ([5925898](https://github.com/dequelabs/axe-core/commit/59258984c0e52d91342040291fcc6f05ce2f135f))
- **axe.run:** add option to increase iframe ping timeout ([#3233](https://github.com/dequelabs/axe-core/issues/3233)) ([023f356](https://github.com/dequelabs/axe-core/commit/023f356ae752c559fb3788c84b1937bd2ba047ee))
- **color-contrast:** account for 0 width scroll regions with children ([#3172](https://github.com/dequelabs/axe-core/issues/3172)) ([ac913a1](https://github.com/dequelabs/axe-core/commit/ac913a11ddd8fd3b242a6ee500773c17fef77011))
- **color-contrast:** account for elements that do not fill entire bounding size ([#3186](https://github.com/dequelabs/axe-core/issues/3186)) ([84229d4](https://github.com/dequelabs/axe-core/commit/84229d41969907a62876488dc7a8f070542a9fe6))
- **color-contrast:** correctly apply page background color ([#3207](https://github.com/dequelabs/axe-core/issues/3207)) ([0ea7e1b](https://github.com/dequelabs/axe-core/commit/0ea7e1b881bb06067e98bae8ffe814605404475f))
- **color-contrast:** correctly compute color-contrast of truncated children ([#3203](https://github.com/dequelabs/axe-core/issues/3203)) ([4adb911](https://github.com/dequelabs/axe-core/commit/4adb9119a8a1cb457db81a40534db103c14bd2a1))
- **color-contrast:** correctly handle nested scroll regions ([#3212](https://github.com/dequelabs/axe-core/issues/3212)) ([80d91c0](https://github.com/dequelabs/axe-core/commit/80d91c01e46072ae8d36b952dfc264ef6f13eada))
- **color-contrast:** correctly work with positioned elements without z-index ([#3209](https://github.com/dequelabs/axe-core/issues/3209)) ([0322070](https://github.com/dequelabs/axe-core/commit/03220704c9dfa6f3af8d13800f9861e16552854b))
- greater consistency of help / description text ([#3204](https://github.com/dequelabs/axe-core/issues/3204)) ([0be12e6](https://github.com/dequelabs/axe-core/commit/0be12e62e5c0b2f1d280a7b17380281a30ae65f0))
- Separate Level AAA rules from A and best-practices ([#3191](https://github.com/dequelabs/axe-core/issues/3191)) ([7e6e6da](https://github.com/dequelabs/axe-core/commit/7e6e6da379eb2cb852a84c4ce088df7065740b61))
- **color-contrast:** properly blend multiple alpha colors ([#3193](https://github.com/dequelabs/axe-core/issues/3193)) ([5aa0441](https://github.com/dequelabs/axe-core/commit/5aa0441f2b33f8e1055ac32d981df4f796f7bb88))
- **is-visible:** do not error if window.Node does not exist ([#3168](https://github.com/dequelabs/axe-core/issues/3168)) ([cf58aea](https://github.com/dequelabs/axe-core/commit/cf58aea086a7bd590838673068d34325b4e9eef7))
- **label-title-only:** allow hidden labels ([#3183](https://github.com/dequelabs/axe-core/issues/3183)) ([ab636ef](https://github.com/dequelabs/axe-core/commit/ab636efa743ba2cbf1194b87aa27be5aba70989b))
- **nativeSelectValue:** update selected value on change ([#3154](https://github.com/dequelabs/axe-core/issues/3154)) ([ad584a1](https://github.com/dequelabs/axe-core/commit/ad584a10fc4b6c601c887835d7c879c77dc143d9))
- **p-as-heading:** `p-as-heading` rule to account for `textContent` length ([#3145](https://github.com/dequelabs/axe-core/issues/3145)) ([e0d4dc6](https://github.com/dequelabs/axe-core/commit/e0d4dc63bdd391a92f833d83b50644934deb7804))
- **typescript:** allow passing a NodeList to ElementContext ([#3161](https://github.com/dequelabs/axe-core/issues/3161)) ([5f2e517](https://github.com/dequelabs/axe-core/commit/5f2e517c0038397e12c72ef322313443c25e7907))
- check for hidden elements on `aria-errormessage` ([#3156](https://github.com/dequelabs/axe-core/issues/3156)) ([69b2e33](https://github.com/dequelabs/axe-core/commit/69b2e33b4094512f2ccfd05393b567763bba2e11))

### [4.3.3](https://github.com/dequelabs/axe-core/compare/v4.3.2...v4.3.3) (2021-08-24)

### Bug Fixes

- **aria-allowed-role:** Update allowed roles based on ARIA spec updates ([#3124](https://github.com/dequelabs/axe-core/issues/3124)) ([a1f637f](https://github.com/dequelabs/axe-core/commit/a1f637f3f5ebf0e483fd21865bd2191c24ccb87a))
- **d.ts:** Add PartialResults type ([#3126](https://github.com/dequelabs/axe-core/issues/3126)) ([5cdaf01](https://github.com/dequelabs/axe-core/commit/5cdaf012a2f09834d8b7e5f3a645a40e61d47ea9))
- **reporter:** Run inside isolated contexts ([#3129](https://github.com/dequelabs/axe-core/issues/3129)) ([98066f8](https://github.com/dequelabs/axe-core/commit/98066f8864d4ef09b4b3de12456992d3ca3207b4))

### [4.3.2](https://github.com/dequelabs/axe-core/compare/v4.3.1...v4.3.2) (2021-07-27)

### Bug Fixes

- **aria-hidden-focusable:** disabled aria-hidden fieldset should not have focusable children ([#3056](https://github.com/dequelabs/axe-core/issues/3056)) ([0865bd7](https://github.com/dequelabs/axe-core/commit/0865bd797f60da2befc52113464bc841f2cb2a47))
- **aria-required-attr:** only require aria-controls if aria-expanded=true ([#3089](https://github.com/dequelabs/axe-core/issues/3089)) ([63b6c7b](https://github.com/dequelabs/axe-core/commit/63b6c7b04c6837a313251f1621be6032933c8289))
- **aria-required-parent:** Filter out group from required parent roles if group is present ([#3084](https://github.com/dequelabs/axe-core/issues/3084)) ([1cb270c](https://github.com/dequelabs/axe-core/commit/1cb270c355338238acefd21789373f10aa4cb3ec))
- **axe.d.ts:** fix finishRun types ([#3098](https://github.com/dequelabs/axe-core/issues/3098)) ([e79c65c](https://github.com/dequelabs/axe-core/commit/e79c65cf7def687c54cc3bc249354c4eacf3e152))
- **color-contrast:** check for size before ignoring pseudo elements ([#3097](https://github.com/dequelabs/axe-core/issues/3097)) ([e0f6c0c](https://github.com/dequelabs/axe-core/commit/e0f6c0cfb8425bc0f7548c79919ac2cbd8393e83))
- **core:** stop mutating Context's input ([#3076](https://github.com/dequelabs/axe-core/issues/3076)) ([5dc34ee](https://github.com/dequelabs/axe-core/commit/5dc34eed3272409ae6486c76dad1394f1d557b5e))
- **finishRun:** handle null for failed iframe results ([#3096](https://github.com/dequelabs/axe-core/issues/3096)) ([8947099](https://github.com/dequelabs/axe-core/commit/8947099ea1113dbe1890e53c56f70e974317b144))
- **run,finishRun:** don't mutate options, set default reporter to v1 ([#3088](https://github.com/dequelabs/axe-core/issues/3088)) ([90f0b27](https://github.com/dequelabs/axe-core/commit/90f0b275a83dec38a9cae555ea1ddf9b4938b14d))

### [4.3.1](https://github.com/dequelabs/axe-core/compare/v4.3.0...v4.3.1) (2021-07-13)

### Bug Fixes

- add sri-history.json to npm bundle ([#3078](https://github.com/dequelabs/axe-core/issues/3078)) ([b525275](https://github.com/dequelabs/axe-core/commit/b52527515302dcafe6d5a8efd48c60d2d1d21a35))

## [4.3.0](https://github.com/dequelabs/axe-core/compare/v4.2.3...v4.3.0) (2021-07-09)

### Features

- **options:** accept a string for options.runOnly ([4392bc0](https://github.com/dequelabs/axe-core/commit/4392bc05fb208606fc589b261d3419b9625c6b6c))
- **runPartial:** Test without frame communication ([#3006](https://github.com/dequelabs/axe-core/issues/3006)) ([42738b5](https://github.com/dequelabs/axe-core/commit/42738b5258f058a36b00533e8c5cfdc0f1bcdbed))
- **utils:** add getFrameContexts method ([#2995](https://github.com/dequelabs/axe-core/issues/2995)) ([f478bab](https://github.com/dequelabs/axe-core/commit/f478babae453b02dec5bf4961b7a995a5964976a))
- deprecate autocomplete appropriate check ([#2917](https://github.com/dequelabs/axe-core/issues/2917)) ([1fe1487](https://github.com/dequelabs/axe-core/commit/1fe1487758fa0f1f4b7bfc1d8c18bbe397be362d))
- Remove deprecated phantomjs example ([#2913](https://github.com/dequelabs/axe-core/issues/2913)) ([4a01ffe](https://github.com/dequelabs/axe-core/commit/4a01ffe1adf009745ea12a71f4a888843dc779da))
- Support multiple languages at once in builds ([#2994](https://github.com/dequelabs/axe-core/issues/2994)) ([f18a56b](https://github.com/dequelabs/axe-core/commit/f18a56b3efafdb14989b45bfff0f94e1863b3899))
- **rule:** add ACT Rule IDs to test rule objects ([#2866](https://github.com/dequelabs/axe-core/issues/2866)) ([cc1ebf5](https://github.com/dequelabs/axe-core/commit/cc1ebf520caaf787fe73498cac0e4917d357edad)), closes [#2820](https://github.com/dequelabs/axe-core/issues/2820)

### Bug Fixes

- **accText:** ignore text in embedded content elements ([#3022](https://github.com/dequelabs/axe-core/issues/3022)) ([fa4f926](https://github.com/dequelabs/axe-core/commit/fa4f926c089bec2cfca882b61b74fecac504c8e0)), closes [#3017](https://github.com/dequelabs/axe-core/issues/3017)
- **aria-allowed-attr:** allow aria-posinset and aria-setsize on row elements for treegrids ([#2952](https://github.com/dequelabs/axe-core/issues/2952)) ([24e6115](https://github.com/dequelabs/axe-core/commit/24e6115adb8834b02e1e0a535a661c31caefa588))
- **aria-allowed-attr:** pass aria-label on some HTML elements ([#2935](https://github.com/dequelabs/axe-core/issues/2935)) ([d2584ed](https://github.com/dequelabs/axe-core/commit/d2584edfa7b439a5702f5b8d368253b9abe690fc))
- **aria-level:** New check for aria-level > 6 as needs review ([#3061](https://github.com/dequelabs/axe-core/issues/3061)) ([73d3ae1](https://github.com/dequelabs/axe-core/commit/73d3ae101f841c086cee89346ad66afed265097f))
- **aria-roles:** Mark as needs review if both none and presentation are used on element with no implicit role ([#2989](https://github.com/dequelabs/axe-core/issues/2989)) ([70c683c](https://github.com/dequelabs/axe-core/commit/70c683cd9844b23d62641e7063bae757a897ca38))
- **autocomplete-appropriate:** pass for autocomplete=username and type=email ([#2896](https://github.com/dequelabs/axe-core/issues/2896)) ([43394bc](https://github.com/dequelabs/axe-core/commit/43394bcd01c631f0c129f2f584d88a3a134a92a7))
- **color-contrast:** add special case for new sr-only technique ([#2985](https://github.com/dequelabs/axe-core/issues/2985)) ([d6a72f9](https://github.com/dequelabs/axe-core/commit/d6a72f9316b00eee683aed4dbf0a0fafe0661a2f))
- **color-contrast:** check for pseudo elements on element itself, not just parents ([#2980](https://github.com/dequelabs/axe-core/issues/2980)) ([9b6ccd0](https://github.com/dequelabs/axe-core/commit/9b6ccd0c2948e7036ef3984810909f59d1e65f27))
- **color-contrast-matches:** only absolutely positioned elements using clip should be not visible ([#3038](https://github.com/dequelabs/axe-core/issues/3038)) ([e93fdb1](https://github.com/dequelabs/axe-core/commit/e93fdb1f68656976d0cdfd73564f6580640be0f7))
- **combobox:** support aria 1.2 pattern for comboboxes ([#3033](https://github.com/dequelabs/axe-core/issues/3033)) ([5ab026d](https://github.com/dequelabs/axe-core/commit/5ab026d1bc9932fdf6cd2b135df32dd80051b5c9))
- **frame-tested:** run without respondable ([#2942](https://github.com/dequelabs/axe-core/issues/2942)) ([c046114](https://github.com/dequelabs/axe-core/commit/c046114e9740e3e130ad0cb98288eb77331fbb93))
- **getStandards:** Read standards from utils ([#2903](https://github.com/dequelabs/axe-core/issues/2903)) ([f1a0368](https://github.com/dequelabs/axe-core/commit/f1a036890b9befe8c1a0af388fd0f215bee6d9ae))
- **heading-order:** Prevent crash on page with iframes but no headings ([#2965](https://github.com/dequelabs/axe-core/issues/2965)) ([99e7f0c](https://github.com/dequelabs/axe-core/commit/99e7f0c2ae5758328e1299ff54a261c7e581c475))
- **heading-order:** use aria-level on headings in addition to role=header elements ([#3028](https://github.com/dequelabs/axe-core/issues/3028)) ([caccd38](https://github.com/dequelabs/axe-core/commit/caccd381d3817cc46e824d1a76e5ea888bf519bf))
- **page-no-duplicate:** don't count elements hidden from screenreaders as potential duplicates ([#3051](https://github.com/dequelabs/axe-core/issues/3051)) ([5e0098b](https://github.com/dequelabs/axe-core/commit/5e0098b0262614db20fc9d6689a5d5b95c153d8d))
- **publish-metadata:** use fail message for rules with reviewOnFail:true ([#2987](https://github.com/dequelabs/axe-core/issues/2987)) ([b6dc5f6](https://github.com/dequelabs/axe-core/commit/b6dc5f654c6c4b56217eabfd093447122890a7a2))
- **utils:** unify selecting nodes in shadow tree with shadowSelect() ([#3068](https://github.com/dequelabs/axe-core/issues/3068)) ([21681da](https://github.com/dequelabs/axe-core/commit/21681da0c8b952b5a64e17751e05686a98c6b5da))
- JS error in @axe-core/react caused by stale reference to heading ([b7094c8](https://github.com/dequelabs/axe-core/commit/b7094c8146ec816ab3d079e57f07bf0f21ce6676))
- Remove unnecessary files from npm package ([#3054](https://github.com/dequelabs/axe-core/issues/3054)) ([7600b7c](https://github.com/dequelabs/axe-core/commit/7600b7cd4a9bbb019497895d1134246d02af9763))
- **meta-viewport:** test that a user-scalable number does not prevent zoom ([b3562fb](https://github.com/dequelabs/axe-core/commit/b3562fb9fffa3152014d56a6e02a05622c10b9a9))
- **region:** contents in iframes should pass the region rule if the iframe itself is in a region ([#2949](https://github.com/dequelabs/axe-core/issues/2949)) ([43145d6](https://github.com/dequelabs/axe-core/commit/43145d6f1136c0e2c9fd9a9f3a401a68f56fe665))
- **required-parent:** Allow *item > group > *item nesting ([#2898](https://github.com/dequelabs/axe-core/issues/2898)) ([59b4a7e](https://github.com/dequelabs/axe-core/commit/59b4a7e2d939076e7aed6308ff25d1f3460d944b))
- **SerialVirtualNode:** properly handle empty string attributes ([#3042](https://github.com/dequelabs/axe-core/issues/3042)) ([dddbc0a](https://github.com/dequelabs/axe-core/commit/dddbc0ac20ffa0bc65223d392310d447b767efe9))
- **sri-history:** add backported releases ([#3004](https://github.com/dequelabs/axe-core/issues/3004)) ([6eecf34](https://github.com/dequelabs/axe-core/commit/6eecf344751e03170bd70fe076584011b5a6cacb))
- treat input with no role as textbox ([#2929](https://github.com/dequelabs/axe-core/issues/2929)) ([13d909d](https://github.com/dequelabs/axe-core/commit/13d909dd12dc40ab9ed448793aef5031e207d429))
- **types:** make `evaluate` check optional ([#2902](https://github.com/dequelabs/axe-core/issues/2902)) ([417f572](https://github.com/dequelabs/axe-core/commit/417f5724112e46f128efd5f56da9f891bf1e938c))

### [4.2.4](https://github.com/dequelabs/axe-core/compare/v4.2.3...v4.2.4) (2021-10-22)

### Bug Fixes

- **axe.run:** add option to increase iframe ping timeout ([#3233](https://github.com/dequelabs/axe-core/issues/3233)) ([99a848e](https://github.com/dequelabs/axe-core/commit/99a848e785793782b264aa55cd71f5a35c5677c9))

### [4.2.3](https://github.com/dequelabs/axe-core/compare/v4.2.2...v4.2.3) (2021-06-22)

### Bug Fixes

- **accText:** ignore text in embedded content elements ([#3022](https://github.com/dequelabs/axe-core/issues/3022)) ([8fb4635](https://github.com/dequelabs/axe-core/commit/8fb4635e01c82b80ff23994edad180dd73730a98)), closes [#3017](https://github.com/dequelabs/axe-core/issues/3017)
- **color-contrast:** add special case for new sr-only technique ([#2985](https://github.com/dequelabs/axe-core/issues/2985)) ([79cbf01](https://github.com/dequelabs/axe-core/commit/79cbf0168bdb9311db2e31043ad36c20b77e39fe))
- **color-contrast:** check for pseudo elements on element itself, not just parents ([#2980](https://github.com/dequelabs/axe-core/issues/2980)) ([3122550](https://github.com/dequelabs/axe-core/commit/3122550b1beaeafaac62c81fb47bcd4290ba266a))
- **frame-tested:** run without respondable ([#2942](https://github.com/dequelabs/axe-core/issues/2942)) ([a1d725d](https://github.com/dequelabs/axe-core/commit/a1d725d5cdedc4bfd6ba69bb25aa0a1213fd63cf))
- **publish-metadata:** use fail message for rules with reviewOnFail:true ([#2987](https://github.com/dequelabs/axe-core/issues/2987)) ([00fefa9](https://github.com/dequelabs/axe-core/commit/00fefa9bfb9479279afc89b2da45e748bace77d2))
- **sri-history:** add backported releases ([#3004](https://github.com/dequelabs/axe-core/issues/3004)) ([0332e80](https://github.com/dequelabs/axe-core/commit/0332e806524ca9ca78512423a70eb80d623795eb))

### [4.2.2](https://github.com/dequelabs/axe-core/compare/v4.2.1...v4.2.2) (2021-06-03)

### Bug Fixes

- **aria-allowed-attr:** allow aria-posinset and aria-setsize on row elements for treegrids ([#2952](https://github.com/dequelabs/axe-core/issues/2952)) ([3023e69](https://github.com/dequelabs/axe-core/commit/3023e697b85c13f18f2cbb46b202400d8ce6a10d))
- **heading-order:** Prevent crash on page with iframes but no headings ([#2965](https://github.com/dequelabs/axe-core/issues/2965)) ([4b7db37](https://github.com/dequelabs/axe-core/commit/4b7db3763735891972b8a13d6622fa30a687f3cb))
- **meta-viewport:** test that a user-scalable number does not prevent zoom ([048c5c1](https://github.com/dequelabs/axe-core/commit/048c5c18c8245a43721a12237ac5f07f5b4a856b))
- JS error in @axe-core/react caused by stale reference to heading ([3afda4e](https://github.com/dequelabs/axe-core/commit/3afda4effc4a099632138c5874ab305baaa5934a))

### [4.2.1](https://github.com/dequelabs/axe-core/compare/v4.2.0...v4.2.1) (2021-05-18)

### Bug Fixes

- **aria-allowed-attr:** pass aria-label on some HTML elements ([#2935](https://github.com/dequelabs/axe-core/issues/2935)) ([695aa77](https://github.com/dequelabs/axe-core/commit/695aa7751246c0e5e786a66df7808faa7a244576))
- treat input with no role as textbox ([#2929](https://github.com/dequelabs/axe-core/issues/2929)) ([de18030](https://github.com/dequelabs/axe-core/commit/de180307fd876cfc6a1a0bdb828818a323976c81))
- **autocomplete-appropriate:** pass for autocomplete=username and type=email ([#2896](https://github.com/dequelabs/axe-core/issues/2896)) ([8b478c8](https://github.com/dequelabs/axe-core/commit/8b478c82b3362fc27df8a0087c779327e6a9d6d0))
- **getStandards:** Read standards from utils ([#2903](https://github.com/dequelabs/axe-core/issues/2903)) ([52ad4c6](https://github.com/dequelabs/axe-core/commit/52ad4c69991e433d413846c4c9778fdd863aebeb))
- **required-parent:** Allow *item > group > *item nesting ([#2898](https://github.com/dequelabs/axe-core/issues/2898)) ([3acd229](https://github.com/dequelabs/axe-core/commit/3acd229b08b806ea359e7e08e37e8721cddc5290))
- **types:** make `evaluate` check optional ([#2902](https://github.com/dequelabs/axe-core/issues/2902)) ([75fabfe](https://github.com/dequelabs/axe-core/commit/75fabfef3adeade350902f2dd18928e44fbb7cf4))

## [4.2.0](https://github.com/dequelabs/axe-core/compare/v4.1.2...v4.2.0) (2021-04-23)

### Features

- add axe.frameMessenger with configurable allowedOrigins ([#2880](https://github.com/dequelabs/axe-core/issues/2880)) ([b27bab3](https://github.com/dequelabs/axe-core/commit/b27bab3954f006e1257f7d70bd467991a2d9330e))
- **aria-allowed-attr:** add ARIA 1.2 prohibited attrs check ([#2764](https://github.com/dequelabs/axe-core/issues/2764)) ([4a77e88](https://github.com/dequelabs/axe-core/commit/4a77e881302f7db2750fa36a573fc26d123f7388))
- **empty-table-header:** new rule to flag empty table headers ([#2811](https://github.com/dequelabs/axe-core/issues/2811)) ([813ee7e](https://github.com/dequelabs/axe-core/commit/813ee7efdf77a55a1c09a3b8836007917ead91b5))
- **frame-focusable-content:** new rule to test iframes with tabindex=-1 do not have focusable content ([#2785](https://github.com/dequelabs/axe-core/issues/2785)) ([aeb044c](https://github.com/dequelabs/axe-core/commit/aeb044c26908b44490bad160add8c3e6327ce759))
- **locale:** missing translations for DE ([#2704](https://github.com/dequelabs/axe-core/issues/2704)) ([f312994](https://github.com/dequelabs/axe-core/commit/f312994a63bd239b42cf3177af9d43fc190b1d3c))
- **locale:** Polish translation ([#2677](https://github.com/dequelabs/axe-core/issues/2677)) ([c46979f](https://github.com/dequelabs/axe-core/commit/c46979ff93a8c1bd5d9d73f1b4d3edcab046582b))
- **nested-interactive:** new rule to flag nested interactive elements ([#2691](https://github.com/dequelabs/axe-core/issues/2691)) ([13a7cf1](https://github.com/dequelabs/axe-core/commit/13a7cf12ad7f3f895a4c41c50b65bf71be12ea47))
- **role-text:** add role-text rule ([#2702](https://github.com/dequelabs/axe-core/issues/2702)) ([7c05162](https://github.com/dequelabs/axe-core/commit/7c05162a3856c0f19514c9a87ca1c15aa5485b45))
- **setup/teardown:** add functions to setup and teardown axe-core internal data, deprecate axe.\_tree ([#2738](https://github.com/dequelabs/axe-core/issues/2738)) ([9d19f24](https://github.com/dequelabs/axe-core/commit/9d19f24f86f2028753ce944beeda9866b0274e7b))
- **standards:** add graphics roles ([#2761](https://github.com/dequelabs/axe-core/issues/2761)) ([22032cc](https://github.com/dequelabs/axe-core/commit/22032cc3051e74ad8c12c27039e9fb0a9f07e9d1))
- **standards/aria-roles:** add presentational children property ([#2689](https://github.com/dequelabs/axe-core/issues/2689)) ([78c239c](https://github.com/dequelabs/axe-core/commit/78c239cd6e3960e85cf900bc0fe511e3846c1c96))
- **utils.getRule:** add function to get rule by id ([#2724](https://github.com/dequelabs/axe-core/issues/2724)) ([9d0af53](https://github.com/dequelabs/axe-core/commit/9d0af53192450f442d073c13313ff1d865f68935))
- **utils/matches:** support selectors level 4 :not and :is ([#2742](https://github.com/dequelabs/axe-core/issues/2742)) ([21d9b0e](https://github.com/dequelabs/axe-core/commit/21d9b0ea4348d353dc85cacfb3fcace5eac6e4ca))
- **virtual-node:** add attrNames property which returns list of attribute names ([#2741](https://github.com/dequelabs/axe-core/issues/2741)) ([1d864b4](https://github.com/dequelabs/axe-core/commit/1d864b4600fd88b06c8b5776bf891cf9bc402b60))

### Bug Fixes

- **aria-allowed-attr:** error when generic elements use aria-label and aria-labelledy ([#2766](https://github.com/dequelabs/axe-core/issues/2766)) ([64379e1](https://github.com/dequelabs/axe-core/commit/64379e1732fac6ccb0f9f2abfb8c36e22cbba9ef))
- **aria-required-children:** allow group and rowgroup roles ([#2661](https://github.com/dequelabs/axe-core/issues/2661)) ([5a264e4](https://github.com/dequelabs/axe-core/commit/5a264e48e800bb9a783b2597e723ec9529d6d798))
- **aria-required-children:** only match for roles that require children ([#2703](https://github.com/dequelabs/axe-core/issues/2703)) ([95de169](https://github.com/dequelabs/axe-core/commit/95de1698596ab5138d553836c90c422566d0527d))
- **aria-valid-attr-value:** pass for aria-errormessage when aria-invalid is not set or false ([#2721](https://github.com/dequelabs/axe-core/issues/2721)) ([93a765c](https://github.com/dequelabs/axe-core/commit/93a765c372b29a0764872f50f044bfbabed68207))
- **aria-valid-attr-value:** report when aria-labelledby ref is not in DOM ([#2723](https://github.com/dequelabs/axe-core/issues/2723)) ([116eb06](https://github.com/dequelabs/axe-core/commit/116eb06101ea49a02dbd3e86d2f91ac51e8fe9a9))
- **aria-valid-attr-value:** return false when int type attribute uses invalid values ([#2710](https://github.com/dequelabs/axe-core/issues/2710)) ([ce9917e](https://github.com/dequelabs/axe-core/commit/ce9917e9dad91f526e9f0da99dcc347ff759e3bd))
- **bypass:** mark as needs review rather than failure ([#2818](https://github.com/dequelabs/axe-core/issues/2818)) ([bb41b3e](https://github.com/dequelabs/axe-core/commit/bb41b3e89a22a69c5cb6fbd07e808291687343e5))
- **focus-order-semantics:** allow role=tooltip to pass ([#2871](https://github.com/dequelabs/axe-core/issues/2871)) ([dc526d8](https://github.com/dequelabs/axe-core/commit/dc526d8034e2de0c4208d2c6f695f1ba53da950b))
- **heading-order:** handle iframe as first result ([#2876](https://github.com/dequelabs/axe-core/issues/2876)) ([33428d8](https://github.com/dequelabs/axe-core/commit/33428d86230064d70ec6b2a638f947d0cdb31968))
- **respondable:** Avoid message duplication with messageId ([#2816](https://github.com/dequelabs/axe-core/issues/2816)) ([4bd0acf](https://github.com/dequelabs/axe-core/commit/4bd0acf379fba2ef17679cacb70776e77e5f5e79))
- **respondable:** work on iframes in shadow DOM ([#2857](https://github.com/dequelabs/axe-core/issues/2857)) ([38cad94](https://github.com/dequelabs/axe-core/commit/38cad9451dbde52fbab0835e3c1673825c57e5b7))
- avoid 'undefined' showing in check messages ([#2779](https://github.com/dequelabs/axe-core/issues/2779)) ([3beb0b1](https://github.com/dequelabs/axe-core/commit/3beb0b1c7a4bcf599d4c10207a429e9ec38df698))
- properly translate checks when building axe.js using --lang ([#2848](https://github.com/dequelabs/axe-core/issues/2848)) ([76545b0](https://github.com/dequelabs/axe-core/commit/76545b09ed0a1204b1096ef1b1d11fe6d6d89e2a))
- **aria-required-parent:** only match for roles that require parents ([#2707](https://github.com/dequelabs/axe-core/issues/2707)) ([ce8281e](https://github.com/dequelabs/axe-core/commit/ce8281e6d45c6888d238ea33c2d39f4c67e8b267))
- **color-contrast:** account for text client rects that start outside the parent container ([#2682](https://github.com/dequelabs/axe-core/issues/2682)) ([a4e4a34](https://github.com/dequelabs/axe-core/commit/a4e4a344cea70308d0a59a04411f6da88b80b00b))
- **color-contrast-matches:** do not pass empty string to getElementById ([#2739](https://github.com/dequelabs/axe-core/issues/2739)) ([0b0fec2](https://github.com/dequelabs/axe-core/commit/0b0fec285d7df8675c8f5ecc42519f3734d70f72))
- **frame-title:** update rule description to be more descriptive ([#2735](https://github.com/dequelabs/axe-core/issues/2735)) ([159e25b](https://github.com/dequelabs/axe-core/commit/159e25b45eb22498e7ab20d31f353b182b2cd1d7))
- **heading-order:** allow partial context to pass ([#2622](https://github.com/dequelabs/axe-core/issues/2622)) ([f8baee6](https://github.com/dequelabs/axe-core/commit/f8baee68fa5220d54399a347322c6c8ac4f26cb9))
- **landmark-complementary-is-top-level:** allow aside inside main ([#2740](https://github.com/dequelabs/axe-core/issues/2740)) ([9388c96](https://github.com/dequelabs/axe-core/commit/9388c9657fdfd80b9a76961d95a2cde939413665))
- **metadata:** consistenct use of 'must' and 'should' ([#2770](https://github.com/dequelabs/axe-core/issues/2770)) ([603b612](https://github.com/dequelabs/axe-core/commit/603b612dfeb861b5fc08cf9605fed886c1d71107))
- **region:** allow role=alertdialog as region ([#2660](https://github.com/dequelabs/axe-core/issues/2660)) ([b928df7](https://github.com/dequelabs/axe-core/commit/b928df7f81bc1ed79946b472f5e71dea324a611c))
- **select-name:** fix typo in accessible name help ([#2676](https://github.com/dequelabs/axe-core/issues/2676)) ([6b916b9](https://github.com/dequelabs/axe-core/commit/6b916b908f38c465e1b319b1b8f50c1a7c9df698))
- **to-grid/get-headers:** work with rowspan=0 ([#2722](https://github.com/dequelabs/axe-core/issues/2722)) ([508190b](https://github.com/dequelabs/axe-core/commit/508190b8e20873bc98bd0efb39d37bcb1cbcd92a))
- **types:** Add noHtml option ([#2810](https://github.com/dequelabs/axe-core/issues/2810)) ([c03c826](https://github.com/dequelabs/axe-core/commit/c03c82635c6e4228b94438d00f7ff8723303918c))
- **utils:** fix warning thrown by Webpack ([#2843](https://github.com/dequelabs/axe-core/issues/2843)) ([0826177](https://github.com/dequelabs/axe-core/commit/08261778e039abae0be16d001923dcc87ce168a4)), closes [#2840](https://github.com/dequelabs/axe-core/issues/2840)
- **utils:** remove attributes from source string ([#2803](https://github.com/dequelabs/axe-core/issues/2803)) ([8e8c4fa](https://github.com/dequelabs/axe-core/commit/8e8c4faddbe95f979f0c03d1d44ccd148218379b))
- add noHtml to axe.configure ([#2789](https://github.com/dequelabs/axe-core/issues/2789)) ([5c8dec8](https://github.com/dequelabs/axe-core/commit/5c8dec83a790aba273f8f921007dc7f0a0904851))
- do not allow postMessage with axe version of x.y.z ([#2790](https://github.com/dequelabs/axe-core/issues/2790)) ([5acda82](https://github.com/dequelabs/axe-core/commit/5acda82fbb61d07f5036169008a08e2e1be3d155))

### [4.1.4](https://github.com/dequelabs/axe-core/compare/v4.1.3...v4.1.4) (2021-04-01)

### Bug Fixes

- **respondable:** work on iframes in shadow DOM ([#2857](https://github.com/dequelabs/axe-core/issues/2857)) ([65cbfd0](https://github.com/dequelabs/axe-core/commit/65cbfd04edbbf48ceee2ef35f500575a4ad88afc))
- **utils:** fix warning thrown by Webpack ([#2843](https://github.com/dequelabs/axe-core/issues/2843)) ([df5d01b](https://github.com/dequelabs/axe-core/commit/df5d01b94fef43e6ca8d2fab5219f90811700405)), closes [#2840](https://github.com/dequelabs/axe-core/issues/2840)

### [4.1.3](https://github.com/dequelabs/axe-core/compare/v4.1.2...v4.1.3) (2021-03-04)

### Bug Fixes

- **respondable:** Avoid message duplication with messageId ([#2816](https://github.com/dequelabs/axe-core/issues/2816)) ([9b6eb59](https://github.com/dequelabs/axe-core/commit/9b6eb5987da104398acaae60b7b7ee4e0b2d3c8f))
- **types:** Add noHtml option ([#2810](https://github.com/dequelabs/axe-core/issues/2810)) ([8bc0bae](https://github.com/dequelabs/axe-core/commit/8bc0baec5c997873daf43ff5de61ea22a8e8c896))

### [4.1.2](https://github.com/dequelabs/axe-core/compare/v4.1.1...v4.1.2) (2021-02-08)

### Bug Fixes

- add noHtml to axe.configure ([#2789](https://github.com/dequelabs/axe-core/issues/2789)) ([6e23eb0](https://github.com/dequelabs/axe-core/commit/6e23eb0839da5806da5476a5158fb6324d3ee005))
- do not allow postMessage with axe version of x.y.z ([#2790](https://github.com/dequelabs/axe-core/issues/2790)) ([8b1671d](https://github.com/dequelabs/axe-core/commit/8b1671d46dd2238284fbfe1448ef36f8fc2048e7))

### [4.1.1](https://github.com/dequelabs/axe-core/compare/v4.1.0...v4.1.1) (2020-11-19)

### Bug Fixes

- remove axios import ([#2653](https://github.com/dequelabs/axe-core/issues/2653)) ([2d20cde](https://github.com/dequelabs/axe-core/commit/2d20cdee819265f3c4efcb3ccb61da0a9a88981c))
- **color-contrast:** greatly improve color-contrast-matches speed. add aria/get-accessible-ref ([#2635](https://github.com/dequelabs/axe-core/issues/2635)) ([ba174bd](https://github.com/dequelabs/axe-core/commit/ba174bd5496d7146c1baf982cb762444cda26cff))

## [4.1.0](https://github.com/dequelabs/axe-core/compare/v4.0.2...v4.1.0) (2020-11-13)

### Features

- **new-rule:** check that treeitem role has an accessible name ([#2615](https://github.com/dequelabs/axe-core/issues/2615)) ([5e95153](https://github.com/dequelabs/axe-core/commit/5e951536a6b4f21ef4d4a849b575b5a3c1ec6b85))
- Add aria-dialog-name ([#2609](https://github.com/dequelabs/axe-core/issues/2609)) ([b0e14b0](https://github.com/dequelabs/axe-core/commit/b0e14b0bc1df221ef379bf7ea830d3ceb030787a))
- **aria-toggle-field-name:** add option role ([#2605](https://github.com/dequelabs/axe-core/issues/2605)) ([0af0551](https://github.com/dequelabs/axe-core/commit/0af0551e57c2b8347eeb9ce6550056c1888b5f4a))
- **checks:** deprecate role-none and role-presentation for presentational-role ([#2503](https://github.com/dequelabs/axe-core/issues/2503)) ([cef54a0](https://github.com/dequelabs/axe-core/commit/cef54a0fd4156f7b1e6f6ba9cb36bde060a65622))
- **get-role:** add noPresentational option ([#2549](https://github.com/dequelabs/axe-core/issues/2549)) ([4f39299](https://github.com/dequelabs/axe-core/commit/4f39299805d6e2c0fd09a1952d08c44800ca5dfc)), closes [#1792](https://github.com/dequelabs/axe-core/issues/1792)
- **imports:** deprecate axios ([#2542](https://github.com/dequelabs/axe-core/issues/2542)) ([82d43a0](https://github.com/dequelabs/axe-core/commit/82d43a0593a8dc9733b97138f8e6f934ed25dea2))
- **label,select-name:** allow placeholder to pass label rule, add select-name rule ([#2448](https://github.com/dequelabs/axe-core/issues/2448)) ([1315f8e](https://github.com/dequelabs/axe-core/commit/1315f8e2fb3eb6851657be2039014e3d13127210))
- **new-rule:** ARIA links, buttons, menuitems have an accessible name ([#2571](https://github.com/dequelabs/axe-core/issues/2571)) ([9476a1f](https://github.com/dequelabs/axe-core/commit/9476a1f5170bbc85b683c6524f44f49c1835054a))
- **new-rule:** aria-tooltip-name ([#2548](https://github.com/dequelabs/axe-core/issues/2548)) ([d00f378](https://github.com/dequelabs/axe-core/commit/d00f3781fb5c9c7c7f88e6790de3741788e8ddd9))
- **new-rule:** check that meter role has an accessible name ([#2607](https://github.com/dequelabs/axe-core/issues/2607)) ([3ca2f04](https://github.com/dequelabs/axe-core/commit/3ca2f04b0f737914dda667c26f0193b7b312e6f6))
- **new-rule:** check that progressbars have an accessible name ([#2555](https://github.com/dequelabs/axe-core/issues/2555)) ([dd0b44a](https://github.com/dequelabs/axe-core/commit/dd0b44ad8aeed9e4b7b45478c62c655a6cbf10ed))
- **presentation-role-conflict:** create rule to flag elements with role conflict resolution ([#2440](https://github.com/dequelabs/axe-core/issues/2440)) ([e4edffc](https://github.com/dequelabs/axe-core/commit/e4edffc09f2305d8b4e69af266759cf32a5326f4))
- **rule-matches:** depreacte window-is-top-matches for is-intiator-matches ([#2531](https://github.com/dequelabs/axe-core/issues/2531)) ([db2be93](https://github.com/dequelabs/axe-core/commit/db2be93d07dda488f9d5ca66d193709eb41bf8cd))
- **standards:** add superclassRole to ariaRoles ([#2600](https://github.com/dequelabs/axe-core/issues/2600)) ([a5e9ce0](https://github.com/dequelabs/axe-core/commit/a5e9ce03befdc8f914f72a4eb1e49a95d6a2aa91))
- **standards:** add superclassRole to dpubRoles ([#2606](https://github.com/dequelabs/axe-core/issues/2606)) ([1b66930](https://github.com/dequelabs/axe-core/commit/1b6693092d44aa10b9d4fd093baff674a17a2d30))
- **utils:** deprecate get/set-scroll-state ([#2581](https://github.com/dequelabs/axe-core/issues/2581)) ([3c4827f](https://github.com/dequelabs/axe-core/commit/3c4827f7e3fdab4851697111bbe7cab55539bfbd))
- **valid-langs:** deprecate validLangs, add isValidLangs, reduce file size ([#2527](https://github.com/dequelabs/axe-core/issues/2527)) ([8a699ec](https://github.com/dequelabs/axe-core/commit/8a699ecba6c77f6a705d44616f1bcefd634ff89b))

### Bug Fixes

- **commons/get-text-element-stack:** account for newline characters when text is larger than container ([#2631](https://github.com/dequelabs/axe-core/issues/2631)) ([3c2429b](https://github.com/dequelabs/axe-core/commit/3c2429b4032d29cdcfd3083e46e91854dccd733b))
- Update ACT rule tags ([#2625](https://github.com/dequelabs/axe-core/issues/2625)) ([c640d4f](https://github.com/dequelabs/axe-core/commit/c640d4fc18a7625d30c6d0572e15f26c984511e4))
- **aria-errormessage:** allow aria-live="polite" on aria-errormessage target ([926b6a8](https://github.com/dequelabs/axe-core/commit/926b6a8fe7aad0444d9bc97f2e6c8564023ab58f))
- **aria-errormessage:** allow aria-live=polite on aria-errormessage target ([#2597](https://github.com/dequelabs/axe-core/issues/2597)) ([0d5cfb1](https://github.com/dequelabs/axe-core/commit/0d5cfb15941cc23d2b5065c203e9ccdc01c57b82))
- **aria-roles:** add group to menuitemradio context ([#2518](https://github.com/dequelabs/axe-core/issues/2518)) ([52b89f1](https://github.com/dequelabs/axe-core/commit/52b89f1ca67b2c04b8e96495cd6fe601e5c3eb54))
- **aria-roles:** Add WAI-ARIA 1.2 roles ([#2544](https://github.com/dequelabs/axe-core/issues/2544)) ([635b084](https://github.com/dequelabs/axe-core/commit/635b084c5460a3328118ec4f5db678deb082966b)), closes [#2107](https://github.com/dequelabs/axe-core/issues/2107) [#2107](https://github.com/dequelabs/axe-core/issues/2107) [#2107](https://github.com/dequelabs/axe-core/issues/2107) [#2107](https://github.com/dequelabs/axe-core/issues/2107)
- **attr-non-space-content-evaluate:** Split no attribute and empty attribute message ([#2495](https://github.com/dequelabs/axe-core/issues/2495)) ([5f822f4](https://github.com/dequelabs/axe-core/commit/5f822f4f32ce5597e78dd7db77b8412aea1154a5))
- **audit:** updated axe.reset() to reset branding, application, and tagExcludes. ([#2537](https://github.com/dequelabs/axe-core/issues/2537)) ([828864b](https://github.com/dequelabs/axe-core/commit/828864bd9c32a6866e0e0dc6d7b263668a01497e))
- **autocomplete-valid:** allow type=tel for appropriate cc types ([#2575](https://github.com/dequelabs/axe-core/issues/2575)) ([ae21713](https://github.com/dequelabs/axe-core/commit/ae2171364bee2fe1912a9da427525be4fa99a1db))
- **checks/aria:** Mark elements missing from aria-errormessage for review ([#2550](https://github.com/dequelabs/axe-core/issues/2550)) ([8f9a035](https://github.com/dequelabs/axe-core/commit/8f9a035dca4aaa6f9fe20766d5a6f58ec1c4039c)), closes [#2460](https://github.com/dequelabs/axe-core/issues/2460)
- **color-contrast:** allow small text shadows to serve as text outline ([#2627](https://github.com/dequelabs/axe-core/issues/2627)) ([432e1f3](https://github.com/dequelabs/axe-core/commit/432e1f367f1017d1c2c59d2242909852fecb0607))
- **color-contrast:** mark elements with pseudo content as needs review ([#2613](https://github.com/dequelabs/axe-core/issues/2613)) ([fcdbdbc](https://github.com/dequelabs/axe-core/commit/fcdbdbc4d7324c952d08f69607870461f707c29b))
- **color-contrast:** properly handle scrolling text ([#2619](https://github.com/dequelabs/axe-core/issues/2619)) ([984e7e2](https://github.com/dequelabs/axe-core/commit/984e7e2a96fc0cf8a1a810a17a771511225c5257))
- **docs/rules:** add missing category tags to rules metadata ([#2569](https://github.com/dequelabs/axe-core/issues/2569)) ([285c442](https://github.com/dequelabs/axe-core/commit/285c442152d8a80dd13edb9ac064ac5030199524)), closes [#2554](https://github.com/dequelabs/axe-core/issues/2554)
- **explicit-label:** work with multiple labels ([#2573](https://github.com/dequelabs/axe-core/issues/2573)) ([d26f106](https://github.com/dequelabs/axe-core/commit/d26f10699d099c8a4f2aacf180862890d8dbbe18))
- **get-headers:** fix for rowspan and colspan ([#2545](https://github.com/dequelabs/axe-core/issues/2545)) ([3f02d14](https://github.com/dequelabs/axe-core/commit/3f02d14cbe3562e22762664843f8852f779be2a3))
- **heading-order:** evaluate headings from iframes in DOM order ([#2572](https://github.com/dequelabs/axe-core/issues/2572)) ([46f6628](https://github.com/dequelabs/axe-core/commit/46f6628cc710b9aaa8b872790a0b8c42032a8134))
- **implilcit-role:** use type property instead of attribute to resolve input role ([#2547](https://github.com/dequelabs/axe-core/issues/2547)) ([35e853d](https://github.com/dequelabs/axe-core/commit/35e853d91e1067b9156dfb6e89da0c7445baa86f)), closes [#2514](https://github.com/dequelabs/axe-core/issues/2514)
- **link-name:** pass landmark content as link text ([#2617](https://github.com/dequelabs/axe-core/issues/2617)) ([e77992e](https://github.com/dequelabs/axe-core/commit/e77992eb1fb5e2c2365154a0f431f223e1b158ee))
- **name-rules:** ignore when explicit roles don't require a name ([#2629](https://github.com/dequelabs/axe-core/issues/2629)) ([52fb138](https://github.com/dequelabs/axe-core/commit/52fb13872f2ff477b3a32d10d1fb5c72fde3adda))
- **region:** allow role=dialog and svg elements outside regions ([#2586](https://github.com/dequelabs/axe-core/issues/2586)) ([fab58d4](https://github.com/dequelabs/axe-core/commit/fab58d4bf60a4d7b1c935b31384eecd0c57f92f5))
- **region:** treat iframes as regions ([#2614](https://github.com/dequelabs/axe-core/issues/2614)) ([936db81](https://github.com/dequelabs/axe-core/commit/936db8105b7bfa1323568ab572a1e4b0428b4566))
- **rule:** add check node to the check result object ([#2608](https://github.com/dequelabs/axe-core/issues/2608)) ([b188911](https://github.com/dequelabs/axe-core/commit/b188911613812a9aaaa95fb86606f842ee39b11a))
- **scrollable-region-focusalbe:** do not fail for combobox pattern ([#2601](https://github.com/dequelabs/axe-core/issues/2601)) ([ac71a57](https://github.com/dequelabs/axe-core/commit/ac71a574f0285eceb11960416902169f7dce030d))
- deprecate aria-form-field-name-matches for no-name-method-matches ([#2584](https://github.com/dequelabs/axe-core/issues/2584)) ([8be89e3](https://github.com/dequelabs/axe-core/commit/8be89e39883e5c421da06b1343c810502ac6e9a7))
- do not allow fallback content for objects ([#2525](https://github.com/dequelabs/axe-core/issues/2525)) ([486eafe](https://github.com/dequelabs/axe-core/commit/486eafe72ca8e1b47edd53c0142aaab415b2d2d5))

### [4.0.2](https://github.com/dequelabs/axe-core/compare/v4.0.1...v4.0.2) (2020-09-08)

### Bug Fixes

- **color-contrast:** dont error for floating element ([#2444](https://github.com/dequelabs/axe-core/issues/2444)) ([45eb746](https://github.com/dequelabs/axe-core/commit/45eb74682c8460fbd6f1de273e710b597ff01392))
- **i18n:** proofreading of the french translations ([#2485](https://github.com/dequelabs/axe-core/issues/2485)) ([ebd0407](https://github.com/dequelabs/axe-core/commit/ebd04074f556b1927c9302e3f999e4c1cbc2de9e)), closes [#2484](https://github.com/dequelabs/axe-core/issues/2484)
- **implicit-role:** return gridcell for td child of grid or treegrid ([#2501](https://github.com/dequelabs/axe-core/issues/2501)) ([0553d4d](https://github.com/dequelabs/axe-core/commit/0553d4d67d59127cd67420022cd7696dea167a6a))
- **label:** pass when role none or presentation ([#2464](https://github.com/dequelabs/axe-core/issues/2464)) ([1d3c2fc](https://github.com/dequelabs/axe-core/commit/1d3c2fc28355c8476d3966d73664a2a1f4c6124d)), closes [#2458](https://github.com/dequelabs/axe-core/issues/2458)
- **link-name:** fix regression where link was not named from title attribute ([#2492](https://github.com/dequelabs/axe-core/issues/2492)) ([b86c73b](https://github.com/dequelabs/axe-core/commit/b86c73b7dc61c2609afa6f384502f3c91f9a7f10))
- **required-parent:** fail if intermediate role is not the required parent ([#2494](https://github.com/dequelabs/axe-core/issues/2494)) ([522865c](https://github.com/dequelabs/axe-core/commit/522865cabbe1f4815b1f3e980018e24c062c8e5e))
- **svg-non-empty-title:** update fail message to indicate if the title element is empty or missing ([#2462](https://github.com/dequelabs/axe-core/issues/2462)) ([9598656](https://github.com/dequelabs/axe-core/commit/9598656bfac61da35f8b9f52e1fb32fcab6b484e)), closes [#2452](https://github.com/dequelabs/axe-core/issues/2452)
- **valid-lang:** fail when lang attribute contains only whitespace ([#2504](https://github.com/dequelabs/axe-core/issues/2504)) ([8455a7f](https://github.com/dequelabs/axe-core/commit/8455a7f3a1aa83f487745306df0c07c39b6dc803))

## [4.0.1](https://github.com/dequelabs/axe-core/compare/v4.0.0...v4.0.1) (2020-08-04)

### Bug Fixes

- **checks**: do not normalize options for custom checks ([#2435](https://github.com/dequelabs/axe-core/issues/2435)) ([83056ad](https://github.com/dequelabs/axe-core/commit/83056ada0e50dc943a5e2829c97323a744cb3b28))

## [4.0.0](https://github.com/dequelabs/axe-core/compare/v3.5.5...v4.0.0) (2020-07-28)

### Breaking Changes

The following rules were deprecated in axe-core 3.x, and are removed in 4.0:

- aria-dpub-role-fallback
- checkboxgroup
- layout-table
- radiogroup
- video-description

The following checks were deprecated in axe-core 3.x, and are removed in 4.0:

- aria/implicit-role-fallback
- forms/fieldset
- forms/group-labelledby
- media/description
- tables/has-caption
- tables/has-summary
- tables/has-th

### Features

- add layout-table-matches method ([#2400](https://github.com/dequelabs/axe-core/issues/2400)) ([d7ba70f](https://github.com/dequelabs/axe-core/commit/d7ba70fc9916cedb2e977c9dc10667985c2bb4ed))
- **aria/get-roles-by-type:** deprecate in favor of standards/get-aria-roles-by-type ([#2362](https://github.com/dequelabs/axe-core/issues/2362)) ([c0c37ea](https://github.com/dequelabs/axe-core/commit/c0c37ea22f306cc93341fe25e173e3f65b6f924b))
- **aria/lookupTable, aria-allowed-attr:** deprecate aria.lookupTable and passing allowed attributes to aria-allowed-attr ([#2395](https://github.com/dequelabs/axe-core/issues/2395)) ([739d1b1](https://github.com/dequelabs/axe-core/commit/739d1b11052c93c0856e6e5d217b66e613e43f11))
- **avoid-inline-spacing:** add option for which css properties to look at ([#2244](https://github.com/dequelabs/axe-core/issues/2244)) ([93c027a](https://github.com/dequelabs/axe-core/commit/93c027ab7d081dcda401399e1cbdb5a27026c927))
- **checks:** normalize check options to alway be an object ([#2219](https://github.com/dequelabs/axe-core/issues/2219)) ([da12da7](https://github.com/dequelabs/axe-core/commit/da12da79b1e7a16887807980e03d4e8244bed560))
- **checks,rules:** remove deprecated checks and rules ([#2214](https://github.com/dequelabs/axe-core/issues/2214)) ([317545a](https://github.com/dequelabs/axe-core/commit/317545a0916a16e05263d1cedb6d9753e4ef6e19))
- **closest:** VirtualNode implementation of Element.closest. Deprecate commons.dom.findUp and commons.dom.findUpVirtual ([#2139](https://github.com/dequelabs/axe-core/issues/2139)) ([493dd22](https://github.com/dequelabs/axe-core/commit/493dd2253606189a5e475c691aa8f0dc68a8aedd))
- **color-contrast, utils:** add more options to color-contrast, add utils.deepMerge, deprecate commons.color.hasValidContrastRatio ([#2256](https://github.com/dequelabs/axe-core/issues/2256)) ([49fdb46](https://github.com/dequelabs/axe-core/commit/49fdb46cf371321760a3bdff6acc5311b4cfd158))
- **commons/aria:** deprecate getRole({ noImplicit }) for getExplicitRole() ([#2294](https://github.com/dequelabs/axe-core/issues/2294)) ([a2873ea](https://github.com/dequelabs/axe-core/commit/a2873ea41f5b264165a2fb76679ab121985bb4f2))
- **commons/standards:** create the commons/standards object for helper functions against the standards table ([#2358](https://github.com/dequelabs/axe-core/issues/2358)) ([6dce974](https://github.com/dequelabs/axe-core/commit/6dce974ee5f3095143818fbf5180d21762fe5de6))
- **duplicate-img-label:** add option for parentSelector ([#2216](https://github.com/dequelabs/axe-core/issues/2216)) ([8906806](https://github.com/dequelabs/axe-core/commit/8906806fa039ba105bea745495e91031461af445))
- **get-role:** add presentation role resolution and inheritance ([#2281](https://github.com/dequelabs/axe-core/issues/2281)) ([e207190](https://github.com/dequelabs/axe-core/commit/e2071900c462048a7455ec1f41878ab4f70b1bdd))
- **get-role:** work with standards object ([#2367](https://github.com/dequelabs/axe-core/issues/2367)) ([1b20faf](https://github.com/dequelabs/axe-core/commit/1b20faf73417fde425dadfe1ac0a359d2179c1a1))
- **globals:** deduce required window and document globals from context ([#2308](https://github.com/dequelabs/axe-core/issues/2308)) ([61bac69](https://github.com/dequelabs/axe-core/commit/61bac69877da884a9a24b040f898a67c6746984f))
- **has-descendant, page-no-duplicate:** move page-has-elm and page-no-duplicate to generic check ([#2229](https://github.com/dequelabs/axe-core/issues/2229)) ([59125a0](https://github.com/dequelabs/axe-core/commit/59125a056d4b591ee20a67be12e1c66e83ec7c25))
- **has-lang:** add option for which attributes to look at ([#2239](https://github.com/dequelabs/axe-core/issues/2239)) ([e69c46a](https://github.com/dequelabs/axe-core/commit/e69c46a49f348b8ae1fec8929e4688940b644a06))
- **has-text-content:** add generic check has-text-content ([#2234](https://github.com/dequelabs/axe-core/issues/2234)) ([60ddc65](https://github.com/dequelabs/axe-core/commit/60ddc6577b70e27e9e7fe340d163b01360035e13))
- **i18n:** add Basque (eu) translation ([#1964](https://github.com/dequelabs/axe-core/issues/1964)) ([176cf82](https://github.com/dequelabs/axe-core/commit/176cf824288a927e5e21dd64a7793251a31ef180))
- **matcher:** allow regex string to be parsed as regex ([#2324](https://github.com/dequelabs/axe-core/issues/2324)) ([321b2d1](https://github.com/dequelabs/axe-core/commit/321b2d1dbfb8f3e04847674f46ada53b19313142))
- **matches:** add explicitRole, implicitRole, and semanticRole matches functions ([#2286](https://github.com/dequelabs/axe-core/issues/2286)) ([30efbff](https://github.com/dequelabs/axe-core/commit/30efbfffc8b83ca03b4b2697e4202027826195f9))
- **matches-definition:** add generic check matches-definition ([#2233](https://github.com/dequelabs/axe-core/issues/2233)) ([20467aa](https://github.com/dequelabs/axe-core/commit/20467aa48705d4b6b98f123031431bb3ac3ee22b))
- **metadata-function-map:** add metadata function map to support check evaulate functions as an id string ([#2162](https://github.com/dequelabs/axe-core/issues/2162)) ([ec9b931](https://github.com/dequelabs/axe-core/commit/ec9b931c3123b3252e3c0afd5b059f0bbcfcc0d0))
- **non-space-content:** switch all non-empty checks to new generic check ([#2215](https://github.com/dequelabs/axe-core/issues/2215)) ([7ce7b00](https://github.com/dequelabs/axe-core/commit/7ce7b00c2d302d830bd2c0efa027d0ea3b10770c))
- **object-alt,accessible-text:** object-alt rule and accessible text to work with serial virtual nodes with children ([e8e17e4](https://github.com/dequelabs/axe-core/commit/e8e17e42c3594518ee60838749a507504a839c69))
- **options:** add ancestry CSS selector to nodes ([#2389](https://github.com/dequelabs/axe-core/issues/2389)) ([f2cccf5](https://github.com/dequelabs/axe-core/commit/f2cccf50def5b2409f5903ce325f18475c8ed79e))
- **region:** add option to match nodes as region ([#2249](https://github.com/dequelabs/axe-core/issues/2249)) ([b544554](https://github.com/dequelabs/axe-core/commit/b544554902b3aa0afb477e5e78140780f42e3405))
- **required-attrs:** deprecate options to pass more required attrs ([797ee34](https://github.com/dequelabs/axe-core/commit/797ee34e6913cc5e45d55c770127e91623cb31f7))
- **rule:** add reviewOnFail option to have rule return as needs review instead of violation ([#2235](htt
Download .txt
gitextract_cjgil3o8/

├── .babelrc
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── CODEOWNERS
│   ├── ISSUE_TEMPLATE/
│   │   ├── config.yml
│   │   ├── documentation.yml
│   │   ├── feature-request.yml
│   │   ├── possible-bug.yml
│   │   └── question.yaml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   └── install-deps/
│   │       └── action.yml
│   ├── axe-linter.yml
│   ├── bin/
│   │   ├── determine-version.sh
│   │   ├── validate-npm-deploy.sh
│   │   ├── validate-package.mjs
│   │   ├── wait-for-npm-ready.sh
│   │   └── wait-for-workflow-success.sh
│   ├── dependabot.yml
│   ├── review.yml
│   └── workflows/
│       ├── deploy.yml
│       ├── format.yml
│       ├── label-extension-linter-issues.yml
│       ├── nightly-tests.yml
│       ├── release.yml
│       ├── semantic-pr-title.yml
│       ├── sync-master-develop.yml
│       ├── test.yml
│       └── update-generated-files.yaml
├── .gitignore
├── .husky/
│   └── pre-commit
├── .jsdoc.json
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .prettierrc.json
├── .vscode/
│   ├── extensions.json
│   └── launch.json
├── CHANGELOG.md
├── CLAUDE.md
├── CONTRIBUTING.md
├── Gruntfile.js
├── LICENSE
├── LICENSE-3RD-PARTY.txt
├── README.md
├── SECURITY.md
├── axe-linter.yml
├── axe.d.ts
├── bower.json
├── build/
│   ├── build-manual.js
│   ├── check-node-version.js
│   ├── cherry-pick.js
│   ├── configure.js
│   ├── rule-generator/
│   │   ├── directories.js
│   │   ├── get-answers.js
│   │   ├── get-files-metadata.js
│   │   └── questions.js
│   ├── rule-generator.js
│   ├── shared/
│   │   ├── create-file.js
│   │   └── format.js
│   ├── sri-update.js
│   ├── tasks/
│   │   ├── add-locale.js
│   │   ├── aria-supported.js
│   │   ├── configure.js
│   │   ├── esbuild.js
│   │   ├── langs.js
│   │   ├── metadata-function-map.js
│   │   ├── notify.js
│   │   ├── test.js
│   │   ├── update-help.js
│   │   └── validate.js
│   └── templates.js
├── code-of-conduct.md
├── doc/
│   ├── API.md
│   ├── accessibility-supported.md
│   ├── act-rules-format.md
│   ├── aria-supported.md
│   ├── backwards-compatibility-doc.md
│   ├── check-message-template.md
│   ├── check-options.md
│   ├── code-submission-guidelines.md
│   ├── context.md
│   ├── developer-guide.md
│   ├── examples/
│   │   ├── chrome-debugging-protocol/
│   │   │   ├── README.md
│   │   │   ├── axe-cdp.js
│   │   │   └── package.json
│   │   ├── code-patterns.md
│   │   ├── html-handlebars.md
│   │   ├── jasmine/
│   │   │   ├── README.md
│   │   │   ├── karma.conf.js
│   │   │   ├── package.json
│   │   │   └── spec/
│   │   │       └── a11y.js
│   │   ├── jest_react/
│   │   │   ├── .babelrc
│   │   │   ├── README.md
│   │   │   ├── link.js
│   │   │   ├── link.test.js
│   │   │   └── package.json
│   │   ├── jsdom/
│   │   │   ├── package.json
│   │   │   └── test/
│   │   │       └── a11y.js
│   │   ├── mocha/
│   │   │   ├── README.md
│   │   │   ├── karma.conf.js
│   │   │   ├── package.json
│   │   │   └── test/
│   │   │       └── a11y.js
│   │   ├── pr-review-patterns.md
│   │   ├── puppeteer/
│   │   │   ├── README.md
│   │   │   ├── axe-puppeteer.js
│   │   │   ├── package.json
│   │   │   └── set-content.js
│   │   ├── qunit/
│   │   │   ├── Gruntfile.js
│   │   │   ├── README.md
│   │   │   ├── package.json
│   │   │   └── test/
│   │   │       ├── a11y.js
│   │   │       └── test.html
│   │   ├── rule-check-templates.md
│   │   ├── test-examples.js
│   │   └── test-patterns.md
│   ├── frame-messenger.md
│   ├── issue_impact.md
│   ├── plugins.md
│   ├── projects.md
│   ├── pull-request-checklist.md
│   ├── release-and-support.md
│   ├── rule-descriptions.md
│   ├── rule-development.md
│   ├── rule-proposal.md
│   ├── run-partial.md
│   └── standards-object.md
├── eslint.config.js
├── lib/
│   ├── checks/
│   │   ├── aria/
│   │   │   ├── abstractrole-evaluate.js
│   │   │   ├── abstractrole.json
│   │   │   ├── aria-allowed-attr-evaluate.js
│   │   │   ├── aria-allowed-attr.json
│   │   │   ├── aria-allowed-role-evaluate.js
│   │   │   ├── aria-allowed-role.json
│   │   │   ├── aria-busy-evaluate.js
│   │   │   ├── aria-busy.json
│   │   │   ├── aria-conditional-attr-evaluate.js
│   │   │   ├── aria-conditional-attr.json
│   │   │   ├── aria-conditional-checkbox-attr-evaluate.js
│   │   │   ├── aria-conditional-row-attr-evaluate.js
│   │   │   ├── aria-errormessage-evaluate.js
│   │   │   ├── aria-errormessage.json
│   │   │   ├── aria-hidden-body-evaluate.js
│   │   │   ├── aria-hidden-body.json
│   │   │   ├── aria-level-evaluate.js
│   │   │   ├── aria-level.json
│   │   │   ├── aria-prohibited-attr-evaluate.js
│   │   │   ├── aria-prohibited-attr.json
│   │   │   ├── aria-required-attr-evaluate.js
│   │   │   ├── aria-required-attr.json
│   │   │   ├── aria-required-children-evaluate.js
│   │   │   ├── aria-required-children.json
│   │   │   ├── aria-required-parent-evaluate.js
│   │   │   ├── aria-required-parent.json
│   │   │   ├── aria-roledescription-evaluate.js
│   │   │   ├── aria-roledescription.json
│   │   │   ├── aria-unsupported-attr-evaluate.js
│   │   │   ├── aria-unsupported-attr.json
│   │   │   ├── aria-valid-attr-evaluate.js
│   │   │   ├── aria-valid-attr-value-evaluate.js
│   │   │   ├── aria-valid-attr-value.json
│   │   │   ├── aria-valid-attr.json
│   │   │   ├── braille-label-equivalent-evaluate.js
│   │   │   ├── braille-label-equivalent.json
│   │   │   ├── braille-roledescription-equivalent-evaluate.js
│   │   │   ├── braille-roledescription-equivalent.json
│   │   │   ├── deprecatedrole-evaluate.js
│   │   │   ├── deprecatedrole.json
│   │   │   ├── fallbackrole-evaluate.js
│   │   │   ├── fallbackrole.json
│   │   │   ├── has-global-aria-attribute-evaluate.js
│   │   │   ├── has-global-aria-attribute.json
│   │   │   ├── has-widget-role-evaluate.js
│   │   │   ├── has-widget-role.json
│   │   │   ├── invalidrole-evaluate.js
│   │   │   ├── invalidrole.json
│   │   │   ├── is-element-focusable-evaluate.js
│   │   │   ├── is-element-focusable.json
│   │   │   ├── no-implicit-explicit-label-evaluate.js
│   │   │   ├── no-implicit-explicit-label.json
│   │   │   ├── unsupportedrole-evaluate.js
│   │   │   ├── unsupportedrole.json
│   │   │   ├── valid-scrollable-semantics-evaluate.js
│   │   │   └── valid-scrollable-semantics.json
│   │   ├── color/
│   │   │   ├── color-contrast-enhanced.json
│   │   │   ├── color-contrast-evaluate.js
│   │   │   ├── color-contrast.json
│   │   │   ├── link-in-text-block-evaluate.js
│   │   │   ├── link-in-text-block-style-evaluate.js
│   │   │   ├── link-in-text-block-style.json
│   │   │   └── link-in-text-block.json
│   │   ├── forms/
│   │   │   ├── autocomplete-appropriate-evaluate.js
│   │   │   ├── autocomplete-appropriate.json
│   │   │   ├── autocomplete-valid-evaluate.js
│   │   │   └── autocomplete-valid.json
│   │   ├── generic/
│   │   │   ├── README.md
│   │   │   ├── attr-non-space-content-evaluate.js
│   │   │   ├── has-descendant-after.js
│   │   │   ├── has-descendant-evaluate.js
│   │   │   ├── has-text-content-evaluate.js
│   │   │   ├── matches-definition-evaluate.js
│   │   │   ├── page-no-duplicate-after.js
│   │   │   └── page-no-duplicate-evaluate.js
│   │   ├── index.js
│   │   ├── keyboard/
│   │   │   ├── accesskeys-after.js
│   │   │   ├── accesskeys-evaluate.js
│   │   │   ├── accesskeys.json
│   │   │   ├── focusable-content-evaluate.js
│   │   │   ├── focusable-content.json
│   │   │   ├── focusable-disabled-evaluate.js
│   │   │   ├── focusable-disabled.json
│   │   │   ├── focusable-element-evaluate.js
│   │   │   ├── focusable-element.json
│   │   │   ├── focusable-modal-open-evaluate.js
│   │   │   ├── focusable-modal-open.json
│   │   │   ├── focusable-no-name-evaluate.js
│   │   │   ├── focusable-no-name.json
│   │   │   ├── focusable-not-tabbable-evaluate.js
│   │   │   ├── focusable-not-tabbable.json
│   │   │   ├── frame-focusable-content-evaluate.js
│   │   │   ├── frame-focusable-content.json
│   │   │   ├── landmark-is-top-level-evaluate.js
│   │   │   ├── landmark-is-top-level.json
│   │   │   ├── no-focusable-content-evaluate.js
│   │   │   ├── no-focusable-content.json
│   │   │   ├── page-has-heading-one.json
│   │   │   ├── page-has-main.json
│   │   │   ├── page-no-duplicate-banner.json
│   │   │   ├── page-no-duplicate-contentinfo.json
│   │   │   ├── page-no-duplicate-main.json
│   │   │   ├── tabindex-evaluate.js
│   │   │   └── tabindex.json
│   │   ├── label/
│   │   │   ├── alt-space-value-evaluate.js
│   │   │   ├── alt-space-value.json
│   │   │   ├── duplicate-img-label-evaluate.js
│   │   │   ├── duplicate-img-label.json
│   │   │   ├── explicit-evaluate.js
│   │   │   ├── explicit.json
│   │   │   ├── help-same-as-label-evaluate.js
│   │   │   ├── help-same-as-label.json
│   │   │   ├── hidden-explicit-label-evaluate.js
│   │   │   ├── hidden-explicit-label.json
│   │   │   ├── implicit-evaluate.js
│   │   │   ├── implicit.json
│   │   │   ├── label-content-name-mismatch-evaluate.js
│   │   │   ├── label-content-name-mismatch.json
│   │   │   ├── multiple-label-evaluate.js
│   │   │   ├── multiple-label.json
│   │   │   ├── title-only-evaluate.js
│   │   │   └── title-only.json
│   │   ├── landmarks/
│   │   │   ├── landmark-is-unique-after.js
│   │   │   ├── landmark-is-unique-evaluate.js
│   │   │   └── landmark-is-unique.json
│   │   ├── language/
│   │   │   ├── has-lang-evaluate.js
│   │   │   ├── has-lang.json
│   │   │   ├── valid-lang-evaluate.js
│   │   │   ├── valid-lang.json
│   │   │   ├── xml-lang-mismatch-evaluate.js
│   │   │   └── xml-lang-mismatch.json
│   │   ├── lists/
│   │   │   ├── dlitem-evaluate.js
│   │   │   ├── dlitem.json
│   │   │   ├── invalid-children-evaluate.js
│   │   │   ├── listitem-evaluate.js
│   │   │   ├── listitem.json
│   │   │   ├── only-dlitems-evaluate.js
│   │   │   ├── only-dlitems.json
│   │   │   ├── only-listitems-evaluate.js
│   │   │   ├── only-listitems.json
│   │   │   ├── structured-dlitems-evaluate.js
│   │   │   └── structured-dlitems.json
│   │   ├── media/
│   │   │   ├── caption-evaluate.js
│   │   │   ├── caption.json
│   │   │   ├── frame-tested-after.js
│   │   │   ├── frame-tested-evaluate.js
│   │   │   ├── frame-tested.json
│   │   │   ├── no-autoplay-audio-evaluate.js
│   │   │   └── no-autoplay-audio.json
│   │   ├── mobile/
│   │   │   ├── css-orientation-lock-evaluate.js
│   │   │   ├── css-orientation-lock.json
│   │   │   ├── meta-viewport-large.json
│   │   │   ├── meta-viewport-scale-evaluate.js
│   │   │   ├── meta-viewport.json
│   │   │   ├── target-offset-evaluate.js
│   │   │   ├── target-offset.json
│   │   │   ├── target-size-evaluate.js
│   │   │   └── target-size.json
│   │   ├── navigation/
│   │   │   ├── header-present.json
│   │   │   ├── heading-order-after.js
│   │   │   ├── heading-order-evaluate.js
│   │   │   ├── heading-order.json
│   │   │   ├── identical-links-same-purpose-after.js
│   │   │   ├── identical-links-same-purpose-evaluate.js
│   │   │   ├── identical-links-same-purpose.json
│   │   │   ├── internal-link-present-evaluate.js
│   │   │   ├── internal-link-present.json
│   │   │   ├── landmark.json
│   │   │   ├── meta-refresh-evaluate.js
│   │   │   ├── meta-refresh-no-exceptions.json
│   │   │   ├── meta-refresh.json
│   │   │   ├── p-as-heading-evaluate.js
│   │   │   ├── p-as-heading.json
│   │   │   ├── region-after.js
│   │   │   ├── region-evaluate.js
│   │   │   ├── region.json
│   │   │   ├── skip-link-evaluate.js
│   │   │   ├── skip-link.json
│   │   │   ├── unique-frame-title-after.js
│   │   │   ├── unique-frame-title-evaluate.js
│   │   │   └── unique-frame-title.json
│   │   ├── parsing/
│   │   │   ├── duplicate-id-active.json
│   │   │   ├── duplicate-id-after.js
│   │   │   ├── duplicate-id-aria.json
│   │   │   ├── duplicate-id-evaluate.js
│   │   │   └── duplicate-id.json
│   │   ├── shared/
│   │   │   ├── aria-label-evaluate.js
│   │   │   ├── aria-label.json
│   │   │   ├── aria-labelledby-evaluate.js
│   │   │   ├── aria-labelledby.json
│   │   │   ├── avoid-inline-spacing-evaluate.js
│   │   │   ├── avoid-inline-spacing.json
│   │   │   ├── button-has-visible-text.json
│   │   │   ├── doc-has-title-evaluate.js
│   │   │   ├── doc-has-title.json
│   │   │   ├── error-occurred.json
│   │   │   ├── exists-evaluate.js
│   │   │   ├── exists.json
│   │   │   ├── has-alt-evaluate.js
│   │   │   ├── has-alt.json
│   │   │   ├── has-visible-text.json
│   │   │   ├── important-letter-spacing.json
│   │   │   ├── important-line-height.json
│   │   │   ├── important-word-spacing.json
│   │   │   ├── inline-style-property-evaluate.js
│   │   │   ├── is-on-screen-evaluate.js
│   │   │   ├── is-on-screen.json
│   │   │   ├── non-empty-alt.json
│   │   │   ├── non-empty-if-present-evaluate.js
│   │   │   ├── non-empty-if-present.json
│   │   │   ├── non-empty-placeholder.json
│   │   │   ├── non-empty-title.json
│   │   │   ├── non-empty-value.json
│   │   │   ├── presentational-role-evaluate.js
│   │   │   ├── presentational-role.json
│   │   │   ├── role-none.json
│   │   │   ├── role-presentation.json
│   │   │   ├── svg-non-empty-title-evaluate.js
│   │   │   └── svg-non-empty-title.json
│   │   ├── tables/
│   │   │   ├── caption-faked-evaluate.js
│   │   │   ├── caption-faked.json
│   │   │   ├── html5-scope-evaluate.js
│   │   │   ├── html5-scope.json
│   │   │   ├── same-caption-summary-evaluate.js
│   │   │   ├── same-caption-summary.json
│   │   │   ├── scope-value-evaluate.js
│   │   │   ├── scope-value.json
│   │   │   ├── td-has-header-evaluate.js
│   │   │   ├── td-has-header.json
│   │   │   ├── td-headers-attr-evaluate.js
│   │   │   ├── td-headers-attr.json
│   │   │   ├── th-has-data-cells-evaluate.js
│   │   │   └── th-has-data-cells.json
│   │   └── visibility/
│   │       ├── hidden-content-evaluate.js
│   │       └── hidden-content.json
│   ├── commons/
│   │   ├── aria/
│   │   │   ├── allowed-attr.js
│   │   │   ├── arialabel-text.js
│   │   │   ├── arialabelledby-text.js
│   │   │   ├── get-accessible-refs.js
│   │   │   ├── get-element-unallowed-roles.js
│   │   │   ├── get-explicit-role.js
│   │   │   ├── get-owned-virtual.js
│   │   │   ├── get-role-type.js
│   │   │   ├── get-role.js
│   │   │   ├── get-roles-by-type.js
│   │   │   ├── get-roles-with-name-from-contents.js
│   │   │   ├── implicit-nodes.js
│   │   │   ├── implicit-role.js
│   │   │   ├── index.js
│   │   │   ├── is-accessible-ref.js
│   │   │   ├── is-aria-role-allowed-on-element.js
│   │   │   ├── is-combobox-popup.js
│   │   │   ├── is-unsupported-role.js
│   │   │   ├── is-valid-role.js
│   │   │   ├── label-virtual.js
│   │   │   ├── label.js
│   │   │   ├── lookup-table.js
│   │   │   ├── named-from-contents.js
│   │   │   ├── required-attr.js
│   │   │   ├── required-context.js
│   │   │   ├── required-owned.js
│   │   │   ├── validate-attr-value.js
│   │   │   └── validate-attr.js
│   │   ├── color/
│   │   │   ├── center-point-of-rect.js
│   │   │   ├── color.js
│   │   │   ├── element-has-image.js
│   │   │   ├── element-is-distinct.js
│   │   │   ├── filtered-rect-stack.js
│   │   │   ├── flatten-colors.js
│   │   │   ├── flatten-shadow-colors.js
│   │   │   ├── get-background-color.js
│   │   │   ├── get-background-stack.js
│   │   │   ├── get-contrast.js
│   │   │   ├── get-foreground-color.js
│   │   │   ├── get-own-background-color.js
│   │   │   ├── get-rect-stack.js
│   │   │   ├── get-stroke-colors-from-shadows.js
│   │   │   ├── get-text-shadow-colors.js
│   │   │   ├── has-valid-contrast-ratio.js
│   │   │   ├── incomplete-data.js
│   │   │   ├── index.js
│   │   │   ├── parse-text-shadows.js
│   │   │   └── stacking-context.js
│   │   ├── dom/
│   │   │   ├── create-grid.js
│   │   │   ├── find-elms-in-context.js
│   │   │   ├── find-nearby-elms.js
│   │   │   ├── find-up-virtual.js
│   │   │   ├── find-up.js
│   │   │   ├── focus-disabled.js
│   │   │   ├── get-composed-parent.js
│   │   │   ├── get-element-by-reference.js
│   │   │   ├── get-element-coordinates.js
│   │   │   ├── get-element-stack.js
│   │   │   ├── get-modal-dialog.js
│   │   │   ├── get-node-grid.js
│   │   │   ├── get-overflow-hidden-ancestors.js
│   │   │   ├── get-rect-stack.js
│   │   │   ├── get-root-node.js
│   │   │   ├── get-scroll-offset.js
│   │   │   ├── get-tabbable-elements.js
│   │   │   ├── get-target-rects.js
│   │   │   ├── get-target-size.js
│   │   │   ├── get-text-element-stack.js
│   │   │   ├── get-viewport-size.js
│   │   │   ├── get-visible-child-text-rects.js
│   │   │   ├── has-content-virtual.js
│   │   │   ├── has-content.js
│   │   │   ├── has-lang-text.js
│   │   │   ├── idrefs.js
│   │   │   ├── index.js
│   │   │   ├── inserted-into-focus-order.js
│   │   │   ├── is-current-page-link.js
│   │   │   ├── is-focusable.js
│   │   │   ├── is-hidden-for-everyone.js
│   │   │   ├── is-hidden-with-css.js
│   │   │   ├── is-html5.js
│   │   │   ├── is-in-tab-order.js
│   │   │   ├── is-in-text-block.js
│   │   │   ├── is-inert.js
│   │   │   ├── is-modal-open.js
│   │   │   ├── is-multiline.js
│   │   │   ├── is-natively-focusable.js
│   │   │   ├── is-node.js
│   │   │   ├── is-offscreen.js
│   │   │   ├── is-opaque.js
│   │   │   ├── is-skip-link.js
│   │   │   ├── is-visible-on-screen.js
│   │   │   ├── is-visible-to-screenreader.js
│   │   │   ├── is-visible.js
│   │   │   ├── is-visual-content.js
│   │   │   ├── reduce-to-elements-below-floating.js
│   │   │   ├── shadow-elements-from-point.js
│   │   │   ├── url-props-from-attribute.js
│   │   │   ├── visibility-methods.js
│   │   │   ├── visually-contains.js
│   │   │   ├── visually-overlaps.js
│   │   │   └── visually-sort.js
│   │   ├── forms/
│   │   │   ├── index.js
│   │   │   ├── is-aria-combobox.js
│   │   │   ├── is-aria-listbox.js
│   │   │   ├── is-aria-range.js
│   │   │   ├── is-aria-textbox.js
│   │   │   ├── is-disabled.js
│   │   │   ├── is-native-select.js
│   │   │   └── is-native-textbox.js
│   │   ├── index.js
│   │   ├── matches/
│   │   │   ├── attributes.js
│   │   │   ├── condition.js
│   │   │   ├── explicit-role.js
│   │   │   ├── from-definition.js
│   │   │   ├── from-function.js
│   │   │   ├── from-primative.js
│   │   │   ├── has-accessible-name.js
│   │   │   ├── implicit-role.js
│   │   │   ├── index.js
│   │   │   ├── matches.js
│   │   │   ├── node-name.js
│   │   │   ├── properties.js
│   │   │   └── semantic-role.js
│   │   ├── math/
│   │   │   ├── get-bounding-rect.js
│   │   │   ├── get-intersection-rect.js
│   │   │   ├── get-offset.js
│   │   │   ├── get-rect-center.js
│   │   │   ├── has-visual-overlap.js
│   │   │   ├── index.js
│   │   │   ├── is-point-in-rect.js
│   │   │   ├── rect-has-minimum-size.js
│   │   │   ├── rects-overlap.js
│   │   │   └── split-rects.js
│   │   ├── standards/
│   │   │   ├── get-aria-roles-by-type.js
│   │   │   ├── get-aria-roles-supporting-name-from-content.js
│   │   │   ├── get-element-spec.js
│   │   │   ├── get-elements-by-content-type.js
│   │   │   ├── get-global-aria-attrs.js
│   │   │   ├── implicit-html-roles.js
│   │   │   └── index.js
│   │   ├── table/
│   │   │   ├── get-all-cells.js
│   │   │   ├── get-cell-position.js
│   │   │   ├── get-headers.js
│   │   │   ├── get-scope.js
│   │   │   ├── index.js
│   │   │   ├── is-column-header.js
│   │   │   ├── is-data-cell.js
│   │   │   ├── is-data-table.js
│   │   │   ├── is-header.js
│   │   │   ├── is-row-header.js
│   │   │   ├── to-grid.js
│   │   │   └── traverse.js
│   │   └── text/
│   │       ├── accessible-text-virtual.js
│   │       ├── accessible-text.js
│   │       ├── form-control-value.js
│   │       ├── has-unicode.js
│   │       ├── index.js
│   │       ├── is-human-interpretable.js
│   │       ├── is-icon-ligature.js
│   │       ├── is-valid-autocomplete.js
│   │       ├── label-text.js
│   │       ├── label-virtual.js
│   │       ├── label.js
│   │       ├── native-element-type.js
│   │       ├── native-text-alternative.js
│   │       ├── native-text-methods.js
│   │       ├── remove-unicode.js
│   │       ├── sanitize.js
│   │       ├── subtree-text.js
│   │       ├── title-text.js
│   │       ├── unicode.js
│   │       ├── unsupported.js
│   │       ├── visible-text-nodes.js
│   │       ├── visible-virtual.js
│   │       └── visible.js
│   ├── core/
│   │   ├── _exposed-for-testing.js
│   │   ├── base/
│   │   │   ├── audit.js
│   │   │   ├── cache.js
│   │   │   ├── check-result.js
│   │   │   ├── check.js
│   │   │   ├── context/
│   │   │   │   ├── create-frame-context.js
│   │   │   │   ├── normalize-context.js
│   │   │   │   └── parse-selector-array.js
│   │   │   ├── context.js
│   │   │   ├── rule-result.js
│   │   │   ├── rule.js
│   │   │   └── virtual-node/
│   │   │       ├── abstract-virtual-node.js
│   │   │       ├── serial-virtual-node.js
│   │   │       └── virtual-node.js
│   │   ├── constants.js
│   │   ├── core.js
│   │   ├── imports/
│   │   │   ├── index.js
│   │   │   └── polyfills.js
│   │   ├── index.js
│   │   ├── log.js
│   │   ├── public/
│   │   │   ├── cleanup.js
│   │   │   ├── configure.js
│   │   │   ├── finish-run.js
│   │   │   ├── frame-messenger.js
│   │   │   ├── get-rules.js
│   │   │   ├── load.js
│   │   │   ├── plugins.js
│   │   │   ├── reporter.js
│   │   │   ├── reset.js
│   │   │   ├── run/
│   │   │   │   ├── globals-setup.js
│   │   │   │   └── normalize-run-params.js
│   │   │   ├── run-partial.js
│   │   │   ├── run-rules.js
│   │   │   ├── run-virtual-rule.js
│   │   │   ├── run.js
│   │   │   ├── setup.js
│   │   │   └── teardown.js
│   │   ├── reporters/
│   │   │   ├── helpers/
│   │   │   │   ├── failure-summary.js
│   │   │   │   ├── incomplete-fallback-msg.js
│   │   │   │   ├── index.js
│   │   │   │   └── process-aggregate.js
│   │   │   ├── na.js
│   │   │   ├── no-passes.js
│   │   │   ├── raw-env.js
│   │   │   ├── raw.js
│   │   │   ├── v1.js
│   │   │   └── v2.js
│   │   └── utils/
│   │       ├── aggregate-checks.js
│   │       ├── aggregate-node-results.js
│   │       ├── aggregate-result.js
│   │       ├── aggregate.js
│   │       ├── are-styles-set.js
│   │       ├── assert.js
│   │       ├── check-helper.js
│   │       ├── clone.js
│   │       ├── closest.js
│   │       ├── collect-results-from-frames.js
│   │       ├── contains.js
│   │       ├── css-parser.js
│   │       ├── deep-merge.js
│   │       ├── dq-element.js
│   │       ├── element-matches.js
│   │       ├── escape-selector.js
│   │       ├── extend-meta-data.js
│   │       ├── filter-html-attrs.js
│   │       ├── finalize-result.js
│   │       ├── find-by.js
│   │       ├── frame-messenger/
│   │       │   ├── assert-window.js
│   │       │   ├── channel-store.js
│   │       │   ├── create-responder.js
│   │       │   ├── message-handler.js
│   │       │   ├── message-id.js
│   │       │   ├── message-parser.js
│   │       │   ├── post-message.js
│   │       │   └── process-error.js
│   │       ├── frame-messenger.js
│   │       ├── get-all-checks.js
│   │       ├── get-ancestry.js
│   │       ├── get-base-lang.js
│   │       ├── get-check-message.js
│   │       ├── get-check-option.js
│   │       ├── get-element-source.js
│   │       ├── get-environment-data.js
│   │       ├── get-flattened-tree.js
│   │       ├── get-frame-contexts.js
│   │       ├── get-friendly-uri-end.js
│   │       ├── get-node-attributes.js
│   │       ├── get-node-from-tree.js
│   │       ├── get-root-node.js
│   │       ├── get-rule.js
│   │       ├── get-scroll-state.js
│   │       ├── get-scroll.js
│   │       ├── get-selector.js
│   │       ├── get-shadow-selector.js
│   │       ├── get-standards.js
│   │       ├── get-stylesheet-factory.js
│   │       ├── get-xpath.js
│   │       ├── index.js
│   │       ├── inject-style.js
│   │       ├── is-array-like.js
│   │       ├── is-context.js
│   │       ├── is-hidden.js
│   │       ├── is-html-element.js
│   │       ├── is-node-in-context.js
│   │       ├── is-shadow-root.js
│   │       ├── is-xhtml.js
│   │       ├── match-ancestry.js
│   │       ├── matches.js
│   │       ├── memoize.js
│   │       ├── merge-results.js
│   │       ├── node-lookup.js
│   │       ├── node-serializer.js
│   │       ├── node-sorter.js
│   │       ├── normalize-run-options.js
│   │       ├── object-has-own.js
│   │       ├── parse-crossorigin-stylesheet.js
│   │       ├── parse-sameorigin-stylesheet.js
│   │       ├── parse-stylesheet.js
│   │       ├── parse-tabindex.js
│   │       ├── performance-timer.js
│   │       ├── pollyfill-elements-from-point.js
│   │       ├── preload-cssom.js
│   │       ├── preload-media.js
│   │       ├── preload.js
│   │       ├── process-message.js
│   │       ├── publish-metadata.js
│   │       ├── query-selector-all-filter.js
│   │       ├── query-selector-all.js
│   │       ├── queue.js
│   │       ├── respondable.js
│   │       ├── rule-error.js
│   │       ├── rule-should-run.js
│   │       ├── select.js
│   │       ├── selector-cache.js
│   │       ├── send-command-to-frame.js
│   │       ├── serialize-error.js
│   │       ├── set-scroll-state.js
│   │       ├── shadow-select-all.js
│   │       ├── shadow-select.js
│   │       ├── to-array.js
│   │       ├── token-list.js
│   │       ├── unique-array.js
│   │       ├── uuid.js
│   │       ├── valid-input-type.js
│   │       └── valid-langs.js
│   ├── intro.stub
│   ├── misc/
│   │   ├── any-failure-summary.json
│   │   ├── incomplete-fallback.json
│   │   └── none-failure-summary.json
│   ├── outro.stub
│   ├── rules/
│   │   ├── accesskeys.json
│   │   ├── area-alt.json
│   │   ├── aria-allowed-attr-matches.js
│   │   ├── aria-allowed-attr.json
│   │   ├── aria-allowed-role-matches.js
│   │   ├── aria-allowed-role.json
│   │   ├── aria-braille-equivalent.json
│   │   ├── aria-command-name.json
│   │   ├── aria-conditional-attr.json
│   │   ├── aria-deprecated-role.json
│   │   ├── aria-dialog-name.json
│   │   ├── aria-has-attr-matches.js
│   │   ├── aria-hidden-body.json
│   │   ├── aria-hidden-focus-matches.js
│   │   ├── aria-hidden-focus.json
│   │   ├── aria-input-field-name.json
│   │   ├── aria-meter-name.json
│   │   ├── aria-progressbar-name.json
│   │   ├── aria-prohibited-attr.json
│   │   ├── aria-required-attr.json
│   │   ├── aria-required-children-matches.js
│   │   ├── aria-required-children.json
│   │   ├── aria-required-parent-matches.js
│   │   ├── aria-required-parent.json
│   │   ├── aria-roledescription.json
│   │   ├── aria-roles.json
│   │   ├── aria-tab-name.json
│   │   ├── aria-text.json
│   │   ├── aria-toggle-field-name.json
│   │   ├── aria-tooltip-name.json
│   │   ├── aria-treeitem-name.json
│   │   ├── aria-valid-attr-value.json
│   │   ├── aria-valid-attr.json
│   │   ├── audio-caption.json
│   │   ├── autocomplete-matches.js
│   │   ├── autocomplete-valid.json
│   │   ├── avoid-inline-spacing.json
│   │   ├── blink.json
│   │   ├── button-name.json
│   │   ├── bypass-matches.js
│   │   ├── bypass.json
│   │   ├── color-contrast-enhanced.json
│   │   ├── color-contrast-matches.js
│   │   ├── color-contrast.json
│   │   ├── css-orientation-lock.json
│   │   ├── data-table-large-matches.js
│   │   ├── data-table-matches.js
│   │   ├── definition-list.json
│   │   ├── dlitem.json
│   │   ├── document-title.json
│   │   ├── duplicate-id-active-matches.js
│   │   ├── duplicate-id-active.json
│   │   ├── duplicate-id-aria-matches.js
│   │   ├── duplicate-id-aria.json
│   │   ├── duplicate-id-misc-matches.js
│   │   ├── duplicate-id.json
│   │   ├── empty-heading.json
│   │   ├── empty-table-header.json
│   │   ├── focus-order-semantics.json
│   │   ├── form-field-multiple-labels.json
│   │   ├── frame-focusable-content-matches.js
│   │   ├── frame-focusable-content.json
│   │   ├── frame-tested.json
│   │   ├── frame-title-has-text-matches.js
│   │   ├── frame-title-unique.json
│   │   ├── frame-title.json
│   │   ├── has-implicit-chromium-role-matches.js
│   │   ├── heading-matches.js
│   │   ├── heading-order.json
│   │   ├── hidden-content.json
│   │   ├── html-has-lang.json
│   │   ├── html-lang-valid.json
│   │   ├── html-namespace-matches.js
│   │   ├── html-xml-lang-mismatch.json
│   │   ├── identical-links-same-purpose-matches.js
│   │   ├── identical-links-same-purpose.json
│   │   ├── image-alt.json
│   │   ├── img-redundant-alt.json
│   │   ├── input-button-name.json
│   │   ├── input-image-alt.json
│   │   ├── inserted-into-focus-order-matches.js
│   │   ├── is-initiator-matches.js
│   │   ├── is-visible-matches.js
│   │   ├── is-visible-on-screen-matches.js
│   │   ├── label-content-name-mismatch-matches.js
│   │   ├── label-content-name-mismatch.json
│   │   ├── label-matches.js
│   │   ├── label-title-only.json
│   │   ├── label.json
│   │   ├── landmark-banner-is-top-level.json
│   │   ├── landmark-complementary-is-top-level.json
│   │   ├── landmark-contentinfo-is-top-level.json
│   │   ├── landmark-has-body-context-matches.js
│   │   ├── landmark-main-is-top-level.json
│   │   ├── landmark-no-duplicate-banner.json
│   │   ├── landmark-no-duplicate-contentinfo.json
│   │   ├── landmark-no-duplicate-main.json
│   │   ├── landmark-one-main.json
│   │   ├── landmark-unique-matches.js
│   │   ├── landmark-unique.json
│   │   ├── layout-table-matches.js
│   │   ├── link-in-text-block-matches.js
│   │   ├── link-in-text-block.json
│   │   ├── link-name.json
│   │   ├── list.json
│   │   ├── listitem.json
│   │   ├── marquee.json
│   │   ├── meta-refresh-no-exceptions.json
│   │   ├── meta-refresh.json
│   │   ├── meta-viewport-large.json
│   │   ├── meta-viewport.json
│   │   ├── nested-interactive-matches.js
│   │   ├── nested-interactive.json
│   │   ├── no-autoplay-audio-matches.js
│   │   ├── no-autoplay-audio.json
│   │   ├── no-empty-role-matches.js
│   │   ├── no-explicit-name-required-matches.js
│   │   ├── no-naming-method-matches.js
│   │   ├── no-negative-tabindex-matches.js
│   │   ├── no-role-matches.js
│   │   ├── not-html-matches.js
│   │   ├── object-alt.json
│   │   ├── object-is-loaded-matches.js
│   │   ├── p-as-heading-matches.js
│   │   ├── p-as-heading.json
│   │   ├── page-has-heading-one.json
│   │   ├── presentation-role-conflict-matches.js
│   │   ├── presentation-role-conflict.json
│   │   ├── region.json
│   │   ├── role-img-alt.json
│   │   ├── scope-attr-valid.json
│   │   ├── scrollable-region-focusable-matches.js
│   │   ├── scrollable-region-focusable.json
│   │   ├── select-name.json
│   │   ├── server-side-image-map.json
│   │   ├── skip-link-matches.js
│   │   ├── skip-link.json
│   │   ├── summary-interactive-matches.js
│   │   ├── summary-name.json
│   │   ├── svg-img-alt.json
│   │   ├── svg-namespace-matches.js
│   │   ├── tabindex.json
│   │   ├── table-duplicate-name.json
│   │   ├── table-fake-caption.json
│   │   ├── table-or-grid-role-matches.js
│   │   ├── target-size.json
│   │   ├── td-has-header.json
│   │   ├── td-headers-attr.json
│   │   ├── th-has-data-cells.json
│   │   ├── valid-lang.json
│   │   ├── video-caption.json
│   │   ├── widget-not-inline-matches.js
│   │   ├── window-is-top-matches.js
│   │   └── xml-lang-mismatch-matches.js
│   └── standards/
│       ├── aria-attrs.js
│       ├── aria-roles.js
│       ├── css-colors.js
│       ├── dpub-roles.js
│       ├── graphics-roles.js
│       ├── html-elms.js
│       └── index.js
├── locales/
│   ├── README.md
│   ├── _template.json
│   ├── da.json
│   ├── de.json
│   ├── el.json
│   ├── es.json
│   ├── eu.json
│   ├── fr.json
│   ├── he.json
│   ├── it.json
│   ├── ja.json
│   ├── ko.json
│   ├── nl.json
│   ├── no_NB.json
│   ├── pl.json
│   ├── pt_BR.json
│   ├── pt_PT.json
│   ├── ru.json
│   ├── zh_CN.json
│   └── zh_TW.json
├── package.json
├── patches/
│   └── colorjs.io+0.4.3.patch
├── sri-history.json
├── test/
│   ├── act-rules/
│   │   ├── README.md
│   │   ├── act-runner.js
│   │   ├── aria-attr-defined-5f99a7.spec.js
│   │   ├── aria-hidden-no-focusable-content-6cfa84.spec.js
│   │   ├── aria-required-context-ff89c9.spec.js
│   │   ├── aria-required-id-references-in6db8.spec.js
│   │   ├── aria-required-owned-element-bc4a75.spec.js
│   │   ├── aria-state-or-property-permitted-5c01ea.spec.js
│   │   ├── autocomplete-valid-value-73f2c2.spec.js
│   │   ├── button-non-empty-accessible-name-97a4e1.spec.js
│   │   ├── css-restrict-orientation-b33eff.spec.js
│   │   ├── element-lang-valid-de46e4.spec.js
│   │   ├── element-marked-decorative-is-not-exposed-46ca7f.spec.js
│   │   ├── explicit-SVG-image-non-empty-accessible-name-7d6734.spec.js
│   │   ├── form-field-non-empty-accessible-name-e086e5.spec.js
│   │   ├── heading-non-empty-accessible-name-ffd0e9.spec.js
│   │   ├── html-page-lang-b5c3f8.spec.js
│   │   ├── html-page-lang-valid-bf051a.spec.js
│   │   ├── html-page-lang-xml-lang-match-5b7ae0.spec.js
│   │   ├── html-page-non-empty-title-2779a5.spec.js
│   │   ├── id-value-unique-3ea0c8.spec.js
│   │   ├── iframe-non-empty-accessible-name-cae760.spec.js
│   │   ├── image-button-non-empty-accessible-name-59796f.spec.js
│   │   ├── image-non-empty-accessible-name-23a2a8.spec.js
│   │   ├── letter-spacing-not-important-24afc2.spec.js
│   │   ├── line-height-not-important-78fd32.spec.js
│   │   ├── link-non-empty-accessible-name-c487ae.spec.js
│   │   ├── links-identical-name-equivalent-purpose-b20e66.spec.js
│   │   ├── links-with-identical-names-and-context-serve-equivalent-purpose-fd3a94.spec.js
│   │   ├── menuitem-non-empty-name-m6b1q3.spec.js
│   │   ├── meta-viewport-b4f0c3.spec.js
│   │   ├── object-has-acessible-name-8fc3b6.spec.js
│   │   ├── presentational-children-no-focusable-content-307n5z.spec.js
│   │   ├── role-required-states-and-properties-4e8ab6.spec.js
│   │   ├── scrollable-element-keyboard-accessible-0ssw9k.spec.js
│   │   ├── table-headers-attribute-refer-to-data-cells-a25f45.spec.js
│   │   ├── text-contrast-afw4f7.spec.js
│   │   ├── text-contrast-enhanced-09o5cg.spec.js
│   │   ├── visible-label-in-accessible-name-2ee8b8.spec.js
│   │   └── word-spacing-not-important-9e45ec.spec.js
│   ├── aria-practices/
│   │   ├── README.md
│   │   └── apg.spec.js
│   ├── assets/
│   │   ├── video.webm
│   │   └── webfont-attribution-license.md
│   ├── checks/
│   │   ├── aria/
│   │   │   ├── aria-allowed-attr.js
│   │   │   ├── aria-allowed-role.js
│   │   │   ├── aria-busy.js
│   │   │   ├── aria-conditional-attr.js
│   │   │   ├── aria-hidden-body.js
│   │   │   ├── aria-level.js
│   │   │   ├── aria-prohibited-attr.js
│   │   │   ├── aria-required-attr.js
│   │   │   ├── aria-roledescription.js
│   │   │   ├── braille-label-equivalent.js
│   │   │   ├── braille-roledescription-equivalent.js
│   │   │   ├── deprecatedrole.js
│   │   │   ├── errormessage.js
│   │   │   ├── fallbackrole.js
│   │   │   ├── has-global-aria-attribute.js
│   │   │   ├── has-widget-role.js
│   │   │   ├── is-element-focusable.js
│   │   │   ├── no-implicit-explicit-label.js
│   │   │   ├── required-children.js
│   │   │   ├── required-parent.js
│   │   │   ├── unsupportedattr.js
│   │   │   ├── unsupportedrole.js
│   │   │   ├── valid-attr-value.js
│   │   │   ├── valid-attr.js
│   │   │   └── valid-scrollable-semantics.js
│   │   ├── color/
│   │   │   ├── color-contrast.js
│   │   │   ├── link-in-text-block-style.js
│   │   │   └── link-in-text-block.js
│   │   ├── forms/
│   │   │   ├── autocomplete-appropriate.js
│   │   │   └── autocomplete-valid.js
│   │   ├── keyboard/
│   │   │   ├── accesskeys.js
│   │   │   ├── focusable-content.js
│   │   │   ├── focusable-disabled.js
│   │   │   ├── focusable-element.js
│   │   │   ├── focusable-modal-open.js
│   │   │   ├── focusable-no-name.js
│   │   │   ├── focusable-not-tabbable.js
│   │   │   ├── frame-focusable-content.js
│   │   │   ├── landmark-is-top-level.js
│   │   │   ├── no-focusable-content.js
│   │   │   ├── page-has-elm.js
│   │   │   ├── page-no-duplicate.js
│   │   │   └── tabindex.js
│   │   ├── label/
│   │   │   ├── alt-space-value.js
│   │   │   ├── duplicate-img-label.js
│   │   │   ├── explicit.js
│   │   │   ├── help-same-as-label.js
│   │   │   ├── hidden-explicit-label.js
│   │   │   ├── implicit.js
│   │   │   ├── label-content-name-mismatch.js
│   │   │   ├── multiple-label.js
│   │   │   └── title-only.js
│   │   ├── landmarks/
│   │   │   ├── landmark-is-unique-after.js
│   │   │   └── landmark-is-unique.js
│   │   ├── language/
│   │   │   ├── has-lang.js
│   │   │   ├── valid-lang.js
│   │   │   └── xml-lang-mismatch.js
│   │   ├── lists/
│   │   │   ├── dlitem.js
│   │   │   ├── listitem.js
│   │   │   ├── only-dlitems.js
│   │   │   ├── only-listitems.js
│   │   │   └── structured-dlitems.js
│   │   ├── media/
│   │   │   ├── caption.js
│   │   │   ├── frame-tested.js
│   │   │   └── no-autoplay-audio.js
│   │   ├── mobile/
│   │   │   ├── css-orientation-lock.js
│   │   │   ├── meta-viewport-scale.js
│   │   │   ├── target-offset.js
│   │   │   └── target-size.js
│   │   ├── navigation/
│   │   │   ├── header-present.js
│   │   │   ├── heading-order.js
│   │   │   ├── identical-links-same-purpose-after.js
│   │   │   ├── identical-links-same-purpose.js
│   │   │   ├── internal-link-present.js
│   │   │   ├── landmark.js
│   │   │   ├── meta-refresh.js
│   │   │   ├── p-as-heading.js
│   │   │   ├── region-after.js
│   │   │   ├── region.js
│   │   │   ├── skip-link.js
│   │   │   ├── unique-frame-title-after.js
│   │   │   └── unique-frame-title.js
│   │   ├── parser/
│   │   │   └── duplicate-id.js
│   │   ├── shared/
│   │   │   ├── abstractrole.js
│   │   │   ├── aria-label.js
│   │   │   ├── aria-labelledby.js
│   │   │   ├── avoid-inline-spacing.js
│   │   │   ├── button-has-visible-text.js
│   │   │   ├── doc-has-title.js
│   │   │   ├── exists.js
│   │   │   ├── has-alt.js
│   │   │   ├── has-visible-text.js
│   │   │   ├── inline-style-property.js
│   │   │   ├── invalidrole.js
│   │   │   ├── is-on-screen.js
│   │   │   ├── non-empty-alt.js
│   │   │   ├── non-empty-if-present.js
│   │   │   ├── non-empty-placeholder.js
│   │   │   ├── non-empty-title.js
│   │   │   ├── non-empty-value.js
│   │   │   ├── presentational-role.js
│   │   │   ├── role-none.js
│   │   │   ├── role-presentation.js
│   │   │   └── svg-non-empty-title.js
│   │   ├── tables/
│   │   │   ├── caption-faked.js
│   │   │   ├── html5-scope.js
│   │   │   ├── same-caption-summary.js
│   │   │   ├── scope-value.js
│   │   │   ├── td-has-header.js
│   │   │   ├── td-headers-attr.js
│   │   │   └── th-has-data-cells.js
│   │   ├── theme.css
│   │   └── visibility/
│   │       └── hidden-content.js
│   ├── commons/
│   │   ├── aria/
│   │   │   ├── allowed-attr.js
│   │   │   ├── arialabel-text.js
│   │   │   ├── arialabelledby-text.js
│   │   │   ├── get-accessible-refs.js
│   │   │   ├── get-element-unallowed-roles.js
│   │   │   ├── get-explicit-role.js
│   │   │   ├── get-owned-virtual.js
│   │   │   ├── get-role-type.js
│   │   │   ├── get-role.js
│   │   │   ├── get-roles-by-type.js
│   │   │   ├── get-roles-with-name-from-contents.js
│   │   │   ├── implicit-role.js
│   │   │   ├── is-accessible-ref.js
│   │   │   ├── is-aria-role-allowed-on-element.js
│   │   │   ├── is-combobox-popup.js
│   │   │   ├── is-unsupported-role.js
│   │   │   ├── is-valid-role.js
│   │   │   ├── label-virtual.js
│   │   │   ├── named-from-contents.js
│   │   │   ├── required-attr.js
│   │   │   ├── required-context.js
│   │   │   ├── required-owned.js
│   │   │   ├── roles.js
│   │   │   ├── validate-attr-value.js
│   │   │   └── validate-attr.js
│   │   ├── color/
│   │   │   ├── center-point-of-rect.js
│   │   │   ├── color.js
│   │   │   ├── element-has-image.js
│   │   │   ├── element-is-distinct.js
│   │   │   ├── flatten-colors.js
│   │   │   ├── get-background-color.js
│   │   │   ├── get-contrast.js
│   │   │   ├── get-foreground-color.js
│   │   │   ├── get-own-background-color.js
│   │   │   ├── get-stroke-colors-from-shadows.js
│   │   │   ├── get-text-shadow-colors.js
│   │   │   ├── has-valid-contrast-ratio.js
│   │   │   ├── incomplete-data.js
│   │   │   ├── parse-text-shadows.js
│   │   │   └── stacking-context.js
│   │   ├── dom/
│   │   │   ├── create-grid.js
│   │   │   ├── find-elms-in-context.js
│   │   │   ├── find-nearby-elms.js
│   │   │   ├── find-up.js
│   │   │   ├── focus-disabled.js
│   │   │   ├── get-composed-parent.js
│   │   │   ├── get-element-by-reference.js
│   │   │   ├── get-element-coordinates.js
│   │   │   ├── get-element-stack.js
│   │   │   ├── get-modal-dialog.js
│   │   │   ├── get-node-grid.js
│   │   │   ├── get-overflow-hidden-ancestors.js
│   │   │   ├── get-scroll-offset.js
│   │   │   ├── get-tabbable-elements.js
│   │   │   ├── get-target-rects.js
│   │   │   ├── get-target-size.js
│   │   │   ├── get-text-element-stack.js
│   │   │   ├── get-viewport-size.js
│   │   │   ├── get-visible-child-text-rects.js
│   │   │   ├── has-content-virtual.js
│   │   │   ├── has-lang-text.js
│   │   │   ├── idrefs.js
│   │   │   ├── inserted-into-focus-order.js
│   │   │   ├── is-current-page-link.js
│   │   │   ├── is-focusable.js
│   │   │   ├── is-hidden-for-everyone.js
│   │   │   ├── is-hidden-with-css.js
│   │   │   ├── is-html5.js
│   │   │   ├── is-in-tab-order.js
│   │   │   ├── is-in-text-block.js
│   │   │   ├── is-inert.js
│   │   │   ├── is-modal-open.js
│   │   │   ├── is-multiline.js
│   │   │   ├── is-natively-focusable.js
│   │   │   ├── is-node.js
│   │   │   ├── is-offscreen.js
│   │   │   ├── is-skip-link.js
│   │   │   ├── is-visible-on-screen.js
│   │   │   ├── is-visible-to-screenreader.js
│   │   │   ├── is-visible.js
│   │   │   ├── is-visual-content.js
│   │   │   ├── shadow-elements-from-point.js
│   │   │   ├── url-props-from-attribute.js
│   │   │   ├── visibility-methods.js
│   │   │   ├── visually-contains.js
│   │   │   ├── visually-overlaps.js
│   │   │   └── visually-sort.js
│   │   ├── forms/
│   │   │   ├── is-aria-combobox.js
│   │   │   ├── is-aria-listbox.js
│   │   │   ├── is-aria-range.js
│   │   │   ├── is-aria-textbox.js
│   │   │   ├── is-disabled.js
│   │   │   ├── is-native-select.js
│   │   │   └── is-native-textbox.js
│   │   ├── index.js
│   │   ├── matches/
│   │   │   ├── attributes.js
│   │   │   ├── condition.js
│   │   │   ├── explicit-role.js
│   │   │   ├── from-definition.js
│   │   │   ├── from-function.js
│   │   │   ├── from-primative.js
│   │   │   ├── has-accessible-name.js
│   │   │   ├── implicit-role.js
│   │   │   ├── node-name.js
│   │   │   ├── properties.js
│   │   │   └── semantic-role.js
│   │   ├── math/
│   │   │   ├── get-bounding-rect.js
│   │   │   ├── get-intersection-rect.js
│   │   │   ├── get-offset.js
│   │   │   ├── get-rect-center.js
│   │   │   ├── has-visual-overlap.js
│   │   │   ├── is-point-in-rect.js
│   │   │   ├── rect-has-minimum-size.js
│   │   │   ├── rects-overlap.js
│   │   │   └── split-rects.js
│   │   ├── standards/
│   │   │   ├── get-aria-roles-by-type.js
│   │   │   ├── get-aria-roles-supporting-name-from-content.js
│   │   │   ├── get-element-spec.js
│   │   │   ├── get-elements-by-content-type.js
│   │   │   └── get-global-aria-attrs.js
│   │   ├── table/
│   │   │   ├── get-cell-position.js
│   │   │   ├── get-headers.js
│   │   │   ├── get-scope.js
│   │   │   ├── is-column-header.js
│   │   │   ├── is-data-cell.js
│   │   │   ├── is-data-table.js
│   │   │   ├── is-header.js
│   │   │   ├── is-row-header.js
│   │   │   ├── to-grid.js
│   │   │   └── traverse.js
│   │   ├── text/
│   │   │   ├── accessible-text.js
│   │   │   ├── form-control-value.js
│   │   │   ├── is-human-interpretable.js
│   │   │   ├── is-icon-ligature.js
│   │   │   ├── is-valid-autocomplete.js
│   │   │   ├── label-text.js
│   │   │   ├── label-virtual.js
│   │   │   ├── native-text-alternative.js
│   │   │   ├── native-text-methods.js
│   │   │   ├── sanitize.js
│   │   │   ├── subtree-text.js
│   │   │   ├── unicode.js
│   │   │   ├── visible-text-nodes.js
│   │   │   └── visible-virtual.js
│   │   └── utils/
│   │       └── index.js
│   ├── core/
│   │   ├── base/
│   │   │   ├── audit.js
│   │   │   ├── cache.js
│   │   │   ├── check-result.js
│   │   │   ├── check.js
│   │   │   ├── context.js
│   │   │   ├── rule-result.js
│   │   │   ├── rule.js
│   │   │   └── virtual-node/
│   │   │       ├── abstract-virtual-node.js
│   │   │       ├── serial-virtual-node.js
│   │   │       └── virtual-node.js
│   │   ├── constants.js
│   │   ├── export.js
│   │   ├── index.js
│   │   ├── log.js
│   │   ├── public/
│   │   │   ├── cleanup.js
│   │   │   ├── configure.js
│   │   │   ├── finish-run.js
│   │   │   ├── frame-messenger.js
│   │   │   ├── get-rules.js
│   │   │   ├── load.js
│   │   │   ├── plugins.js
│   │   │   ├── reporter.js
│   │   │   ├── reset.js
│   │   │   ├── run-partial.js
│   │   │   ├── run-rules.js
│   │   │   ├── run-virtual-rule.js
│   │   │   ├── run.js
│   │   │   ├── setup.js
│   │   │   └── teardown.js
│   │   ├── reporters/
│   │   │   ├── helpers/
│   │   │   │   ├── 000_runfirst.js
│   │   │   │   ├── failure-summary.js
│   │   │   │   ├── incomplete-fallback-msg.js
│   │   │   │   └── process-aggregate.js
│   │   │   ├── na.js
│   │   │   ├── no-passes.js
│   │   │   ├── raw-env.js
│   │   │   ├── raw.js
│   │   │   ├── v1.js
│   │   │   └── v2.js
│   │   └── utils/
│   │       ├── aggregate.js
│   │       ├── aggregateChecks.js
│   │       ├── aggregateNodeResults.js
│   │       ├── aggregateResult.js
│   │       ├── are-styles-set.js
│   │       ├── assert.js
│   │       ├── check-helper.js
│   │       ├── clone.js
│   │       ├── closest.js
│   │       ├── collect-results-from-frames.js
│   │       ├── contains.js
│   │       ├── deep-merge.js
│   │       ├── dq-element.js
│   │       ├── element-matches.js
│   │       ├── escape-selector.js
│   │       ├── extend-meta-data.js
│   │       ├── filter-html-attrs.js
│   │       ├── finalize-result.js
│   │       ├── find-by.js
│   │       ├── flattened-tree.js
│   │       ├── frame-messenger/
│   │       │   ├── frame-messenger.js
│   │       │   └── subscribe.js
│   │       ├── get-all-checks.js
│   │       ├── get-ancestry.js
│   │       ├── get-base-lang.js
│   │       ├── get-check-message.js
│   │       ├── get-check-option.js
│   │       ├── get-element-source.js
│   │       ├── get-environment-data.js
│   │       ├── get-frame-contexts.js
│   │       ├── get-friendly-uri-end.js
│   │       ├── get-node-attributes.js
│   │       ├── get-root-node.js
│   │       ├── get-rule.js
│   │       ├── get-scroll.js
│   │       ├── get-selector.js
│   │       ├── get-shadow-selector.js
│   │       ├── get-standards.js
│   │       ├── get-stylesheet-factory.js
│   │       ├── get-xpath.js
│   │       ├── is-array-like.js
│   │       ├── is-context.js
│   │       ├── is-hidden.js
│   │       ├── is-html-element.js
│   │       ├── is-node-in-context.js
│   │       ├── is-shadow-root.js
│   │       ├── is-xhtml.js
│   │       ├── matchAncestry.js
│   │       ├── matches.js
│   │       ├── memoize.js
│   │       ├── merge-results.js
│   │       ├── node-lookup.js
│   │       ├── node-serializer.js
│   │       ├── node-sorter.js
│   │       ├── normalize-run-options.js
│   │       ├── object-has-own.js
│   │       ├── parse-crossorigin-stylesheet.js
│   │       ├── parse-sameorigin-stylesheet.js
│   │       ├── parse-tabindex.js
│   │       ├── performance-timer.js
│   │       ├── pollyfills.elements-from-point.js
│   │       ├── preload-cssom.js
│   │       ├── preload-media.js
│   │       ├── preload.js
│   │       ├── process-message.js
│   │       ├── publish-metadata.js
│   │       ├── qsa.js
│   │       ├── queue.js
│   │       ├── respondable.js
│   │       ├── rule-error.js
│   │       ├── rule-should-run.js
│   │       ├── scroll-state.js
│   │       ├── select.js
│   │       ├── selector-cache.js
│   │       ├── send-command-to-frame.js
│   │       ├── serialize-error.js
│   │       ├── shadow-select-all.js
│   │       ├── shadow-select.js
│   │       ├── to-array.js
│   │       ├── token-list.js
│   │       └── valid-langs.js
│   ├── get-webdriver.js
│   ├── integration/
│   │   ├── adapter.js
│   │   ├── api/
│   │   │   └── external/
│   │   │       └── index.js
│   │   ├── full/
│   │   │   ├── README.md
│   │   │   ├── all-rules/
│   │   │   │   ├── all-rules.html
│   │   │   │   ├── all-rules.js
│   │   │   │   └── frames/
│   │   │   │       └── focusable.html
│   │   │   ├── aria-hidden-body/
│   │   │   │   ├── fail.html
│   │   │   │   ├── fail.js
│   │   │   │   ├── frames/
│   │   │   │   │   └── frame-hidden-body.html
│   │   │   │   ├── pass.html
│   │   │   │   └── pass.js
│   │   │   ├── aria-hidden-focus/
│   │   │   │   ├── modal.html
│   │   │   │   └── modal.js
│   │   │   ├── async/
│   │   │   │   ├── async.html
│   │   │   │   └── async.js
│   │   │   ├── bypass/
│   │   │   │   ├── aria-header.html
│   │   │   │   ├── fail.html
│   │   │   │   ├── fail.js
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── header-iframe-fail.html
│   │   │   │   ├── header-iframe-fail.js
│   │   │   │   ├── header-iframe-pass.html
│   │   │   │   ├── header-iframe-pass.js
│   │   │   │   ├── header1.html
│   │   │   │   ├── header2.html
│   │   │   │   ├── pass-tests.js
│   │   │   │   ├── region.html
│   │   │   │   └── skip-link.html
│   │   │   ├── configuration/
│   │   │   │   ├── tag-exclude.html
│   │   │   │   └── tag-exclude.js
│   │   │   ├── configure-options/
│   │   │   │   ├── configure-options.html
│   │   │   │   └── configure-options.js
│   │   │   ├── context/
│   │   │   │   ├── context.html
│   │   │   │   ├── context.js
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   ├── level2-b.html
│   │   │   │   │   └── shadow-frame.html
│   │   │   │   ├── shadow-dom.html
│   │   │   │   └── shadow-dom.js
│   │   │   ├── contrast/
│   │   │   │   ├── blending.html
│   │   │   │   ├── blending.js
│   │   │   │   ├── code-highlighting.html
│   │   │   │   ├── code-highlighting.js
│   │   │   │   ├── memory.html
│   │   │   │   ├── memory.js
│   │   │   │   ├── prototype-lib-1.7.3.js
│   │   │   │   ├── prototype.html
│   │   │   │   ├── prototype.js
│   │   │   │   ├── shadow-dom.html
│   │   │   │   ├── shadow-dom.js
│   │   │   │   ├── sticky-header.html
│   │   │   │   └── sticky-header.js
│   │   │   ├── contrast-enhanced/
│   │   │   │   ├── simple.html
│   │   │   │   └── simple.js
│   │   │   ├── css-orientation-lock/
│   │   │   │   ├── incomplete.html
│   │   │   │   ├── incomplete.js
│   │   │   │   ├── passes.html
│   │   │   │   ├── passes.js
│   │   │   │   ├── violations.css
│   │   │   │   ├── violations.html
│   │   │   │   └── violations.js
│   │   │   ├── definition-list/
│   │   │   │   ├── dl-role.html
│   │   │   │   ├── dl-role.js
│   │   │   │   ├── dlitem-role.html
│   │   │   │   └── dlitem-role.js
│   │   │   ├── dialog/
│   │   │   │   ├── dialog.html
│   │   │   │   └── dialog.js
│   │   │   ├── document-title/
│   │   │   │   ├── document-title-fail.html
│   │   │   │   ├── document-title-fail.js
│   │   │   │   ├── document-title-pass.html
│   │   │   │   ├── document-title-pass.js
│   │   │   │   └── frames/
│   │   │   │       ├── level1.html
│   │   │   │       ├── level2-a.html
│   │   │   │       └── level2.html
│   │   │   ├── error-occurred/
│   │   │   │   ├── error-frame.html
│   │   │   │   ├── error-frame.js
│   │   │   │   ├── error-occurred.html
│   │   │   │   ├── error-occurred.js
│   │   │   │   ├── error-ruleset.js
│   │   │   │   └── frames/
│   │   │   │       └── error.html
│   │   │   ├── frame-tested/
│   │   │   │   ├── frame-tested-fail.html
│   │   │   │   ├── frame-tested-fail.js
│   │   │   │   ├── frame-tested-incomplete.html
│   │   │   │   ├── frame-tested-incomplete.js
│   │   │   │   ├── frame-tested-pass.html
│   │   │   │   ├── frame-tested-pass.js
│   │   │   │   └── frames/
│   │   │   │       ├── nested-no-axe.html
│   │   │   │       ├── no-axe.html
│   │   │   │       └── with-axe.html
│   │   │   ├── frame-wait-time/
│   │   │   │   ├── frame-wait-time.html
│   │   │   │   ├── frame-wait-time.js
│   │   │   │   └── frames/
│   │   │   │       └── frame.html
│   │   │   ├── get-selector/
│   │   │   │   ├── get-selector.js
│   │   │   │   └── get-selector.xhtml
│   │   │   ├── heading-order/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── heading.html
│   │   │   │   │   └── nested-heading.html
│   │   │   │   ├── no-heading-page.html
│   │   │   │   ├── no-heading-page.js
│   │   │   │   ├── partial-context-with-iframe-excluded.html
│   │   │   │   ├── partial-context-with-iframe-excluded.js
│   │   │   │   ├── partial-context-with-iframe.html
│   │   │   │   ├── partial-context-with-iframe.js
│   │   │   │   ├── partial-context.html
│   │   │   │   └── partial-context.js
│   │   │   ├── html-has-lang/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── html-has-lang-fail-xml-lang.html
│   │   │   │   ├── html-has-lang-fail-xml-lang.js
│   │   │   │   ├── html-has-lang-fail.html
│   │   │   │   ├── html-has-lang-fail.js
│   │   │   │   ├── html-has-lang-pass-xhtml.js
│   │   │   │   ├── html-has-lang-pass-xhtml.xhtml
│   │   │   │   ├── html-has-lang-pass.html
│   │   │   │   └── html-has-lang-pass.js
│   │   │   ├── html-lang-valid/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   ├── level2-b.html
│   │   │   │   │   ├── level2-c.html
│   │   │   │   │   ├── level2-d.html
│   │   │   │   │   ├── level2-e.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── html-lang-valid.html
│   │   │   │   └── html-lang-valid.js
│   │   │   ├── identical-links-same-purpose/
│   │   │   │   ├── frames/
│   │   │   │   │   └── level1.html
│   │   │   │   ├── page.html
│   │   │   │   └── page.js
│   │   │   ├── incomplete/
│   │   │   │   ├── color-contrast.html
│   │   │   │   ├── color-contrast.js
│   │   │   │   ├── th-has-data-cells.html
│   │   │   │   └── th-has-data-cells.js
│   │   │   ├── is-xhtml/
│   │   │   │   ├── is-xhtml.js
│   │   │   │   └── is-xhtml.xhtml
│   │   │   ├── isolated-env/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── focusable.html
│   │   │   │   │   └── isolated.html
│   │   │   │   ├── isolated-env.html
│   │   │   │   └── isolated-env.js
│   │   │   ├── jquery/
│   │   │   │   ├── run-include-exclude.html
│   │   │   │   ├── run-include-exclude.js
│   │   │   │   ├── run-object.html
│   │   │   │   └── run-object.js
│   │   │   ├── landmark-banner-is-top-level/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-banner-is-top-level-fail.html
│   │   │   │   ├── landmark-banner-is-top-level-fail.js
│   │   │   │   ├── landmark-banner-is-top-level-pass.html
│   │   │   │   └── landmark-banner-is-top-level-pass.js
│   │   │   ├── landmark-complementary-is-top-level/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-complementary-is-top-level-fail.html
│   │   │   │   ├── landmark-complementary-is-top-level-fail.js
│   │   │   │   ├── landmark-complementary-is-top-level-pass.html
│   │   │   │   └── landmark-complementary-is-top-level-pass.js
│   │   │   ├── landmark-contentinfo-is-top-level/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-contentinfo-is-top-level-fail.html
│   │   │   │   ├── landmark-contentinfo-is-top-level-fail.js
│   │   │   │   ├── landmark-contentinfo-is-top-level-pass.html
│   │   │   │   └── landmark-contentinfo-is-top-level-pass.js
│   │   │   ├── landmark-main-is-top-level/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-main-is-top-level-fail.html
│   │   │   │   ├── landmark-main-is-top-level-fail.js
│   │   │   │   ├── landmark-main-is-top-level-pass.html
│   │   │   │   └── landmark-main-is-top-level-pass.js
│   │   │   ├── landmark-no-duplicate-banner/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-no-duplicate-banner-fail.html
│   │   │   │   ├── landmark-no-duplicate-banner-fail.js
│   │   │   │   ├── landmark-no-duplicate-banner-pass.html
│   │   │   │   └── landmark-no-duplicate-banner-pass.js
│   │   │   ├── landmark-no-duplicate-contentinfo/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-no-duplicate-contentinfo-fail.html
│   │   │   │   ├── landmark-no-duplicate-contentinfo-fail.js
│   │   │   │   ├── landmark-no-duplicate-contentinfo-pass.html
│   │   │   │   └── landmark-no-duplicate-contentinfo-pass.js
│   │   │   ├── landmark-no-duplicate-main/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-no-duplicate-main-fail.html
│   │   │   │   ├── landmark-no-duplicate-main-fail.js
│   │   │   │   ├── landmark-no-duplicate-main-pass.html
│   │   │   │   └── landmark-no-duplicate-main-pass.js
│   │   │   ├── landmark-one-main/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── landmark-one-main-fail.html
│   │   │   │   ├── landmark-one-main-fail.js
│   │   │   │   ├── landmark-one-main-pass1.html
│   │   │   │   ├── landmark-one-main-pass1.js
│   │   │   │   ├── landmark-one-main-pass2.html
│   │   │   │   ├── landmark-one-main-pass2.js
│   │   │   │   ├── landmark-one-main-pass3.html
│   │   │   │   ├── landmark-one-main-pass3.js
│   │   │   │   ├── landmark-one-main-pass4.html
│   │   │   │   └── landmark-one-main-pass4.js
│   │   │   ├── list/
│   │   │   │   ├── li-role.html
│   │   │   │   ├── li-role.js
│   │   │   │   ├── list-role.html
│   │   │   │   └── list-role.js
│   │   │   ├── meta-refresh/
│   │   │   │   ├── meta-refresh-fail.js
│   │   │   │   ├── meta-refresh-fail1.html
│   │   │   │   ├── meta-refresh-inapplicable.js
│   │   │   │   ├── meta-refresh-inapplicable1.html
│   │   │   │   ├── meta-refresh-inapplicable2.html
│   │   │   │   ├── meta-refresh-pass.js
│   │   │   │   ├── meta-refresh-pass1.html
│   │   │   │   └── meta-refresh-pass2.html
│   │   │   ├── meta-refresh-no-exceptions/
│   │   │   │   ├── meta-refresh-fail.js
│   │   │   │   ├── meta-refresh-fail1.html
│   │   │   │   ├── meta-refresh-inapplicable.js
│   │   │   │   ├── meta-refresh-inapplicable1.html
│   │   │   │   ├── meta-refresh-inapplicable2.html
│   │   │   │   ├── meta-refresh-pass.js
│   │   │   │   ├── meta-refresh-pass1.html
│   │   │   │   └── meta-refresh-pass2.html
│   │   │   ├── no-autoplay-audio/
│   │   │   │   ├── no-autoplay-audio.html
│   │   │   │   └── no-autoplay-audio.js
│   │   │   ├── options-parameter/
│   │   │   │   ├── frames/
│   │   │   │   │   └── frame.html
│   │   │   │   ├── options-parameter.html
│   │   │   │   └── options-parameter.js
│   │   │   ├── page-has-heading-one/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1-fail.html
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2.html
│   │   │   │   ├── page-has-heading-one-fail.html
│   │   │   │   ├── page-has-heading-one-fail.js
│   │   │   │   ├── page-has-heading-one-pass1.html
│   │   │   │   ├── page-has-heading-one-pass1.js
│   │   │   │   ├── page-has-heading-one-pass10.html
│   │   │   │   ├── page-has-heading-one-pass10.js
│   │   │   │   ├── page-has-heading-one-pass2.html
│   │   │   │   ├── page-has-heading-one-pass2.js
│   │   │   │   ├── page-has-heading-one-pass3.html
│   │   │   │   ├── page-has-heading-one-pass3.js
│   │   │   │   ├── page-has-heading-one-pass4.html
│   │   │   │   ├── page-has-heading-one-pass4.js
│   │   │   │   ├── page-has-heading-one-pass5.html
│   │   │   │   ├── page-has-heading-one-pass5.js
│   │   │   │   ├── page-has-heading-one-pass6.html
│   │   │   │   ├── page-has-heading-one-pass6.js
│   │   │   │   ├── page-has-heading-one-pass7.html
│   │   │   │   ├── page-has-heading-one-pass7.js
│   │   │   │   ├── page-has-heading-one-pass8.html
│   │   │   │   ├── page-has-heading-one-pass8.js
│   │   │   │   ├── page-has-heading-one-pass9.html
│   │   │   │   └── page-has-heading-one-pass9.js
│   │   │   ├── patch/
│   │   │   │   ├── patch.html
│   │   │   │   └── patch.mjs
│   │   │   ├── plugin/
│   │   │   │   ├── plugin.html
│   │   │   │   └── plugin.js
│   │   │   ├── preload/
│   │   │   │   ├── import-non-existing-cross-origin.css
│   │   │   │   ├── preload.html
│   │   │   │   └── preload.js
│   │   │   ├── preload-cssom/
│   │   │   │   ├── base.css
│   │   │   │   ├── cyclic-cross-origin-import-1.css
│   │   │   │   ├── cyclic-cross-origin-import-2.css
│   │   │   │   ├── cyclic-import-1.css
│   │   │   │   ├── cyclic-import-2.css
│   │   │   │   ├── frames/
│   │   │   │   │   └── level1.html
│   │   │   │   ├── import-non-existing-cross-origin.css
│   │   │   │   ├── multiple-import-1.css
│   │   │   │   ├── multiple-import-2.css
│   │   │   │   ├── multiple-import-3.css
│   │   │   │   ├── nested-import-1.css
│   │   │   │   ├── nested-import-2.css
│   │   │   │   ├── nested-import-3.css
│   │   │   │   ├── preload-cssom.html
│   │   │   │   └── preload-cssom.js
│   │   │   ├── region/
│   │   │   │   ├── frames/
│   │   │   │   │   ├── region-fail.html
│   │   │   │   │   ├── region-nested.html
│   │   │   │   │   └── region.html
│   │   │   │   ├── region-fail-iframe.html
│   │   │   │   ├── region-fail-iframe.js
│   │   │   │   ├── region-fail-nested-iframe.html
│   │   │   │   ├── region-fail-nested-iframe.js
│   │   │   │   ├── region-fail.html
│   │   │   │   ├── region-fail.js
│   │   │   │   ├── region-iframe-with-landmarks.html
│   │   │   │   ├── region-iframe-within-landmark.html
│   │   │   │   ├── region-pass-nested-iframe.html
│   │   │   │   ├── region-pass.html
│   │   │   │   └── region-pass.js
│   │   │   ├── rerun/
│   │   │   │   ├── frames/
│   │   │   │   │   └── frame.html
│   │   │   │   ├── rerun.html
│   │   │   │   └── rerun.js
│   │   │   ├── run-partial/
│   │   │   │   ├── after-method.html
│   │   │   │   ├── after-method.js
│   │   │   │   ├── context-size-focusable.html
│   │   │   │   ├── context-size-focusable.js
│   │   │   │   ├── frames/
│   │   │   │   │   ├── heading-frame-h3.html
│   │   │   │   │   ├── heading-h2.html
│   │   │   │   │   ├── link-nested.html
│   │   │   │   │   └── link.html
│   │   │   │   ├── initiator.html
│   │   │   │   ├── initiator.js
│   │   │   │   ├── page-level.html
│   │   │   │   └── page-level.js
│   │   │   ├── serializer/
│   │   │   │   ├── custom-source-serializer.js
│   │   │   │   ├── frames/
│   │   │   │   │   ├── level1.html
│   │   │   │   │   ├── level2-a.html
│   │   │   │   │   └── level2-b.html
│   │   │   │   ├── serializer.html
│   │   │   │   └── serializer.js
│   │   │   ├── skip-link/
│   │   │   │   ├── skip-link-fail.html
│   │   │   │   ├── skip-link-fail.js
│   │   │   │   ├── skip-link-pass.html
│   │   │   │   └── skip-link-pass.js
│   │   │   ├── strict-csp/
│   │   │   │   ├── strict-csp.html
│   │   │   │   └── strict-csp.js
│   │   │   ├── target-size/
│   │   │   │   ├── shadow-dom.html
│   │   │   │   ├── shadow-dom.js
│   │   │   │   ├── target-size.html
│   │   │   │   ├── target-size.js
│   │   │   │   ├── too-many-rects.html
│   │   │   │   └── too-many-rects.js
│   │   │   ├── test-webdriver.js
│   │   │   ├── umd/
│   │   │   │   ├── mock-define.js
│   │   │   │   ├── mock-module-exports.js
│   │   │   │   ├── umd-define.html
│   │   │   │   ├── umd-define.js
│   │   │   │   ├── umd-module-exports.html
│   │   │   │   ├── umd-module-exports.js
│   │   │   │   ├── umd-window.html
│   │   │   │   └── umd-window.js
│   │   │   └── xml-lang-mismatch/
│   │   │       ├── xml-lang-mismatch.fail.js
│   │   │       ├── xml-lang-mismatch.fail1.html
│   │   │       ├── xml-lang-mismatch.fail2.html
│   │   │       ├── xml-lang-mismatch.inapplicable.js
│   │   │       ├── xml-lang-mismatch.inapplicable1.html
│   │   │       ├── xml-lang-mismatch.inapplicable2.html
│   │   │       ├── xml-lang-mismatch.pass.js
│   │   │       ├── xml-lang-mismatch.pass1.html
│   │   │       ├── xml-lang-mismatch.pass2.html
│   │   │       ├── xml-lang-mismatch.pass3.html
│   │   │       ├── xml-lang-mismatch.pass4.html
│   │   │       └── xml-lang-mismatch.pass5.html
│   │   ├── no-ui-reporter.js
│   │   ├── rules/
│   │   │   ├── README.md
│   │   │   ├── accesskeys/
│   │   │   │   ├── accesskeys.html
│   │   │   │   ├── accesskeys.json
│   │   │   │   └── frame.html
│   │   │   ├── area-alt/
│   │   │   │   ├── area-alt.html
│   │   │   │   └── area-alt.json
│   │   │   ├── aria-allowed-attr/
│   │   │   │   ├── failures.html
│   │   │   │   ├── failures.json
│   │   │   │   ├── incomplete.html
│   │   │   │   ├── incomplete.json
│   │   │   │   ├── passes.html
│   │   │   │   └── passes.json
│   │   │   ├── aria-allowed-role/
│   │   │   │   ├── aria-allowed-role.html
│   │   │   │   ├── aria-allowed-role.json
│   │   │   │   └── dummy.html
│   │   │   ├── aria-braille-equivalent/
│   │   │   │   ├── aria-braille-equivalent.html
│   │   │   │   └── aria-braille-equivalent.json
│   │   │   ├── aria-command-name/
│   │   │   │   ├── aria-command-name.html
│   │   │   │   └── aria-command-name.json
│   │   │   ├── aria-conditional-attr/
│   │   │   │   ├── aria-conditional-attr.html
│   │   │   │   └── aria-conditional-attr.json
│   │   │   ├── aria-deprecated-role/
│   │   │   │   ├── aria-deprecated-role.html
│   │   │   │   └── aria-deprecated-role.json
│   │   │   ├── aria-dialog-name/
│   │   │   │   ├── aria-dialog-name.html
│   │   │   │   └── aria-dialog-name.json
│   │   │   ├── aria-hidden-focus/
│   │   │   │   ├── aria-hidden-focus.html
│   │   │   │   └── aria-hidden-focus.json
│   │   │   ├── aria-input-field-name/
│   │   │   │   ├── aria-input-field-name.html
│   │   │   │   └── aria-input-field-name.json
│   │   │   ├── aria-meter-name/
│   │   │   │   ├── aria-meter-name.html
│   │   │   │   └── aria-meter-name.json
│   │   │   ├── aria-progressbar-name/
│   │   │   │   ├── aria-progressbar-name.html
│   │   │   │   └── aria-progressbar-name.json
│   │   │   ├── aria-prohibited-attr/
│   │   │   │   ├── aria-prohibited-attr.html
│   │   │   │   └── aria-prohibited-attr.json
│   │   │   ├── aria-required-attr/
│   │   │   │   ├── required-attr.html
│   │   │   │   └── required-attr.json
│   │   │   ├── aria-required-children/
│   │   │   │   ├── aria-required-children.html
│   │   │   │   └── aria-required-children.json
│   │   │   ├── aria-required-parent/
│   │   │   │   ├── aria-required-parent.html
│   │   │   │   └── aria-required-parent.json
│   │   │   ├── aria-roledescription/
│   │   │   │   ├── aria-roledescription.html
│   │   │   │   └── aria-roledescription.json
│   │   │   ├── aria-roles/
│   │   │   │   ├── aria-roles.html
│   │   │   │   └── aria-roles.json
│   │   │   ├── aria-tab-name/
│   │   │   │   ├── aria-tab-name.html
│   │   │   │   └── aria-tab-name.json
│   │   │   ├── aria-text/
│   │   │   │   ├── aria-text.html
│   │   │   │   └── aria-text.json
│   │   │   ├── aria-toggle-field-name/
│   │   │   │   ├── aria-toggle-field-name.html
│   │   │   │   └── aria-toggle-field-name.json
│   │   │   ├── aria-tooltip-name/
│   │   │   │   ├── aria-tooltip-name.html
│   │   │   │   └── aria-tooltip-name.json
│   │   │   ├── aria-treeitem-name/
│   │   │   │   ├── aria-treeitem-name.html
│   │   │   │   └── aria-treeitem-name.json
│   │   │   ├── aria-valid-attr/
│   │   │   │   ├── aria-valid-attr.html
│   │   │   │   └── aria-valid-attr.json
│   │   │   ├── aria-valid-attr-value/
│   │   │   │   ├── aria-valid-attr-value.html
│   │   │   │   └── aria-valid-attr-value.json
│   │   │   ├── audio-caption/
│   │   │   │   ├── audio-caption.html
│   │   │   │   └── audio-caption.json
│   │   │   ├── autocomplete-valid/
│   │   │   │   ├── autocomplete-valid.html
│   │   │   │   └── autocomplete-valid.json
│   │   │   ├── avoid-inline-spacing/
│   │   │   │   ├── avoid-inline-spacing.html
│   │   │   │   └── avoid-inline-spacing.json
│   │   │   ├── blink/
│   │   │   │   ├── blink.html
│   │   │   │   └── blink.json
│   │   │   ├── button-name/
│   │   │   │   ├── button-name.html
│   │   │   │   └── button-name.json
│   │   │   ├── color-contrast/
│   │   │   │   ├── color-contrast.html
│   │   │   │   ├── color-contrast.json
│   │   │   │   ├── text-shadows.html
│   │   │   │   └── text-shadows.json
│   │   │   ├── color-contrast-enhanced/
│   │   │   │   ├── color-contrast-enhanced.html
│   │   │   │   └── color-contrast-enhanced.json
│   │   │   ├── definition-list/
│   │   │   │   ├── definition-list.html
│   │   │   │   └── definition-list.json
│   │   │   ├── dlitem/
│   │   │   │   ├── dlitem.html
│   │   │   │   └── dlitem.json
│   │   │   ├── duplicate-id/
│   │   │   │   ├── duplicate-id.html
│   │   │   │   └── duplicate-id.json
│   │   │   ├── duplicate-id-active/
│   │   │   │   ├── duplicate-id-active.html
│   │   │   │   └── duplicate-id-active.json
│   │   │   ├── duplicate-id-aria/
│   │   │   │   ├── duplicate-id-aria.html
│   │   │   │   └── duplicate-id-aria.json
│   │   │   ├── empty-heading/
│   │   │   │   ├── empty-heading.html
│   │   │   │   └── empty-heading.json
│   │   │   ├── empty-table-header/
│   │   │   │   ├── empty-table-header.html
│   │   │   │   └── empty-table-header.json
│   │   │   ├── focus-order-semantics/
│   │   │   │   ├── focus-order-semantics.html
│   │   │   │   └── focus-order-semantics.json
│   │   │   ├── form-field-multiple-labels/
│   │   │   │   ├── form-field-multiple-labels.html
│   │   │   │   └── form-field-multiple-labels.json
│   │   │   ├── frame-focusable-content/
│   │   │   │   ├── frame-focusable-content.html
│   │   │   │   ├── frame-focusable-content.json
│   │   │   │   └── frames/
│   │   │   │       ├── focusable-negative-tabindex.html
│   │   │   │       ├── focusable.html
│   │   │   │       └── not-focusable.html
│   │   │   ├── frame-title/
│   │   │   │   ├── frame-title.html
│   │   │   │   ├── frame-title.json
│   │   │   │   └── frames/
│   │   │   │       ├── level1.html
│   │   │   │       ├── level1a.html
│   │   │   │       ├── level2-a.html
│   │   │   │       └── level2.html
│   │   │   ├── frame-title-unique/
│   │   │   │   ├── frame-title-unique.html
│   │   │   │   ├── frame-title-unique.json
│   │   │   │   └── frames/
│   │   │   │       ├── level1.html
│   │   │   │       ├── level1a.html
│   │   │   │       ├── level2-a.html
│   │   │   │       └── level2.html
│   │   │   ├── heading-order/
│   │   │   │   ├── heading-order.html
│   │   │   │   └── heading-order.json
│   │   │   ├── hidden-content/
│   │   │   │   ├── hidden-content.html
│   │   │   │   └── hidden-content.json
│   │   │   ├── identical-links-same-purpose/
│   │   │   │   ├── identical-links-same-purpose.html
│   │   │   │   └── identical-links-same-purpose.json
│   │   │   ├── image-alt/
│   │   │   │   ├── image-alt.html
│   │   │   │   └── image-alt.json
│   │   │   ├── image-redundant-alt/
│   │   │   │   ├── image-redundant-alt.html
│   │   │   │   └── image-redundant-alt.json
│   │   │   ├── input-button-name/
│   │   │   │   ├── input-button-name.html
│   │   │   │   └── input-button-name.json
│   │   │   ├── input-image-alt/
│   │   │   │   ├── input-image-alt.html
│   │   │   │   └── input-image-alt.json
│   │   │   ├── label/
│   │   │   │   ├── label.html
│   │   │   │   └── label.json
│   │   │   ├── label-content-name-mismatch/
│   │   │   │   ├── label-content-name-mismatch.html
│   │   │   │   └── label-content-name-mismatch.json
│   │   │   ├── label-title-only/
│   │   │   │   ├── label-title-only.html
│   │   │   │   └── label-title-only.json
│   │   │   ├── landmark-unique/
│   │   │   │   ├── frame.html
│   │   │   │   ├── landmark-unique-fail.html
│   │   │   │   ├── landmark-unique-fail.json
│   │   │   │   ├── landmark-unique-pass.html
│   │   │   │   └── landmark-unique-pass.json
│   │   │   ├── link-in-text-block/
│   │   │   │   ├── link-in-text-block.html
│   │   │   │   └── link-in-text-block.json
│   │   │   ├── link-name/
│   │   │   │   ├── link-name.html
│   │   │   │   └── link-name.json
│   │   │   ├── list/
│   │   │   │   ├── list.html
│   │   │   │   └── list.json
│   │   │   ├── listitem/
│   │   │   │   ├── listitem.html
│   │   │   │   └── listitem.json
│   │   │   ├── marquee/
│   │   │   │   ├── marquee.html
│   │   │   │   └── marquee.json
│   │   │   ├── meta-refresh/
│   │   │   │   ├── meta-refresh.html
│   │   │   │   └── meta-refresh.json
│   │   │   ├── meta-viewport/
│   │   │   │   ├── frames/
│   │   │   │   │   └── iframe-with-zooming-disabled.html
│   │   │   │   ├── meta-viewport-fail1.html
│   │   │   │   ├── meta-viewport-fail1.json
│   │   │   │   ├── meta-viewport-fail2.html
│   │   │   │   ├── meta-viewport-fail2.json
│   │   │   │   ├── meta-viewport-pass1.html
│   │   │   │   ├── meta-viewport-pass1.json
│   │   │   │   ├── meta-viewport-pass2.html
│   │   │   │   ├── meta-viewport-pass2.json
│   │   │   │   ├── meta-viewport-pass3.html
│   │   │   │   └── meta-viewport-pass3.json
│   │   │   ├── meta-viewport-large/
│   │   │   │   ├── meta-viewport-large-fail1.html
│   │   │   │   ├── meta-viewport-large-fail1.json
│   │   │   │   ├── meta-viewport-large-fail2.html
│   │   │   │   ├── meta-viewport-large-fail2.json
│   │   │   │   ├── meta-viewport-large-pass1.html
│   │   │   │   ├── meta-viewport-large-pass1.json
│   │   │   │   ├── meta-viewport-large-pass2.html
│   │   │   │   ├── meta-viewport-large-pass2.json
│   │   │   │   ├── meta-viewport-large-pass3.html
│   │   │   │   ├── meta-viewport-large-pass3.json
│   │   │   │   ├── meta-viewport-large-pass4.html
│   │   │   │   └── meta-viewport-large-pass4.json
│   │   │   ├── nested-interactive/
│   │   │   │   ├── nested-interactive.html
│   │   │   │   └── nested-interactive.json
│   │   │   ├── object-alt/
│   │   │   │   ├── object-alt.html
│   │   │   │   └── object-alt.json
│   │   │   ├── p-as-heading/
│   │   │   │   ├── p-as-heading.html
│   │   │   │   └── p-as-heading.json
│   │   │   ├── preprocessor.js
│   │   │   ├── presentation-role-conflict/
│   │   │   │   ├── presentation-role-conflict.html
│   │   │   │   └── presentation-role-conflict.json
│   │   │   ├── role-img-alt/
│   │   │   │   ├── role-img-alt.html
│   │   │   │   └── role-img-alt.json
│   │   │   ├── runner.js
│   │   │   ├── scope-attr-valid/
│   │   │   │   ├── scope-attr-valid.html
│   │   │   │   └── scope-attr-valid.json
│   │   │   ├── scrollable-region-focusable/
│   │   │   │   ├── scrollable-region-focusable.html
│   │   │   │   └── scrollable-region-focusable.json
│   │   │   ├── select-name/
│   │   │   │   ├── select-name.html
│   │   │   │   └── select-name.json
│   │   │   ├── server-side-image-map/
│   │   │   │   ├── server-side-image-map.html
│   │   │   │   └── server-side-image-map.json
│   │   │   ├── summary-name/
│   │   │   │   ├── summary-name.html
│   │   │   │   └── summary-name.json
│   │   │   ├── svg-img-alt/
│   │   │   │   ├── svg-img-alt.html
│   │   │   │   └── svg-img-alt.json
│   │   │   ├── tabindex/
│   │   │   │   ├── tabindex.html
│   │   │   │   └── tabindex.json
│   │   │   ├── table-duplicate-name/
│   │   │   │   ├── table-duplicate-name.html
│   │   │   │   └── table-duplicate-name.json
│   │   │   ├── table-fake-caption/
│   │   │   │   ├── table-fake-caption.html
│   │   │   │   └── table-fake-caption.json
│   │   │   ├── target-size/
│   │   │   │   ├── target-size.html
│   │   │   │   └── target-size.json
│   │   │   ├── td-has-header/
│   │   │   │   ├── td-has-header.html
│   │   │   │   └── td-has-header.json
│   │   │   ├── td-headers-attr/
│   │   │   │   ├── td-headers-attr.html
│   │   │   │   └── td-headers-attr.json
│   │   │   ├── th-has-data-cells/
│   │   │   │   ├── th-has-data-cells.html
│   │   │   │   └── th-has-data-cells.json
│   │   │   ├── valid-lang/
│   │   │   │   ├── valid-lang.html
│   │   │   │   └── valid-lang.json
│   │   │   └── video-caption/
│   │   │       ├── video-caption.html
│   │   │       └── video-caption.json
│   │   └── virtual-rules/
│   │       ├── area-alt.js
│   │       ├── aria-allowed-attr.js
│   │       ├── aria-allowed-role.js
│   │       ├── aria-braille-equivalent.js
│   │       ├── aria-command-name.js
│   │       ├── aria-conditional-attr.js
│   │       ├── aria-dialog-name.js
│   │       ├── aria-input-field-name.js
│   │       ├── aria-meter-name.js
│   │       ├── aria-progressbar-name.js
│   │       ├── aria-prohibited-attr.js
│   │       ├── aria-required-attr.js
│   │       ├── aria-roledescription.js
│   │       ├── aria-roles.js
│   │       ├── aria-tab-name.js
│   │       ├── aria-text.js
│   │       ├── aria-toggle-field-name.js
│   │       ├── aria-tooltip-name.js
│   │       ├── aria-treeitem-name.js
│   │       ├── aria-valid-attr-value.js
│   │       ├── aria-valid-attr.js
│   │       ├── autocomplete-valid.js
│   │       ├── button-name.js
│   │       ├── definition-list.js
│   │       ├── empty-heading.js
│   │       ├── empty-table-header.js
│   │       ├── frame-title.js
│   │       ├── html-has-lang.js
│   │       ├── html-lang-valid.js
│   │       ├── image-alt.js
│   │       ├── input-button-name.js
│   │       ├── input-image-alt.js
│   │       ├── label.js
│   │       ├── link-name.js
│   │       ├── list.js
│   │       ├── meta-refresh-no-exceptions.js
│   │       ├── meta-refresh.js
│   │       ├── meta-viewport.js
│   │       ├── nested-interactive.js
│   │       ├── object-alt.js
│   │       ├── presentation-role-conflict.js
│   │       ├── role-img-alt.js
│   │       ├── select-name.js
│   │       ├── summary-name.js
│   │       ├── svg-img-alt.js
│   │       ├── tabindex.js
│   │       ├── table-duplicate-name.js
│   │       └── valid-lang.js
│   ├── karma.conf.js
│   ├── mock/
│   │   └── frames/
│   │       ├── context.html
│   │       ├── e2e.html
│   │       ├── frame-frame.html
│   │       ├── frame1.html
│   │       ├── nested0.html
│   │       ├── nested1.html
│   │       ├── nested2.html
│   │       ├── noHtml-config.html
│   │       ├── nocode.html
│   │       ├── results-timeout.html
│   │       ├── rule-error.html
│   │       ├── test.html
│   │       ├── throwing.html
│   │       ├── with-echo-axe.html
│   │       ├── with-echo.html
│   │       └── zombie-frame.html
│   ├── node/
│   │   ├── jsdom.js
│   │   ├── node.js
│   │   └── package.json
│   ├── playground.html
│   ├── rule-matches/
│   │   ├── aria-allowed-attr-matches.js
│   │   ├── aria-allowed-role-matches.js
│   │   ├── aria-has-attr-matches.js
│   │   ├── aria-hidden-focus-matches.js
│   │   ├── aria-required-children-matches.js
│   │   ├── aria-required-parent-matches.js
│   │   ├── autocomplete-matches.js
│   │   ├── color-contrast-matches.js
│   │   ├── data-table-matches.js
│   │   ├── duplicate-id-active-matches.js
│   │   ├── duplicate-id-aria-matches.js
│   │   ├── duplicate-id-misc-matches.js
│   │   ├── frame-focusable-content-matches.js
│   │   ├── frame-title-has-text-matches.js
│   │   ├── has-implicit-chromium-role-matches.js
│   │   ├── heading-matches.js
│   │   ├── html-namespace-matches.js
│   │   ├── html-xml-lang-mismatch.js
│   │   ├── identical-links-same-purpose-matches.js
│   │   ├── inserted-into-focus-order-matches.js
│   │   ├── is-initiator-matches.js
│   │   ├── is-visible-matches.js
│   │   ├── is-visible-on-screen-matches.js
│   │   ├── label-content-name-mismatch-matches.js
│   │   ├── label-matches.js
│   │   ├── landmark-has-body-context.js
│   │   ├── landmark-unique-matches.js
│   │   ├── layout-table-matches.js
│   │   ├── link-in-text-block-matches.js
│   │   ├── nested-interactive-matches.js
│   │   ├── no-autoplay-audio-matches.js
│   │   ├── no-empty-role-matches.js
│   │   ├── no-explicit-name-required-matches.js
│   │   ├── no-naming-method-matches.js
│   │   ├── no-negative-tabindex.js
│   │   ├── no-role-matches.js
│   │   ├── object-is-loaded-matches.js
│   │   ├── p-as-heading-matches.js
│   │   ├── scrollable-region-focusable-matches.js
│   │   ├── skip-link-matches.js
│   │   ├── summary-interactive-matches.js
│   │   ├── svg-namespace-matches.js
│   │   ├── table-or-grid-role-matches.js
│   │   └── widget-not-inline-matches.js
│   ├── test-locales.js
│   ├── test-rule-help-version.js
│   ├── test-virtual-rules.js
│   └── testutils.js
├── tsconfig.json
└── typings/
    └── axe-core/
        └── axe-core-tests.ts
Download .txt
SYMBOL INDEX (1622 symbols across 566 files)

FILE: axe.d.ts
  type ImpactValue (line 5) | type ImpactValue = 'minor' | 'moderate' | 'serious' | 'critical' | null;
  type TagValue (line 7) | type TagValue = string;
  type ReporterVersion (line 9) | type ReporterVersion = 'v1' | 'v2' | 'raw' | 'rawEnv' | 'no-passes';
  type RunOnlyType (line 11) | type RunOnlyType = 'rule' | 'rules' | 'tag' | 'tags';
  type resultGroups (line 13) | type resultGroups = 'inapplicable' | 'passes' | 'incomplete' | 'violatio...
  type AriaAttrsType (line 15) | type AriaAttrsType =
  type AriaRolesType (line 25) | type AriaRolesType = 'abstract' | 'widget' | 'structure' | 'landmark';
  type DpubRolesType (line 27) | type DpubRolesType =
  type HtmlContentTypes (line 39) | type HtmlContentTypes =
  type MultiArray (line 48) | type MultiArray<T> = [T, T, ...T[]];
  type BaseSelector (line 51) | type BaseSelector = string;
  type ShadowDomSelector (line 53) | type ShadowDomSelector = MultiArray<BaseSelector>;
  type CrossTreeSelector (line 54) | type CrossTreeSelector = BaseSelector | ShadowDomSelector;
  type LabelledShadowDomSelector (line 55) | type LabelledShadowDomSelector = { fromShadowDom: ShadowDomSelector };
  type FramesSelector (line 58) | type FramesSelector = Array<CrossTreeSelector | LabelledShadowDomSelector>;
  type UnlabelledFrameSelector (line 59) | type UnlabelledFrameSelector = CrossTreeSelector[];
  type LabelledFramesSelector (line 60) | type LabelledFramesSelector = { fromFrames: MultiArray<FramesSelector[0]...
  type CrossFrameSelector (line 64) | type CrossFrameSelector = UnlabelledFrameSelector;
  type Selector (line 67) | type Selector =
  type SelectorList (line 72) | type SelectorList = Array<Selector | FramesSelector> | NodeList;
  type ContextProp (line 73) | type ContextProp = Selector | SelectorList;
  type ContextObject (line 74) | type ContextObject =
  type ContextSpec (line 83) | type ContextSpec = ContextProp | ContextObject;
  type ElementContext (line 85) | type ElementContext = ContextSpec;
  type SerialSelector (line 87) | type SerialSelector =
  type SerialFrameSelector (line 91) | type SerialFrameSelector = SerialSelector | FramesSelector;
  type SerialSelectorList (line 92) | type SerialSelectorList = Array<SerialFrameSelector>;
  type SerialContextObject (line 94) | type SerialContextObject =
  type FrameContextObject (line 104) | interface FrameContextObject {
  type RunCallback (line 109) | type RunCallback<T = AxeResults> = (error: Error, results: T) => void;
  type TestEngine (line 111) | interface TestEngine {
  type TestRunner (line 115) | interface TestRunner {
  type TestEnvironment (line 118) | interface TestEnvironment {
  type RunOnly (line 125) | interface RunOnly {
  type RuleObject (line 129) | interface RuleObject {
  type RunOptions (line 134) | interface RunOptions {
  type NormalizedRunOptions (line 150) | interface NormalizedRunOptions extends RunOptions {
  type PreloadOptions (line 153) | interface PreloadOptions {
  type AxeResults (line 157) | interface AxeResults extends EnvironmentData {
  type Result (line 164) | interface Result {
  type IncompleteResult (line 173) | interface IncompleteResult extends Result {
  type NodeResult (line 176) | interface NodeResult {
  type CheckResult (line 188) | interface CheckResult {
  type RelatedNode (line 195) | interface RelatedNode {
  type RuleLocale (line 202) | interface RuleLocale {
  type CheckMessages (line 208) | interface CheckMessages {
  type RuleError (line 213) | interface RuleError {
  type SerialError (line 222) | interface SerialError {
  type CheckLocale (line 228) | interface CheckLocale {
  type Locale (line 231) | interface Locale {
  type AriaAttrs (line 236) | interface AriaAttrs {
  type AriaRoles (line 243) | interface AriaRoles {
  type HtmlElmsVariant (line 252) | interface HtmlElmsVariant {
  type HtmlElms (line 260) | interface HtmlElms extends HtmlElmsVariant {
  type Standards (line 263) | interface Standards {
  type Spec (line 269) | interface Spec {
  type Branding (line 286) | interface Branding {
  type CheckHelper (line 290) | interface CheckHelper {
  type AfterResult (line 295) | interface AfterResult {
  type Check (line 302) | interface Check {
  type Rule (line 323) | interface Rule {
  type AxePlugin (line 339) | interface AxePlugin {
  type RuleMetadata (line 348) | interface RuleMetadata {
  type SerialDqElement (line 356) | interface SerialDqElement {
  type DqElement (line 363) | interface DqElement extends SerialDqElement {
  type DqElementConstructor (line 367) | interface DqElementConstructor {
  type PartialRuleResult (line 374) | interface PartialRuleResult {
  type PartialResult (line 381) | interface PartialResult {
  type PartialResults (line 386) | type PartialResults = Array<PartialResult | null>;
  type FrameContext (line 387) | interface FrameContext {
  type RawCheckResult (line 392) | interface RawCheckResult extends Omit<
  type RawNodeResult (line 400) | interface RawNodeResult<T extends 'passed' | 'failed' | 'cantTell'> {
  type RawResult (line 409) | interface RawResult extends Omit<Result, 'nodes'> {
  type AxeReporter (line 418) | type AxeReporter<T = unknown> = (
  type VirtualNode (line 425) | interface VirtualNode {
  type GridCell (line 436) | type GridCell = VirtualNode[];
  type Grid (line 438) | interface Grid {
  type CustomNodeSerializer (line 454) | interface CustomNodeSerializer<T = SerialDqElement> {
  type NodeSerializer (line 459) | interface NodeSerializer {
  type Utils (line 472) | interface Utils {
  type Aria (line 510) | interface Aria {
  type Dom (line 514) | interface Dom {
  type AccessibleTextOptions (line 520) | type AccessibleTextOptions = {
  type Text (line 525) | interface Text {
  type Commons (line 532) | interface Commons {
  type EnvironmentData (line 538) | interface EnvironmentData {
  type FrameMessenger (line 678) | type FrameMessenger = {
  type Close (line 686) | type Close = Function;
  type TopicHandler (line 687) | type TopicHandler = (data: TopicData, responder: Responder) => void;
  type ReplyHandler (line 688) | type ReplyHandler = (
  type Responder (line 693) | type Responder = (
  type TopicData (line 698) | type TopicData = { topic: string } & ReplyData;
  type ReplyData (line 699) | type ReplyData = { channelId: string; message: any; keepalive: boolean };

FILE: build/build-manual.js
  function parseObject (line 12) | function parseObject(src) {
  function getSource (line 29) | function getSource(file, type) {

FILE: build/check-node-version.js
  constant PATH_TO_NVMRC (line 6) | const PATH_TO_NVMRC = path.join(__dirname, '..', '.nvmrc');

FILE: build/cherry-pick.js
  function getCommits (line 49) | function getCommits(branch) {

FILE: build/configure.js
  function getLocale (line 25) | function getLocale(grunt, options) {
  function makeHeaderLink (line 36) | function makeHeaderLink(title) {
  function buildRules (line 40) | function buildRules(grunt, options, commons, callback) {

FILE: build/rule-generator.js
  function run (line 22) | async function run() {

FILE: build/tasks/add-locale.js
  function mergeMessages (line 7) | function mergeMessages(newMessages, oldMessages) {

FILE: build/tasks/aria-supported.js
  function getAriaQueryAttributes (line 88) | function getAriaQueryAttributes() {
  function getDiff (line 106) | function getDiff(base, subject, type) {
  function getSupportedElementsAsFootnote (line 167) | function getSupportedElementsAsFootnote(elements) {

FILE: build/tasks/langs.js
  function getLine (line 5) | function getLine(data, start) {
  function getEntry (line 17) | function getEntry(data, start) {
  function generateOutput (line 36) | function generateOutput(langs, checkPath) {

FILE: build/tasks/metadata-function-map.js
  function toTitleCase (line 5) | function toTitleCase(str) {

FILE: build/tasks/validate.js
  function fileExists (line 8) | function fileExists(v, o) {
  function hasUniqueId (line 23) | function hasUniqueId() {
  function hasMultipleOutcomes (line 34) | function hasMultipleOutcomes(messages) {
  function createSchemas (line 53) | function createSchemas() {
  function validateFiles (line 239) | function validateFiles(grunt, files, schema, type) {
  function validateRule (line 288) | function validateRule({ tags, metadata }) {
  function findTagIssues (line 361) | function findTagIssues(tags) {
  function startsWith (line 469) | function startsWith(arr1, arr2) {
  function removeTags (line 473) | function removeTags(tags, tagsToRemove) {

FILE: doc/examples/chrome-debugging-protocol/axe-cdp.js
  constant CDP (line 1) | const CDP = require('chrome-remote-interface');

FILE: doc/examples/jest_react/link.js
  class Link (line 3) | class Link extends React.Component {
    method render (line 4) | render() {

FILE: doc/examples/test-examples.js
  function install (line 11) | async function install(dir) {
  function test (line 24) | function test(dir) {

FILE: lib/checks/aria/abstractrole-evaluate.js
  function abstractroleEvaluate (line 27) | function abstractroleEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/aria-allowed-attr-evaluate.js
  function ariaAllowedAttrEvaluate (line 29) | function ariaAllowedAttrEvaluate(node, options, virtualNode) {
  function ignoredAttrs (line 65) | function ignoredAttrs(attrName, attrValue, vNode) {

FILE: lib/checks/aria/aria-allowed-role-evaluate.js
  function ariaAllowedRoleEvaluate (line 15) | function ariaAllowedRoleEvaluate(node, options = {}, virtualNode) {

FILE: lib/checks/aria/aria-busy-evaluate.js
  function ariaBusyEvaluate (line 7) | function ariaBusyEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/aria-conditional-attr-evaluate.js
  function ariaConditionalAttrEvaluate (line 10) | function ariaConditionalAttrEvaluate(

FILE: lib/checks/aria/aria-conditional-checkbox-attr-evaluate.js
  function ariaConditionalCheckboxAttr (line 1) | function ariaConditionalCheckboxAttr(
  function getCheckState (line 23) | function getCheckState(vNode) {
  function normalizeAriaChecked (line 30) | function normalizeAriaChecked(ariaCheckedVal) {

FILE: lib/checks/aria/aria-conditional-row-attr-evaluate.js
  function ariaConditionalRowAttr (line 4) | function ariaConditionalRowAttr(
  function getRowOwner (line 28) | function getRowOwner(virtualNode) {

FILE: lib/checks/aria/aria-errormessage-evaluate.js
  function ariaErrormessageEvaluate (line 27) | function ariaErrormessageEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/aria-hidden-body-evaluate.js
  function ariaHiddenBodyEvaluate (line 7) | function ariaHiddenBodyEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/aria-level-evaluate.js
  function ariaLevelEvaluate (line 9) | function ariaLevelEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/aria-prohibited-attr-evaluate.js
  function ariaProhibitedAttrEvaluate (line 30) | function ariaProhibitedAttrEvaluate(
  function listProhibitedAttrs (line 73) | function listProhibitedAttrs(vNode, role, nodeName, elementsAllowedAriaL...

FILE: lib/checks/aria/aria-required-attr-evaluate.js
  function ariaRequiredAttrEvaluate (line 33) | function ariaRequiredAttrEvaluate(
  function isStaticSeparator (line 76) | function isStaticSeparator(vNode, role) {
  function hasImplicitAttr (line 80) | function hasImplicitAttr(elmSpec, attr) {
  function isClosedCombobox (line 84) | function isClosedCombobox(vNode, role) {

FILE: lib/checks/aria/aria-required-children-evaluate.js
  function ariaRequiredChildrenEvaluate (line 24) | function ariaRequiredChildrenEvaluate(
  function getOwnedRoles (line 79) | function getOwnedRoles(virtualNode, required) {
  function hasRequiredChildren (line 117) | function hasRequiredChildren(required, ownedRoles) {
  function getGlobalAriaAttr (line 126) | function getGlobalAriaAttr(vNode) {
  function getUnallowedSelector (line 136) | function getUnallowedSelector(vNode, attr) {
  function isContent (line 158) | function isContent({ vNode }) {

FILE: lib/checks/aria/aria-required-parent-evaluate.js
  function getMissingContext (line 5) | function getMissingContext(
  function getAriaOwners (line 50) | function getAriaOwners(element) {
  function ariaRequiredParentEvaluate (line 93) | function ariaRequiredParentEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/aria-roledescription-evaluate.js
  function ariaRoledescriptionEvaluate (line 10) | function ariaRoledescriptionEvaluate(node, options = {}, virtualNode) {

FILE: lib/checks/aria/aria-unsupported-attr-evaluate.js
  function ariaUnsupportedAttrEvaluate (line 29) | function ariaUnsupportedAttrEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/aria-valid-attr-evaluate.js
  function ariaValidAttrEvaluate (line 27) | function ariaValidAttrEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/aria-valid-attr-value-evaluate.js
  function ariaValidAttrValueEvaluate (line 28) | function ariaValidAttrValueEvaluate(node, options, virtualNode) {
  function isStringType (line 150) | function isStringType(attrName) {

FILE: lib/checks/aria/braille-label-equivalent-evaluate.js
  function brailleLabelEquivalentEvaluate (line 8) | function brailleLabelEquivalentEvaluate(

FILE: lib/checks/aria/braille-roledescription-equivalent-evaluate.js
  function brailleRoleDescriptionEquivalentEvaluate (line 9) | function brailleRoleDescriptionEquivalentEvaluate(

FILE: lib/checks/aria/deprecatedrole-evaluate.js
  function deprecatedroleEvaluate (line 12) | function deprecatedroleEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/fallbackrole-evaluate.js
  function nonePresentationOnElementWithNoImplicitRole (line 9) | function nonePresentationOnElementWithNoImplicitRole(
  function fallbackroleEvaluate (line 27) | function fallbackroleEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/has-global-aria-attribute-evaluate.js
  function hasGlobalAriaAttributeEvaluate (line 3) | function hasGlobalAriaAttributeEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/has-widget-role-evaluate.js
  function hasWidgetRoleEvaluate (line 11) | function hasWidgetRoleEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/invalidrole-evaluate.js
  function invalidroleEvaluate (line 28) | function invalidroleEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/is-element-focusable-evaluate.js
  function isElementFocusableEvaluate (line 3) | function isElementFocusableEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/no-implicit-explicit-label-evaluate.js
  function noImplicitExplicitLabelEvaluate (line 26) | function noImplicitExplicitLabelEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/unsupportedrole-evaluate.js
  function unsupportedroleEvaluate (line 11) | function unsupportedroleEvaluate(node, options, virtualNode) {

FILE: lib/checks/aria/valid-scrollable-semantics-evaluate.js
  constant VALID_TAG_NAMES_FOR_SCROLLABLE_REGIONS (line 7) | const VALID_TAG_NAMES_FOR_SCROLLABLE_REGIONS = {
  constant VALID_ROLES_FOR_SCROLLABLE_REGIONS (line 18) | const VALID_ROLES_FOR_SCROLLABLE_REGIONS = {
  function validScrollableTagName (line 42) | function validScrollableTagName(node) {
  function validScrollableRole (line 54) | function validScrollableRole(node, options) {
  function validScrollableSemanticsEvaluate (line 73) | function validScrollableSemanticsEvaluate(node, options) {

FILE: lib/checks/color/color-contrast-evaluate.js
  function colorContrastEvaluate (line 19) | function colorContrastEvaluate(node, options, virtualNode) {
  function findPseudoElement (line 185) | function findPseudoElement(
  function textIsEmojis (line 235) | function textIsEmojis(visibleText) {
  function parseUnit (line 243) | function parseUnit(str) {

FILE: lib/checks/color/link-in-text-block-evaluate.js
  function getContrast (line 8) | function getContrast(color1, color2) {
  function isBlock (line 22) | function isBlock(elm) {
  function linkInTextBlockEvaluate (line 27) | function linkInTextBlockEvaluate(node, options) {

FILE: lib/checks/color/link-in-text-block-style-evaluate.js
  function linkInTextBlockStyleEvaluate (line 13) | function linkInTextBlockStyleEvaluate(node) {
  function isBlock (line 39) | function isBlock(elm) {
  function hasPseudoContent (line 44) | function hasPseudoContent(node) {

FILE: lib/checks/forms/autocomplete-appropriate-evaluate.js
  function autocompleteAppropriateEvaluate (line 4) | function autocompleteAppropriateEvaluate(node, options, virtualNode) {

FILE: lib/checks/forms/autocomplete-valid-evaluate.js
  function autocompleteValidEvaluate (line 3) | function autocompleteValidEvaluate(_node, options, virtualNode) {

FILE: lib/checks/generic/attr-non-space-content-evaluate.js
  function attrNonSpaceContentEvaluate (line 3) | function attrNonSpaceContentEvaluate(node, options = {}, vNode) {

FILE: lib/checks/generic/has-descendant-after.js
  function pageHasElmAfter (line 1) | function pageHasElmAfter(results) {

FILE: lib/checks/generic/has-descendant-evaluate.js
  function hasDescendant (line 4) | function hasDescendant(node, options, virtualNode) {

FILE: lib/checks/generic/has-text-content-evaluate.js
  function hasTextContentEvaluate (line 3) | function hasTextContentEvaluate(node, options, virtualNode) {

FILE: lib/checks/generic/matches-definition-evaluate.js
  function matchesDefinitionEvaluate (line 3) | function matchesDefinitionEvaluate(_, options, virtualNode) {

FILE: lib/checks/generic/page-no-duplicate-after.js
  function pageNoDuplicateAfter (line 1) | function pageNoDuplicateAfter(results) {

FILE: lib/checks/generic/page-no-duplicate-evaluate.js
  function pageNoDuplicateEvaluate (line 6) | function pageNoDuplicateEvaluate(node, options, virtualNode) {

FILE: lib/checks/keyboard/accesskeys-after.js
  function accesskeysAfter (line 1) | function accesskeysAfter(results) {

FILE: lib/checks/keyboard/accesskeys-evaluate.js
  function accesskeysEvaluate (line 3) | function accesskeysEvaluate(node, options, vNode) {

FILE: lib/checks/keyboard/focusable-content-evaluate.js
  function focusableContentEvaluate (line 1) | function focusableContentEvaluate(node, options, virtualNode) {

FILE: lib/checks/keyboard/focusable-disabled-evaluate.js
  function focusableDisabledEvaluate (line 3) | function focusableDisabledEvaluate(node, options, virtualNode) {

FILE: lib/checks/keyboard/focusable-element-evaluate.js
  function focusableElementEvaluate (line 4) | function focusableElementEvaluate(node, options, virtualNode) {

FILE: lib/checks/keyboard/focusable-modal-open-evaluate.js
  function focusableModalOpenEvaluate (line 3) | function focusableModalOpenEvaluate(node, options, virtualNode) {

FILE: lib/checks/keyboard/focusable-no-name-evaluate.js
  function focusableNoNameEvaluate (line 4) | function focusableNoNameEvaluate(node, options, virtualNode) {

FILE: lib/checks/keyboard/focusable-not-tabbable-evaluate.js
  function focusableNotTabbableEvaluate (line 3) | function focusableNotTabbableEvaluate(node, options, virtualNode) {

FILE: lib/checks/keyboard/frame-focusable-content-evaluate.js
  function frameFocusableContentEvaluate (line 3) | function frameFocusableContentEvaluate(
  function focusableDescendants (line 21) | function focusableDescendants(vNode) {

FILE: lib/checks/keyboard/landmark-is-top-level-evaluate.js
  function landmarkIsTopLevelEvaluate (line 5) | function landmarkIsTopLevelEvaluate(node) {

FILE: lib/checks/keyboard/no-focusable-content-evaluate.js
  function noFocusableContentEvaluate (line 5) | function noFocusableContentEvaluate(node, options, virtualNode) {
  function getFocusableDescendants (line 34) | function getFocusableDescendants(vNode) {
  function usesUnreliableHidingStrategy (line 54) | function usesUnreliableHidingStrategy(vNode) {

FILE: lib/checks/keyboard/tabindex-evaluate.js
  function tabindexEvaluate (line 3) | function tabindexEvaluate(node, options, virtualNode) {

FILE: lib/checks/label/alt-space-value-evaluate.js
  function altSpaceValueEvaluate (line 1) | function altSpaceValueEvaluate(node, options, virtualNode) {

FILE: lib/checks/label/duplicate-img-label-evaluate.js
  function duplicateImgLabelEvaluate (line 5) | function duplicateImgLabelEvaluate(node, options, virtualNode) {

FILE: lib/checks/label/explicit-evaluate.js
  function explicitEvaluate (line 5) | function explicitEvaluate(node, options, virtualNode) {

FILE: lib/checks/label/help-same-as-label-evaluate.js
  function helpSameAsLabelEvaluate (line 4) | function helpSameAsLabelEvaluate(node, options, virtualNode) {

FILE: lib/checks/label/hidden-explicit-label-evaluate.js
  function hiddenExplicitLabelEvaluate (line 5) | function hiddenExplicitLabelEvaluate(node, options, virtualNode) {

FILE: lib/checks/label/implicit-evaluate.js
  function implicitEvaluate (line 4) | function implicitEvaluate(node, options, virtualNode) {

FILE: lib/checks/label/label-content-name-mismatch-evaluate.js
  function isStringContained (line 16) | function isStringContained(compare, compareWith) {
  function curateString (line 31) | function curateString(str) {
  function labelContentNameMismatchEvaluate (line 40) | function labelContentNameMismatchEvaluate(node, options, virtualNode) {

FILE: lib/checks/label/multiple-label-evaluate.js
  function multipleLabelEvaluate (line 9) | function multipleLabelEvaluate(node) {

FILE: lib/checks/label/title-only-evaluate.js
  function titleOnlyEvaluate (line 3) | function titleOnlyEvaluate(node, options, virtualNode) {

FILE: lib/checks/landmarks/landmark-is-unique-after.js
  function landmarkIsUniqueAfter (line 1) | function landmarkIsUniqueAfter(results) {

FILE: lib/checks/landmarks/landmark-is-unique-evaluate.js
  function landmarkIsUniqueEvaluate (line 4) | function landmarkIsUniqueEvaluate(node, options, virtualNode) {

FILE: lib/checks/language/has-lang-evaluate.js
  function hasValue (line 3) | function hasValue(value) {
  function hasLangEvaluate (line 7) | function hasLangEvaluate(node, options, virtualNode) {

FILE: lib/checks/language/valid-lang-evaluate.js
  function validLangEvaluate (line 5) | function validLangEvaluate(node, options, virtualNode) {

FILE: lib/checks/language/xml-lang-mismatch-evaluate.js
  function xmlLangMismatchEvaluate (line 3) | function xmlLangMismatchEvaluate(node, options, vNode) {

FILE: lib/checks/lists/dlitem-evaluate.js
  function dlitemEvaluate (line 4) | function dlitemEvaluate(node) {

FILE: lib/checks/lists/invalid-children-evaluate.js
  function invalidChildrenEvaluate (line 4) | function invalidChildrenEvaluate(
  function getInvalidSelector (line 47) | function getInvalidSelector(
  function isDivGroup (line 69) | function isDivGroup(vNode) {
  function mapWithNested (line 73) | function mapWithNested(vNodes, nested = false) {

FILE: lib/checks/lists/listitem-evaluate.js
  function listitemEvaluate (line 3) | function listitemEvaluate(node, options, virtualNode) {

FILE: lib/checks/lists/only-dlitems-evaluate.js
  function onlyDlitemsEvaluate (line 7) | function onlyDlitemsEvaluate(node, options, virtualNode) {

FILE: lib/checks/lists/only-listitems-evaluate.js
  function onlyListitemsEvaluate (line 7) | function onlyListitemsEvaluate(node, options, virtualNode) {

FILE: lib/checks/lists/structured-dlitems-evaluate.js
  function structuredDlitemsEvaluate (line 1) | function structuredDlitemsEvaluate(node, options, virtualNode) {

FILE: lib/checks/media/caption-evaluate.js
  function captionEvaluate (line 3) | function captionEvaluate(node, options, virtualNode) {

FILE: lib/checks/media/frame-tested-after.js
  function frameTestedAfter (line 3) | function frameTestedAfter(results) {

FILE: lib/checks/media/frame-tested-evaluate.js
  function frameTestedEvaluate (line 1) | function frameTestedEvaluate(node, options) {

FILE: lib/checks/media/no-autoplay-audio-evaluate.js
  function noAutoplayAudioEvaluate (line 1) | function noAutoplayAudioEvaluate(node, options) {

FILE: lib/checks/mobile/css-orientation-lock-evaluate.js
  function cssOrientationLockEvaluate (line 1) | function cssOrientationLockEvaluate(node, options, virtualNode, context) {

FILE: lib/checks/mobile/meta-viewport-scale-evaluate.js
  function metaViewportScaleEvaluate (line 1) | function metaViewportScaleEvaluate(node, options, virtualNode) {

FILE: lib/checks/mobile/target-offset-evaluate.js
  function targetOffsetEvaluate (line 7) | function targetOffsetEvaluate(node, options, vNode) {
  function roundToSingleDecimal (line 71) | function roundToSingleDecimal(num) {

FILE: lib/checks/mobile/target-size-evaluate.js
  function targetSizeEvaluate (line 14) | function targetSizeEvaluate(node, options, vNode) {
  function filterOverflowingContent (line 103) | function filterOverflowingContent(vNode, nearbyElms) {
  function filterByElmsOverlap (line 112) | function filterByElmsOverlap(vNode, nearbyElms) {
  function getLargestUnobscuredArea (line 134) | function getLargestUnobscuredArea(vNode, obscuredNodes, minSize) {
  function getLargestRect (line 156) | function getLargestRect(rects, minSize) {
  function filterFocusableWidgets (line 171) | function filterFocusableWidgets(vNodes) {
  function isEnclosedRect (line 177) | function isEnclosedRect(vNodeA, vNodeB) {
  function getCssPointerEvents (line 188) | function getCssPointerEvents(vNode) {
  function toDecimalSize (line 192) | function toDecimalSize(rect) {
  function isDescendantNotInTabOrder (line 199) | function isDescendantNotInTabOrder(vAncestor, vNode) {
  function mapActualNodes (line 203) | function mapActualNodes(vNodes) {

FILE: lib/checks/navigation/heading-order-after.js
  function headingOrderAfter (line 3) | function headingOrderAfter(results) {
  function getHeadingOrderOutcome (line 15) | function getHeadingOrderOutcome(result, headingOrder) {
  function getHeadingOrder (line 36) | function getHeadingOrder(results) {
  function mergeHeadingOrder (line 51) | function mergeHeadingOrder(mergedHeadingOrder, result) {
  function getFrameIndex (line 82) | function getFrameIndex(headingOrder, frameAncestry) {
  function findHeadingOrderIndex (line 96) | function findHeadingOrderIndex(headingOrder, ancestry) {
  function addFrameToHeadingAncestry (line 105) | function addFrameToHeadingAncestry(heading, frameAncestry) {
  function shortenArray (line 113) | function shortenArray(arr, spliceLength) {

FILE: lib/checks/navigation/heading-order-evaluate.js
  function getLevel (line 6) | function getLevel(vNode) {
  function headingOrderEvaluate (line 45) | function headingOrderEvaluate() {

FILE: lib/checks/navigation/identical-links-same-purpose-after.js
  function isIdenticalObject (line 7) | function isIdenticalObject(a, b) {
  function identicalLinksSamePurposeAfter (line 37) | function identicalLinksSamePurposeAfter(results) {

FILE: lib/checks/navigation/identical-links-same-purpose-evaluate.js
  function identicalLinksSamePurposeEvaluate (line 6) | function identicalLinksSamePurposeEvaluate(node, options, virtualNode) {

FILE: lib/checks/navigation/internal-link-present-evaluate.js
  function internalLinkPresentEvaluate (line 3) | function internalLinkPresentEvaluate(node, options, virtualNode) {

FILE: lib/checks/navigation/meta-refresh-evaluate.js
  function metaRefreshEvaluate (line 4) | function metaRefreshEvaluate(node, options, virtualNode) {

FILE: lib/checks/navigation/p-as-heading-evaluate.js
  function normalizeFontWeight (line 3) | function normalizeFontWeight(weight) {
  function getTextContainer (line 18) | function getTextContainer(elm) {
  function getStyleValues (line 41) | function getStyleValues(node) {
  function isHeaderStyle (line 50) | function isHeaderStyle(styleA, styleB, margins) {
  function pAsHeadingEvaluate (line 62) | function pAsHeadingEvaluate(node, options, virtualNode) {

FILE: lib/checks/navigation/region-after.js
  function regionAfter (line 3) | function regionAfter(results) {

FILE: lib/checks/navigation/region-evaluate.js
  function regionEvaluate (line 10) | function regionEvaluate(node, options, virtualNode) {
  function getRegionlessNodes (line 22) | function getRegionlessNodes(options) {
  function findRegionlessElms (line 47) | function findRegionlessElms(virtualNode, options) {
  function isShallowlyHidden (line 94) | function isShallowlyHidden(virtualNode) {
  function isRegion (line 103) | function isRegion(virtualNode, options) {

FILE: lib/checks/navigation/skip-link-evaluate.js
  function skipLinkEvaluate (line 6) | function skipLinkEvaluate(node) {

FILE: lib/checks/navigation/unique-frame-title-after.js
  function uniqueFrameTitleAfter (line 1) | function uniqueFrameTitleAfter(results) {

FILE: lib/checks/navigation/unique-frame-title-evaluate.js
  function uniqueFrameTitleEvaluate (line 3) | function uniqueFrameTitleEvaluate(node, options, vNode) {

FILE: lib/checks/parsing/duplicate-id-after.js
  function duplicateIdAfter (line 1) | function duplicateIdAfter(results) {

FILE: lib/checks/parsing/duplicate-id-evaluate.js
  function duplicateIdEvaluate (line 4) | function duplicateIdEvaluate(node) {

FILE: lib/checks/shared/aria-label-evaluate.js
  function ariaLabelEvaluate (line 4) | function ariaLabelEvaluate(node, options, virtualNode) {

FILE: lib/checks/shared/aria-labelledby-evaluate.js
  function ariaLabelledbyEvaluate (line 4) | function ariaLabelledbyEvaluate(node, options, virtualNode) {

FILE: lib/checks/shared/avoid-inline-spacing-evaluate.js
  function avoidInlineSpacingEvaluate (line 1) | function avoidInlineSpacingEvaluate(node, options) {

FILE: lib/checks/shared/doc-has-title-evaluate.js
  function docHasTitleEvaluate (line 3) | function docHasTitleEvaluate() {

FILE: lib/checks/shared/exists-evaluate.js
  function existsEvaluate (line 1) | function existsEvaluate() {

FILE: lib/checks/shared/has-alt-evaluate.js
  function hasAltEvaluate (line 1) | function hasAltEvaluate(node, options, virtualNode) {

FILE: lib/checks/shared/inline-style-property-evaluate.js
  function inlineStyleProperty (line 6) | function inlineStyleProperty(node, options) {
  function getNumberValue (line 62) | function getNumberValue(domNode, { cssProperty, absoluteValues, normalVa...

FILE: lib/checks/shared/is-on-screen-evaluate.js
  function isOnScreenEvaluate (line 3) | function isOnScreenEvaluate(node) {

FILE: lib/checks/shared/non-empty-if-present-evaluate.js
  function nonEmptyIfPresentEvaluate (line 1) | function nonEmptyIfPresentEvaluate(node, options, virtualNode) {

FILE: lib/checks/shared/presentational-role-evaluate.js
  function presentationalRoleEvaluate (line 5) | function presentationalRoleEvaluate(node, options, virtualNode) {

FILE: lib/checks/shared/svg-non-empty-title-evaluate.js
  function svgNonEmptyTitleEvaluate (line 3) | function svgNonEmptyTitleEvaluate(node, options, virtualNode) {

FILE: lib/checks/tables/caption-faked-evaluate.js
  function captionFakedEvaluate (line 3) | function captionFakedEvaluate(node) {

FILE: lib/checks/tables/html5-scope-evaluate.js
  function html5ScopeEvaluate (line 3) | function html5ScopeEvaluate(node) {

FILE: lib/checks/tables/same-caption-summary-evaluate.js
  function sameCaptionSummaryEvaluate (line 5) | function sameCaptionSummaryEvaluate(node, options, virtualNode) {
  function isCaptionNode (line 21) | function isCaptionNode(virtualNode) {

FILE: lib/checks/tables/scope-value-evaluate.js
  function scopeValueEvaluate (line 1) | function scopeValueEvaluate(node, options) {

FILE: lib/checks/tables/td-has-header-evaluate.js
  function tdHasHeaderEvaluate (line 5) | function tdHasHeaderEvaluate(node) {

FILE: lib/checks/tables/td-headers-attr-evaluate.js
  function tdHeadersAttrEvaluate (line 15) | function tdHeadersAttrEvaluate(node) {

FILE: lib/checks/tables/th-has-data-cells-evaluate.js
  function thHasDataCellsEvaluate (line 5) | function thHasDataCellsEvaluate(node) {

FILE: lib/checks/visibility/hidden-content-evaluate.js
  function hiddenContentEvaluate (line 3) | function hiddenContentEvaluate(node, options, virtualNode) {

FILE: lib/commons/aria/allowed-attr.js
  function allowedAttr (line 12) | function allowedAttr(role) {

FILE: lib/commons/aria/arialabel-text.js
  function arialabelText (line 10) | function arialabelText(element) {

FILE: lib/commons/aria/arialabelledby-text.js
  function arialabelledbyText (line 17) | function arialabelledbyText(element, context = {}) {

FILE: lib/commons/aria/get-accessible-refs.js
  function cacheIdRefs (line 12) | function cacheIdRefs(node, idRefs, refAttrs) {
  function getAccessibleRefs (line 52) | function getAccessibleRefs(node) {

FILE: lib/commons/aria/get-element-unallowed-roles.js
  function getRoleSegments (line 33) | function getRoleSegments(vNode) {
  function getElementUnallowedRoles (line 55) | function getElementUnallowedRoles(node, allowImplicit = true) {
  function roleIsAllowed (line 72) | function roleIsAllowed(role, vNode, allowImplicit, implicitRole) {

FILE: lib/commons/aria/get-explicit-role.js
  function getExplicitRole (line 5) | function getExplicitRole(vNode, { fallback, abstracts, dpub } = {}) {

FILE: lib/commons/aria/get-owned-virtual.js
  function getOwnedVirtual (line 9) | function getOwnedVirtual(virtualNode) {

FILE: lib/commons/aria/get-role-type.js
  function getRoleType (line 12) | function getRoleType(role) {

FILE: lib/commons/aria/get-role.js
  function getInheritedRole (line 47) | function getInheritedRole(vNode, explicitRoleOptions) {
  function resolveImplicitRole (line 88) | function resolveImplicitRole(vNode, { chromium, ...explicitRoleOptions }) {
  function hasConflictResolution (line 112) | function hasConflictResolution(vNode) {
  function resolveRole (line 126) | function resolveRole(node, { noImplicit, ...roleOptions } = {}) {
  function getRole (line 170) | function getRole(node, { noPresentational, ...options } = {}) {

FILE: lib/commons/aria/get-roles-by-type.js
  function getRolesByType (line 12) | function getRolesByType(roleType) {

FILE: lib/commons/aria/get-roles-with-name-from-contents.js
  function getRolesWithNameFromContents (line 11) | function getRolesWithNameFromContents() {

FILE: lib/commons/aria/implicit-nodes.js
  function implicitNodes (line 13) | function implicitNodes(role) {

FILE: lib/commons/aria/implicit-role.js
  function implicitRole (line 14) | function implicitRole(node, { chromium } = {}) {

FILE: lib/commons/aria/is-accessible-ref.js
  function isAccessibleRef (line 8) | function isAccessibleRef(node) {

FILE: lib/commons/aria/is-aria-role-allowed-on-element.js
  function isAriaRoleAllowedOnElement (line 13) | function isAriaRoleAllowedOnElement(node, role) {

FILE: lib/commons/aria/is-combobox-popup.js
  function isComboboxPopup (line 15) | function isComboboxPopup(virtualNode, { popupRoles } = {}) {
  function nearestParentWithRole (line 48) | function nearestParentWithRole(vNode) {

FILE: lib/commons/aria/is-unsupported-role.js
  function isUnsupportedRole (line 11) | function isUnsupportedRole(role) {

FILE: lib/commons/aria/is-valid-role.js
  function isValidRole (line 13) | function isValidRole(role, { allowAbstract, flagUnsupported = false } = ...

FILE: lib/commons/aria/label-virtual.js
  function labelVirtual (line 15) | function labelVirtual(virtualNode) {

FILE: lib/commons/aria/label.js
  function label (line 12) | function label(node) {

FILE: lib/commons/aria/named-from-contents.js
  function namedFromContents (line 14) | function namedFromContents(vNode, { strict } = {}) {

FILE: lib/commons/aria/required-attr.js
  function requiredAttr (line 11) | function requiredAttr(role) {

FILE: lib/commons/aria/required-context.js
  function requiredContext (line 11) | function requiredContext(role) {

FILE: lib/commons/aria/required-owned.js
  function requiredOwned (line 11) | function requiredOwned(role) {

FILE: lib/commons/aria/validate-attr-value.js
  function validateAttrValue (line 16) | function validateAttrValue(vNode, attr) {

FILE: lib/commons/aria/validate-attr.js
  function validateAttr (line 11) | function validateAttr(att) {

FILE: lib/commons/color/center-point-of-rect.js
  function centerPointOfRect (line 10) | function centerPointOfRect(rect) {

FILE: lib/commons/color/color.js
  class Color (line 15) | class Color {
    method constructor (line 25) | constructor(red, green, blue, alpha = 1) {
    method r (line 49) | get r() {
    method r (line 53) | set r(value) {
    method g (line 58) | get g() {
    method g (line 62) | set g(value) {
    method b (line 67) | get b() {
    method b (line 71) | set b(value) {
    method red (line 76) | get red() {
    method red (line 80) | set red(value) {
    method green (line 85) | get green() {
    method green (line 89) | set green(value) {
    method blue (line 94) | get blue() {
    method blue (line 98) | set blue(value) {
    method toHexString (line 110) | toHexString() {
    method toJSON (line 122) | toJSON() {
    method parseString (line 133) | parseString(colorString) {
    method parseRgbString (line 191) | parseRgbString(colorString) {
    method parseHexString (line 203) | parseHexString(colorString) {
    method parseColorFnString (line 219) | parseColorFnString(colorString) {
    method getRelativeLuminance (line 231) | getRelativeLuminance() {
    method #add (line 250) | #add(value) {
    method getLuminosity (line 266) | getLuminosity() {
    method setLuminosity (line 279) | setLuminosity(L) {
    method getSaturation (line 292) | getSaturation() {
    method setSaturation (line 305) | setSaturation(s) {
    method clip (line 341) | clip() {
  function clamp (line 364) | function clamp(value, min, max) {
  function radToDeg (line 369) | function radToDeg(rad) {
  function turnToDeg (line 374) | function turnToDeg(turn) {

FILE: lib/commons/color/element-has-image.js
  function elementHasImage (line 13) | function elementHasImage(elm, style) {

FILE: lib/commons/color/element-is-distinct.js
  function _getFonts (line 9) | function _getFonts(style) {
  function elementIsDistinct (line 27) | function elementIsDistinct(node, ancestorNode) {

FILE: lib/commons/color/filtered-rect-stack.js
  function filteredRectStack (line 12) | function filteredRectStack(elm) {

FILE: lib/commons/color/flatten-colors.js
  method normal (line 10) | normal(Cb, Cs) {
  method multiply (line 13) | multiply(Cb, Cs) {
  method screen (line 17) | screen(Cb, Cs) {
  method overlay (line 21) | overlay(Cb, Cs) {
  method darken (line 25) | darken(Cb, Cs) {
  method lighten (line 29) | lighten(Cb, Cs) {
  method 'color-dodge' (line 33) | 'color-dodge'(Cb, Cs) {
  method 'color-burn' (line 37) | 'color-burn'(Cb, Cs) {
  method 'hard-light' (line 41) | 'hard-light'(Cb, Cs) {
  method 'soft-light' (line 46) | 'soft-light'(Cb, Cs) {
  method difference (line 55) | difference(Cb, Cs) {
  method exclusion (line 59) | exclusion(Cb, Cs) {
  method hue (line 66) | hue(Cb, Cs) {
  method saturation (line 72) | saturation(Cb, Cs) {
  method color (line 78) | color(Cb, Cs) {
  method luminosity (line 82) | luminosity(Cb, Cs) {
  function flattenColors (line 97) | function flattenColors(
  function simpleAlphaCompositing (line 164) | function simpleAlphaCompositing(Cs, αs, Cb, αb, blendingResult) {
  function clamp (line 169) | function clamp(value, min, max) {
  function blend (line 173) | function blend(Cb, Cs, blendMode) {

FILE: lib/commons/color/flatten-shadow-colors.js
  function flattenShadowColors (line 13) | function flattenShadowColors(fgColor, bgColor) {

FILE: lib/commons/color/get-background-color.js
  function getBackgroundColor (line 25) | function getBackgroundColor(
  function _getBackgroundColor (line 50) | function _getBackgroundColor(elm, bgElms, shadowOutlineEmMax) {
  function fullyEncompasses (line 151) | function fullyEncompasses(node, rects) {
  function normalizeBlendMode (line 181) | function normalizeBlendMode(blendmode) {
  function getPageBackgroundColors (line 192) | function getPageBackgroundColors(elm, stackContainsBody) {

FILE: lib/commons/color/get-background-stack.js
  function getBackgroundStack (line 16) | function getBackgroundStack(node) {
  function sortPageBackground (line 48) | function sortPageBackground(elmStack) {
  function shallowArraysEqual (line 90) | function shallowArraysEqual(a, b) {

FILE: lib/commons/color/get-contrast.js
  function getContrast (line 12) | function getContrast(bgColor, fgColor) {

FILE: lib/commons/color/get-foreground-color.js
  function getForegroundColor (line 22) | function getForegroundColor(node, _, bgColor, options = {}) {
  function getTextColor (line 76) | function getTextColor(nodeStyle) {
  function getStrokeColor (line 83) | function getStrokeColor(nodeStyle, { textStrokeEmMin = 0 }) {
  function calculateBlendedForegroundColor (line 107) | function calculateBlendedForegroundColor(fgColor, context, stackingConte...
  function findNodeInContexts (line 158) | function findNodeInContexts(contexts, node) {

FILE: lib/commons/color/get-own-background-color.js
  function getOwnBackgroundColor (line 12) | function getOwnBackgroundColor(elmStyle) {

FILE: lib/commons/color/get-rect-stack.js
  function getRectStack (line 12) | function getRectStack(elm) {

FILE: lib/commons/color/get-stroke-colors-from-shadows.js
  constant SHADOW_STROKE_ALPHA (line 5) | const SHADOW_STROKE_ALPHA = 0.54;
  constant VISIBLE_SHADOW_MIN_PX (line 7) | const VISIBLE_SHADOW_MIN_PX = 0.5;
  constant OPAQUE_STROKE_OFFSET_MIN_PX (line 9) | const OPAQUE_STROKE_OFFSET_MIN_PX = 1.5;
  function getStrokeColorsFromShadows (line 20) | function getStrokeColorsFromShadows(
  function getShadowColorsMap (line 46) | function getShadowColorsMap(parsedShadows) {
  function shadowGroupToColor (line 70) | function shadowGroupToColor({ colorStr, sides, edgeCount }) {

FILE: lib/commons/color/get-text-shadow-colors.js
  function getTextShadowColors (line 17) | function getTextShadowColors(
  function textShadowColor (line 84) | function textShadowColor({ colorStr, offsetX, offsetY, blurRadius, fontS...
  function blurRadiusToAlpha (line 97) | function blurRadiusToAlpha(blurRadius, fontSize) {

FILE: lib/commons/color/has-valid-contrast-ratio.js
  function hasValidContrastRatio (line 16) | function hasValidContrastRatio(bg, fg, fontSize, isBold) {

FILE: lib/commons/color/parse-text-shadows.js
  function parseTextShadows (line 9) | function parseTextShadows(textShadow) {

FILE: lib/commons/color/stacking-context.js
  function getStackingContext (line 62) | function getStackingContext(elm, elmStack) {
  function stackingContextToColor (line 120) | function stackingContextToColor(context) {
  function reduceToColor (line 158) | function reduceToColor(backdropContext, sourceContext) {
  function createStackingContext (line 176) | function createStackingContext(vNode, ancestorContext) {
  function normalizeBlendMode (line 194) | function normalizeBlendMode(blendmode) {
  function addToStackingContext (line 205) | function addToStackingContext(contextMap, vNode, ancestorVNode) {
  function getOwnBackgroundColor (line 225) | function getOwnBackgroundColor(vNode) {

FILE: lib/commons/dom/create-grid.js
  constant ROOT_LEVEL (line 12) | const ROOT_LEVEL = 0;
  constant DEFAULT_LEVEL (line 13) | const DEFAULT_LEVEL = 0.1;
  constant FLOAT_LEVEL (line 14) | const FLOAT_LEVEL = 0.2;
  constant POSITION_LEVEL (line 15) | const POSITION_LEVEL = 0.3;
  function createGrid (line 23) | function createGrid(
  function isStackingContext (line 124) | function isStackingContext(vNode, parentVNode) {
  function isFlexOrGridContainer (line 247) | function isFlexOrGridContainer(vNode) {
  function createStackingOrder (line 264) | function createStackingOrder(vNode, parentVNode, treeOrder) {
  function createStackingContext (line 297) | function createStackingContext(stackLevel, treeOrder, vNode) {
  function getStackLevel (line 311) | function getStackLevel(vNode, parentVNode) {
  function getRealZIndex (line 346) | function getRealZIndex(vNode, parentVNode) {
  function findScrollRegionParent (line 362) | function findScrollRegionParent(vNode, parentVNode) {
  function addNodeToGrid (line 396) | function addNodeToGrid(grid, vNode) {
  class Grid (line 421) | class Grid {
    method constructor (line 422) | constructor(container = null) {
    method toGridIndex (line 432) | toGridIndex(num) {
    method getCellFromPoint (line 441) | getCellFromPoint({ x, y }) {
    method loopGridPosition (line 458) | loopGridPosition(gridPosition, callback) {
    method getGridPositionOfRect (line 478) | getGridPositionOfRect({ top, right, bottom, left }, margin = 0) {
  function loopNegativeIndexMatrix (line 488) | function loopNegativeIndexMatrix(matrix, start, end, callback) {

FILE: lib/commons/dom/find-elms-in-context.js
  function findElmsInContext (line 16) | function findElmsInContext({ context, value, attr, elm = '' }) {

FILE: lib/commons/dom/find-nearby-elms.js
  function findNearbyElms (line 4) | function findNearbyElms(vNode, margin = 0) {

FILE: lib/commons/dom/find-up-virtual.js
  function findUpVirtual (line 15) | function findUpVirtual(element, target) {

FILE: lib/commons/dom/find-up.js
  function findUp (line 16) | function findUp(element, target) {

FILE: lib/commons/dom/focus-disabled.js
  function isDisabledAttrAllowed (line 18) | function isDisabledAttrAllowed(nodeName) {
  function focusDisabled (line 27) | function focusDisabled(el) {

FILE: lib/commons/dom/get-composed-parent.js
  function getComposedParent (line 9) | function getComposedParent(element) {

FILE: lib/commons/dom/get-element-by-reference.js
  function getElementByReference (line 12) | function getElementByReference(node, attr) {

FILE: lib/commons/dom/get-element-coordinates.js
  function getElementCoordinates (line 22) | function getElementCoordinates(element) {

FILE: lib/commons/dom/get-element-stack.js
  function getElementStack (line 12) | function getElementStack(node) {

FILE: lib/commons/dom/get-modal-dialog.js
  function getNodeFromGrid (line 71) | function getNodeFromGrid(dialog) {

FILE: lib/commons/dom/get-node-grid.js
  function getNodeGrid (line 9) | function getNodeGrid(node) {

FILE: lib/commons/dom/get-rect-stack.js
  function getRectStack (line 4) | function getRectStack(grid, rect, recursed = false) {

FILE: lib/commons/dom/get-scroll-offset.js
  function getScrollOffset (line 9) | function getScrollOffset(element) {

FILE: lib/commons/dom/get-tabbable-elements.js
  function getTabbableElements (line 12) | function getTabbableElements(virtualNode) {

FILE: lib/commons/dom/get-target-rects.js
  function getTargetRects (line 15) | function getTargetRects(vNode) {
  function isDescendantNotInTabOrder (line 43) | function isDescendantNotInTabOrder(vAncestor, vNode) {

FILE: lib/commons/dom/get-target-size.js
  function getTargetSize (line 11) | function getTargetSize(vNode, minSize) {
  function getLargestRect (line 17) | function getLargestRect(rects, minSize) {

FILE: lib/commons/dom/get-text-element-stack.js
  function getTextElementStack (line 12) | function getTextElementStack(node) {

FILE: lib/commons/dom/get-viewport-size.js
  function getViewportSize (line 9) | function getViewportSize(win) {

FILE: lib/commons/dom/get-visible-child-text-rects.js
  function getContentRects (line 54) | function getContentRects(node) {
  function isOutsideNodeBounds (line 66) | function isOutsideNodeBounds(rects, nodeRect) {
  function filterHiddenRects (line 78) | function filterHiddenRects(contentRects, overflowHiddenNodes) {

FILE: lib/commons/dom/has-content-virtual.js
  function hasChildTextNodes (line 22) | function hasChildTextNodes(elm) {
  function hasContentVirtual (line 42) | function hasContentVirtual(elm, noRecursion, ignoreAria) {

FILE: lib/commons/dom/has-content.js
  function hasContent (line 16) | function hasContent(elm, noRecursion, ignoreAria) {

FILE: lib/commons/dom/has-lang-text.js
  function hasLangText (line 11) | function hasLangText(virtualNode) {

FILE: lib/commons/dom/idrefs.js
  function idrefs (line 20) | function idrefs(node, attr) {

FILE: lib/commons/dom/inserted-into-focus-order.js
  function insertedIntoFocusOrder (line 15) | function insertedIntoFocusOrder(el) {

FILE: lib/commons/dom/is-current-page-link.js
  function isCurrentPageLink (line 14) | function isCurrentPageLink(anchor) {

FILE: lib/commons/dom/is-focusable.js
  function isFocusable (line 14) | function isFocusable(el) {

FILE: lib/commons/dom/is-hidden-for-everyone.js
  function isHiddenForEveryone (line 28) | function isHiddenForEveryone(

FILE: lib/commons/dom/is-hidden-with-css.js
  function isHiddenWithCSS (line 14) | function isHiddenWithCSS(el, descendentVisibilityValue) {
  function _isHiddenWithCSS (line 31) | function _isHiddenWithCSS(el, descendentVisibilityValue) {

FILE: lib/commons/dom/is-html5.js
  function isHTML5 (line 9) | function isHTML5(doc) {

FILE: lib/commons/dom/is-in-tab-order.js
  function isInTabOrder (line 13) | function isInTabOrder(el) {

FILE: lib/commons/dom/is-in-text-block.js
  function walkDomNode (line 6) | function walkDomNode(node, functor) {
  function isBlock (line 21) | function isBlock(elm) {
  function getBlockParent (line 26) | function getBlockParent(node) {
  function isInTextBlock (line 46) | function isInTextBlock(node, options) {

FILE: lib/commons/dom/is-inert.js
  function isInert (line 11) | function isInert(vNode, { skipAncestors, isAncestor } = {}) {

FILE: lib/commons/dom/is-modal-open.js
  function isModalOpen (line 13) | function isModalOpen(options) {

FILE: lib/commons/dom/is-multiline.js
  function isMultiline (line 8) | function isMultiline(domNode, margin = 2) {

FILE: lib/commons/dom/is-natively-focusable.js
  function isNativelyFocusable (line 13) | function isNativelyFocusable(el) {

FILE: lib/commons/dom/is-node.js
  function isNode (line 10) | function isNode(element) {

FILE: lib/commons/dom/is-offscreen.js
  function noParentScrolled (line 6) | function noParentScrolled(element, offset) {
  function isOffscreen (line 30) | function isOffscreen(element, { isAncestor } = {}) {

FILE: lib/commons/dom/is-opaque.js
  function isOpaque (line 9) | function isOpaque(node) {

FILE: lib/commons/dom/is-skip-link.js
  function isSkipLink (line 19) | function isSkipLink(element) {
  function generateFirstPageLink (line 36) | function generateFirstPageLink() {

FILE: lib/commons/dom/is-visible-on-screen.js
  function isVisibleOnScreen (line 28) | function isVisibleOnScreen(vNode) {

FILE: lib/commons/dom/is-visible-to-screenreader.js
  function isVisibleToScreenReaders (line 14) | function isVisibleToScreenReaders(vNode) {

FILE: lib/commons/dom/is-visible.js
  function isClipped (line 24) | function isClipped(style) {
  function isAreaVisible (line 62) | function isAreaVisible(el, screenReader, recursed) {
  function isVisible (line 111) | function isVisible(el, screenReader, recursed) {

FILE: lib/commons/dom/is-visual-content.js
  function isVisualContent (line 23) | function isVisualContent(el) {

FILE: lib/commons/dom/reduce-to-elements-below-floating.js
  function reduceToElementsBelowFloating (line 10) | function reduceToElementsBelowFloating(elements, targetNode) {

FILE: lib/commons/dom/shadow-elements-from-point.js
  function shadowElementsFromPoint (line 16) | function shadowElementsFromPoint(nodeX, nodeY, root = document, i = 0) {

FILE: lib/commons/dom/url-props-from-attribute.js
  function urlPropsFromAttribute (line 8) | function urlPropsFromAttribute(node, attribute) {
  function getPort (line 60) | function getPort(port) {
  function getPathnameOrFilename (line 74) | function getPathnameOrFilename(pathname) {
  function getSearchPairs (line 97) | function getSearchPairs(searchStr) {
  function getHashRoute (line 128) | function getHashRoute(hash) {

FILE: lib/commons/dom/visibility-methods.js
  function nativelyHidden (line 20) | function nativelyHidden(vNode) {
  function displayHidden (line 31) | function displayHidden(vNode) {
  function visibilityHidden (line 49) | function visibilityHidden(vNode, { isAncestor } = {}) {
  function contentVisibiltyHidden (line 66) | function contentVisibiltyHidden(vNode, { isAncestor } = {}) {
  function ariaHidden (line 80) | function ariaHidden(vNode) {
  function opacityHidden (line 89) | function opacityHidden(vNode) {
  function scrollHidden (line 98) | function scrollHidden(vNode) {
  function overflowHidden (line 111) | function overflowHidden(vNode, { isAncestor } = {}) {
  function clipHidden (line 160) | function clipHidden(vNode) {
  function areaHidden (line 201) | function areaHidden(vNode, visibleFunction) {
  function detailsHidden (line 240) | function detailsHidden(vNode) {
  function hasPositionedAncestorBetween (line 259) | function hasPositionedAncestorBetween(child, ancestor) {

FILE: lib/commons/dom/visually-contains.js
  function visuallyContains (line 14) | function visuallyContains(node, parent) {
  function getScrollAncestor (line 43) | function getScrollAncestor(node) {
  function contains (line 63) | function contains(node, parent) {

FILE: lib/commons/dom/visually-overlaps.js
  function visuallyOverlaps (line 10) | function visuallyOverlaps(rect, parent) {

FILE: lib/commons/dom/visually-sort.js
  function visuallySort (line 11) | function visuallySort(a, b) {
  function getPositionOrder (line 109) | function getPositionOrder(vNode) {
  function isFloated (line 127) | function isFloated(vNode) {

FILE: lib/commons/forms/is-aria-combobox.js
  function isAriaCombobox (line 10) | function isAriaCombobox(node) {

FILE: lib/commons/forms/is-aria-listbox.js
  function isAriaListbox (line 10) | function isAriaListbox(node) {

FILE: lib/commons/forms/is-aria-range.js
  function isAriaRange (line 12) | function isAriaRange(node) {

FILE: lib/commons/forms/is-aria-textbox.js
  function isAriaTextbox (line 10) | function isAriaTextbox(node) {

FILE: lib/commons/forms/is-disabled.js
  function isDisabled (line 15) | function isDisabled(virtualNode) {

FILE: lib/commons/forms/is-native-select.js
  function isNativeSelect (line 11) | function isNativeSelect(node) {

FILE: lib/commons/forms/is-native-textbox.js
  function isNativeTextbox (line 24) | function isNativeTextbox(node) {

FILE: lib/commons/matches/attributes.js
  function attributes (line 24) | function attributes(vNode, matcher) {

FILE: lib/commons/matches/condition.js
  function condition (line 16) | function condition(arg, matcher) {

FILE: lib/commons/matches/explicit-role.js
  function explicitRole (line 20) | function explicitRole(vNode, matcher) {

FILE: lib/commons/matches/from-definition.js
  function fromDefinition (line 45) | function fromDefinition(vNode, definition) {

FILE: lib/commons/matches/from-function.js
  function fromFunction (line 24) | function fromFunction(getValue, matcher) {

FILE: lib/commons/matches/from-primative.js
  function fromPrimative (line 17) | function fromPrimative(someString, matcher) {

FILE: lib/commons/matches/has-accessible-name.js
  function hasAccessibleName (line 21) | function hasAccessibleName(vNode, matcher) {

FILE: lib/commons/matches/implicit-role.js
  function implicitRole (line 20) | function implicitRole(vNode, matcher) {

FILE: lib/commons/matches/matches.js
  function matches (line 35) | function matches(vNode, definition) {

FILE: lib/commons/matches/node-name.js
  function nodeName (line 21) | function nodeName(vNode, matcher) {

FILE: lib/commons/matches/properties.js
  function properties (line 24) | function properties(vNode, matcher) {

FILE: lib/commons/matches/semantic-role.js
  function semanticRole (line 20) | function semanticRole(vNode, matcher) {

FILE: lib/commons/math/get-bounding-rect.js
  function getBoundingRect (line 9) | function getBoundingRect(rectA, rectB) {

FILE: lib/commons/math/get-intersection-rect.js
  function getIntersectionRect (line 10) | function getIntersectionRect(rect1, rect2) {

FILE: lib/commons/math/get-offset.js
  function getOffset (line 16) | function getOffset(vTarget, vNeighbor, minRadiusNeighbour = 12) {
  function getClosestPoint (line 53) | function getClosestPoint(point, rect) {
  function pointDistance (line 82) | function pointDistance(pointA, pointB) {

FILE: lib/commons/math/get-rect-center.js
  function getRectCenter (line 8) | function getRectCenter({ left, top, width, height }) {

FILE: lib/commons/math/has-visual-overlap.js
  function hasVisualOverlap (line 11) | function hasVisualOverlap(vNodeA, vNodeB) {

FILE: lib/commons/math/is-point-in-rect.js
  function isPointInRect (line 9) | function isPointInRect({ x, y }, { top, right, bottom, left }) {

FILE: lib/commons/math/rect-has-minimum-size.js
  function rectHasMinimumSize (line 3) | function rectHasMinimumSize(minSize, { width, height }) {

FILE: lib/commons/math/rects-overlap.js
  function rectsOverlap (line 9) | function rectsOverlap(rect1, rect2) {

FILE: lib/commons/math/split-rects.js
  function splitRects (line 10) | function splitRects(outerRect, overlapRects) {
  function splitRect (line 28) | function splitRect(inputRect, clipRect) {
  function computeRect (line 60) | function computeRect(baseRect) {
  function isEnclosedRect (line 69) | function isEnclosedRect(rectA, rectB) {

FILE: lib/commons/standards/get-aria-roles-by-type.js
  function getAriaRolesByType (line 8) | function getAriaRolesByType(type) {

FILE: lib/commons/standards/get-aria-roles-supporting-name-from-content.js
  function getAriaRolesSupportingNameFromContent (line 8) | function getAriaRolesSupportingNameFromContent() {

FILE: lib/commons/standards/get-element-spec.js
  function getElementSpec (line 9) | function getElementSpec(vNode, { noMatchAccessibleName = false } = {}) {

FILE: lib/commons/standards/get-elements-by-content-type.js
  function getElementsByContentType (line 8) | function getElementsByContentType(type) {

FILE: lib/commons/standards/get-global-aria-attrs.js
  function getGlobalAriaAttrs (line 8) | function getGlobalAriaAttrs() {

FILE: lib/commons/standards/implicit-html-roles.js
  function hasAccessibleName (line 57) | function hasAccessibleName(vNode, { checkTitle = false } = {}) {

FILE: lib/commons/table/get-all-cells.js
  function getAllCells (line 9) | function getAllCells(tableElm) {

FILE: lib/commons/table/get-cell-position.js
  function getCellPosition (line 13) | function getCellPosition(cell, tableGrid) {

FILE: lib/commons/table/get-headers.js
  function traverseForHeaders (line 15) | function traverseForHeaders(headerType, position, tableGrid) {
  function getHeaders (line 80) | function getHeaders(cell, tableGrid) {

FILE: lib/commons/table/get-scope.js
  function getScope (line 15) | function getScope(el) {

FILE: lib/commons/table/is-column-header.js
  function isColumnHeader (line 11) | function isColumnHeader(element) {

FILE: lib/commons/table/is-data-cell.js
  function isDataCell (line 11) | function isDataCell(cell) {

FILE: lib/commons/table/is-data-table.js
  function isDataTable (line 17) | function isDataTable(node) {

FILE: lib/commons/table/is-header.js
  function isHeader (line 13) | function isHeader(cell) {

FILE: lib/commons/table/is-row-header.js
  function isRowHeader (line 11) | function isRowHeader(cell) {

FILE: lib/commons/table/to-grid.js
  function toGrid (line 11) | function toGrid(node) {

FILE: lib/commons/table/traverse.js
  function traverseTable (line 1) | function traverseTable(dir, position, tableGrid, callback) {
  function traverse (line 41) | function traverse(dir, startPos, tableGrid, callback) {

FILE: lib/commons/text/accessible-text-virtual.js
  function accessibleTextVirtual (line 21) | function accessibleTextVirtual(virtualNode, context = {}) {
  function textNodeValue (line 68) | function textNodeValue(virtualNode) {
  function shouldIgnoreHidden (line 82) | function shouldIgnoreHidden(virtualNode, context) {
  function shouldIgnoreIconLigature (line 106) | function shouldIgnoreIconLigature(virtualNode, context) {
  function prepareContext (line 122) | function prepareContext(virtualNode, context) {

FILE: lib/commons/text/accessible-text.js
  function accessibleText (line 14) | function accessibleText(element, context) {

FILE: lib/commons/text/form-control-value.js
  function formControlValue (line 45) | function formControlValue(virtualNode, context = {}) {
  function nativeTextboxValue (line 83) | function nativeTextboxValue(node) {
  function nativeSelectValue (line 97) | function nativeSelectValue(node) {
  function ariaTextboxValue (line 120) | function ariaTextboxValue(node) {
  function ariaListboxValue (line 142) | function ariaListboxValue(node, context) {
  function ariaComboboxValue (line 172) | function ariaComboboxValue(node, context) {
  function ariaRangeValue (line 191) | function ariaRangeValue(node) {

FILE: lib/commons/text/has-unicode.js
  function hasUnicode (line 22) | function hasUnicode(str, options) {

FILE: lib/commons/text/is-human-interpretable.js
  function isHumanInterpretable (line 13) | function isHumanInterpretable(str) {
  function isEmpty (line 43) | function isEmpty(str) {
  function isNonDigitCharacter (line 47) | function isNonDigitCharacter(str) {
  function isSymbolicText (line 51) | function isSymbolicText(str) {
  function isUnicodeOrPunctuation (line 60) | function isUnicodeOrPunctuation(str) {

FILE: lib/commons/text/is-icon-ligature.js
  function isIconLigature (line 16) | function isIconLigature(

FILE: lib/commons/text/is-valid-autocomplete.js
  function isValidAutocomplete (line 65) | function isValidAutocomplete(

FILE: lib/commons/text/label-text.js
  function labelText (line 14) | function labelText(virtualNode, context = {}) {
  function getExplicitLabels (line 51) | function getExplicitLabels(virtualNode) {

FILE: lib/commons/text/label-virtual.js
  function labelVirtual (line 16) | function labelVirtual(virtualNode) {

FILE: lib/commons/text/label.js
  function label (line 14) | function label(node) {

FILE: lib/commons/text/native-text-alternative.js
  function nativeTextAlternative (line 12) | function nativeTextAlternative(virtualNode, context = {}) {
  function findTextMethods (line 39) | function findTextMethods(virtualNode) {

FILE: lib/commons/text/native-text-methods.js
  function attrText (line 113) | function attrText(attr, vNode) {
  function descendantText (line 122) | function descendantText(nodeName, { actualNode }, context) {

FILE: lib/commons/text/remove-unicode.js
  function removeUnicode (line 22) | function removeUnicode(str, options) {

FILE: lib/commons/text/sanitize.js
  function sanitize (line 9) | function sanitize(str) {

FILE: lib/commons/text/subtree-text.js
  function subtreeText (line 17) | function subtreeText(virtualNode, context = {}) {
  function appendAccessibleText (line 62) | function appendAccessibleText(contentText, virtualNode, context) {

FILE: lib/commons/text/title-text.js
  function titleText (line 12) | function titleText(node) {

FILE: lib/commons/text/unicode.js
  function getUnicodeNonBmpRegExp (line 10) | function getUnicodeNonBmpRegExp() {
  function getPunctuationRegExp (line 49) | function getPunctuationRegExp() {
  function getSupplementaryPrivateUseRegExp (line 70) | function getSupplementaryPrivateUseRegExp() {
  function getCategoryFormatRegExp (line 95) | function getCategoryFormatRegExp() {

FILE: lib/commons/text/visible-text-nodes.js
  function visibleTextNodes (line 13) | function visibleTextNodes(vNode) {

FILE: lib/commons/text/visible-virtual.js
  function visibleVirtual (line 20) | function visibleVirtual(element, screenReader, noRecursing) {

FILE: lib/commons/text/visible.js
  function visible (line 13) | function visible(element, screenReader, noRecursing) {

FILE: lib/core/base/audit.js
  class Audit (line 24) | class Audit {
    method constructor (line 25) | constructor(audit) {
    method _setDefaultLocale (line 41) | _setDefaultLocale() {
    method _resetLocale (line 85) | _resetLocale() {
    method _applyCheckLocale (line 97) | _applyCheckLocale(checks) {
    method _applyRuleLocale (line 110) | _applyRuleLocale(rules) {
    method _applyFailureSummaries (line 123) | _applyFailureSummaries(messages) {
    method applyLocale (line 141) | applyLocale(locale) {
    method setAllowedOrigins (line 167) | setAllowedOrigins(allowedOrigins) {
    method _init (line 187) | _init() {
    method registerCommand (line 213) | registerCommand(command) {
    method addRule (line 220) | addRule(spec) {
    method addCheck (line 237) | addCheck(spec) {
    method run (line 274) | run(context, options, resolve, reject) {
    method after (line 370) | after(results, options) {
    method getRule (line 398) | getRule(ruleId) {
    method setBranding (line 406) | setBranding(branding) {
    method _constructHelpUrls (line 432) | _constructHelpUrls(previous = null) {
    method resetRulesAndChecks (line 452) | resetRulesAndChecks() {
  function getDefaultOrigin (line 458) | function getDefaultOrigin() {
  function getDefaultConfiguration (line 475) | function getDefaultConfiguration(audit) {
  function unpackToObject (line 501) | function unpackToObject(collection, audit, method) {
  function getRulesToRun (line 618) | function getRulesToRun(rules, context, options) {
  function getDefferedRule (line 657) | function getDefferedRule(rule, context, options) {
  function createIncompleteErrorResult (line 680) | function createIncompleteErrorResult(rule, error) {
  function getHelpUrl (line 702) | function getHelpUrl({ brand, application, lang }, ruleId, version) {

FILE: lib/core/base/cache.js
  method set (line 11) | set(key, value) {
  method get (line 23) | get(key, creator) {
  method clear (line 44) | clear() {
  function validateKey (line 54) | function validateKey(key) {
  function validateCreator (line 67) | function validateCreator(creator) {

FILE: lib/core/base/check-result.js
  function CheckResult (line 5) | function CheckResult(check) {

FILE: lib/core/base/check.js
  function createExecutionContext (line 5) | function createExecutionContext(spec) {
  function normalizeOptions (line 29) | function normalizeOptions(options = {}) {
  function Check (line 37) | function Check(spec) {

FILE: lib/core/base/context.js
  function Context (line 35) | function Context(spec, flatTree) {
  function pushUniqueFrame (line 82) | function pushUniqueFrame(context, frame) {
  function isPageContext (line 96) | function isPageContext({ include }) {
  function validateContext (line 108) | function validateContext(context) {
  function getRootNode (line 118) | function getRootNode({ include, exclude }) {

FILE: lib/core/base/context/create-frame-context.js
  function createFrameContext (line 3) | function createFrameContext(frame, { focusable, page }) {
  function frameFocusable (line 15) | function frameFocusable(frame) {
  function getBoundingSize (line 20) | function getBoundingSize(domNode) {

FILE: lib/core/base/context/normalize-context.js
  function normalizeContext (line 17) | function normalizeContext(contextSpec) {
  function normalizeContextList (line 40) | function normalizeContextList(selectorList = []) {
  function normalizeContextSelector (line 55) | function normalizeContextSelector(selector) {
  function normalizeFrameSelectors (line 72) | function normalizeFrameSelectors(frameSelectors) {
  function assertLabelledFrameSelector (line 90) | function assertLabelledFrameSelector(selector) {
  function assertLabelledShadowDomSelector (line 107) | function assertLabelledShadowDomSelector(selector) {
  function isShadowSelector (line 128) | function isShadowSelector(selector) {
  function assert (line 135) | function assert(bool, str) {

FILE: lib/core/base/context/parse-selector-array.js
  function parseSelectorArray (line 11) | function parseSelectorArray(context, type) {
  function pushUniqueFrameSelector (line 54) | function pushUniqueFrameSelector(context, type, selectorArray) {

FILE: lib/core/base/rule-result.js
  function RuleResult (line 7) | function RuleResult(rule) {

FILE: lib/core/base/rule.js
  function Rule (line 17) | function Rule(spec, parentAudit) {
  function getResult (line 413) | function getResult(results) {
  function findAfterChecks (line 485) | function findAfterChecks(rule) {
  function findCheckResults (line 501) | function findCheckResults(nodes, checkID) {
  function filterChecks (line 515) | function filterChecks(checks) {
  function sanitizeNodes (line 521) | function sanitizeNodes(result) {

FILE: lib/core/base/virtual-node/abstract-virtual-node.js
  class AbstractVirtualNode (line 3) | class AbstractVirtualNode {
    method constructor (line 4) | constructor() {
    method props (line 8) | get props() {
    method attrNames (line 15) | get attrNames() {
    method attr (line 19) | attr() {
    method hasAttr (line 23) | hasAttr() {
    method hasClass (line 27) | hasClass(className) {

FILE: lib/core/base/virtual-node/serial-virtual-node.js
  class SerialVirtualNode (line 4) | class SerialVirtualNode extends AbstractVirtualNode {
    method constructor (line 9) | constructor(serialNode) {
    method props (line 16) | get props() {
    method attr (line 25) | attr(attrName) {
    method hasAttr (line 34) | hasAttr(attrName) {
    method attrNames (line 42) | get attrNames() {
  function normaliseProps (line 65) | function normaliseProps(serialNode) {
  function normaliseAttrs (line 111) | function normaliseAttrs({ attributes = {} }) {

FILE: lib/core/base/virtual-node/virtual-node.js
  class VirtualNode (line 8) | class VirtualNode extends AbstractVirtualNode {
    method constructor (line 15) | constructor(node, parent, shadowId) {
    method props (line 52) | get props() {
    method attr (line 83) | attr(attrName) {
    method hasAttr (line 96) | hasAttr(attrName) {
    method attrNames (line 108) | get attrNames() {
    method getComputedStylePropertyValue (line 135) | getComputedStylePropertyValue(property) {
    method isFocusable (line 151) | get isFocusable() {
    method tabbableElements (line 162) | get tabbableElements() {
    method clientRects (line 173) | get clientRects() {
    method boundingClientRect (line 186) | get boundingClientRect() {

FILE: lib/core/imports/polyfills.js
  method get (line 228) | get() {

FILE: lib/core/log.js
  function log (line 6) | function log() {

FILE: lib/core/public/cleanup.js
  function cleanup (line 1) | function cleanup(resolve, reject) {

FILE: lib/core/public/configure.js
  function configure (line 5) | function configure(spec) {

FILE: lib/core/public/finish-run.js
  function finishRun (line 11) | function finishRun(partialResults, options = {}) {
  function setFrameSpec (line 28) | function setFrameSpec(partialResults) {
  function getMergedFrameSpecs (line 42) | function getMergedFrameSpecs({
  function createReport (line 55) | function createReport(results, options) {

FILE: lib/core/public/frame-messenger.js
  function frameMessenger (line 3) | function frameMessenger(frameHandler) {

FILE: lib/core/public/get-rules.js
  function getRules (line 6) | function getRules(tags) {

FILE: lib/core/public/load.js
  function load (line 12) | function load(audit) {
  function runCommand (line 16) | function runCommand(data, keepalive, callback) {

FILE: lib/core/public/plugins.js
  function Plugin (line 3) | function Plugin(spec) {
  function registerPlugin (line 35) | function registerPlugin(plugin) {

FILE: lib/core/public/reporter.js
  function hasReporter (line 4) | function hasReporter(reporterName) {
  function getReporter (line 8) | function getReporter(reporter) {
  function addReporter (line 20) | function addReporter(name, cb, isDefault) {

FILE: lib/core/public/reset.js
  function reset (line 3) | function reset() {

FILE: lib/core/public/run-partial.js
  function runPartial (line 11) | function runPartial(...args) {

FILE: lib/core/public/run-rules.js
  function runRules (line 22) | function runRules(context, options, resolve, reject) {

FILE: lib/core/public/run-virtual-rule.js
  function runVirtualRule (line 19) | function runVirtualRule(ruleId, vNode, options = {}) {

FILE: lib/core/public/run.js
  function run (line 20) | function run(...args) {
  function getPromiseHandlers (line 89) | function getPromiseHandlers(callback) {
  function createReport (line 103) | function createReport(rawResults, options, respond, reject) {
  function handleError (line 111) | function handleError(err, callback) {

FILE: lib/core/public/run/globals-setup.js
  function setupGlobals (line 3) | function setupGlobals(context) {
  function resetGlobals (line 31) | function resetGlobals() {

FILE: lib/core/public/run/normalize-run-params.js
  function normalizeRunParams (line 10) | function normalizeRunParams([context, options, callback]) {

FILE: lib/core/public/setup.js
  function setup (line 8) | function setup(node) {

FILE: lib/core/public/teardown.js
  function teardown (line 7) | function teardown() {

FILE: lib/core/reporters/helpers/failure-summary.js
  function failureSummary (line 6) | function failureSummary(nodeData) {

FILE: lib/core/reporters/helpers/incomplete-fallback-msg.js
  function incompleteFallbackMessage (line 6) | function incompleteFallbackMessage() {

FILE: lib/core/reporters/helpers/process-aggregate.js
  function processAggregate (line 29) | function processAggregate(results, options) {
  function normalizeRelatedNodes (line 70) | function normalizeRelatedNodes(node, options) {
  function trimElementSpec (line 85) | function trimElementSpec(elmSpec = {}, runOptions) {

FILE: lib/core/utils/aggregate-checks.js
  function anyAllNone (line 14) | function anyAllNone(obj, functor) {
  function aggregateChecks (line 21) | function aggregateChecks(nodeResOriginal) {

FILE: lib/core/utils/aggregate-node-results.js
  function aggregateNodeResults (line 10) | function aggregateNodeResults(nodeResults) {

FILE: lib/core/utils/aggregate-result.js
  function copyToGroup (line 3) | function copyToGroup(resultObject, subResult, group) {
  function aggregateResult (line 16) | function aggregateResult(results) {

FILE: lib/core/utils/aggregate.js
  function aggregate (line 10) | function aggregate(map, values, initial) {

FILE: lib/core/utils/are-styles-set.js
  function areStylesSet (line 1) | function areStylesSet(el, styles, stopAt) {

FILE: lib/core/utils/assert.js
  function assert (line 6) | function assert(bool, message) {

FILE: lib/core/utils/check-helper.js
  function checkHelper (line 11) | function checkHelper(checkResult, options, resolve, reject) {

FILE: lib/core/utils/clone.js
  function clone (line 6) | function clone(obj) {
  function cloneRecused (line 11) | function cloneRecused(obj, seen) {

FILE: lib/core/utils/closest.js
  function closest (line 12) | function closest(vNode, selector) {

FILE: lib/core/utils/collect-results-from-frames.js
  function collectResultsFromFrames (line 14) | function collectResultsFromFrames(

FILE: lib/core/utils/contains.js
  function contains (line 9) | function contains(vNode, otherVNode) {

FILE: lib/core/utils/deep-merge.js
  function deepMerge (line 7) | function deepMerge(...sources) {

FILE: lib/core/utils/dq-element.js
  constant CACHE_KEY (line 10) | const CACHE_KEY = 'DqElm.RunOptions';
  method selector (line 77) | get selector() {
  method ancestry (line 85) | get ancestry() {
  method xpath (line 93) | get xpath() {
  method element (line 100) | get element() {
  method toJSON (line 109) | toJSON() {

FILE: lib/core/utils/element-matches.js
  function getMethod (line 10) | function getMethod(node) {

FILE: lib/core/utils/escape-selector.js
  function escapeSelector (line 8) | function escapeSelector(value) {

FILE: lib/core/utils/extend-meta-data.js
  function extendMetaData (line 6) | function extendMetaData(to, from) {

FILE: lib/core/utils/filter-html-attrs.js
  function filterHtmlAttrs (line 23) | function filterHtmlAttrs(element, filterAttrs) {
  function setNodeAttributes (line 48) | function setNodeAttributes(node, attributes, element, filterAttrs) {
  function attributeMatches (line 70) | function attributeMatches(node, attrName, filterAttrs) {

FILE: lib/core/utils/finalize-result.js
  function finalizeRuleResult (line 8) | function finalizeRuleResult(ruleResult) {

FILE: lib/core/utils/find-by.js
  function findBy (line 10) | function findBy(array, key, value) {

FILE: lib/core/utils/frame-messenger.js
  method open (line 10) | open(topicHandler) {
  method post (line 25) | post(win, data, replyHandler) {
  function setDefaultFrameMessenger (line 38) | function setDefaultFrameMessenger(respondable) {

FILE: lib/core/utils/frame-messenger/assert-window.js
  function assertIsParentWindow (line 3) | function assertIsParentWindow(win) {
  function assertIsFrameWindow (line 11) | function assertIsFrameWindow(win) {
  function assetNotGlobalWindow (line 19) | function assetNotGlobalWindow(win) {

FILE: lib/core/utils/frame-messenger/channel-store.js
  function storeReplyHandler (line 5) | function storeReplyHandler(
  function getReplyHandler (line 17) | function getReplyHandler(channelId) {
  function deleteReplyHandler (line 21) | function deleteReplyHandler(channelId) {

FILE: lib/core/utils/frame-messenger/create-responder.js
  function createResponder (line 10) | function createResponder(win, channelId, sendToParent = true) {

FILE: lib/core/utils/frame-messenger/message-handler.js
  function originIsAllowed (line 8) | function originIsAllowed(origin) {
  function messageHandler (line 22) | function messageHandler(
  function callReplyHandler (line 57) | function callReplyHandler(win, data) {

FILE: lib/core/utils/frame-messenger/message-id.js
  function createMessageId (line 6) | function createMessageId() {
  function isNewMessage (line 17) | function isNewMessage(uuid) {

FILE: lib/core/utils/frame-messenger/message-parser.js
  function stringifyMessage (line 10) | function stringifyMessage({
  function parseMessage (line 42) | function parseMessage(dataString) {
  function isRespondableMessage (line 68) | function isRespondableMessage(postedMessage) {
  function buildErrorObject (line 82) | function buildErrorObject(error) {
  function getSource (line 97) | function getSource() {

FILE: lib/core/utils/frame-messenger/post-message.js
  function postMessage (line 17) | function postMessage(win, data, sendToParent, replyHandler) {

FILE: lib/core/utils/frame-messenger/process-error.js
  function processError (line 9) | function processError(win, error, channelId) {

FILE: lib/core/utils/get-all-checks.js
  function getAllChecks (line 5) | function getAllChecks(object) {

FILE: lib/core/utils/get-ancestry.js
  function generateAncestry (line 3) | function generateAncestry(node) {
  function getAncestry (line 31) | function getAncestry(elm, options) {

FILE: lib/core/utils/get-base-lang.js
  function getBaseLang (line 8) | function getBaseLang(lang) {

FILE: lib/core/utils/get-check-message.js
  function getCheckMessage (line 10) | function getCheckMessage(checkId, type, data) {

FILE: lib/core/utils/get-check-option.js
  function getCheckOption (line 8) | function getCheckOption(check, ruleID, options) {

FILE: lib/core/utils/get-element-source.js
  function getElementSource (line 12) | function getElementSource(
  function getOuterHtml (line 38) | function getOuterHtml(element) {
  function getTruncatedElementSource (line 55) | function getTruncatedElementSource(elm, { maxLength, attrLimit }) {
  function truncate (line 99) | function truncate(str, attrLimit) {

FILE: lib/core/utils/get-environment-data.js
  function getEnvironmentData (line 5) | function getEnvironmentData(metadata = null, win = window) {
  function getTestEnvironment (line 26) | function getTestEnvironment(win) {
  function getOrientation (line 41) | function getOrientation({ screen }) {

FILE: lib/core/utils/get-flattened-tree.js
  function getFlattenedTree (line 34) | function getFlattenedTree(
  function getSlotChildren (line 63) | function getSlotChildren(node) {
  function createNode (line 81) | function createNode(node, parent, shadowId) {
  function createChildren (line 94) | function createChildren(childNodes, parent, shadowId) {
  function flattenTree (line 115) | function flattenTree(node, shadowId, parent) {

FILE: lib/core/utils/get-frame-contexts.js
  function getFrameContexts (line 4) | function getFrameContexts(context, options = {}) {

FILE: lib/core/utils/get-friendly-uri-end.js
  function isMostlyNumbers (line 5) | function isMostlyNumbers(str = '') {
  function splitString (line 17) | function splitString(str, splitIndex) {
  function trimRight (line 21) | function trimRight(str) {
  function uriParser (line 37) | function uriParser(url) {
  function getFriendlyUriEnd (line 82) | function getFriendlyUriEnd(uri = '', options = {}) {

FILE: lib/core/utils/get-node-attributes.js
  function getNodeAttributes (line 9) | function getNodeAttributes(node) {

FILE: lib/core/utils/get-node-from-tree.js
  function getNodeFromTree (line 9) | function getNodeFromTree(vNode, node) {

FILE: lib/core/utils/get-root-node.js
  function getRootNode (line 8) | function getRootNode(node) {

FILE: lib/core/utils/get-rule.js
  function getRule (line 6) | function getRule(ruleId) {

FILE: lib/core/utils/get-scroll-state.js
  function getElmScrollRecursive (line 6) | function getElmScrollRecursive(root) {
  function getScrollState (line 24) | function getScrollState(win = window) {

FILE: lib/core/utils/get-scroll.js
  function getScroll (line 11) | function getScroll(elm, buffer = 0) {
  function isScrollable (line 39) | function isScrollable(style, prop) {

FILE: lib/core/utils/get-selector.js
  constant MAXATTRIBUTELENGTH (line 31) | const MAXATTRIBUTELENGTH = 31;
  function escapeAttribute (line 40) | function escapeAttribute(str) {
  function getAttributeNameValue (line 56) | function getAttributeNameValue(node, at) {
  function countSort (line 77) | function countSort(a, b) {
  function filterAttributes (line 86) | function filterAttributes(at) {
  function getSelectorData (line 102) | function getSelectorData(domTree) {
  function uncommonClasses (line 175) | function uncommonClasses(node, selectorData) {
  function getNthChildString (line 203) | function getNthChildString(elm, selector) {
  function getElmId (line 220) | function getElmId(elm) {
  function getBaseSelector (line 241) | function getBaseSelector(elm) {
  function uncommonAttributes (line 253) | function uncommonAttributes(node, selectorData) {
  function getThreeLeastCommonFeatures (line 290) | function getThreeLeastCommonFeatures(elm, selectorData) {
  function generateSelector (line 352) | function generateSelector(elm, options, doc) {
  function getSelector (line 404) | function getSelector(elm, options) {

FILE: lib/core/utils/get-shadow-selector.js
  function getShadowSelector (line 7) | function getShadowSelector(generateSelector, elm, options = {}) {

FILE: lib/core/utils/get-standards.js
  function getStandards (line 4) | function getStandards() {

FILE: lib/core/utils/get-stylesheet-factory.js
  function getStyleSheetFactory (line 17) | function getStyleSheetFactory(dynamicDoc) {

FILE: lib/core/utils/get-xpath.js
  function getXPathArray (line 3) | function getXPathArray(node, path) {
  function xpathToString (line 69) | function xpathToString(xpathArray) {
  function getXpath (line 79) | function getXpath(node) {

FILE: lib/core/utils/inject-style.js
  function injectStyle (line 2) | function injectStyle(style) {

FILE: lib/core/utils/is-array-like.js
  function isArrayLike (line 7) | function isArrayLike(arr) {

FILE: lib/core/utils/is-context.js
  function isContextSpec (line 10) | function isContextSpec(contextSpec) {
  function isContextObject (line 20) | function isContextObject(contextSpec) {
  function isContextProp (line 31) | function isContextProp(contextList) {
  function isLabelledFramesSelector (line 41) | function isLabelledFramesSelector(selector) {
  function isLabelledShadowDomSelector (line 48) | function isLabelledShadowDomSelector(selector) {

FILE: lib/core/utils/is-hidden.js
  function isHidden (line 12) | function isHidden(el, recursed) {

FILE: lib/core/utils/is-html-element.js
  function isHtmlElement (line 10) | function isHtmlElement(node) {

FILE: lib/core/utils/is-node-in-context.js
  function isNodeInContext (line 10) | function isNodeInContext(node, { include = [], exclude = [] }) {
  function getDeepest (line 30) | function getDeepest(collection) {

FILE: lib/core/utils/is-shadow-root.js
  function isShadowRoot (line 27) | function isShadowRoot(node) {

FILE: lib/core/utils/match-ancestry.js
  function matchAncestry (line 4) | function matchAncestry(ancestryA, ancestryB) {

FILE: lib/core/utils/matches.js
  function matches (line 12) | function matches(vNode, selector) {
  function matchesTag (line 17) | function matchesTag(vNode, exp) {
  function matchesClasses (line 24) | function matchesClasses(vNode, exp) {
  function matchesAttributes (line 28) | function matchesAttributes(vNode, exp) {
  function matchesId (line 38) | function matchesId(vNode, exp) {
  function matchesPseudos (line 42) | function matchesPseudos(target, exp) {
  function matchExpression (line 65) | function matchExpression(vNode, expression) {
  function convertAttributes (line 85) | function convertAttributes(atts) {
  function convertClasses (line 152) | function convertClasses(classes) {
  function convertPseudos (line 166) | function convertPseudos(pseudos) {
  function convertExpressions (line 195) | function convertExpressions(expressions) {
  function convertSelector (line 223) | function convertSelector(selector) {
  function optimizedMatchesExpression (line 242) | function optimizedMatchesExpression(vNode, expressions, index, matchAnyP...
  function matchesExpression (line 287) | function matchesExpression(vNode, expressions, matchAnyParent) {

FILE: lib/core/utils/memoize.js
  function memoizeImplementation (line 24) | function memoizeImplementation(fn) {

FILE: lib/core/utils/merge-results.js
  function pushFrame (line 12) | function pushFrame(resultSet, options, frameSpec) {
  function spliceNodes (line 32) | function spliceNodes(target, to) {
  function normalizeResult (line 53) | function normalizeResult(result) {
  function mergeResults (line 77) | function mergeResults(frameResults, options) {
  function nodeIndexSort (line 116) | function nodeIndexSort(nodeIndexesA = [], nodeIndexesB = []) {
  function getFrameSpec (line 137) | function getFrameSpec(frameResult) {

FILE: lib/core/utils/node-lookup.js
  function nodeLookup (line 10) | function nodeLookup(node) {

FILE: lib/core/utils/node-serializer.js
  method update (line 21) | update(serializer) {
  method toSpec (line 31) | toSpec(node) {
  method dqElmToSpec (line 45) | dqElmToSpec(dqElm, runOptions) {
  method mergeSpecs (line 68) | mergeSpecs(nodeSpec, parentFrameSpec) {
  method mapRawResults (line 80) | mapRawResults(rawResults) {
  method mapRawNodeResults (line 92) | mapRawNodeResults(nodeResults) {
  function cloneLimitedDqElement (line 118) | function cloneLimitedDqElement(dqElm, runOptions) {

FILE: lib/core/utils/node-sorter.js
  function nodeSorter (line 8) | function nodeSorter(nodeA, nodeB) {

FILE: lib/core/utils/normalize-run-options.js
  function normalizeRunOptions (line 7) | function normalizeRunOptions(options = {}) {

FILE: lib/core/utils/object-has-own.js
  function objectHasOwn (line 2) | function objectHasOwn(obj, prop) {

FILE: lib/core/utils/parse-crossorigin-stylesheet.js
  function parseCrossOriginStylesheet (line 16) | function parseCrossOriginStylesheet(

FILE: lib/core/utils/parse-sameorigin-stylesheet.js
  function parseSameOriginStylesheet (line 15) | function parseSameOriginStylesheet(

FILE: lib/core/utils/parse-stylesheet.js
  function parseStylesheet (line 16) | function parseStylesheet(
  function isSameOriginStylesheet (line 57) | function isSameOriginStylesheet(sheet) {

FILE: lib/core/utils/parse-tabindex.js
  function parseTabindex (line 8) | function parseTabindex(value) {

FILE: lib/core/utils/performance-timer.js
  function now (line 15) | function now() {
  method start (line 30) | start() {
  method end (line 39) | end() {
  method auditStart (line 50) | auditStart() {
  method auditEnd (line 60) | auditEnd() {
  method mark (line 79) | mark(markName) {
  method measure (line 92) | measure(measureName, startMark, endMark, keepMarks = false) {
  method logMeasures (line 111) | logMeasures(measureName) {
  method timeElapsed (line 150) | timeElapsed() {
  method clearMark (line 159) | clearMark(...markNames) {
  method reset (line 172) | reset() {
  method _log (line 181) | _log(message) {

FILE: lib/core/utils/pollyfill-elements-from-point.js
  function pollyfillElementsFromPoint (line 2) | function pollyfillElementsFromPoint() {

FILE: lib/core/utils/preload-cssom.js
  function preloadCssom (line 21) | function preloadCssom({ treeRoot = axe._tree[0] }) {
  function getAllRootNodesInTree (line 50) | function getAllRootNodesInTree(tree) {
  function getCssomForAllRootNodes (line 76) | function getCssomForAllRootNodes(rootNodes, convertDataToStylesheet) {
  function flattenAssets (line 123) | function flattenAssets(assets) {
  function getStylesheetsOfRootNode (line 139) | function getStylesheetsOfRootNode(rootNode, shadowId, convertDataToStyle...
  function getStylesheetsFromDocumentFragment (line 162) | function getStylesheetsFromDocumentFragment(rootNode, convertDataToStyle...
  function getStylesheetsFromDocument (line 193) | function getStylesheetsFromDocument(rootNode) {
  function filerStyleAndLinkAttributesInDocumentFragment (line 210) | function filerStyleAndLinkAttributesInDocumentFragment(node) {
  function filterMediaIsPrint (line 229) | function filterMediaIsPrint(media) {
  function filterStylesheetsWithSameHref (line 242) | function filterStylesheetsWithSameHref(sheets) {

FILE: lib/core/utils/preload-media.js
  function preloadMedia (line 12) | function preloadMedia({ treeRoot = axe._tree[0] }) {
  function isMediaElementReady (line 89) | function isMediaElementReady(elm) {

FILE: lib/core/utils/preload.js
  function preload (line 12) | function preload(options) {
  function isValidPreloadObject (line 81) | function isValidPreloadObject(preloadObj) {
  function shouldPreload (line 90) | function shouldPreload(options) {
  function getPreloadConfig (line 105) | function getPreloadConfig(options) {

FILE: lib/core/utils/process-message.js
  function substitute (line 10) | function substitute(str, data) {
  function processMessage (line 35) | function processMessage(message, data) {

FILE: lib/core/utils/publish-metadata.js
  function publishMetaData (line 12) | function publishMetaData(ruleResult) {
  function getIncompleteReason (line 37) | function getIncompleteReason(checkData, messages) {
  function extender (line 76) | function extender(checksData, shouldBeTrue, rule) {

FILE: lib/core/utils/query-selector-all-filter.js
  function createLocalVariables (line 5) | function createLocalVariables(
  function matchExpressions (line 23) | function matchExpressions(domTree, expressions, filter) {
  function querySelectorAllFilter (line 129) | function querySelectorAllFilter(domTree, selector, filter) {

FILE: lib/core/utils/query-selector-all.js
  function querySelectorAll (line 11) | function querySelectorAll(domTree, selector) {

FILE: lib/core/utils/queue.js
  function noop (line 3) | function noop() {}
  function funcGuard (line 4) | function funcGuard(f) {
  function queue (line 14) | function queue() {

FILE: lib/core/utils/respondable.js
  function respondable (line 18) | function respondable(
  function messageListener (line 40) | function messageListener(data, responder) {

FILE: lib/core/utils/rule-error.js
  class RuleError (line 3) | class RuleError extends Error {
    method constructor (line 4) | constructor({ error, ruleId, method, errorNode }) {

FILE: lib/core/utils/rule-should-run.js
  function matchTags (line 8) | function matchTags(rule, runOnly) {
  function ruleShouldRun (line 57) | function ruleShouldRun(rule, context, options) {

FILE: lib/core/utils/select.js
  function select (line 11) | function select(selector, context) {
  function getOuterIncludes (line 47) | function getOuterIncludes(includes) {
  function getContextFilter (line 63) | function getContextFilter(context) {
  function mergeArrayUniques (line 78) | function mergeArrayUniques(arr1, arr2) {

FILE: lib/core/utils/selector-cache.js
  function getNodesMatchingExpression (line 15) | function getNodesMatchingExpression(domTree, expressions, filter) {
  function findMatchingNodes (line 77) | function findMatchingNodes(expression, selectorMap, shadowId) {
  function isGlobalSelector (line 156) | function isGlobalSelector(expression) {
  function getSharedValues (line 171) | function getSharedValues(a, b) {
  function cacheSelector (line 181) | function cacheSelector(key, vNode, map) {
  function cacheNodeSelectors (line 192) | function cacheNodeSelectors(vNode, selectorMap) {

FILE: lib/core/utils/send-command-to-frame.js
  function sendCommandToFrame (line 11) | function sendCommandToFrame(node, parameters, resolve, reject) {
  function callAxeStart (line 46) | function callAxeStart(node, parameters, resolve, reject) {
  function err (line 65) | function err(message, node) {

FILE: lib/core/utils/serialize-error.js
  function serializeError (line 8) | function serializeError(err, iteration = 0) {

FILE: lib/core/utils/set-scroll-state.js
  function setScroll (line 4) | function setScroll(elm, top, left) {
  function setScrollState (line 17) | function setScrollState(scrollState) {

FILE: lib/core/utils/shadow-select-all.js
  function shadowSelectAll (line 9) | function shadowSelectAll(selectors, doc = document) {
  function selectAllRecursive (line 19) | function selectAllRecursive([selectorStr, ...restSelector], doc) {

FILE: lib/core/utils/shadow-select.js
  function shadowSelect (line 9) | function shadowSelect(selectors) {
  function selectRecursive (line 16) | function selectRecursive(selectors, doc) {

FILE: lib/core/utils/to-array.js
  function toArray (line 6) | function toArray(thing) {

FILE: lib/core/utils/token-list.js
  function tokenList (line 8) | function tokenList(str) {

FILE: lib/core/utils/unique-array.js
  function uniqueArray (line 7) | function uniqueArray(arr1, arr2) {

FILE: lib/core/utils/uuid.js
  function parse (line 54) | function parse(s, buf, offset) {
  function unparse (line 75) | function unparse(buf, offset) {
  function v1 (line 128) | function v1(options, buf, offset) {
  function v4 (line 206) | function v4(options, buf, offset) {

FILE: lib/core/utils/valid-input-type.js
  function validInputTypes (line 7) | function validInputTypes() {

FILE: lib/core/utils/valid-langs.js
  function isValidLang (line 63) | function isValidLang(lang) {
  function validLangs (line 88) | function validLangs(langArray) {

FILE: lib/rules/aria-allowed-attr-matches.js
  function ariaAllowedAttrMatches (line 1) | function ariaAllowedAttrMatches(node, virtualNode) {

FILE: lib/rules/aria-allowed-role-matches.js
  function ariaAllowedRoleMatches (line 3) | function ariaAllowedRoleMatches(node, virtualNode) {

FILE: lib/rules/aria-has-attr-matches.js
  function ariaHasAttrMatches (line 1) | function ariaHasAttrMatches(node, virtualNode) {

FILE: lib/rules/aria-hidden-focus-matches.js
  function shouldMatchElement (line 8) | function shouldMatchElement(el) {
  function ariaHiddenFocusMatches (line 18) | function ariaHiddenFocusMatches(node) {

FILE: lib/rules/aria-required-children-matches.js
  function ariaRequiredChildrenMatches (line 3) | function ariaRequiredChildrenMatches(node, virtualNode) {

FILE: lib/rules/aria-required-parent-matches.js
  function ariaRequiredParentMatches (line 3) | function ariaRequiredParentMatches(node, virtualNode) {

FILE: lib/rules/autocomplete-matches.js
  function autocompleteMatches (line 7) | function autocompleteMatches(node, virtualNode) {

FILE: lib/rules/bypass-matches.js
  function bypassMatches (line 3) | function bypassMatches(node, virtualNode, context) {

FILE: lib/rules/color-contrast-matches.js
  function colorContrastMatches (line 20) | function colorContrastMatches(node, virtualNode) {
  function hasRealTextChildren (line 182) | function hasRealTextChildren(virtualNode) {

FILE: lib/rules/data-table-large-matches.js
  function dataTableLargeMatches (line 3) | function dataTableLargeMatches(node) {

FILE: lib/rules/data-table-matches.js
  function dataTableMatches (line 3) | function dataTableMatches(node) {

FILE: lib/rules/duplicate-id-active-matches.js
  function duplicateIdActiveMatches (line 5) | function duplicateIdActiveMatches(node) {

FILE: lib/rules/duplicate-id-aria-matches.js
  function duplicateIdAriaMatches (line 3) | function duplicateIdAriaMatches(node) {

FILE: lib/rules/duplicate-id-misc-matches.js
  function duplicateIdMiscMatches (line 5) | function duplicateIdMiscMatches(node) {

FILE: lib/rules/frame-focusable-content-matches.js
  function frameFocusableContentMatches (line 1) | function frameFocusableContentMatches(node, virtualNode, context) {

FILE: lib/rules/frame-title-has-text-matches.js
  function frameTitleHasTextMatches (line 3) | function frameTitleHasTextMatches(node) {

FILE: lib/rules/has-implicit-chromium-role-matches.js
  function hasImplicitChromiumRoleMatches (line 3) | function hasImplicitChromiumRoleMatches(node, virtualNode) {

FILE: lib/rules/heading-matches.js
  function headingMatches (line 3) | function headingMatches(node, virtualNode) {

FILE: lib/rules/html-namespace-matches.js
  function htmlNamespaceMatches (line 3) | function htmlNamespaceMatches(node, virtualNode) {

FILE: lib/rules/identical-links-same-purpose-matches.js
  function identicalLinksSamePurposeMatches (line 4) | function identicalLinksSamePurposeMatches(node, virtualNode) {

FILE: lib/rules/inserted-into-focus-order-matches.js
  function insertedIntoFocusOrderMatches (line 3) | function insertedIntoFocusOrderMatches(node) {

FILE: lib/rules/is-initiator-matches.js
  function isInitiatorMatches (line 1) | function isInitiatorMatches(node, virtualNode, context) {

FILE: lib/rules/is-visible-matches.js
  function hasVisibleTextMatches (line 4) | function hasVisibleTextMatches(node) {

FILE: lib/rules/is-visible-on-screen-matches.js
  function isVisibleOnScreenMatches (line 3) | function isVisibleOnScreenMatches(node, virtualNode) {

FILE: lib/rules/label-content-name-mismatch-matches.js
  function labelContentNameMismatchMatches (line 8) | function labelContentNameMismatchMatches(node, virtualNode) {

FILE: lib/rules/label-matches.js
  function labelMatches (line 1) | function labelMatches(node, virtualNode) {

FILE: lib/rules/landmark-has-body-context-matches.js
  function landmarkHasBodyContextMatches (line 3) | function landmarkHasBodyContextMatches(node, virtualNode) {

FILE: lib/rules/landmark-unique-matches.js
  function landmarkUniqueMatches (line 6) | function landmarkUniqueMatches(node, virtualNode) {
  function isLandmarkVirtual (line 12) | function isLandmarkVirtual(vNode) {

FILE: lib/rules/layout-table-matches.js
  function dataTableMatches (line 4) | function dataTableMatches(node) {

FILE: lib/rules/link-in-text-block-matches.js
  function linkInTextBlockMatches (line 5) | function linkInTextBlockMatches(node) {

FILE: lib/rules/nested-interactive-matches.js
  function nestedInteractiveMatches (line 4) | function nestedInteractiveMatches(node, virtualNode) {

FILE: lib/rules/no-autoplay-audio-matches.js
  function noAutoplayAudioMatches (line 1) | function noAutoplayAudioMatches(node) {

FILE: lib/rules/no-empty-role-matches.js
  function noEmptyRoleMatches (line 1) | function noEmptyRoleMatches(node, virtualNode) {

FILE: lib/rules/no-explicit-name-required-matches.js
  function noExplicitNameRequired (line 8) | function noExplicitNameRequired(node, virtualNode) {

FILE: lib/rules/no-naming-method-matches.js
  function noNamingMethodMatches (line 9) | function noNamingMethodMatches(node, virtualNode) {

FILE: lib/rules/no-negative-tabindex-matches.js
  function noNegativeTabindexMatches (line 3) | function noNegativeTabindexMatches(node, virtualNode) {

FILE: lib/rules/no-role-matches.js
  function noRoleMatches (line 1) | function noRoleMatches(node, vNode) {

FILE: lib/rules/not-html-matches.js
  function notHtmlMatches (line 4) | function notHtmlMatches(node, virtualNode) {

FILE: lib/rules/object-is-loaded-matches.js
  function objectHasLoaded (line 13) | function objectHasLoaded(node) {

FILE: lib/rules/p-as-heading-matches.js
  function pAsHeadingMatches (line 1) | function pAsHeadingMatches(node) {

FILE: lib/rules/presentation-role-conflict-matches.js
  function presentationRoleConflictMatches (line 6) | function presentationRoleConflictMatches(node, virtualNode) {

FILE: lib/rules/scrollable-region-focusable-matches.js
  function scrollableRegionFocusableMatches (line 7) | function scrollableRegionFocusableMatches(node, virtualNode) {
  function isNonEmptyElementOutsideViewableRect (line 18) | function isNonEmptyElementOutsideViewableRect(vNode) {
  function getContentRects (line 45) | function getContentRects(vNode) {

FILE: lib/rules/skip-link-matches.js
  function skipLinkMatches (line 3) | function skipLinkMatches(node) {

FILE: lib/rules/summary-interactive-matches.js
  function summaryIsInteractiveMatches (line 1) | function summaryIsInteractiveMatches(_, virtualNode) {
  function isSlottedElm (line 17) | function isSlottedElm(vNode) {

FILE: lib/rules/svg-namespace-matches.js
  function svgNamespaceMatches (line 3) | function svgNamespaceMatches(node, virtualNode) {

FILE: lib/rules/table-or-grid-role-matches.js
  function tableOrGridRoleMatches (line 3) | function tableOrGridRoleMatches(_, vNode) {

FILE: lib/rules/widget-not-inline-matches.js
  function widgetNotInline (line 6) | function widgetNotInline(node, vNode) {
  function isWidgetType (line 20) | function isWidgetType(vNode) {
  function isNotAreaElement (line 24) | function isNotAreaElement(vNode) {

FILE: lib/rules/window-is-top-matches.js
  function windowIsTopMatches (line 2) | function windowIsTopMatches(node) {

FILE: lib/rules/xml-lang-mismatch-matches.js
  function xmlLangMismatchMatches (line 3) | function xmlLangMismatchMatches(node) {

FILE: lib/standards/index.js
  function configureStandards (line 23) | function configureStandards(config) {
  function resetStandards (line 31) | function resetStandards() {

FILE: test/checks/aria/aria-conditional-attr.js
  function asIndeterminateVirtualNode (line 230) | function asIndeterminateVirtualNode(html) {

FILE: test/checks/color/link-in-text-block-style.js
  function createStyleString (line 37) | function createStyleString(selector, outerStyle) {
  function getLinkElm (line 74) | function getLinkElm(linkStyle) {

FILE: test/checks/color/link-in-text-block.js
  function createStyleString (line 32) | function createStyleString(selector, outerStyle) {
  function getLinkElm (line 69) | function getLinkElm(linkStyle, paragraphStyle) {

FILE: test/checks/forms/autocomplete-appropriate.js
  function autocompleteCheckParams (line 18) | function autocompleteCheckParams(term, type, options) {

FILE: test/checks/landmarks/landmark-is-unique-after.js
  function createResult (line 5) | function createResult(result, data) {
  function createResultWithSameRelatedNodes (line 12) | function createResultWithSameRelatedNodes(result, data) {
  function createResultWithProvidedRelatedNodes (line 18) | function createResultWithProvidedRelatedNodes(result, data, relatedNodes) {

FILE: test/checks/mobile/css-orientation-lock.js
  function getSheet (line 14) | function getSheet(data) {

FILE: test/checks/mobile/target-size.js
  function elmIds (line 8) | function elmIds(elms) {

FILE: test/commons/aria/get-accessible-refs.js
  function setLookup (line 8) | function setLookup(attrs) {

FILE: test/commons/aria/is-accessible-ref.js
  function setLookup (line 8) | function setLookup(attrs) {

FILE: test/commons/aria/validate-attr-value.js
  function setAttr (line 6) | function setAttr(elm, attrName, attrValue) {
  function makeShadowTreeVAV (line 507) | function makeShadowTreeVAV(node) {
  function createContentVAV (line 516) | function createContentVAV() {

FILE: test/commons/color/element-is-distinct.js
  function createStyleString (line 17) | function createStyleString(selector, outerStyle) {
  function getLinkElm (line 54) | function getLinkElm(linkStyle, paragraphStyle) {

FILE: test/commons/color/get-background-color.js
  function assertColorsClose (line 15) | function assertColorsClose(

FILE: test/commons/color/get-foreground-color.js
  function assertSameColor (line 5) | function assertSameColor(actual, expected, margin = 0) {

FILE: test/commons/dom/create-grid.js
  function findPositions (line 10) | function findPositions(grid, vNode) {

FILE: test/commons/dom/find-nearby-elms.js
  function getIds (line 6) | function getIds(vNodeList) {

FILE: test/commons/dom/find-up.js
  function createContentSlotted (line 48) | function createContentSlotted() {
  function makeShadowTree (line 54) | function makeShadowTree(node) {
  function createContent (line 75) | function createContent() {
  function makeShadowTree (line 80) | function makeShadowTree(node) {
  function createContentSlotted (line 118) | function createContentSlotted() {
  function makeShadowTree (line 124) | function makeShadowTree(node) {
  function createContentSlotted (line 145) | function createContentSlotted() {
  function makeShadowTree (line 152) | function makeShadowTree(node) {
  function createContent (line 172) | function createContent() {
  function makeShadowTree (line 177) | function makeShadowTree(node) {

FILE: test/commons/dom/get-element-stack.js
  function mapToIDs (line 8) | function mapToIDs(stack) {

FILE: test/commons/dom/get-overflow-hidden-ancestors.js
  function ids (line 5) | function ids(vNodes) {

FILE: test/commons/dom/get-text-element-stack.js
  function mapToIDs (line 7) | function mapToIDs(stack) {

FILE: test/commons/dom/get-visible-child-text-rects.js
  function getClientRects (line 10) | function getClientRects(node) {
  function assertRectsEqual (line 21) | function assertRectsEqual(actualRects, expectedRects) {

FILE: test/commons/dom/idrefs.js
  function createContentIDR (line 1) | function createContentIDR() {
  function makeShadowTreeIDR (line 8) | function makeShadowTreeIDR(node) {

FILE: test/commons/dom/inserted-into-focus-order.js
  function hideByClipping (line 6) | function hideByClipping(el) {
  function hideByMovingOffScreen (line 13) | function hideByMovingOffScreen(el) {

FILE: test/commons/dom/is-hidden-for-everyone.js
  function createContentSlotted (line 10) | function createContentSlotted(mainProps, targetProps) {
  function makeShadowTree (line 21) | function makeShadowTree(node, mainProps, targetProps) {

FILE: test/commons/dom/is-hidden-with-css.js
  function createContentSlotted (line 10) | function createContentSlotted(mainProps, targetProps) {
  function makeShadowTree (line 21) | function makeShadowTree(node, mainProps, targetProps) {

FILE: test/commons/dom/is-natively-focusable.js
  function hideByClipping (line 6) | function hideByClipping(el) {
  function hideByMovingOffScreen (line 13) | function hideByMovingOffScreen(el) {

FILE: test/commons/dom/is-visible-on-screen.js
  function createContentSlotted (line 344) | function createContentSlotted() {
  function makeShadowTree (line 349) | function makeShadowTree(node) {
  function createContentSlotted (line 365) | function createContentSlotted() {
  function makeShadowTree (line 371) | function makeShadowTree(node) {

FILE: test/commons/dom/is-visible-to-screenreader.js
  function createContentHidden (line 9) | function createContentHidden() {
  function makeShadowTreeHidden (line 16) | function makeShadowTreeHidden(node) {
  function createContentSlotted (line 195) | function createContentSlotted() {
  function makeShadowTree (line 201) | function makeShadowTree(node) {

FILE: test/commons/dom/is-visible.js
  function createContentSlotted (line 361) | function createContentSlotted() {
  function makeShadowTree (line 366) | function makeShadowTree(node) {
  function createContentSlotted (line 382) | function createContentSlotted() {
  function makeShadowTree (line 388) | function makeShadowTree(node) {

FILE: test/commons/matches/from-definition.js
  function condition (line 374) | function condition() {

FILE: test/commons/matches/from-function.js
  function noop (line 3) | function noop() {}
  function getValue (line 31) | function getValue(key) {
  function getValueOnce (line 37) | function getValueOnce(key) {

FILE: test/commons/table/get-headers.js
  function $id (line 3) | function $id(id) {

FILE: test/commons/table/get-scope.js
  function $id (line 4) | function $id(id) {

FILE: test/commons/table/to-grid.js
  function $id (line 3) | function $id(id) {

FILE: test/commons/text/form-control-value.js
  function getNodeType (line 6) | function getNodeType(node) {

FILE: test/commons/text/visible-text-nodes.js
  function createContentSlotted (line 90) | function createContentSlotted() {
  function makeShadowTree (line 95) | function makeShadowTree(node) {

FILE: test/commons/text/visible-virtual.js
  function createContentSlotted (line 83) | function createContentSlotted() {
  function makeShadowTree (line 88) | function makeShadowTree(node) {

FILE: test/core/base/cache.js
  function fn (line 6) | function fn() {
  function fn (line 13) | function fn() {
  function fn (line 103) | function fn() {
  function fn (line 110) | function fn() {

FILE: test/core/base/check.js
  method evaluate (line 72) | evaluate() {
  method evaluate (line 77) | evaluate() {
  method after (line 89) | after() {
  method after (line 94) | after() {
  function fn (line 134) | function fn() {
  function fn (line 145) | function fn() {
  method evaluate (line 195) | evaluate(node) {
  method evaluate (line 207) | evaluate(node, options) {
  method evaluate (line 220) | evaluate(node, options) {
  method evaluate (line 240) | evaluate(node, options) {
  method evaluate (line 255) | evaluate(node, options, virtualNode, context) {
  method evaluate (line 266) | evaluate(node, options, virtualNode) {
  method evaluate (line 289) | evaluate() {
  method evaluate (line 300) | evaluate() {
  method evaluate (line 315) | evaluate() {}
  method evaluate (line 325) | evaluate() {}
  method evaluate (line 341) | evaluate() {
  method evaluate (line 353) | evaluate() {
  method evaluate (line 371) | evaluate(node) {
  method evaluate (line 382) | evaluate(node, options) {
  method evaluate (line 394) | evaluate(node, options) {
  method evaluate (line 413) | evaluate(node, options) {
  method evaluate (line 428) | evaluate(node, options, virtualNode, context) {
  method evaluate (line 438) | evaluate(node, options, virtualNode) {
  method evaluate (line 449) | evaluate() {
  method evaluate (line 467) | evaluate() {}
  method evaluate (line 476) | evaluate() {}
  method evaluate (line 489) | evaluate() {
  method evaluate (line 500) | evaluate() {
  method after (line 560) | after() {}
  method evaluate (line 602) | evaluate() {}
  method evaluate (line 611) | evaluate() {}

FILE: test/core/base/context.js
  function $id (line 7) | function $id(id) {
  function iframeReady (line 454) | function iframeReady(src, context, id, cb, done) {

FILE: test/core/base/rule.js
  function fn (line 2237) | function fn() {

FILE: test/core/base/virtual-node/abstract-virtual-node.js
  function fn (line 7) | function fn() {
  function fn (line 18) | function fn() {
  function fn (line 27) | function fn() {
  function fn (line 38) | function fn() {
  function fn (line 49) | function fn() {

FILE: test/core/base/virtual-node/virtual-node.js
  method get (line 68) | get() {

FILE: test/core/public/cleanup.js
  function createFrames (line 5) | function createFrames(callback) {

FILE: test/core/public/finish-run.js
  function createIframe (line 250) | function createIframe(html, parent) {

FILE: test/core/public/plugins.js
  function createFrames (line 2) | function createFrames(callback) {

FILE: test/core/public/run-rules.js
  function iframeReady (line 5) | function iframeReady(src, context, id, cb) {
  function createFrames (line 15) | function createFrames(url, callback) {
  method evaluate (line 150) | evaluate(node) {
  method after (line 154) | after(results) {
  method evaluate (line 398) | evaluate(node) {
  method after (line 402) | after(results) {
  method fail (line 426) | fail(checkResult) {
  method pass (line 431) | pass(checkResult) {
  method fail (line 442) | fail(checkResult) {
  method pass (line 447) | pass(checkResult) {
  function resolve (line 723) | function resolve() {
  function reject (line 731) | function reject() {
  function invalid (line 781) | function invalid() {

FILE: test/core/public/run-virtual-rule.js
  function fn (line 28) | function fn() {

FILE: test/core/public/setup.js
  function fn (line 41) | function fn() {

FILE: test/core/reporters/helpers/process-aggregate.js
  method get (line 222) | get() {
  method get (line 323) | get() {
  method get (line 389) | get() {
  method get (line 454) | get() {

FILE: test/core/reporters/raw-env.js
  function createDqElement (line 6) | function createDqElement() {

FILE: test/core/reporters/raw.js
  function createDqElement (line 6) | function createDqElement() {

FILE: test/core/utils/aggregateChecks.js
  function createTestCheckResults (line 10) | function createTestCheckResults(node) {

FILE: test/core/utils/aggregateNodeResults.js
  function createTestResults (line 10) | function createTestResults() {

FILE: test/core/utils/check-helper.js
  function noop (line 3) | function noop() {}
  function fn (line 28) | function fn() {
  function reject (line 42) | function reject(e) {

FILE: test/core/utils/clone.js
  function Cat (line 79) | function Cat(name) {

FILE: test/core/utils/closest.js
  function fn (line 49) | function fn() {
  function fn (line 60) | function fn() {

FILE: test/core/utils/collect-results-from-frames.js
  function contextSetup (line 9) | function contextSetup(scope) {

FILE: test/core/utils/element-matches.js
  function mockMethod (line 5) | function mockMethod(method, returnValue) {

FILE: test/core/utils/flattened-tree.js
  function createStyle (line 6) | function createStyle(box) {
  function flattenedTreeAssertions (line 15) | function flattenedTreeAssertions() {
  function shadowIdAssertions (line 53) | function shadowIdAssertions() {
  function createStoryGroup (line 118) | function createStoryGroup(className, contentSelector) {
  function makeShadowTree (line 126) | function makeShadowTree(storyList) {
  function createStoryGroup (line 166) | function createStoryGroup(className, slotName) {
  function makeShadowTree (line 177) | function makeShadowTree(storyList) {
  function createStoryGroup (line 237) | function createStoryGroup(className, slotName) {
  function makeShadowTree (line 248) | function makeShadowTree(storyList) {
  function createStoryGroup (line 278) | function createStoryGroup(className, slotName) {
  function makeShadowTree (line 289) | function makeShadowTree(storyList) {

FILE: test/core/utils/frame-messenger/subscribe.js
  function afterMessage (line 1) | function afterMessage(win, callback) {
  function once (line 12) | function once(callback) {

FILE: test/core/utils/get-root-node.js
  function makeShadowTreeGRN (line 1) | function makeShadowTreeGRN(node) {

FILE: test/core/utils/get-selector.js
  function createContentGetSelector (line 1) | function createContentGetSelector() {
  function makeShadowTreeGetSelector (line 9) | function makeShadowTreeGetSelector(node) {
  function makeNonunique (line 18) | function makeNonunique(fixture) {
  function makeNonuniqueLongAttributes (line 29) | function makeNonuniqueLongAttributes(fixture) {

FILE: test/core/utils/get-shadow-selector.js
  function generator (line 6) | function generator(node) {
  function generatorFn (line 26) | function generatorFn(arg1, arg2) {
  function generatorFn (line 39) | function generatorFn(_, arg2) {

FILE: test/core/utils/get-xpath.js
  function getElementByXPath (line 7) | function getElementByXPath(path) {

FILE: test/core/utils/is-hidden.js
  function createContentHidden (line 1) | function createContentHidden() {
  function makeShadowTreeHidden (line 9) | function makeShadowTreeHidden(node) {
  function createContentSlotted (line 108) | function createContentSlotted() {
  function makeShadowTree (line 114) | function makeShadowTree(node) {

FILE: test/core/utils/is-shadow-root.js
  function createStyle (line 7) | function createStyle(box) {
  function createStoryGroup (line 47) | function createStoryGroup(className, slotName) {
  function makeShadowTree (line 58) | function makeShadowTree(storyList) {

FILE: test/core/utils/node-serializer.js
  method toSpec (line 21) | toSpec(dqElm) {
  method toSpec (line 43) | toSpec(dqElm) {
  method mergeSpecs (line 141) | mergeSpecs(childSpec, parentSpec) {

FILE: test/core/utils/node-sorter.js
  function $id (line 4) | function $id(id) {

FILE: test/core/utils/preload-cssom.js
  function addStyleToHead (line 12) | function addStyleToHead() {
  function removeStyleFromHead (line 22) | function removeStyleFromHead() {

FILE: test/core/utils/qsa.js
  function setShadowId (line 1) | function setShadowId(vNode, shadowId) {
  function getTestDom (line 8) | function getTestDom() {

FILE: test/core/utils/selector-cache.js
  function createTree (line 88) | function createTree() {
  function filter (line 270) | function filter(node) {

FILE: test/core/utils/shadow-select-all.js
  function addShadowTree (line 34) | function addShadowTree(host, html) {

FILE: test/core/utils/shadow-select.js
  function appendShadowTree (line 38) | function appendShadowTree(parentNode, nodeName) {

FILE: test/integration/adapter.js
  function flattenTitles (line 3) | function flattenTitles(test) {

FILE: test/integration/api/external/index.js
  function isElement (line 130) | function isElement(el) {
  function random (line 134) | function random(fromArr) {
  function randomNodeInTree (line 143) | function randomNodeInTree(filter) {
  function randomElement (line 147) | function randomElement(filter) {
  function collectNodes (line 152) | function collectNodes() {
  function flat (line 177) | function flat(tree) {
  function isTrue (line 189) | function isTrue() {
  function getEntries (line 193) | function getEntries(obj) {
  function getValues (line 204) | function getValues(obj) {
  function getKeys (line 210) | function getKeys(obj) {

FILE: test/integration/full/async/async.js
  function AsyncCheck (line 5) | function AsyncCheck(node) {

FILE: test/integration/full/configuration/tag-exclude.js
  function findResult (line 46) | function findResult(results, ruleId) {

FILE: test/integration/full/contrast/code-highlighting.js
  function run (line 5) | function run(done) {

FILE: test/integration/full/contrast/prototype-lib-1.7.3.js
  function subclass (line 74) | function subclass() {}
  function create (line 75) | function create() {
  function addMethods (line 104) | function addMethods(source) {
  function Type (line 193) | function Type(o) {
  function extend (line 212) | function extend(destination, source) {
  function inspect (line 217) | function inspect(object) {
  function toJSON (line 228) | function toJSON(value) {
  function Str (line 232) | function Str(key, holder, stack) {
  function stringify (line 295) | function stringify(object) {
  function toQueryString (line 299) | function toQueryString(object) {
  function toHTML (line 303) | function toHTML(object) {
  function keys (line 307) | function keys(object) {
  function values (line 325) | function values(object) {
  function clone (line 331) | function clone(object) {
  function isElement (line 335) | function isElement(object) {
  function isArray (line 339) | function isArray(object) {
  function isHash (line 352) | function isHash(object) {
  function isFunction (line 356) | function isFunction(object) {
  function isString (line 360) | function isString(object) {
  function isNumber (line 364) | function isNumber(object) {
  function isDate (line 368) | function isDate(object) {
  function isUndefined (line 372) | function isUndefined(object) {
  function update (line 400) | function update(array, args) {
  function merge (line 407) | function merge(array, args) {
  function argumentNames (line 412) | function argumentNames() {
  function bind (line 421) | function bind(context) {
  function bindAsEventListener (line 443) | function bindAsEventListener(context) {
  function curry (line 452) | function curry() {
  function delay (line 462) | function delay(timeout) {
  function defer (line 471) | function defer() {
  function wrap (line 476) | function wrap(wrapper) {
  function methodize (line 484) | function methodize() {
  function toISOString (line 510) | function toISOString() {
  function toJSON (line 527) | function toJSON() {
  function prepareReplacement (line 601) | function prepareReplacement(replacement) {
  function isNonEmptyRegExp (line 609) | function isNonEmptyRegExp(regexp) {
  function gsub (line 613) | function gsub(pattern, replacement) {
  function sub (line 639) | function sub(pattern, replacement, count) {
  function scan (line 649) | function scan(pattern, iterator) {
  function truncate (line 654) | function truncate(length, truncation) {
  function strip (line 662) | function strip() {
  function stripTags (line 666) | function stripTags() {
  function stripScripts (line 673) | function stripScripts() {
  function extractScripts (line 677) | function extractScripts() {
  function evalScripts (line 685) | function evalScripts() {
  function escapeHTML (line 691) | function escapeHTML() {
  function unescapeHTML (line 697) | function unescapeHTML() {
  function toQueryParams (line 704) | function toQueryParams(separator) {
  function toArray (line 727) | function toArray() {
  function succ (line 731) | function succ() {
  function times (line 738) | function times(count) {
  function camelize (line 742) | function camelize() {
  function capitalize (line 748) | function capitalize() {
  function underscore (line 752) | function underscore() {
  function dasherize (line 760) | function dasherize() {
  function inspect (line 764) | function inspect(useDoubleQuotes) {
  function unfilterJSON (line 776) | function unfilterJSON(filter) {
  function isJSON (line 780) | function isJSON() {
  function evalJSON (line 792) | function evalJSON(sanitize) {
  function parseJSON (line 807) | function parseJSON() {
  function include (line 812) | function include(pattern) {
  function startsWith (line 816) | function startsWith(pattern, position) {
  function endsWith (line 821) | function endsWith(pattern, position) {
  function empty (line 830) | function empty() {
  function blank (line 834) | function blank() {
  function interpolate (line 838) | function interpolate(object, pattern) {
  function each (line 921) | function each(iterator, context) {
  function eachSlice (line 930) | function eachSlice(number, iterator, context) {
  function all (line 940) | function all(iterator, context) {
  function any (line 950) | function any(iterator, context) {
  function collect (line 959) | function collect(iterator, context) {
  function detect (line 968) | function detect(iterator, context) {
  function findAll (line 979) | function findAll(iterator, context) {
  function grep (line 987) | function grep(filter, iterator, context) {
  function include (line 1000) | function include(object) {
  function inGroupsOf (line 1014) | function inGroupsOf(number, fillWith) {
  function inject (line 1022) | function inject(memo, iterator, context) {
  function invoke (line 1029) | function invoke(method) {
  function max (line 1036) | function max(iterator, context) {
  function min (line 1046) | function min(iterator, context) {
  function partition (line 1056) | function partition(iterator, context) {
  function pluck (line 1066) | function pluck(property) {
  function reject (line 1074) | function reject(iterator, context) {
  function sortBy (line 1082) | function sortBy(iterator, context) {
  function toArray (line 1097) | function toArray() {
  function zip (line 1101) | function zip() {
  function size (line 1112) | function size() {
  function inspect (line 1116) | function inspect() {
  function $A (line 1154) | function $A(iterable) {
  function $w (line 1163) | function $w(string) {
  function each (line 1176) | function each(iterator, context) {
  function clear (line 1183) | function clear() {
  function first (line 1188) | function first() {
  function last (line 1192) | function last() {
  function compact (line 1196) | function compact() {
  function flatten (line 1202) | function flatten() {
  function without (line 1210) | function without() {
  function reverse (line 1217) | function reverse(inline) {
  function uniq (line 1221) | function uniq(sorted) {
  function intersect (line 1232) | function intersect(array) {
  function clone (line 1238) | function clone() {
  function size (line 1242) | function size() {
  function inspect (line 1246) | function inspect() {
  function indexOf (line 1250) | function indexOf(item, i) {
  function lastIndexOf (line 1271) | function lastIndexOf(item, i) {
  function concat (line 1295) | function concat(_) {
  function wrapNative (line 1316) | function wrapNative(method) {
  function map (line 1330) | function map(iterator) {
  function filter (line 1353) | function filter(iterator) {
  function some (line 1376) | function some(iterator) {
  function every (line 1395) | function every(iterator) {
  function $H (line 1459) | function $H(object) {
  function initialize (line 1466) | function initialize(object) {
  function _each (line 1472) | function _each(iterator, context) {
  function set (line 1484) | function set(key, value) {
  function get (line 1488) | function get(key) {
  function unset (line 1492) | function unset(key) {
  function toObject (line 1498) | function toObject() {
  function keys (line 1502) | function keys() {
  function values (line 1506) | function values() {
  function index (line 1510) | function index(value) {
  function merge (line 1517) | function merge(object) {
  function update (line 1521) | function update(object) {
  function toQueryPair (line 1528) | function toQueryPair(key, value) {
  function toQueryString (line 1539) | function toQueryString() {
  function inspect (line 1558) | function inspect() {
  function clone (line 1568) | function clone() {
  function toColorPart (line 1597) | function toColorPart() {
  function succ (line 1601) | function succ() {
  function times (line 1605) | function times(iterator, context) {
  function toPaddedString (line 1610) | function toPaddedString(length, radix) {
  function abs (line 1615) | function abs() {
  function round (line 1619) | function round() {
  function ceil (line 1623) | function ceil() {
  function floor (line 1627) | function floor() {
  function $R (line 1644) | function $R(start, end, exclusive) {
  function initialize (line 1651) | function initialize(start, end, exclusive) {
  function _each (line 1657) | function _each(iterator, context) {
  function include (line 1666) | function include(value) {
  function $ (line 2155) | function $(element) {
  function shouldUseCreationCache (line 2189) | function shouldUseCreationCache(tagName, attributes) {
  function Element (line 2205) | function Element(tagName, attributes) {
  function inspect (line 2238) | function inspect(element) {
  function visible (line 2254) | function visible(element) {
  function toggle (line 2258) | function toggle(element, bool) {
  function hide (line 2266) | function hide(element) {
  function show (line 2272) | function show(element) {
  function remove (line 2285) | function remove(element) {
  function update (line 2346) | function update(element, content) {
  function replace (line 2399) | function replace(element, content) {
  function replace_IE (line 2447) | function replace_IE(element, content) {
  function isContent (line 2489) | function isContent(content) {
  function insertContentAt (line 2499) | function insertContentAt(element, content, position) {
  function insert (line 2528) | function insert(element, insertions) {
  function wrap (line 2539) | function wrap(element, wrapper, attributes) {
  function cleanWhitespace (line 2557) | function cleanWhitespace(element) {
  function empty (line 2570) | function empty(element) {
  function getContentFromAnonymousElement (line 2574) | function getContentFromAnonymousElement(tagName, html, force) {
  function clone (line 2595) | function clone(element, deep) {
  function purgeElement (line 2609) | function purgeElement(element) {
  function purgeCollection (line 2618) | function purgeCollection(elements) {
  function purgeCollection_IE (line 2623) | function purgeCollection_IE(elements) {
  function purge (line 2639) | function purge(element) {
  function recursivelyCollect (line 2663) | function recursivelyCollect(element, property, maximumLength) {
  function ancestors (line 2678) | function ancestors(element) {
  function descendants (line 2682) | function descendants(element) {
  function firstDescendant (line 2686) | function firstDescendant(element) {
  function immediateDescendants (line 2694) | function immediateDescendants(element) {
  function previousSiblings (line 2708) | function previousSiblings(element) {
  function nextSiblings (line 2712) | function nextSiblings(element) {
  function siblings (line 2716) | function siblings(element) {
  function match (line 2723) | function match(element, selector) {
  function _recursivelyFind (line 2732) | function _recursivelyFind(element, property, expression, index) {
  function up (line 2750) | function up(element, expression, index) {
  function down (line 2757) | function down(element, expression, index) {
  function previous (line 2769) | function previous(element, expression, index) {
  function next (line 2773) | function next(element, expression, index) {
  function select (line 2777) | function select(element) {
  function adjacent (line 2783) | function adjacent(element) {
  function descendantOf_DOM (line 2795) | function descendantOf_DOM(element, ancestor) {
  function descendantOf_contains (line 2803) | function descendantOf_contains(element, ancestor) {
  function descendantOf_compareDocumentPosition (line 2810) | function descendantOf_compareDocumentPosition(element, ancestor) {
  function identify (line 2849) | function identify(element) {
  function readAttribute (line 2862) | function readAttribute(element, name) {
  function readAttribute_IE (line 2866) | function readAttribute_IE(element, name) {
  function readAttribute_Opera (line 2882) | function readAttribute_Opera(element, name) {
  function writeAttribute (line 2901) | function writeAttribute(element, name, value) {
  function hasAttribute (line 2937) | function hasAttribute(element, attribute) {
  function hasAttribute_IE (line 2943) | function hasAttribute_IE(element, attribute) {
  function classNames (line 2953) | function classNames(element) {
  function getRegExpForClassName (line 2958) | function getRegExpForClassName(className) {
  function hasClassName (line 2966) | function hasClassName(element, className) {
  function addClassName (line 2977) | function addClassName(element, className) {
  function removeClassName (line 2986) | function removeClassName(element, className) {
  function toggleClassName (line 2996) | function toggleClassName(element, className, bool) {
  function _getAttr (line 3024) | function _getAttr(element, attribute) {
  function _getAttr2 (line 3028) | function _getAttr2(element, attribute) {
  function _getAttrNode (line 3032) | function _getAttrNode(element, attribute) {
  function _getFlag (line 3037) | function _getFlag(element, attribute) {
  function normalizeStyleName (line 3159) | function normalizeStyleName(style) {
  function normalizeStyleName_IE (line 3164) | function normalizeStyleName_IE(style) {
  function setStyle (line 3169) | function setStyle(element, styles) {
  function getStyle (line 3200) | function getStyle(element, style) {
  function getStyle_Opera (line 3214) | function getStyle_Opera(element, style) {
  function getStyle_IE (line 3231) | function getStyle_IE(element, style) {
  function stripAlphaFromFilter_IE (line 3254) | function stripAlphaFromFilter_IE(filter) {
  function hasLayout_IE (line 3258) | function hasLayout_IE(element) {
  function setOpacity (line 3269) | function setOpacity(element, value) {
  function setOpacity_IE (line 3277) | function setOpacity_IE(element, value) {
  function getOpacity (line 3299) | function getOpacity(element) {
  function getOpacity_IE (line 3303) | function getOpacity_IE(element) {
  function getUniqueElementID (line 3330) | function getUniqueElementID(element) {
  function getUniqueElementID_IE (line 3338) | function getUniqueElementID_IE(element) {
  function getStorage (line 3347) | function getStorage(element) {
  function store (line 3357) | function store(element, key, value) {
  function retrieve (line 3368) | function retrieve(element, key, defaultValue) {
  function checkElementPrototypeDeficiency (line 3397) | function checkElementPrototypeDeficiency(tagName) {
  function extendElementWith (line 3417) | function extendElementWith(element, methods) {
  function elementIsExtended (line 3426) | function elementIsExtended(element) {
  function extend (line 3431) | function extend(element) {
  function extend_IE8 (line 3446) | function extend_IE8(element) {
  function addMethodsToTagName (line 3463) | function addMethodsToTagName(tagName, methods) {
  function mergeMethods (line 3469) | function mergeMethods(destination, methods, onlyIfAbsent) {
  function findDOMClass (line 3479) | function findDOMClass(tagName) {
  function addMethods (line 3527) | function addMethods(methods) {
  function addFormMethods (line 3590) | function addFormMethods() {
  function destroyCache_IE (line 3604) | function destroyCache_IE() {
  function toDecimal (line 3612) | function toDecimal(pctString) {
  function getRawStyle (line 3618) | function getRawStyle(element, style) {
  function getRawStyle_IE (line 3631) | function getRawStyle_IE(element, style) {
  function getContentWidth (line 3639) | function getContentWidth(element, context) {
  function getPixelValue (line 3657) | function getPixelValue(value, property, context) {
  function toCSSPixels (line 3727) | function toCSSPixels(number) {
  function isDisplayed (line 3732) | function isDisplayed(element) {
  function cssNameFor (line 3753) | function cssNameFor(key) {
  function getLayout (line 4148) | function getLayout(element, preCompute) {
  function measure (line 4152) | function measure(element, property) {
  function getHeight (line 4156) | function getHeight(element) {
  function getWidth (line 4160) | function getWidth(element) {
  function getDimensions (line 4164) | function getDimensions(element) {
  function getOffsetParent (line 4198) | function getOffsetParent(element) {
  function cumulativeOffset (line 4226) | function cumulativeOffset(element) {
  function positionedOffset (line 4240) | function positionedOffset(element) {
  function cumulativeScrollOffset (line 4264) | function cumulativeScrollOffset(element) {
  function viewportOffset (line 4287) | function viewportOffset(forElement) {
  function absolutize (line 4314) | function absolutize(element) {
  function relativize (line 4347) | function relativize(element) {
  function scrollTo (line 4361) | function scrollTo(element) {
  function makePositioned (line 4368) | function makePositioned(element) {
  function undoPositioned (line 4384) | function undoPositioned(element) {
  function makeClipping (line 4402) | function makeClipping(element) {
  function undoClipping (line 4417) | function undoClipping(element) {
  function clonePosition (line 4430) | function clonePosition(element, source, options) {
  function isBody (line 4579) | function isBody(element) {
  function isHtml (line 4583) | function isHtml(element) {
  function isDocument (line 4587) | function isDocument(element) {
  function isDetached (line 4591) | function isDetached(element) {
  function getRootElement (line 4618) | function getRootElement() {
  function getDimensions (line 4624) | function getDimensions() {
  function getWidth (line 4628) | function getWidth() {
  function getHeight (line 4632) | function getHeight() {
  function getScrollOffsets (line 4636) | function getScrollOffsets() {
  function select (line 4662) | function select() {
  function match (line 4666) | function match() {
  function find (line 4670) | function find(elements, expression, index) {
  function extendElements (line 4684) | function extendElements(elements) {
  function fakeDefine (line 4704) | function fakeDefine(fn) {
  function Sizzle (line 4887) | function Sizzle(selector, context, results, seed) {
  function createCache (line 4992) | function createCache() {
  function markFunction (line 5008) | function markFunction(fn) {
  function assert (line 5017) | function assert(fn) {
  function addHandle (line 5037) | function addHandle(attrs, handler) {
  function siblingCheck (line 5052) | function siblingCheck(a, b) {
  function createInputPseudo (line 5079) | function createInputPseudo(type) {
  function createButtonPseudo (line 5090) | function createButtonPseudo(type) {
  function createPositionalPseudo (line 5101) | function createPositionalPseudo(fn) {
  function testContext (line 5123) | function testContext(context) {
  function setFilters (line 6067) | function setFilters() {}
  function tokenize (line 6071) | function tokenize(selector, parseOnly) {
  function toSelector (line 6135) | function toSelector(tokens) {
  function addCombinator (line 6145) | function addCombinator(matcher, combinator, base) {
  function elementMatcher (line 6194) | function elementMatcher(matchers) {
  function multipleContexts (line 6208) | function multipleContexts(selector, contexts, results) {
  function condense (line 6217) | function condense(unmatched, map, filter, context, xml) {
  function setMatcher (line 6238) | function setMatcher(
  function matcherFromTokens (line 6330) | function matcherFromTokens(tokens) {
  function matcherFromGroupMatchers (line 6397) | function matcherFromGroupMatchers(elementMatchers, setMatchers) {
  function select (line 6685) | function select(selector, scope) {
  function match (line 6689) | function match(element, selector) {
  function input (line 6958) | function input(element, value) {
  function inputSelector (line 6968) | function inputSelector(element, value) {
  function valueSelector (line 6974) | function valueSelector(element, value) {
  function select (line 6979) | function select(element, value) {
  function selectOne (line 6998) | function selectOne(element) {
  function selectMany (line 7003) | function selectMany(element) {
  function optionValue (line 7015) | function optionValue(opt) {
  function _isButtonForDOMEvents (line 7157) | function _isButtonForDOMEvents(event, code) {
  function _isButtonForLegacyEvents (line 7162) | function _isButtonForLegacyEvents(event, code) {
  function _isButtonForWebKit (line 7166) | function _isButtonForWebKit(event, code) {
  function isLeftClick (line 7195) | function isLeftClick(event) {
  function isMiddleClick (line 7199) | function isMiddleClick(event) {
  function isRightClick (line 7203) | function isRightClick(event) {
  function element (line 7207) | function element(event) {
  function _element (line 7211) | function _element(event) {
  function findElement (line 7232) | function findElement(event, expression) {
  function pointer (line 7243) | function pointer(event) {
  function pointerX (line 7247) | function pointerX(event) {
  function pointerY (line 7259) | function pointerY(event) {
  function stop (line 7271) | function stop(event) {
  function _relatedTarget (line 7300) | function _relatedTarget(event) {
  function getDOMEventName (line 7366) | function getDOMEventName(eventName) {
  function getUniqueElementID (line 7372) | function getUniqueElementID(element) {
  function getUniqueElementID_IE (line 7380) | function getUniqueElementID_IE(element) {
  function isCustomEvent (line 7388) | function isCustomEvent(eventName) {
  function getOrCreateRegistryFor (line 7394) | function getOrCreateRegistryFor(element, uid) {
  function destroyRegistryForElement (line 7401) | function destroyRegistryForElement(element, uid) {
  function register (line 7406) | function register(element, eventName, handler) {
  function unregister (line 7425) | function unregister(element, eventName, handler) {
  function observe (line 7452) | function observe(element, eventName, handler) {
  function observeStandardEvent (line 7466) | function observeStandardEvent(element, eventName, responder) {
  function observeCustomEvent (line 7475) | function observeCustomEvent(element, eventName, responder) {
  function stopObserving (line 7484) | function stopObserving(element, eventName, handler) {
  function stopObservingStandardEvent (line 7506) | function stopObservingStandardEvent(element, eventName, responder) {
  function stopObservingCustomEvent (line 7515) | function stopObservingCustomEvent(element, eventName, responder) {
  function stopObservingElement (line 7524) | function stopObservingElement(element) {
  function stopObservingEventName (line 7541) | function stopObservingEventName(element, eventName) {
  function removeEvent (line 7561) | function removeEvent(element, eventName, handler) {
  function getFireTarget (line 7567) | function getFireTarget(element) {
  function fire (line 7574) | function fire(element, eventName, memo, bubble) {
  function fireEvent_DOM (line 7583) | function fireEvent_DOM(element, eventName, memo, bubble) {
  function fireEvent_IE (line 7594) | function fireEvent_IE(element, eventName, memo, bubble) {
  function on (line 7632) | function on(element, eventName, selector, callback) {
  function destroyCache_IE (line 7677) | function destroyCache_IE() {
  function isSimulatedMouseEnterLeaveEvent (line 7695) | function isSimulatedMouseEnterLeaveEvent(eventName) {
  function createResponder (line 7702) | function createResponder(uid, eventName, handler) {
  function createResponderForCustomEvent (line 7717) | function createResponderForCustomEvent(uid, eventName, handler) {
  function createMouseEnterLeaveResponder (line 7731) | function createMouseEnterLeaveResponder(uid, eventName, handler) {
  function fireContentLoadedEvent (line 7761) | function fireContentLoadedEvent() {
  function checkReadyState (line 7768) | function checkReadyState() {
  function pollDoScroll (line 7775) | function pollDoScroll() {
  function iter (line 7928) | function iter(name) {

FILE: test/integration/full/css-orientation-lock/violations.js
  function assertViolatedSelectors (line 24) | function assertViolatedSelectors(relatedNodes, violatedSelectors) {

FILE: test/integration/full/dialog/dialog.js
  function getViolations (line 5) | async function getViolations() {

FILE: test/integration/full/frame-wait-time/frame-wait-time.js
  function getTimeoutCall (line 50) | function getTimeoutCall() {

FILE: test/integration/full/isolated-env/isolated-env.js
  function doesNotThrow (line 16) | function doesNotThrow(err, done) {
  function setEmptyReporter (line 29) | function setEmptyReporter() {

FILE: test/integration/full/options-parameter/options-parameter.js
  function $id (line 8) | function $id(id) {

FILE: test/integration/full/patch/patch.mjs
  function resetWindowCSSMock (line 7) | function resetWindowCSSMock() {
  function mockWindowCSS (line 11) | function mockWindowCSS() {

FILE: test/integration/full/preload-cssom/preload-cssom.js
  function attachStylesheets (line 59) | function attachStylesheets(options, callback) {
  function detachStylesheets (line 70) | function detachStylesheets(done) {
  function getPreloadCssom (line 86) | function getPreloadCssom(root) {
  function commonTestsForRootNodeAndNestedFrame (line 91) | function commonTestsForRootNodeAndNestedFrame(root) {

FILE: test/integration/full/preload/preload.js
  function attachStylesheets (line 23) | function attachStylesheets(options, callback) {
  function detachStylesheets (line 34) | function detachStylesheets(done) {
  function getPreload (line 50) | function getPreload(timeout) {
  function customCheckEvalFn (line 157) | function customCheckEvalFn(node, options, virtualNode, context) {

FILE: test/integration/full/serializer/custom-source-serializer.js
  method toSpec (line 2) | toSpec(dqElm) {
  method mergeSpecs (line 7) | mergeSpecs(childSpec, parentSpec) {

FILE: test/integration/full/test-webdriver.js
  function collectTestResults (line 23) | function collectTestResults(driver) {
  function runTestUrls (line 58) | function runTestUrls(driver, isMobile, urls, errors) {
  function buildWebDriver (line 118) | function buildWebDriver(browser) {
  function start (line 161) | function start(options) {

FILE: test/integration/full/umd/mock-define.js
  function define (line 5) | function define() {

FILE: test/integration/rules/runner.js
  function flattenResult (line 8) | function flattenResult(results) {
  function waitForFrames (line 16) | function waitForFrames(context, cb) {
  function runTest (line 45) | function runTest(test, collection) {

FILE: test/integration/virtual-rules/summary-name.js
  function appendSerialChild (line 1) | function appendSerialChild(parent, child) {

FILE: test/node/node.js
  function initJsdom (line 34) | function initJsdom(callback) {

FILE: test/rule-matches/color-contrast-matches.js
  function createContentSlotted (line 559) | function createContentSlotted() {

FILE: test/rule-matches/object-is-loaded-matches.js
  function delayedQueryFixture (line 6) | async function delayedQueryFixture(html, delay = 250) {

FILE: test/test-locales.js
  function fn (line 15) | function fn() {

FILE: test/testutils.js
  function verifyIsNoneCheck (line 39) | function verifyIsNoneCheck(check) {
  method set (line 600) | set(value) {
  function appendHtml (line 719) | function appendHtml(fixtureNode, htmlCode) {
  function isObject (line 792) | function isObject(obj) {
  function getType (line 796) | function getType(obj) {

FILE: typings/axe-core/axe-core-tests.ts
  function runAsync (line 52) | async function runAsync() {
  function frameContextTypes (line 114) | async function frameContextTypes() {
  function serialContextType (line 121) | async function serialContextType() {
  function customReporters (line 136) | async function customReporters() {
  method toSpec (line 461) | toSpec(dqElm: axe.DqElement) {
  method mergeSpecs (line 464) | mergeSpecs(childSpec: axe.SerialDqElement, parentSpec: axe.SerialDqEleme...
Condensed preview — 1977 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,588K chars).
[
  {
    "path": ".babelrc",
    "chars": 160,
    "preview": "{\n  \"presets\": [\"@babel/preset-env\"],\n  \"plugins\": [\n    [\n      \"@babel/plugin-proposal-object-rest-spread\",\n      {\n  "
  },
  {
    "path": ".editorconfig",
    "chars": 348,
    "preview": "# EditorConfig is awesome: http://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n[*]\nend_of_line = lf\ninser"
  },
  {
    "path": ".gitattributes",
    "chars": 22,
    "preview": ".npmignore merge=ours\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 186,
    "preview": "# Reference - https://help.github.com/articles/about-code-owners/\n\n# Complete repo\n* @dequelabs/axe-codeowners\n\n# Locali"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 200,
    "preview": "contact_links:\n  - name: Join the axe Slack Community\n    url: https://accessibility.deque.com/axe-community\n    about: "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation.yml",
    "chars": 964,
    "preview": "name: Improve our documentation\ndescription: Report issues in our documentation or things we could document better.\nlabe"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.yml",
    "chars": 1136,
    "preview": "name: Request a feature\ndescription: Request an enhancement, improvement, or new rule.\nlabels: ['feat', 'ungroomed']\nbod"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/possible-bug.yml",
    "chars": 2112,
    "preview": "name: Report an issue\ndescription: Report a bug or an issue that you've encountered.\nlabels: ['ungroomed']\nbody:\n  - typ"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.yaml",
    "chars": 922,
    "preview": "name: Ask a question\ndescription: General questions for us, the product, or why things are the way they are.\nlabels: ['q"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 36,
    "preview": "<< Describe the changes >>\n\nCloses:\n"
  },
  {
    "path": ".github/actions/install-deps/action.yml",
    "chars": 3044,
    "preview": "name: 'Install Dependencies'\ndescription: 'Install OS and Project dependencies'\n\ninputs:\n  node-version:\n    description"
  },
  {
    "path": ".github/axe-linter.yml",
    "chars": 40,
    "preview": "exclude:\n  - CHANGELOG.md\n  - test/**/*\n"
  },
  {
    "path": ".github/bin/determine-version.sh",
    "chars": 483,
    "preview": "#!/usr/bin/env bash\n\nset -eo pipefail\n\necho \"::group::Determining new prerelease version\"\n\nNAME=$(npm pkg get name | tr "
  },
  {
    "path": ".github/bin/validate-npm-deploy.sh",
    "chars": 1095,
    "preview": "#!/usr/bin/env bash\n\nset -eo pipefail\n\nif [ -z \"$PACKAGE_NAME\" ] || [ -z \"$VERSION\" ]; then\n  echo \"::error::PACKAGE_NAM"
  },
  {
    "path": ".github/bin/validate-package.mjs",
    "chars": 13435,
    "preview": "#!/usr/bin/env node\n\n/**\n * @fileoverview Validates the package before publishing.\n * This script performs several check"
  },
  {
    "path": ".github/bin/wait-for-npm-ready.sh",
    "chars": 986,
    "preview": "#!/usr/bin/env bash\n\nset -eo pipefail\n\nif [ -z \"$VERSION\" ] || [ -z \"$PACKAGE_NAME\" ]; then\n  echo \"✗ ERROR: VERSION and"
  },
  {
    "path": ".github/bin/wait-for-workflow-success.sh",
    "chars": 6607,
    "preview": "#!/usr/bin/env bash\n\n# This script waits for a specified GitHub Actions workflow to complete successfully.\n# Debug mode "
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 1973,
    "preview": "version: 2\n\nupdates:\n  - package-ecosystem: 'github-actions'\n    directory: '/'\n    schedule:\n      interval: 'monthly'\n"
  },
  {
    "path": ".github/review.yml",
    "chars": 891,
    "preview": "# Require that merge commits have security review performed on them.\nreview_merges: true\n\napprove_button_tooltip: No sec"
  },
  {
    "path": ".github/workflows/deploy.yml",
    "chars": 7008,
    "preview": "# Do not rename this file. The name \"deploy.yml\" is known to\n# npm for trusted OIDC publishing.\nname: Deploy\n\non:\n  # Ru"
  },
  {
    "path": ".github/workflows/format.yml",
    "chars": 1265,
    "preview": "name: Formatter\n\non:\n  pull_request:\n    branches:\n      - develop\n\njobs:\n  prettier:\n    # This conditional prevents ru"
  },
  {
    "path": ".github/workflows/label-extension-linter-issues.yml",
    "chars": 823,
    "preview": "name: Add extension and linting labels to associated opened issues\n\non:\n  issues:\n    types: [opened]\n\njobs:\n  label_ext"
  },
  {
    "path": ".github/workflows/nightly-tests.yml",
    "chars": 2435,
    "preview": "name: Nightly Tests\n\non:\n  schedule:\n    # Runs every day at 2:17 AM UTC\n    # Schedules should try to be offset from co"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 1421,
    "preview": "name: Create release candidate\n\non: [workflow_dispatch]\n\njobs:\n  create_release:\n    name: Create release\n    runs-on: u"
  },
  {
    "path": ".github/workflows/semantic-pr-title.yml",
    "chars": 234,
    "preview": "name: Semantic PR title\n\non:\n  pull_request:\n    types:\n      - opened\n      - reopened\n      - edited\n      - synchroni"
  },
  {
    "path": ".github/workflows/sync-master-develop.yml",
    "chars": 377,
    "preview": "name: Sync master/develop branches\non:\n  push:\n    branches:\n      - master\njobs:\n  create_sync_pull_request:\n    runs-o"
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 6611,
    "preview": "name: Tests\n\non:\n  pull_request:\n  push:\n    branches:\n      - master\n      - develop\n      - release-*\n\n# We want to gr"
  },
  {
    "path": ".github/workflows/update-generated-files.yaml",
    "chars": 2254,
    "preview": "name: Update generated files\n\non:\n  push:\n    branches:\n      - develop\n\nenv:\n  BRANCH_NAME: sync-generated-files\n\njobs:"
  },
  {
    "path": ".gitignore",
    "chars": 472,
    "preview": "# defaults\nnode_modules\nnpm-shrinkwrap.json\ndoc/examples/*/package-lock.json\n.DS_Store\n.idea\n\n# tmp - `dev` time generat"
  },
  {
    "path": ".husky/pre-commit",
    "chars": 35,
    "preview": "npx grunt configure\nnpx lint-staged"
  },
  {
    "path": ".jsdoc.json",
    "chars": 394,
    "preview": "{\n  \"tags\": {\n    \"allowUnknownTags\": true,\n    \"dictionaries\": [\"jsdoc\"]\n  },\n  \"source\": {\n    \"include\": [\"lib\", \"REA"
  },
  {
    "path": ".npmrc",
    "chars": 35,
    "preview": "registry=https://registry.npmjs.org"
  },
  {
    "path": ".nvmrc",
    "chars": 3,
    "preview": "24\n"
  },
  {
    "path": ".prettierignore",
    "chars": 22,
    "preview": "node_modules/\ndoc/api\n"
  },
  {
    "path": ".prettierrc.json",
    "chars": 178,
    "preview": "{\n  \"printWidth\": 80,\n  \"useTabs\": false,\n  \"tabWidth\": 2,\n  \"semi\": true,\n  \"singleQuote\": true,\n  \"trailingComma\": \"no"
  },
  {
    "path": ".vscode/extensions.json",
    "chars": 61,
    "preview": "{\n  \"recommendations\": [\"deque-systems.vscode-axe-linter\"]\n}\n"
  },
  {
    "path": ".vscode/launch.json",
    "chars": 426,
    "preview": "{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"chrome\",\n      \"request\": \"attach\",\n      \"name\": \"At"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 253205,
    "preview": "# Changelog\n\nAll notable changes to this project will be documented in this file. See [standard-version](https://github."
  },
  {
    "path": "CLAUDE.md",
    "chars": 7577,
    "preview": "# axe-core — Claude Code Context\n\n**Last updated:** 2026-03-19\n\n## 0. Fundamental Standards\n\n- **Formatting:** Run `npm "
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 11145,
    "preview": "# Contributing\n\n## Contributor License Agreement\n\nIn order to contribute, you must accept the [contributor license agree"
  },
  {
    "path": "Gruntfile.js",
    "chars": 6929,
    "preview": "var execSync = require('child_process').execSync;\n\n/*eslint\ncamelcase: [\"error\", {\"properties\": \"never\"}]\n*/\nmodule.expo"
  },
  {
    "path": "LICENSE",
    "chars": 15921,
    "preview": "Mozilla Public License, version 2.0\n\n1. Definitions\n\n1.1. \"Contributor\"\n\n     means each individual or legal entity that"
  },
  {
    "path": "LICENSE-3RD-PARTY.txt",
    "chars": 3766,
    "preview": "-----------------------------------------------------------------------------\n                              MIT License\n"
  },
  {
    "path": "README.md",
    "chars": 10458,
    "preview": "# axe-core\n\n[![License](https://img.shields.io/npm/l/axe-core.svg?color=c41)](LICENSE)\n[![Version](https://img.shields.i"
  },
  {
    "path": "SECURITY.md",
    "chars": 1663,
    "preview": "## Security\n\nDeque takes the security of our software products and services seriously, which includes all source code re"
  },
  {
    "path": "axe-linter.yml",
    "chars": 129,
    "preview": "# See: https://marketplace.visualstudio.com/items?itemName=deque-systems.vscode-axe-linter&ssr=false#overview\nexclude: t"
  },
  {
    "path": "axe.d.ts",
    "chars": 19076,
    "preview": "// Type definitions for axe-core\n// Project: https://github.com/dequelabs/axe-core\n\ndeclare namespace axe {\n  type Impac"
  },
  {
    "path": "bower.json",
    "chars": 954,
    "preview": "{\n  \"name\": \"axe-core\",\n  \"version\": \"4.11.1\",\n  \"deprecated\": true,\n  \"contributors\": [\n    {\n      \"name\": \"David Stur"
  },
  {
    "path": "build/build-manual.js",
    "chars": 1143,
    "preview": "/*eslint-env node */\n'use strict';\n\nvar path = require('path');\nvar templates = require('./templates');\n\nmodule.exports "
  },
  {
    "path": "build/check-node-version.js",
    "chars": 948,
    "preview": "#! /usr/bin/env node\n\nconst fs = require('fs');\nconst path = require('path');\n\nconst PATH_TO_NVMRC = path.join(__dirname"
  },
  {
    "path": "build/cherry-pick.js",
    "chars": 4905,
    "preview": "#!/usr/bin/env node\n\nconst { execSync } = require('child_process');\nconst conventionalCommitsParser = require('conventio"
  },
  {
    "path": "build/configure.js",
    "chars": 13491,
    "preview": "/*eslint-env node */\n/*eslint max-len: off */\n'use strict';\n\nvar clone = require('clone');\nvar doT = require('@deque/dot"
  },
  {
    "path": "build/rule-generator/directories.js",
    "chars": 527,
    "preview": "const path = require('path');\n\nconst directories = {\n  axePath: path.join(__dirname, '..', '..', 'axe.js'),\n  rules: pat"
  },
  {
    "path": "build/rule-generator/get-answers.js",
    "chars": 1620,
    "preview": "const questions = require('./questions');\nconst inquirer = require('inquirer');\n\n/**\n * Get CHECK details as entered by "
  },
  {
    "path": "build/rule-generator/get-files-metadata.js",
    "chars": 8232,
    "preview": "const directories = require('./directories');\nconst outdent = require('outdent');\n\n/**\n * Helper to convert a given stri"
  },
  {
    "path": "build/rule-generator/questions.js",
    "chars": 4752,
    "preview": "const fs = require('fs');\nconst { glob } = require('glob');\nconst directories = require('./directories');\n\n/**\n * Check "
  },
  {
    "path": "build/rule-generator.js",
    "chars": 1862,
    "preview": "/* global Promise */\n\nconst fs = require('fs');\nconst chalk = require('chalk');\nconst execa = require('execa');\n\nconst {"
  },
  {
    "path": "build/shared/create-file.js",
    "chars": 459,
    "preview": "const { promises: fs } = require('fs');\nconst { dirname } = require('path');\n\n/**\n * Create file with given contents at "
  },
  {
    "path": "build/shared/format.js",
    "chars": 368,
    "preview": "const prettier = require('prettier');\nconst prettierConfig = require('../../package.json').prettier;\n\n/**\n * Format the "
  },
  {
    "path": "build/sri-update.js",
    "chars": 1906,
    "preview": "/**\n * SRI Update will update the sri-history.json file\n * In the project root. The sri-history.json file contains\n * SR"
  },
  {
    "path": "build/tasks/add-locale.js",
    "chars": 2577,
    "preview": "/*eslint-env node */\n'use strict';\nvar clone = require('clone');\nvar buildManual = require('../build-manual');\n\nmodule.e"
  },
  {
    "path": "build/tasks/aria-supported.js",
    "chars": 7456,
    "preview": "/*eslint-env node */\n'use strict';\n\nconst { roles, aria: props } = require('aria-query');\nconst format = require('../sha"
  },
  {
    "path": "build/tasks/configure.js",
    "chars": 1486,
    "preview": "/*eslint-env node */\n'use strict';\nconst buildRules = require('../configure');\nconst format = require('../shared/format'"
  },
  {
    "path": "build/tasks/esbuild.js",
    "chars": 915,
    "preview": "const { build } = require('esbuild');\nconst path = require('path');\n\nmodule.exports = function (grunt) {\n  grunt.registe"
  },
  {
    "path": "build/tasks/langs.js",
    "chars": 3004,
    "preview": "/*eslint-env node */\n'use strict';\nvar http = require('http');\nmodule.exports = function (grunt) {\n  function getLine(da"
  },
  {
    "path": "build/tasks/metadata-function-map.js",
    "chars": 1518,
    "preview": "const path = require('path').posix;\nconst glob = require('glob');\nconst fs = require('fs');\n\nfunction toTitleCase(str) {"
  },
  {
    "path": "build/tasks/notify.js",
    "chars": 286,
    "preview": "const { notify } = require('node-notifier');\n\n/*eslint-env node */\n('use strict');\n\nmodule.exports = function (grunt) {\n"
  },
  {
    "path": "build/tasks/test.js",
    "chars": 499,
    "preview": "const execSync = require('child_process').execSync;\nconst chalk = require('chalk');\n\n/*eslint-env node */\n('use strict')"
  },
  {
    "path": "build/tasks/update-help.js",
    "chars": 734,
    "preview": "/*eslint-env node */\n'use strict';\n\nmodule.exports = function (grunt) {\n  grunt.registerMultiTask(\n    'update-help',\n  "
  },
  {
    "path": "build/tasks/validate.js",
    "chars": 11466,
    "preview": "/*eslint-env node */\n'use strict';\n\nvar revalidator = require('revalidator').validate,\n  fs = require('fs'),\n  path = re"
  },
  {
    "path": "build/templates.js",
    "chars": 361,
    "preview": "module.exports = {\n  evaluate: 'function (node, options, virtualNode, context) {\\n<%=source%>\\n}',\n  after: 'function (r"
  },
  {
    "path": "code-of-conduct.md",
    "chars": 1391,
    "preview": "## Introduction\n\nDeque is committed to providing a safe, inclusive, and welcoming virtual environment for contributors.\n"
  },
  {
    "path": "doc/API.md",
    "chars": 47654,
    "preview": "# Axe JavaScript Accessibility API\n\n## Table of Contents\n\n1. [Section 1: Introduction](#section-1-introduction)\n   1. [G"
  },
  {
    "path": "doc/accessibility-supported.md",
    "chars": 2659,
    "preview": "# How we make decisions on rules\n\nIn order to adhere to the manifesto and at the same time be useful to developers and c"
  },
  {
    "path": "doc/act-rules-format.md",
    "chars": 2443,
    "preview": "# W3C Standardized Rules\n\nDeque Systems is one of the leading organizations in the development of standardized accessibi"
  },
  {
    "path": "doc/aria-supported.md",
    "chars": 845,
    "preview": "# ARIA Roles and Attributes unsupported in axe-core.\n\nIt can be difficult to know which features of web technologies are"
  },
  {
    "path": "doc/backwards-compatibility-doc.md",
    "chars": 9194,
    "preview": "# Backwards Compatibility in axe-core\n\n## What is part of the public axe-core API?\n\nThe axe-core API includes:\n\n- Any AP"
  },
  {
    "path": "doc/check-message-template.md",
    "chars": 4110,
    "preview": "# Check Message Template\n\nAxe-core uses a custom template to handle dynamic check messages (messages that use the `data`"
  },
  {
    "path": "doc/check-options.md",
    "chars": 27908,
    "preview": "# Check Options\n\n## Table of Contents\n\n- [How Checks Work](#how-checks-work)\n- [Options](#options)\n  - [Global Options]("
  },
  {
    "path": "doc/code-submission-guidelines.md",
    "chars": 12896,
    "preview": "# Code Submission Guidelines\n\nWe've enacted standards for commits and pull requests to effectively manage the project ov"
  },
  {
    "path": "doc/context.md",
    "chars": 13055,
    "preview": "# Axe Testing Context\n\nAxe-core's `context` argument is a powerful tool for controlling precisely which elements are tes"
  },
  {
    "path": "doc/developer-guide.md",
    "chars": 26476,
    "preview": "# Axe Developer Guide\n\nAxe runs a series of tests to check for accessibility of content and functionality on a website. "
  },
  {
    "path": "doc/examples/chrome-debugging-protocol/README.md",
    "chars": 862,
    "preview": "# axe-chrome-debugging-protocol-example\n\nThis (very minimal) example demonstrates how to use `axe-core` with the [Chrome"
  },
  {
    "path": "doc/examples/chrome-debugging-protocol/axe-cdp.js",
    "chars": 2011,
    "preview": "const CDP = require('chrome-remote-interface');\nconst axeCore = require('axe-core');\nconst assert = require('assert');\nc"
  },
  {
    "path": "doc/examples/chrome-debugging-protocol/package.json",
    "chars": 198,
    "preview": "{\n  \"name\": \"axe-cdp\",\n  \"private\": true,\n  \"scripts\": {\n    \"test\": \"echo 'No test specified.'\"\n  },\n  \"devDependencies"
  },
  {
    "path": "doc/examples/code-patterns.md",
    "chars": 3573,
    "preview": "# Code Pattern Examples\n\nQuick-reference examples for axe-core coding conventions.\n\n## Default Export at Top\n\n```javascr"
  },
  {
    "path": "doc/examples/html-handlebars.md",
    "chars": 4870,
    "preview": "# Turning violation nodes into readable HTML\n\nThe violations returns a list of rules that had failures. Each rule has a "
  },
  {
    "path": "doc/examples/jasmine/README.md",
    "chars": 1278,
    "preview": "# Jasmine README\n\nThis example demonstrates how to use axe with the Jasmine unit testing framework.\n\nThe unit test is in"
  },
  {
    "path": "doc/examples/jasmine/karma.conf.js",
    "chars": 417,
    "preview": "module.exports = function (config) {\n  config.set({\n    basePath: '',\n\n    frameworks: ['jasmine'],\n\n    files: ['spec/*"
  },
  {
    "path": "doc/examples/jasmine/package.json",
    "chars": 445,
    "preview": "{\n  \"name\": \"axe-jasmine-example\",\n  \"description\": \"Axe Jasmine Example\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"a"
  },
  {
    "path": "doc/examples/jasmine/spec/a11y.js",
    "chars": 989,
    "preview": "/* global describe, it, expect, axe, document */\n\ndescribe('axe', function () {\n  'use strict';\n\n  document\n    .getElem"
  },
  {
    "path": "doc/examples/jest_react/.babelrc",
    "chars": 164,
    "preview": "{\n  \"presets\": [\n    [\n      \"@babel/preset-env\",\n      {\n        \"targets\": {\n          \"node\": \"current\"\n        }\n   "
  },
  {
    "path": "doc/examples/jest_react/README.md",
    "chars": 1773,
    "preview": "# Jest + React README\n\nThis example demonstrates how to use axe to test React components using the\nJest unit testing fra"
  },
  {
    "path": "doc/examples/jest_react/link.js",
    "chars": 170,
    "preview": "import React from 'react';\n\nexport default class Link extends React.Component {\n  render() {\n    return <a href={this.pr"
  },
  {
    "path": "doc/examples/jest_react/link.test.js",
    "chars": 556,
    "preview": "import React from 'react';\nimport { render } from '@testing-library/react';\nimport axe from 'axe-core';\n\nimport Link fro"
  },
  {
    "path": "doc/examples/jest_react/package.json",
    "chars": 633,
    "preview": "{\n  \"name\": \"axe-jest-react-example\",\n  \"description\": \"Axe Jest + React Example\",\n  \"version\": \"0.0.1\",\n  \"private\": tr"
  },
  {
    "path": "doc/examples/jsdom/package.json",
    "chars": 254,
    "preview": "{\n  \"name\": \"axe-jsdom-example\",\n  \"description\": \"Axe JSDOM Example\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"scrip"
  },
  {
    "path": "doc/examples/jsdom/test/a11y.js",
    "chars": 1398,
    "preview": "/* global describe, it */\nconst axe = require('axe-core');\nconst jsdom = require('jsdom');\nconst { JSDOM } = jsdom;\ncons"
  },
  {
    "path": "doc/examples/mocha/README.md",
    "chars": 1268,
    "preview": "# Mocha README\n\nThis example demonstrates how to use axe with the Mocha unit testing framework.\n\nThe unit test is in `te"
  },
  {
    "path": "doc/examples/mocha/karma.conf.js",
    "chars": 423,
    "preview": "module.exports = function (config) {\n  config.set({\n    basePath: '',\n\n    frameworks: ['mocha', 'chai'],\n\n    files: ['"
  },
  {
    "path": "doc/examples/mocha/package.json",
    "chars": 489,
    "preview": "{\n  \"name\": \"axe-mocha-example\",\n  \"description\": \"Axe Mocha Example\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"autho"
  },
  {
    "path": "doc/examples/mocha/test/a11y.js",
    "chars": 1005,
    "preview": "/* global describe, it, expect, axe, document, expect */\n\ndescribe('axe', function () {\n  'use strict';\n\n  document\n    "
  },
  {
    "path": "doc/examples/pr-review-patterns.md",
    "chars": 2232,
    "preview": "# PR Review Patterns\n\nCommon feedback and anti-patterns observed in axe-core code reviews.\n\n## What Gets Called Out\n\n###"
  },
  {
    "path": "doc/examples/puppeteer/README.md",
    "chars": 581,
    "preview": "# axe-puppeteer-example\n\nThis (very minimal) example demonstrates how to use `axe-core` with [Puppeteer](https://github."
  },
  {
    "path": "doc/examples/puppeteer/axe-puppeteer.js",
    "chars": 1184,
    "preview": "const puppeteer = require('puppeteer');\nconst axeCore = require('axe-core');\nconst { parse: parseURL } = require('url');"
  },
  {
    "path": "doc/examples/puppeteer/package.json",
    "chars": 367,
    "preview": "{\n  \"name\": \"axe-puppeteer\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"main\": \"axe-puppeteer.js\",\n  \"scripts\": {\n    \""
  },
  {
    "path": "doc/examples/puppeteer/set-content.js",
    "chars": 830,
    "preview": "const assert = require('assert');\nconst puppeteer = require('puppeteer');\nconst axe = require('axe-core');\n\n(async () =>"
  },
  {
    "path": "doc/examples/qunit/Gruntfile.js",
    "chars": 336,
    "preview": "module.exports = function (grunt) {\n  'use strict';\n\n  grunt.loadNpmTasks('grunt-contrib-qunit');\n\n  grunt.initConfig({\n"
  },
  {
    "path": "doc/examples/qunit/README.md",
    "chars": 1407,
    "preview": "# QUnit README\n\nThis example demonstrates how to use axe with the QUnit unit testing framework.\n\nThe unit test is in `te"
  },
  {
    "path": "doc/examples/qunit/package.json",
    "chars": 447,
    "preview": "{\n  \"name\": \"axe-qunit-example\",\n  \"description\": \"Axe QUnit Example\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"autho"
  },
  {
    "path": "doc/examples/qunit/test/a11y.js",
    "chars": 661,
    "preview": "/* global QUnit, document, axe */\n\nQUnit.module('axe');\n\nQUnit.test('should report that good HTML is good', function (as"
  },
  {
    "path": "doc/examples/qunit/test/test.html",
    "chars": 799,
    "preview": "<!doctype html>\n<html>\n  <head>\n    <meta charset=\"utf-8\" />\n    <title>Basic Test Suite</title>\n    <!-- Load local QUn"
  },
  {
    "path": "doc/examples/rule-check-templates.md",
    "chars": 3799,
    "preview": "# Rule & Check JSON Templates\n\nQuick-reference templates for creating axe-core rules and checks.\n\n## Rule JSON\n\n```json\n"
  },
  {
    "path": "doc/examples/test-examples.js",
    "chars": 1083,
    "preview": "const { readdirSync, statSync } = require('fs');\nconst { join } = require('path');\nconst execa = require('execa');\nconst"
  },
  {
    "path": "doc/examples/test-patterns.md",
    "chars": 2710,
    "preview": "# Test Pattern Examples\n\nQuick-reference examples for axe-core test conventions.\n\n## Unit Test — Commons Function\n\n```ja"
  },
  {
    "path": "doc/frame-messenger.md",
    "chars": 6970,
    "preview": "# Frame Messenger\n\nAxe frameMessenger can be used to configure how axe-core communicates information between frames. By "
  },
  {
    "path": "doc/issue_impact.md",
    "chars": 1862,
    "preview": "# Issue Impacts\n\nAxe-core assigns an impact according to our assessment of the likely impact of an issue on users with d"
  },
  {
    "path": "doc/plugins.md",
    "chars": 6143,
    "preview": "# Plugins\n\nAxe implements a general purpose plugin system that takes advantage of the cross-domain iframe capabilities o"
  },
  {
    "path": "doc/projects.md",
    "chars": 4006,
    "preview": "# Projects that use axe-core®\n\nAdd your project/integration to this file and submit a pull request.\n\n## Deque Projects\n\n"
  },
  {
    "path": "doc/pull-request-checklist.md",
    "chars": 2472,
    "preview": "# axe-core — PR Checklist\n\nComplete all applicable items before opening a PR. For items that do not apply to this PR (fo"
  },
  {
    "path": "doc/release-and-support.md",
    "chars": 3250,
    "preview": "# Axe-core Release & Support Policy\n\n## Release Cadence\n\nAxe-core is used in many [projects and environments](./projects"
  },
  {
    "path": "doc/rule-descriptions.md",
    "chars": 73028,
    "preview": "<!--- This file is automatically generated using build/configure.js --->\n\n# Rule Descriptions\n\n## Table of Contents\n\n- ["
  },
  {
    "path": "doc/rule-development.md",
    "chars": 8412,
    "preview": "# Developing Axe-core Rules\n\nBefore you start writing axe-core rules, be sure to create a proposal for them in a GitHub "
  },
  {
    "path": "doc/rule-proposal.md",
    "chars": 3800,
    "preview": "# Proposing Axe-core Rules\n\nThis document outlines the process of proposing a rule. For a technical description on how t"
  },
  {
    "path": "doc/run-partial.md",
    "chars": 6673,
    "preview": "# axe runPartial / finishRun\n\n`axe.runPartial` and `axe.finishRun` are two methods which allow axe to test a page in two"
  },
  {
    "path": "doc/standards-object.md",
    "chars": 8471,
    "preview": "# Standards Object\n\nThe [standards object](../lib/standards) is a JSON object of ARIA and HTML spec information that axe"
  },
  {
    "path": "eslint.config.js",
    "chars": 11405,
    "preview": "const prettier = require('eslint-config-prettier');\nconst globals = require('globals');\nconst mochaNoOnly = require('esl"
  },
  {
    "path": "lib/checks/aria/abstractrole-evaluate.js",
    "chars": 1002,
    "preview": "import { tokenList } from '../../core/utils';\nimport { getRoleType } from '../../commons/aria';\n/**\n * Check if an eleme"
  },
  {
    "path": "lib/checks/aria/abstractrole.json",
    "chars": 357,
    "preview": "{\n  \"id\": \"abstractrole\",\n  \"evaluate\": \"abstractrole-evaluate\",\n  \"metadata\": {\n    \"impact\": \"serious\",\n    \"messages\""
  },
  {
    "path": "lib/checks/aria/aria-allowed-attr-evaluate.js",
    "chars": 2414,
    "preview": "import { uniqueArray, isHtmlElement } from '../../core/utils';\nimport { getRole, allowedAttr, validateAttr } from '../.."
  },
  {
    "path": "lib/checks/aria/aria-allowed-attr.json",
    "chars": 640,
    "preview": "{\n  \"id\": \"aria-allowed-attr\",\n  \"evaluate\": \"aria-allowed-attr-evaluate\",\n  \"options\": {\n    \"validTreeRowAttrs\": [\n   "
  },
  {
    "path": "lib/checks/aria/aria-allowed-role-evaluate.js",
    "chars": 1545,
    "preview": "import { isVisibleToScreenReaders } from '../../commons/dom';\nimport { getElementUnallowedRoles } from '../../commons/ar"
  },
  {
    "path": "lib/checks/aria/aria-allowed-role.json",
    "chars": 756,
    "preview": "{\n  \"id\": \"aria-allowed-role\",\n  \"evaluate\": \"aria-allowed-role-evaluate\",\n  \"options\": {\n    \"allowImplicit\": true,\n   "
  },
  {
    "path": "lib/checks/aria/aria-busy-evaluate.js",
    "chars": 285,
    "preview": "/**\n * Checks if element has aria-busy tag set to \"true\"\n *\n * @memberof checks\n * @return {Boolean} True if node has \"a"
  },
  {
    "path": "lib/checks/aria/aria-busy.json",
    "chars": 275,
    "preview": "{\n  \"id\": \"aria-busy\",\n  \"evaluate\": \"aria-busy-evaluate\",\n  \"deprecated\": true,\n  \"metadata\": {\n    \"impact\": \"serious\""
  },
  {
    "path": "lib/checks/aria/aria-conditional-attr-evaluate.js",
    "chars": 575,
    "preview": "import getRole from '../../commons/aria/get-role';\nimport ariaConditionalCheckboxAttr from './aria-conditional-checkbox-"
  },
  {
    "path": "lib/checks/aria/aria-conditional-attr.json",
    "chars": 721,
    "preview": "{\n  \"id\": \"aria-conditional-attr\",\n  \"evaluate\": \"aria-conditional-attr-evaluate\",\n  \"options\": {\n    \"invalidTableRowAt"
  },
  {
    "path": "lib/checks/aria/aria-conditional-checkbox-attr-evaluate.js",
    "chars": 882,
    "preview": "export default function ariaConditionalCheckboxAttr(\n  node,\n  options,\n  virtualNode\n) {\n  const { nodeName, type } = v"
  },
  {
    "path": "lib/checks/aria/aria-conditional-row-attr-evaluate.js",
    "chars": 1029,
    "preview": "import getRole from '../../commons/aria/get-role';\nimport { closest } from '../../core/utils';\n\nexport default function "
  },
  {
    "path": "lib/checks/aria/aria-errormessage-evaluate.js",
    "chars": 2818,
    "preview": "import standards from '../../standards';\nimport { idrefs, isVisibleToScreenReaders } from '../../commons/dom';\nimport { "
  },
  {
    "path": "lib/checks/aria/aria-errormessage.json",
    "chars": 1177,
    "preview": "{\n  \"id\": \"aria-errormessage\",\n  \"evaluate\": \"aria-errormessage-evaluate\",\n  \"metadata\": {\n    \"impact\": \"critical\",\n   "
  },
  {
    "path": "lib/checks/aria/aria-hidden-body-evaluate.js",
    "chars": 347,
    "preview": "/**\n * Check that the element does not have the `aria-hidden` attribute.\n *\n * @memberof checks\n * @return {Boolean} Tru"
  },
  {
    "path": "lib/checks/aria/aria-hidden-body.json",
    "chars": 291,
    "preview": "{\n  \"id\": \"aria-hidden-body\",\n  \"evaluate\": \"aria-hidden-body-evaluate\",\n  \"metadata\": {\n    \"impact\": \"critical\",\n    \""
  },
  {
    "path": "lib/checks/aria/aria-level-evaluate.js",
    "chars": 635,
    "preview": "/**\n * Check that an element does not have aria-level values exceeding 6\n * VO and NVDA allow any positive value\n * JAWS"
  },
  {
    "path": "lib/checks/aria/aria-level.json",
    "chars": 295,
    "preview": "{\n  \"id\": \"aria-level\",\n  \"evaluate\": \"aria-level-evaluate\",\n  \"metadata\": {\n    \"impact\": \"serious\",\n    \"messages\": {\n"
  },
  {
    "path": "lib/checks/aria/aria-prohibited-attr-evaluate.js",
    "chars": 2772,
    "preview": "import { getRole, getRoleType } from '../../commons/aria';\nimport { sanitize, subtreeText } from '../../commons/text';\ni"
  },
  {
    "path": "lib/checks/aria/aria-prohibited-attr.json",
    "chars": 1254,
    "preview": "{\n  \"id\": \"aria-prohibited-attr\",\n  \"evaluate\": \"aria-prohibited-attr-evaluate\",\n  \"options\": {\n    \"elementsAllowedAria"
  },
  {
    "path": "lib/checks/aria/aria-required-attr-evaluate.js",
    "chars": 2380,
    "preview": "import {\n  requiredAttr as getRequiredAttrs,\n  getExplicitRole\n} from '../../commons/aria';\nimport { getElementSpec } fr"
  },
  {
    "path": "lib/checks/aria/aria-required-attr.json",
    "chars": 379,
    "preview": "{\n  \"id\": \"aria-required-attr\",\n  \"evaluate\": \"aria-required-attr-evaluate\",\n  \"metadata\": {\n    \"impact\": \"critical\",\n "
  },
  {
    "path": "lib/checks/aria/aria-required-children-evaluate.js",
    "chars": 4767,
    "preview": "import {\n  requiredOwned,\n  getRole,\n  getExplicitRole,\n  getOwnedVirtual\n} from '../../commons/aria';\nimport { getGloba"
  },
  {
    "path": "lib/checks/aria/aria-required-children.json",
    "chars": 1208,
    "preview": "{\n  \"id\": \"aria-required-children\",\n  \"evaluate\": \"aria-required-children-evaluate\",\n  \"options\": {\n    \"reviewEmpty\": ["
  },
  {
    "path": "lib/checks/aria/aria-required-parent-evaluate.js",
    "chars": 3115,
    "preview": "import { getExplicitRole, getRole, requiredContext } from '../../commons/aria';\nimport { getRootNode } from '../../commo"
  },
  {
    "path": "lib/checks/aria/aria-required-parent.json",
    "chars": 446,
    "preview": "{\n  \"id\": \"aria-required-parent\",\n  \"evaluate\": \"aria-required-parent-evaluate\",\n  \"options\": {\n    \"ownGroupRoles\": [\"l"
  },
  {
    "path": "lib/checks/aria/aria-roledescription-evaluate.js",
    "chars": 797,
    "preview": "import { getRole } from '../../commons/aria';\n\n/**\n * Check that `aria-roledescription` is used on a supported semantic "
  },
  {
    "path": "lib/checks/aria/aria-roledescription.json",
    "chars": 577,
    "preview": "{\n  \"id\": \"aria-roledescription\",\n  \"evaluate\": \"aria-roledescription-evaluate\",\n  \"options\": {\n    \"supportedRoles\": [\n"
  },
  {
    "path": "lib/checks/aria/aria-unsupported-attr-evaluate.js",
    "chars": 1337,
    "preview": "import { validateAttr } from '../../commons/aria';\nimport standards from '../../standards';\nimport matches from '../../c"
  },
  {
    "path": "lib/checks/aria/aria-unsupported-attr.json",
    "chars": 316,
    "preview": "{\n  \"id\": \"aria-unsupported-attr\",\n  \"evaluate\": \"aria-unsupported-attr-evaluate\",\n  \"metadata\": {\n    \"impact\": \"critic"
  },
  {
    "path": "lib/checks/aria/aria-valid-attr-evaluate.js",
    "chars": 1105,
    "preview": "import { validateAttr } from '../../commons/aria';\n\n/**\n * Check that each `aria-` attribute on an element is a valid AR"
  },
  {
    "path": "lib/checks/aria/aria-valid-attr-value-evaluate.js",
    "chars": 4602,
    "preview": "import { validateAttrValue } from '../../commons/aria';\nimport standards from '../../standards';\n\n/**\n * Check that each"
  },
  {
    "path": "lib/checks/aria/aria-valid-attr-value.json",
    "chars": 1121,
    "preview": "{\n  \"id\": \"aria-valid-attr-value\",\n  \"evaluate\": \"aria-valid-attr-value-evaluate\",\n  \"options\": [],\n  \"metadata\": {\n    "
  },
  {
    "path": "lib/checks/aria/aria-valid-attr.json",
    "chars": 362,
    "preview": "{\n  \"id\": \"aria-valid-attr\",\n  \"evaluate\": \"aria-valid-attr-evaluate\",\n  \"options\": [],\n  \"metadata\": {\n    \"impact\": \"c"
  },
  {
    "path": "lib/checks/aria/braille-label-equivalent-evaluate.js",
    "chars": 528,
    "preview": "import { sanitize, accessibleTextVirtual } from '../../commons/text';\n\n/**\n * Check that if aria-braillelabel is not emp"
  },
  {
    "path": "lib/checks/aria/braille-label-equivalent.json",
    "chars": 375,
    "preview": "{\n  \"id\": \"braille-label-equivalent\",\n  \"evaluate\": \"braille-label-equivalent-evaluate\",\n  \"metadata\": {\n    \"impact\": \""
  },
  {
    "path": "lib/checks/aria/braille-roledescription-equivalent-evaluate.js",
    "chars": 758,
    "preview": "import { sanitize } from '../../commons/text';\n\n/**\n * Check that if aria-brailleroledescription is not empty,\n * the el"
  },
  {
    "path": "lib/checks/aria/braille-roledescription-equivalent.json",
    "chars": 527,
    "preview": "{\n  \"id\": \"braille-roledescription-equivalent\",\n  \"evaluate\": \"braille-roledescription-equivalent-evaluate\",\n  \"metadata"
  },
  {
    "path": "lib/checks/aria/deprecatedrole-evaluate.js",
    "chars": 665,
    "preview": "import standards from '../../standards';\nimport { getRole } from '../../commons/aria';\n\n/**\n * Check that an elements se"
  },
  {
    "path": "lib/checks/aria/deprecatedrole.json",
    "chars": 236,
    "preview": "{\n  \"id\": \"deprecatedrole\",\n  \"evaluate\": \"deprecatedrole-evaluate\",\n  \"metadata\": {\n    \"impact\": \"minor\",\n    \"message"
  },
  {
    "path": "lib/checks/aria/fallbackrole-evaluate.js",
    "chars": 1150,
    "preview": "import { tokenList } from '../../core/utils';\nimport { getImplicitRole } from '../../commons/aria';\n\n/**\n * NOTE: This c"
  },
  {
    "path": "lib/checks/aria/fallbackrole.json",
    "chars": 365,
    "preview": "{\n  \"id\": \"fallbackrole\",\n  \"evaluate\": \"fallbackrole-evaluate\",\n  \"metadata\": {\n    \"impact\": \"serious\",\n    \"messages\""
  },
  {
    "path": "lib/checks/aria/has-global-aria-attribute-evaluate.js",
    "chars": 353,
    "preview": "import getGlobalAriaAttrs from '../../commons/standards/get-global-aria-attrs';\n\nfunction hasGlobalAriaAttributeEvaluate"
  },
  {
    "path": "lib/checks/aria/has-global-aria-attribute.json",
    "chars": 389,
    "preview": "{\n  \"id\": \"has-global-aria-attribute\",\n  \"evaluate\": \"has-global-aria-attribute-evaluate\",\n  \"metadata\": {\n    \"impact\":"
  },
  {
    "path": "lib/checks/aria/has-widget-role-evaluate.js",
    "chars": 666,
    "preview": "import { getRoleType, getExplicitRole } from '../../commons/aria';\n\n/**\n * Check if an elements `role` attribute uses an"
  },
  {
    "path": "lib/checks/aria/has-widget-role.json",
    "chars": 254,
    "preview": "{\n  \"id\": \"has-widget-role\",\n  \"evaluate\": \"has-widget-role-evaluate\",\n  \"options\": [],\n  \"metadata\": {\n    \"impact\": \"m"
  },
  {
    "path": "lib/checks/aria/invalidrole-evaluate.js",
    "chars": 1043,
    "preview": "import { isValidRole } from '../../commons/aria';\nimport { tokenList } from '../../core/utils';\n\n/**\n * Check that each "
  },
  {
    "path": "lib/checks/aria/invalidrole.json",
    "chars": 353,
    "preview": "{\n  \"id\": \"invalidrole\",\n  \"evaluate\": \"invalidrole-evaluate\",\n  \"metadata\": {\n    \"impact\": \"critical\",\n    \"messages\":"
  },
  {
    "path": "lib/checks/aria/is-element-focusable-evaluate.js",
    "chars": 197,
    "preview": "import { isFocusable } from '../../commons/dom';\n\nfunction isElementFocusableEvaluate(node, options, virtualNode) {\n  re"
  },
  {
    "path": "lib/checks/aria/is-element-focusable.json",
    "chars": 231,
    "preview": "{\n  \"id\": \"is-element-focusable\",\n  \"evaluate\": \"is-element-focusable-evaluate\",\n  \"metadata\": {\n    \"impact\": \"minor\",\n"
  },
  {
    "path": "lib/checks/aria/no-implicit-explicit-label-evaluate.js",
    "chars": 1378,
    "preview": "import { getRole } from '../../commons/aria';\nimport { sanitize, labelText, accessibleTextVirtual } from '../../commons/"
  },
  {
    "path": "lib/checks/aria/no-implicit-explicit-label.json",
    "chars": 340,
    "preview": "{\n  \"id\": \"no-implicit-explicit-label\",\n  \"evaluate\": \"no-implicit-explicit-label-evaluate\",\n  \"metadata\": {\n    \"impact"
  },
  {
    "path": "lib/checks/aria/unsupportedrole-evaluate.js",
    "chars": 649,
    "preview": "import { isUnsupportedRole, getRole } from '../../commons/aria';\n\n/**\n * Check that an elements semantic role is unsuppo"
  },
  {
    "path": "lib/checks/aria/unsupportedrole.json",
    "chars": 291,
    "preview": "{\n  \"id\": \"unsupportedrole\",\n  \"evaluate\": \"unsupportedrole-evaluate\",\n  \"metadata\": {\n    \"impact\": \"critical\",\n    \"me"
  },
  {
    "path": "lib/checks/aria/valid-scrollable-semantics-evaluate.js",
    "chars": 1961,
    "preview": "import { getExplicitRole } from '../../commons/aria';\n\n/**\n * A map from HTML tag names to a boolean which reflects whet"
  },
  {
    "path": "lib/checks/aria/valid-scrollable-semantics.json",
    "chars": 368,
    "preview": "{\n  \"id\": \"valid-scrollable-semantics\",\n  \"evaluate\": \"valid-scrollable-semantics-evaluate\",\n  \"options\": {\n    \"roles\":"
  },
  {
    "path": "lib/checks/color/color-contrast-enhanced.json",
    "chars": 3078,
    "preview": "{\n  \"id\": \"color-contrast-enhanced\",\n  \"evaluate\": \"color-contrast-evaluate\",\n  \"options\": {\n    \"ignoreUnicode\": true,\n"
  },
  {
    "path": "lib/checks/color/color-contrast-evaluate.js",
    "chars": 7626,
    "preview": "import { isVisibleOnScreen } from '../../commons/dom';\nimport {\n  visibleVirtual,\n  hasUnicode,\n  sanitize,\n  removeUnic"
  },
  {
    "path": "lib/checks/color/color-contrast.json",
    "chars": 3194,
    "preview": "{\n  \"id\": \"color-contrast\",\n  \"evaluate\": \"color-contrast-evaluate\",\n  \"options\": {\n    \"ignoreUnicode\": true,\n    \"igno"
  },
  {
    "path": "lib/checks/color/link-in-text-block-evaluate.js",
    "chars": 3266,
    "preview": "import { getComposedParent } from '../../commons/dom';\nimport {\n  getForegroundColor,\n  getBackgroundColor,\n  incomplete"
  },
  {
    "path": "lib/checks/color/link-in-text-block-style-evaluate.js",
    "chars": 1234,
    "preview": "import { getComposedParent } from '../../commons/dom';\nimport { elementIsDistinct } from '../../commons/color';\n\nconst b"
  },
  {
    "path": "lib/checks/color/link-in-text-block-style.json",
    "chars": 586,
    "preview": "{\n  \"id\": \"link-in-text-block-style\",\n  \"evaluate\": \"link-in-text-block-style-evaluate\",\n  \"metadata\": {\n    \"impact\": \""
  },
  {
    "path": "lib/checks/color/link-in-text-block.json",
    "chars": 1467,
    "preview": "{\n  \"id\": \"link-in-text-block\",\n  \"evaluate\": \"link-in-text-block-evaluate\",\n  \"options\": {\n    \"requiredContrastRatio\":"
  },
  {
    "path": "lib/checks/forms/autocomplete-appropriate-evaluate.js",
    "chars": 2842,
    "preview": "import { autocomplete, sanitize } from '../../commons/text';\nimport { validInputTypes } from '../../core/utils';\n\nfuncti"
  },
  {
    "path": "lib/checks/forms/autocomplete-appropriate.json",
    "chars": 330,
    "preview": "{\n  \"id\": \"autocomplete-appropriate\",\n  \"evaluate\": \"autocomplete-appropriate-evaluate\",\n  \"deprecated\": true,\n  \"metada"
  },
  {
    "path": "lib/checks/forms/autocomplete-valid-evaluate.js",
    "chars": 286,
    "preview": "import { isValidAutocomplete } from '../../commons/text';\n\nfunction autocompleteValidEvaluate(_node, options, virtualNod"
  },
  {
    "path": "lib/checks/forms/autocomplete-valid.json",
    "chars": 673,
    "preview": "{\n  \"id\": \"autocomplete-valid\",\n  \"evaluate\": \"autocomplete-valid-evaluate\",\n  \"metadata\": {\n    \"impact\": \"serious\",\n  "
  },
  {
    "path": "lib/checks/generic/README.md",
    "chars": 508,
    "preview": "Generic checks are evaluate functions that are used by multiple checks. They cannot be used directly by a rule (thus the"
  },
  {
    "path": "lib/checks/generic/attr-non-space-content-evaluate.js",
    "chars": 674,
    "preview": "import { sanitize } from '../../commons/text';\n\nfunction attrNonSpaceContentEvaluate(node, options = {}, vNode) {\n  if ("
  },
  {
    "path": "lib/checks/generic/has-descendant-after.js",
    "chars": 341,
    "preview": "function pageHasElmAfter(results) {\n  const elmUsedAnywhere = results.some(\n    frameResult => frameResult.result === tr"
  },
  {
    "path": "lib/checks/generic/has-descendant-evaluate.js",
    "chars": 706,
    "preview": "import { querySelectorAllFilter } from '../../core/utils';\nimport { isVisibleToScreenReaders, isModalOpen } from '../../"
  },
  {
    "path": "lib/checks/generic/has-text-content-evaluate.js",
    "chars": 240,
    "preview": "import { sanitize, subtreeText } from '../../commons/text';\n\nexport default function hasTextContentEvaluate(node, option"
  },
  {
    "path": "lib/checks/generic/matches-definition-evaluate.js",
    "chars": 201,
    "preview": "import matches from '../../commons/matches';\n\nfunction matchesDefinitionEvaluate(_, options, virtualNode) {\n  return mat"
  }
]

// ... and 1777 more files (download for full content)

About this extraction

This page contains the full source code of the dequelabs/axe-core GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1977 files (5.9 MB), approximately 1.6M tokens, and a symbol index with 1622 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!