All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
title
attribute or aria-label
attribute instead of accessible child in the "anchor-has-content" rule #727
aria-activedescendant-has-tabindex
: align with changes from #708 #924
control-has-associated-label
: don't accept whitespace as an accessible label #918
eslint-plugin-react
ce4d57f
es-iterator-helpers
52de824
mouse-events-have-key-events
: add hoverInHandlers
/hoverOutHandlers
config db64898
polymorphicPropName
setting for polymorphic components fffb05b
isNonInteractiveElement
: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1 64bfea6
hasown
instead of has
9a8edde
10c061a
@babel/cli
, @babel/core
, @babel/eslint-parser
, @babel/plugin-transform-flow-strip-types
, @babel/register
, aud
, eslint-doc-generator
, eslint-plugin-import
, minimist
6d5022d
@babel/cli
, @babel/core
, @babel/eslint-parser
, @babel/register
, eslint-doc-generator
, eslint-plugin-import
4dc7f1e
anchor-has-content
: Allow title attribute OR aria-label attribute e6bfd5c
mouse-events-have-key-events
: rport the attribute, not the node eadd70c
@babel/runtime
, array-includes
, array.prototype.flatmap
, object.entries
, object.fromentries
46ffbc3
@babel/runtime
, axobject-query
, jsx-ast-utils
, semver
5999555
aria-query
and axe-core
to fix failing tests on main 8d8f016
semver
from Deps to Dev Deps 4da13e7
ast-types-flow
b755318
eslint-plugin-import
f1c976b
language-tags
3d1d26d
no-static-element-interactions
: tabIndex is written tabindex 1271153
f0d2ddb
jackspeak
since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 0c278f4
no-aria-hidden-on-focusable
rule's missing export b01219e
#833
aria-role
: add now-passing test #756
control-has-associated-label
: fix metadata #892
no-aria-hidden-on-focusable
rule #881
eslint-doc-generator
6d7a857
3d77c84
anchor-ambiguous-text
rule 7f6463e
getAccessibleChildText
util 630116b
isFocusable
utils method e199d17
eslint-doc-generator
to v1.0.0 6b9855b
no-noninteractive-element-interactions
: Ignore contenteditable elements in no-noninteractive-element-interactions 9aa878b
anchor-ambiguous-text
: ignore punctuation bbae2c4
anchor-ambiguous-text
, getAccessibleChildText
: Implements check for alt
tags on <img />
elements bb84abc
npmignore
to autogenerate an npmignore file 6ad2312
auto-changelog
283817b
79b975a
aria-query
, axobject-query
7b3cda3
@babel/cli
, @babel/core
, @babel/eslint-parser
, @babel/plugin-transform-flow-strip-types
, aud
, object.assign
0852947
.eslintignore
to ignorePatterns
65be35b
@babel/cli
, @babel/core
, aud
, eslint-doc-generator
60c2df5
@babel/runtime
, array-includes
, axe-core
4abc751
@babel/runtime
, axe-core
89f766c
e411ce3
@babel/core
, minimist
cccdb62
markdown-magic
3382059
prefer-tag-over-role
38d52f8
label-has-for
: reran generate-list-of-rules 9a2af01
language-tags
to v1.0.5
f84bb74
@babel/core
cf3f8d0
axe-core
0a73cf4
@babel/runtime
053f04d
@babel/runtime
bccf0ae
jsx-ast-utils
c9687cc
8b889bf
prefer-tag-over-role
: rename docs file 0bdf95b
38405ad
[Fix] no-interactive-tabindex
: allow role assignments using a ternary with literals on both sides7524e0c
[Fix] no-static-element-interactions
: allow role assignments using a ternary with literals on both sides (#865)1c06306
[readme] properly describe rule settings in builtin configs0c19f02
[Docs] no-noninteractive-tabindex
, no-static-element-interactions
: document allowExpressionValues
(#870)2c6926c
[Deps] unpin axe-core
b78f19d
[Deps] pin axe-core
to v4.4.1, due to a breaking change in a patch768910e
[Deps] update @babel/runtime
f0e04ce
[Deps] update @babel/runtime
, jsx-ast-utils
93b2a9d
[Dev Deps] update @babel/cli
, @babel/core
, @babel/eslint-parser
, @babel/plugin-transform-flow-strip-types
, @babel/register
a962211
[Dev Deps] update @babel/cli
, @babel/core
, @babel/plugin-transform-flow-strip-types
, @babel/register
0d2bc43
[Tests] no-noninteractive-element-interactions
: add passing test cases (#876)ffefbad
[Tests] no-noninteractive-element-interactions
: add passing tests for form with onSubmit (#871)e7d405d
[Tests] no-static-element-interactions
: add passing test cases566011b
[New] aria-role
: add allowedInvalidRoles
option (#828)64dcac6
[New] Introduce a plugin-wide setting for custom components. (#844)ce2c328
[Fix] no-redundant-roles
, role-supports-aria-props
: Remove implicit role from dl element (#848)fb20bc4
[Refactor] role-supports-aria-props
: clean up the logic a bit[].concat
idiom0f1615a
[Docs] no-static-element-interactions
: Update error message (#843)9980d1d
[Docs] Add infrastructure for auto-generating markdown table and list (#837)f878d3b
[Docs] Update project readme (#831)aea7671
[Deps] update @babel/runtime
, array-includes
, axe-core
, jsx-ast-utils
d74173a
[Deps] update jsx-ast-utils
f6ba03c
[Deps] update @babel/runtime
, jsx-ast-utils
547dab4
[Deps] update @babel/runtime
, axe-core
, minimatch
baaf791
[Deps] update @babel/runtime
, minimatch
, semver
c015fef
[Deps] update @babel/runtime
, axe-core
, damerau-levenshtein
832cbd6
[meta] add export default
instead of module.exports
(#861)ee933a2
[meta] Add CONTRIBUTING.md to solicit contributions (#846)fa3c869
[Dev Deps] update @babel/cli
, @babel/core
, @babel/eslint-parser
, @babel/plugin-transform-flow-strip-types
, aud
, eslint-plugin-eslint-plugin
, eslint-plugin-flowtype
, eslint-plugin-import
fb3d51e
[Dev Deps] update @babel/core
, @babel/register
, eslint-plugin-import
, minimist
8c1df4d
[Dev Deps] pin @technote-space/doctoc
because v2.5 is a breaking changefb071ab
[Dev Deps] update @babel/cli
, @babel/core
, @babel/eslint-parser
, @babel/plugin-transform-flow-strip-types
, eslint-plugin-eslint-plugin
5e966e5
[Dev Deps] update @babel/cli
f597f5b
[Dev Deps] update @babel/cli
, @babel/core
, @babel/eslint-parser
287854a
[Tests] Fix npm run flow
(#856)112261c
[Tests] skip fragment tests in eslint < 6ea877c4
[Tests] img-redundant-alt-test
: add passing tests (#832)685426d
test: align usage of jest expect across tests (#827)c460a8b
[Tests] move invalid test case to valid; changed in axe-core v4.40f5f582
[New] support ESLint 8.x (#810)1dbc416
[Deps] update @babel/runtime
, axe-core
4043d31
[Dev Deps] update @babel/cli
, @babel/core
, @babel/eslint-parser
, @babel/plugin-transform-flow-strip-types
, eslint-config-airbnb-base
d143cba
[Docs] HTTP => HTTPS (#823)309b040
[Docs] anchor-has-content
: add missing close / for jsx succeed example (#821)ba1e312
[eslint] simplify eslint commandmaster
references in URLs to HEAD
f1414cf
[Dev Deps] add eslint-plugin-eslint-plugin
(#818)f44fc05
[meta] update URLsdf34872
[Refactor] switch to export default
syntax for exporting rules (#819)ff26b82
[meta] fix prepublish scriptsd4a57d8
[Deps] update @babel/runtime
, array-includes
, axe-core
, jsx-ast-utils
bd1dec6
[Dev Deps] update @babel/cli
, @babel/core
, @babel/eslint-parser
, eslint-plugin-import
, estraverse
, safe-publish-latest
434c4cf
[Tests] do not test eslint 7 on node 11aed7a20
[Tests] use @babel/eslint-parser
instead of babel-eslint
(#811).github
repoecf7a27
[Docs] scope
: replace duplicate scope
word (#799)952af25
[Fix] no-access-key
: Fix wording and grammar (#800)6cf7ac0
[Dev Deps] update @babel/cli
, @babel/core
, @babel/plugin-transform-flow-strip-types
, aud
, eslint-plugin-flowtype
, eslint-plugin-import
79a35d4
[Deps] update @babel/runtime
, axe-core
, damerau-levenshtein
2a9ab71
[Tests] delete src/util/getComputedRole-test.js
test in node 60c1c587
[Tests] autocomplete-valid
: move some failed tests to passingimport type
d57887c
[Tests] ensure all tests run55e5c11
Support img role for canvas (#796)36102cd
[meta] use prepublishOnly
script for npm 7+2501a7f
Remove the link-button focus css from the anchor-is-valid doc (#662)d927625
Update recommended config to allow fieldset to have the radiogroup role (#746)5aa8db9
[Docs] Clarify the title of the strictness table in the main doc (#786)df3c7ad
[Docs] Document the similarity between html-has-lang and lang (#778)426d4c2
Fix Flow warnings (#785)ecec8e4
Fully deprecate accessible-emoji rule (#782)8a0e43c
[Tests] remove .travis.ymlf88bf6b
[Dev Deps] update flow-bin
to support aarch64 (#784)369f9db
[Dev Deps] update @babel/cli
, @babel/core
, @babel/plugin-transform-flow-strip-types
, aud
, eslint-plugin-flowtype
, jscodeshift
ce0785f
[Deps] update @babel/runtime
, array-includes
, axe-core
, emoji-regex
2c2a2ad
[actions] update to use node/install
actionc275964
[Docs] anchor-is-valid
: general cleanup (#728)3df059e
[Docs] no-redundant-roles
: Adds missing closing square bracket (#775)42ce5b7
[Docs] anchor-is-valid
: Add Next.js case (#769)2e5df91
[Tests] fix tests breaking on npm 7066ccff
[Docs] no-noninteractive-tabindex
: Add example for tabIndex on seemingly non-interactive element (#760)6b19aa5
[Tests] migrate tests to Github Actions (#764)7e158e3
[meta] run aud
in posttest
71f390f
[Tests] stop using coverallse54b466
[meta] add Automatic Rebase and Require Allow Edits workflows7d5511d
[New] label-has-associated-control
: Add glob support (#749)854da0c
Ran npm update; latest packages (#763)8637aa7
(source/pr/734, fork/pr/26) [patch] strict
config: Turn off label-has-for
(#734)d85ce54
[doc] Add link to MDN Aria documentation (#762)20b48a4
[patch] no-onchange
: Remove rule from recommended/strict configs, and deprecate (#757)f8a4496
Upgrade jsx-ast-utils to v3.1.083e4ff2
[Deps] update axe-core
, jsx-ast-utils
eb92b07
[Dev Deps] update @babel/cli
, @babel/core
, @babel/plugin-transform-flow-strip-types
, eslint-plugin-flowtype
, eslint-plugin-import
, estraverse
, expect
, object.assign
3d98d7a
[Deps] update @babel/runtime
, axe-core
f702f62
[readme] add Spanish translationc2ae092
[Docs] no-static-element-interactions
: Fixed rule name in commentsb90e20d
Fix screenreader -> screen reader645900a
Fixed rule name in comments381b9d6
[fix:634] Ignore control elements that are hidden2c47f0a
[Fix] autocomplete-valid
: workaround for axe not being able to handle null
00bd6d8
Add failing test for autocomplete with dynamic type3c49c9a
Add WCAG guidelines to rule documentation4ecaf35
Add a testcase for tablist to interactive supports focusdac6864
Deprecate the accessible-emoji ruleb315698
Allow negative tabindex in aria-activedescendant-has-tabindex8e6fcd0
docs: fix travis badge now points to correct location at travis-ci.com2234df7
Account for additional control elements in label-has-associated-control5cbb718
Adding test cases for label tests66c425c
Additional test case for no-redundant-roles765da0f
Update to aria-query 4.2.2d528e8c
Fix aria-level allowed on elements wit role heading (#704)29c6859
[meta] remove yarn registry from npmrc, so publishing worksf52c206
chore(package): update estraverse to version 5.0.0cce838a
Update aria-query to 4.2.0121e8a4
Add two test cases found while upgrading to ARIA 1.28059f51
Fix test failures raised by the upgrade to ARIA 1.20d24e3a
Update package.jsonb1f412a
Fix test failures in role-has-required-aria-props due to ARIA 1.2 updates74cec6e
Fix test failures in no-noninteractive-element-interactions due to ARIA 1.2 updates835b89e
Fix test failures in role-supports-aria-props-test due to ARIA 1.2 updates730319b
Account for the null semantic generic role in ARIA 1.27dfa7c9
Update aria-query from 4.0.1 to 4.0.242098b9
[Refactor] img-redundant-alt
: removing a use of some
a910d83
[Tests] label-has-associated-control
: add test for b273fe5
[New] Support ESLint 7.x1a97632
[Deps] update @babel/runtime
, array-includes
, axe-core
, axobject-query
, damerau-levenshtein
, jsx-ast-utils
b36976f
[Dev Deps] update @babel/cli
, @babel/core
, @babel/plugin-transform-flow-types
, babel-eslint
, babel-jest
, coveralls
, eslint-config-airbnb-base
, eslint-plugin-flowtype
, eslint-plugin-import
, estraverse
, in-publish
, jest
, minimist
, rimraf
, safe-publish-latest
89acdc4
fix: removing the use of the some function410ae43
chore(package): update eslint-plugin-flowtype to version 5.0.0a87f83d
fix(package): update emoji-regex to version 9.0.071940e6
chore(package): update babel-preset-airbnb to version 5.0.0d471f54
docs: Fix 404 links to WAI-ARIA spec42a2016
Fixes #669: use the language-tags
package to check the lang
rule7bcea20
[Tests] update axe-coref13dc38
[Deps] Pin axe-core version33670bb
fix: require missing 'autocomplete-valid' ruleaca4c37
chore(mouse-event): revert unrelated formatting changesdf1e275
fix(mouse-event): remove check from custom elements1a16a1c
chore(package): update jscodeshift to version 0.7.07a55cdd
chore(package): update flow-bin to version 0.113.08e0d22b
Update aria-query and axobject-query to the latest versionsdd49060
Added test cases for an empty or undefined value of aria-label and aria-labelledby in alt-text1a7b94f
Updated dependencies including eslint-config-airbnb-base3aea217
chore: replace ignoreNonDOM with inputComponents1848d00
feat(autocomplete-valid): add to recommended & strict config3519c7b
chore: Remove axe VirtualNode abstraction9ac55c4
autocomplete-valid: Add inline comment44c6098
Update axe-core to 3.3.082f598e
[Docs] examples: add language in code block for syntax highlight2529ad3
fixing casing issue on aria-props00926f2
Update README.mdce5d121
Update README.md031574e
chore(package): update flow-bin to version 0.103.0e00e1db
[meta] add FUNDING.ymle1e5fae
Fix readme file9980e45
[fix] Prevent Error when JSXSpreadAttribute is passed to isSemanticRoleElementf234698
[docs] add How to manage IDs9924d03
[docs] document jsx-a11y/label-has-associated-control assert option77b9870
[docs] Add newlines below headings8244e43
[docs] Add syntax highlighting to example26f41c8
[docs] Change explanation for role="presentation" escape hatch33a1f94
[fix] - Purely decorative emojis do not need descriptions.29d20f7
fix: update emoji-regex to version 7.0.20b63f73
chore: update flow-bin to version 0.88.0baa1344
[fix] Disable jsx-a11y/label-has-for in recommended2c5fb06
chore: update jscodeshift to version 0.6.087debc0
[fix] corrected no-noninteractive-element-to-interactive-role.md filed56265b
chore: update flow-bin to version 0.87.0477966f
[fix] Update test for implicit role of img
f484ce3
[fix] No implicit role for <img>
with alt=""
6c33bcb
[fix] Add select to the list of default control elements in label-has-associated-control011f8d9
[fix] Dialog and Alert roles can host keyboard listeners0f6a8af
[fix] More easier plugin:jsx-a11y/{recommended,strict}
configs93265cb
[fix] normalizedValues to values651366c
[fix] Make aria-role case sensitive56d3b9a
[fix] [484] Fix role-has-required-aria-props for semantic elements like input[checkbox]46e9abd
[fix] Handle the type={truthy} case in jsxlabel-has-for
: textarea
s are inputs too #470.npmignore
with /
so it only matches the top-level directorysrc
and flow
from package to resolve flow issues for consuming packages.anchor-is-valid
. See documentation for configuration options. Thanks @AlmeroSteyn.href-no-hash
replaced with anchor-is-valid
in the recommended and strict configs. Use the invalidHref
aspect (active by default) in anchor-is-valid
to continue to apply the behavior provided by href-no-hash
.label-has-for
now allows inputs nested in label tags. Previously it was strict about requiring a for
attribute. Thanks @ignatiusreza and @mjaltamirano.interactive-supports-focus
. Recommended and strict configs for now contain a trimmed-down whitelist of roles that will be checked.media-has-caption
. Thanks @ismail-syed.aria-props
rule incorrectly threw errors for these new properties.label-has-for
: add "required" option to allow customization (#240)anchor-is-valid
(#224)interactive-supports-focus
: Split interactive supports focus into tabbable and focusable cases (#236)anchor-is-valid
: add aspects
option (#251)flow
directory from .npmignore
to accommodate explicit imports from v5.0.2
.img-has-alt
rule into alt-text
ruleonclick-has-role
is removed. Replaced with no-static-element-interactions
and no-noninteractive-element-interactions
.onclick-has-focus
is removed. Replaced with interactive-supports-focus
.media-has-caption
ruleignoreNonDOM
option to no-autofocus
.no-interactive-element-to-noninteractive-role
no-noninteractive-element-to-interactive-role
no-noninteractive-tabindex
no-static-element-interactions
and no-noninteractive-element-interactions
. Options allow for fine-tuning of elements and event handlers to check.Add new rules:
jsx-a11y/accessible-emoji
jsx-a11y/aria-activedescendant-has-tabindex
jsx-a11y/iframe-has-title
jsx-a11y/no-autofocus
jsx-a11y/no-distracting-elements
(breaking: consolidated no-marquee and no-blink into this rule.)jsx-a11y/no-redundant-roles
ignoreNonDom
aria-invalid
values true and false pass for rule aria-proptypes
href-no-hash
accepts new schema property specialLink
to check for custom href
properties on elements. (fixes #76)img-has-alt
now prefers alt=""
over role="presentation"
. You can set both, but not just role="presentation"
by itself to ensure a11y across all devices.Note - see rule documentation for updated schemas.
switch
aria role.x-has-content
rules now pass with children prop set.tablist
role to include missing property aria-multiselectable
.click-events-have-key-events
rule.no-static-element-interactions
rule.eslint
, eslint-config-airbnb
, mocha
to latest.error
syntax over 2
syntax in recommended config.aria-checked
for roles that are subclasses of checkbox
anchor-has-content
rule.img-redundant-alt
(mainly for i18n).heading-has-content
: dangerouslySetInnerHTML will pass.no-onchange
rule to select menu elements only.eslint
v3 as a peerDependency
.eslint
as a peerDependency
.<ELEMENT role />
for role-supports-aria-props
.img-redundant-alt
rule to use getLiteralPropValue
from jsx-ast-utils
.heading-has-content
for children content.jsx-ast-utils
to use propName
function. More support for namespaced names on attributes and elements.aria-unsupported-elements
and role-supports-aria-props
when reporting.aria-*
propsrole
value is a string before converting to lowercase in img-has-alt
rule.tabIndex
expression values, but still retain validation logic for literal tabIndex
values.Button
vs button
).BinaryExpression
type.NewExpression
type.ObjectExpression
type.ConditionalExpression
type.onclick-has-focus
.ThisExpression
type.img-uses-alt
to img-has-alt
onlick-uses-role
to onclick-has-role
mouse-events-map-to-key-events
to mouse-events-have-key-events
use-onblur-not-onchange
to no-onchange
label-uses-for
to label-has-for
redundant-alt
to img-redundant-alt
no-hash-href
to href-no-hash
[breaking] Rename valid-aria-role
to aria-role
[new] Implement aria-props
rule
[new] Implement aria-proptypes
rule
[new] Implement aria-unsupported-elements
rule
[new] Implement onclick-has-focus
rule
[new] Implement role-has-required-aria-props
rule
[new] Implement role-supports-aria-props
rule
[new] Implement tabindex-no-positive
rule
<Component prop={foo || "foobar"} />
Object.Property
i.e. UX.Layout