-
-
Notifications
You must be signed in to change notification settings - Fork 638
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow title
attribute or aria-label
attribute instead of accessible child in the "anchor-has-content" rule
#727
Allow title
attribute or aria-label
attribute instead of accessible child in the "anchor-has-content" rule
#727
Conversation
@gorohash are you thinking that using both |
@jessebeach |
@gorohash Requiring both |
@backwardok I agree with you. A tooltip shown by |
Hi @gorohash ! I may have been confusing with my language. I meant I recommend that it be updated to be an OR instead of an AND 🙂 Would you want to make that update to your own code? |
d423ff5
to
ff93739
Compare
title
and aria-label
attributes in the "anchor-has-content" ruletitle
attribute or aria-label
attribute instead of accessible child in the "anchor-has-content" rule
@backwardok Thanks for your advice! I updated my code |
5177497
to
2a36fa5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for adding in this support!
2a36fa5
to
1abfa34
Compare
Codecov Report
@@ Coverage Diff @@
## main #727 +/- ##
=======================================
Coverage 99.29% 99.29%
=======================================
Files 104 104
Lines 1555 1557 +2
Branches 523 524 +1
=======================================
+ Hits 1544 1546 +2
Misses 11 11
|
Hey @jessebeach ! Was wondering if you could review this PR? Thanks! 😄 |
1abfa34
to
e6bfd5c
Compare
@jessebeach this is freshly rebased; mind giving it a review? |
I'll have a look tonight after the kiddo goes to sleep. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a good improvement.
In the future, we will want to incorporate the mayHaveAccessibleLabel
utility and somehow port a consideration for title
back into that utility, so that we don't have so much logic directly in a rule, where it might diverge from other similar rules.
But for now, this is an improvement to this rule.
Thank you @backwardok !! |
ack, apologies @ljharb! I hit the Merge button on this one. I know you like to merge the commits in a different way. |
No worries, it’s fine :-) thanks for reviewing! |
| datasource | package | from | to | | ---------- | ---------------------- | ----- | ----- | | npm | eslint-plugin-jsx-a11y | 6.6.1 | 6.9.0 | ##### [\`v6.9.0\`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v690---2024-06-19) ##### Fixed - \[Fix] `img-redundant-alt`: fixed multibyte character support [`#969`](jsx-eslint/eslint-plugin-jsx-a11y#969) - \[meta] fix changelog links [`#960`](jsx-eslint/eslint-plugin-jsx-a11y#960) ##### Commits - \[New] add support for Flat Config [`6b5f096`](jsx-eslint/eslint-plugin-jsx-a11y@6b5f096) - Revert "\[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1" [`75d5dd7`](jsx-eslint/eslint-plugin-jsx-a11y@75d5dd7) - \[Robustness] use `safe-regex-test` [`4c7e781`](jsx-eslint/eslint-plugin-jsx-a11y@4c7e781) - \[actions] update actions/checkout [`51a1ca7`](jsx-eslint/eslint-plugin-jsx-a11y@51a1ca7) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `eslint-doc-generator`, `object.entries` [`1271ac1`](jsx-eslint/eslint-plugin-jsx-a11y@1271ac1) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/register`, `aud`, `eslint-plugin-import`, `npmignore`, `object.assign` [`540cb7a`](jsx-eslint/eslint-plugin-jsx-a11y@540cb7a) - \[Deps] update `@babel/runtime`, `array-includes`, `es-iterator-helpers`, `hasown`, `object.fromentries`, `safe-regex-test` [`5d14408`](jsx-eslint/eslint-plugin-jsx-a11y@5d14408) - \[Deps] pin `aria-query` and `axobject-query`, add `ls-engines` test to CI [`32fd82c`](jsx-eslint/eslint-plugin-jsx-a11y@32fd82c) - \[Dev Deps] update `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `eslint-doc-generator` [`d1b4114`](jsx-eslint/eslint-plugin-jsx-a11y@d1b4114) - \[Fix] ensure `summary` remains non-interactive [`6a048da`](jsx-eslint/eslint-plugin-jsx-a11y@6a048da) - \[Deps] remove `@babel/runtime` [`0a98ad8`](jsx-eslint/eslint-plugin-jsx-a11y@0a98ad8) - \[New] `no-noninteractive-element-to-interactive-role`: allow `menuitemradio` and `menuitemcheckbox` on \<li> [`c0733f9`](jsx-eslint/eslint-plugin-jsx-a11y@c0733f9) - \[Deps] update `@babel/runtime`, `safe-regex-test` [`0d5321a`](jsx-eslint/eslint-plugin-jsx-a11y@0d5321a) - \[actions] pin codecov to v3.1.5 [`961817f`](jsx-eslint/eslint-plugin-jsx-a11y@961817f) - \[Deps] unpin `axe-core` [`b3559cf`](jsx-eslint/eslint-plugin-jsx-a11y@b3559cf) - \[Deps] move `object.entries` to dev deps [`1be7b70`](jsx-eslint/eslint-plugin-jsx-a11y@1be7b70) - \[Deps] update `@babel/runtime` [`2a48abb`](jsx-eslint/eslint-plugin-jsx-a11y@2a48abb) - \[Deps] update `@babel/runtime` [`1adec35`](jsx-eslint/eslint-plugin-jsx-a11y@1adec35) ##### [\`v6.8.0\`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v680---2023-11-01) ##### Merged - Allow `title` attribute or `aria-label` attribute instead of accessible child in the "anchor-has-content" rule [`#727`](jsx-eslint/eslint-plugin-jsx-a11y#727) ##### Fixed - \[Docs] `aria-activedescendant-has-tabindex`: align with changes from [#708](jsx-eslint/eslint-plugin-jsx-a11y#708) [`#924`](jsx-eslint/eslint-plugin-jsx-a11y#924) - \[Fix] `control-has-associated-label`: don't accept whitespace as an accessible label [`#918`](jsx-eslint/eslint-plugin-jsx-a11y#918) ##### Commits - \[Tests] migrate helper parsers function from `eslint-plugin-react` [`ce4d57f`](jsx-eslint/eslint-plugin-jsx-a11y@ce4d57f) - \[Refactor] use `es-iterator-helpers` [`52de824`](jsx-eslint/eslint-plugin-jsx-a11y@52de824) - \[New] `mouse-events-have-key-events`: add `hoverInHandlers`/`hoverOutHandlers` config [`db64898`](jsx-eslint/eslint-plugin-jsx-a11y@db64898) - \[New] add `polymorphicPropName` setting for polymorphic components [`fffb05b`](jsx-eslint/eslint-plugin-jsx-a11y@fffb05b) - \[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1 [`64bfea6`](jsx-eslint/eslint-plugin-jsx-a11y@64bfea6) - \[Refactor] use `hasown` instead of `has` [`9a8edde`](jsx-eslint/eslint-plugin-jsx-a11y@9a8edde) - \[actions] update used actions [`10c061a`](jsx-eslint/eslint-plugin-jsx-a11y@10c061a) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `aud`, `eslint-doc-generator`, `eslint-plugin-import`, `minimist` [`6d5022d`](jsx-eslint/eslint-plugin-jsx-a11y@6d5022d) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/register`, `eslint-doc-generator`, `eslint-plugin-import` [`4dc7f1e`](jsx-eslint/eslint-plugin-jsx-a11y@4dc7f1e) - \[New] `anchor-has-content`: Allow title attribute OR aria-label attribute [`e6bfd5c`](jsx-eslint/eslint-plugin-jsx-a11y@e6bfd5c) - \[patch] `mouse-events-have-key-events`: rport the attribute, not the node [`eadd70c`](jsx-eslint/eslint-plugin-jsx-a11y@eadd70c) - \[Deps] update `@babel/runtime`, `array-includes`, `array.prototype.flatmap`, `object.entries`, `object.fromentries` [`46ffbc3`](jsx-eslint/eslint-plugin-jsx-a11y@46ffbc3) - \[Deps] update `@babel/runtime`, `axobject-query`, `jsx-ast-utils`, `semver` [`5999555`](jsx-eslint/eslint-plugin-jsx-a11y@5999555) - \[Fix] pin `aria-query` and `axe-core` to fix failing tests on main [`8d8f016`](jsx-eslint/eslint-plugin-jsx-a11y@8d8f016) - \[patch] move `semver` from Deps to Dev Deps [`4da13e7`](jsx-eslint/eslint-plugin-jsx-a11y@4da13e7) - \[Deps] update `ast-types-flow` [`b755318`](jsx-eslint/eslint-plugin-jsx-a11y@b755318) - \[Dev Deps] update `eslint-plugin-import` [`f1c976b`](jsx-eslint/eslint-plugin-jsx-a11y@f1c976b) - \[Deps] unpin `language-tags` [`3d1d26d`](jsx-eslint/eslint-plugin-jsx-a11y@3d1d26d) - \[Docs] `no-static-element-interactions`: tabIndex is written tabindex [`1271153`](jsx-eslint/eslint-plugin-jsx-a11y@1271153) - \[Deps] Upgrade ast-types-flow to mitigate Docker user namespacing problems [`f0d2ddb`](jsx-eslint/eslint-plugin-jsx-a11y@f0d2ddb) - \[Dev Deps] pin `jackspeak` since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 [`0c278f4`](jsx-eslint/eslint-plugin-jsx-a11y@0c278f4) ##### [\`v6.7.1\`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v671---2023-01-11) ##### Commits - \[Fix] `no-aria-hidden-on-focusable` rule's missing export [`b01219e`](ljharb/eslint-plugin-jsx-a11y@b01219e) ##### [\`v6.7.0\`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v670---2023-01-09) ##### Merged - New rule: prefer-tag-over-role [`#833`](https://github.com/ljharb/eslint-plugin-jsx-a11y/pull/833) ##### Fixed - \[Tests] `aria-role`: add now-passing test [`#756`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/756) - \[Docs] `control-has-associated-label`: fix metadata [`#892`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/892) - \[New] add `no-aria-hidden-on-focusable` rule [`#881`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/881) ##### Commits - \[Docs] automate docs with `eslint-doc-generator` [`6d7a857`](ljharb/eslint-plugin-jsx-a11y@6d7a857) - \[Refactor] use fromEntries, flatMap, etc; better use iteration methods [`3d77c84`](ljharb/eslint-plugin-jsx-a11y@3d77c84) - \[New] add `anchor-ambiguous-text` rule [`7f6463e`](ljharb/eslint-plugin-jsx-a11y@7f6463e) - \[New] add `getAccessibleChildText` util [`630116b`](ljharb/eslint-plugin-jsx-a11y@630116b) - \[New] Add `isFocusable` utils method [`e199d17`](ljharb/eslint-plugin-jsx-a11y@e199d17) - \[Docs] update `eslint-doc-generator` to v1.0.0 [`6b9855b`](ljharb/eslint-plugin-jsx-a11y@6b9855b) - \[Fix] `no-noninteractive-element-interactions`: Ignore contenteditable elements in no-noninteractive-element-interactions [`9aa878b`](ljharb/eslint-plugin-jsx-a11y@9aa878b) - \[New] `anchor-ambiguous-text`: ignore punctuation [`bbae2c4`](ljharb/eslint-plugin-jsx-a11y@bbae2c4) - \[New] `anchor-ambiguous-text`, `getAccessibleChildText`: Implements check for `alt` tags on `<img />` elements [`bb84abc`](ljharb/eslint-plugin-jsx-a11y@bb84abc) - \[meta] use `npmignore` to autogenerate an npmignore file [`6ad2312`](ljharb/eslint-plugin-jsx-a11y@6ad2312) - \[meta] add `auto-changelog` [`283817b`](ljharb/eslint-plugin-jsx-a11y@283817b) - \[Docs] missing descriptions in some rules [`79b975a`](ljharb/eslint-plugin-jsx-a11y@79b975a) - \[Deps] update `aria-query`, `axobject-query` [`7b3cda3`](ljharb/eslint-plugin-jsx-a11y@7b3cda3) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `aud`, `object.assign` [`0852947`](ljharb/eslint-plugin-jsx-a11y@0852947) - \[meta] move `.eslintignore` to `ignorePatterns` [`65be35b`](ljharb/eslint-plugin-jsx-a11y@65be35b) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `aud`, `eslint-doc-generator` [`60c2df5`](ljharb/eslint-plugin-jsx-a11y@60c2df5) - \[Deps] update `@babel/runtime`, `array-includes`, `axe-core` [`4abc751`](ljharb/eslint-plugin-jsx-a11y@4abc751) - \[Deps] update `@babel/runtime`, `axe-core` [`89f766c`](ljharb/eslint-plugin-jsx-a11y@89f766c) - \[meta] run the build in prepack, not prepublish [`e411ce3`](ljharb/eslint-plugin-jsx-a11y@e411ce3) - \[Dev Deps] update `@babel/core`, `minimist` [`cccdb62`](ljharb/eslint-plugin-jsx-a11y@cccdb62) - \[Dev Deps] update `markdown-magic` [`3382059`](ljharb/eslint-plugin-jsx-a11y@3382059) - \[Fix] expose `prefer-tag-over-role` [`38d52f8`](ljharb/eslint-plugin-jsx-a11y@38d52f8) - \[Docs] `label-has-for`: reran generate-list-of-rules [`9a2af01`](ljharb/eslint-plugin-jsx-a11y@9a2af01) - \[Deps] pin `language-tags` to `v1.0.5` [`f84bb74`](ljharb/eslint-plugin-jsx-a11y@f84bb74) - \[Dev Deps] update `@babel/core` [`cf3f8d0`](ljharb/eslint-plugin-jsx-a11y@cf3f8d0) - \[Deps] update `axe-core` [`0a73cf4`](ljharb/eslint-plugin-jsx-a11y@0a73cf4) - \[Deps] update `@babel/runtime` [`053f04d`](ljharb/eslint-plugin-jsx-a11y@053f04d) - \[Deps] update `@babel/runtime` [`bccf0ae`](ljharb/eslint-plugin-jsx-a11y@bccf0ae) - \[Deps] update `jsx-ast-utils` [`c9687cc`](ljharb/eslint-plugin-jsx-a11y@c9687cc) - \[readme] Preventing code repetition in user's eslint config file [`8b889bf`](ljharb/eslint-plugin-jsx-a11y@8b889bf) - \[Docs] `prefer-tag-over-role`: rename docs file [`0bdf95b`](ljharb/eslint-plugin-jsx-a11y@0bdf95b) <!-- auto-changelog-above -->
| datasource | package | from | to | | ---------- | ---------------------- | ----- | ----- | | npm | eslint-plugin-jsx-a11y | 6.6.1 | 6.9.0 | ##### [\`v6.9.0\`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v690---2024-06-19) ##### Fixed - \[Fix] `img-redundant-alt`: fixed multibyte character support [`#969`](jsx-eslint/eslint-plugin-jsx-a11y#969) - \[meta] fix changelog links [`#960`](jsx-eslint/eslint-plugin-jsx-a11y#960) ##### Commits - \[New] add support for Flat Config [`6b5f096`](jsx-eslint/eslint-plugin-jsx-a11y@6b5f096) - Revert "\[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1" [`75d5dd7`](jsx-eslint/eslint-plugin-jsx-a11y@75d5dd7) - \[Robustness] use `safe-regex-test` [`4c7e781`](jsx-eslint/eslint-plugin-jsx-a11y@4c7e781) - \[actions] update actions/checkout [`51a1ca7`](jsx-eslint/eslint-plugin-jsx-a11y@51a1ca7) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `eslint-doc-generator`, `object.entries` [`1271ac1`](jsx-eslint/eslint-plugin-jsx-a11y@1271ac1) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/register`, `aud`, `eslint-plugin-import`, `npmignore`, `object.assign` [`540cb7a`](jsx-eslint/eslint-plugin-jsx-a11y@540cb7a) - \[Deps] update `@babel/runtime`, `array-includes`, `es-iterator-helpers`, `hasown`, `object.fromentries`, `safe-regex-test` [`5d14408`](jsx-eslint/eslint-plugin-jsx-a11y@5d14408) - \[Deps] pin `aria-query` and `axobject-query`, add `ls-engines` test to CI [`32fd82c`](jsx-eslint/eslint-plugin-jsx-a11y@32fd82c) - \[Dev Deps] update `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `eslint-doc-generator` [`d1b4114`](jsx-eslint/eslint-plugin-jsx-a11y@d1b4114) - \[Fix] ensure `summary` remains non-interactive [`6a048da`](jsx-eslint/eslint-plugin-jsx-a11y@6a048da) - \[Deps] remove `@babel/runtime` [`0a98ad8`](jsx-eslint/eslint-plugin-jsx-a11y@0a98ad8) - \[New] `no-noninteractive-element-to-interactive-role`: allow `menuitemradio` and `menuitemcheckbox` on \<li> [`c0733f9`](jsx-eslint/eslint-plugin-jsx-a11y@c0733f9) - \[Deps] update `@babel/runtime`, `safe-regex-test` [`0d5321a`](jsx-eslint/eslint-plugin-jsx-a11y@0d5321a) - \[actions] pin codecov to v3.1.5 [`961817f`](jsx-eslint/eslint-plugin-jsx-a11y@961817f) - \[Deps] unpin `axe-core` [`b3559cf`](jsx-eslint/eslint-plugin-jsx-a11y@b3559cf) - \[Deps] move `object.entries` to dev deps [`1be7b70`](jsx-eslint/eslint-plugin-jsx-a11y@1be7b70) - \[Deps] update `@babel/runtime` [`2a48abb`](jsx-eslint/eslint-plugin-jsx-a11y@2a48abb) - \[Deps] update `@babel/runtime` [`1adec35`](jsx-eslint/eslint-plugin-jsx-a11y@1adec35) ##### [\`v6.8.0\`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v680---2023-11-01) ##### Merged - Allow `title` attribute or `aria-label` attribute instead of accessible child in the "anchor-has-content" rule [`#727`](jsx-eslint/eslint-plugin-jsx-a11y#727) ##### Fixed - \[Docs] `aria-activedescendant-has-tabindex`: align with changes from [#708](jsx-eslint/eslint-plugin-jsx-a11y#708) [`#924`](jsx-eslint/eslint-plugin-jsx-a11y#924) - \[Fix] `control-has-associated-label`: don't accept whitespace as an accessible label [`#918`](jsx-eslint/eslint-plugin-jsx-a11y#918) ##### Commits - \[Tests] migrate helper parsers function from `eslint-plugin-react` [`ce4d57f`](jsx-eslint/eslint-plugin-jsx-a11y@ce4d57f) - \[Refactor] use `es-iterator-helpers` [`52de824`](jsx-eslint/eslint-plugin-jsx-a11y@52de824) - \[New] `mouse-events-have-key-events`: add `hoverInHandlers`/`hoverOutHandlers` config [`db64898`](jsx-eslint/eslint-plugin-jsx-a11y@db64898) - \[New] add `polymorphicPropName` setting for polymorphic components [`fffb05b`](jsx-eslint/eslint-plugin-jsx-a11y@fffb05b) - \[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1 [`64bfea6`](jsx-eslint/eslint-plugin-jsx-a11y@64bfea6) - \[Refactor] use `hasown` instead of `has` [`9a8edde`](jsx-eslint/eslint-plugin-jsx-a11y@9a8edde) - \[actions] update used actions [`10c061a`](jsx-eslint/eslint-plugin-jsx-a11y@10c061a) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `aud`, `eslint-doc-generator`, `eslint-plugin-import`, `minimist` [`6d5022d`](jsx-eslint/eslint-plugin-jsx-a11y@6d5022d) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/register`, `eslint-doc-generator`, `eslint-plugin-import` [`4dc7f1e`](jsx-eslint/eslint-plugin-jsx-a11y@4dc7f1e) - \[New] `anchor-has-content`: Allow title attribute OR aria-label attribute [`e6bfd5c`](jsx-eslint/eslint-plugin-jsx-a11y@e6bfd5c) - \[patch] `mouse-events-have-key-events`: rport the attribute, not the node [`eadd70c`](jsx-eslint/eslint-plugin-jsx-a11y@eadd70c) - \[Deps] update `@babel/runtime`, `array-includes`, `array.prototype.flatmap`, `object.entries`, `object.fromentries` [`46ffbc3`](jsx-eslint/eslint-plugin-jsx-a11y@46ffbc3) - \[Deps] update `@babel/runtime`, `axobject-query`, `jsx-ast-utils`, `semver` [`5999555`](jsx-eslint/eslint-plugin-jsx-a11y@5999555) - \[Fix] pin `aria-query` and `axe-core` to fix failing tests on main [`8d8f016`](jsx-eslint/eslint-plugin-jsx-a11y@8d8f016) - \[patch] move `semver` from Deps to Dev Deps [`4da13e7`](jsx-eslint/eslint-plugin-jsx-a11y@4da13e7) - \[Deps] update `ast-types-flow` [`b755318`](jsx-eslint/eslint-plugin-jsx-a11y@b755318) - \[Dev Deps] update `eslint-plugin-import` [`f1c976b`](jsx-eslint/eslint-plugin-jsx-a11y@f1c976b) - \[Deps] unpin `language-tags` [`3d1d26d`](jsx-eslint/eslint-plugin-jsx-a11y@3d1d26d) - \[Docs] `no-static-element-interactions`: tabIndex is written tabindex [`1271153`](jsx-eslint/eslint-plugin-jsx-a11y@1271153) - \[Deps] Upgrade ast-types-flow to mitigate Docker user namespacing problems [`f0d2ddb`](jsx-eslint/eslint-plugin-jsx-a11y@f0d2ddb) - \[Dev Deps] pin `jackspeak` since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 [`0c278f4`](jsx-eslint/eslint-plugin-jsx-a11y@0c278f4) ##### [\`v6.7.1\`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v671---2023-01-11) ##### Commits - \[Fix] `no-aria-hidden-on-focusable` rule's missing export [`b01219e`](ljharb/eslint-plugin-jsx-a11y@b01219e) ##### [\`v6.7.0\`](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v670---2023-01-09) ##### Merged - New rule: prefer-tag-over-role [`#833`](https://github.com/ljharb/eslint-plugin-jsx-a11y/pull/833) ##### Fixed - \[Tests] `aria-role`: add now-passing test [`#756`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/756) - \[Docs] `control-has-associated-label`: fix metadata [`#892`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/892) - \[New] add `no-aria-hidden-on-focusable` rule [`#881`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/881) ##### Commits - \[Docs] automate docs with `eslint-doc-generator` [`6d7a857`](ljharb/eslint-plugin-jsx-a11y@6d7a857) - \[Refactor] use fromEntries, flatMap, etc; better use iteration methods [`3d77c84`](ljharb/eslint-plugin-jsx-a11y@3d77c84) - \[New] add `anchor-ambiguous-text` rule [`7f6463e`](ljharb/eslint-plugin-jsx-a11y@7f6463e) - \[New] add `getAccessibleChildText` util [`630116b`](ljharb/eslint-plugin-jsx-a11y@630116b) - \[New] Add `isFocusable` utils method [`e199d17`](ljharb/eslint-plugin-jsx-a11y@e199d17) - \[Docs] update `eslint-doc-generator` to v1.0.0 [`6b9855b`](ljharb/eslint-plugin-jsx-a11y@6b9855b) - \[Fix] `no-noninteractive-element-interactions`: Ignore contenteditable elements in no-noninteractive-element-interactions [`9aa878b`](ljharb/eslint-plugin-jsx-a11y@9aa878b) - \[New] `anchor-ambiguous-text`: ignore punctuation [`bbae2c4`](ljharb/eslint-plugin-jsx-a11y@bbae2c4) - \[New] `anchor-ambiguous-text`, `getAccessibleChildText`: Implements check for `alt` tags on `<img />` elements [`bb84abc`](ljharb/eslint-plugin-jsx-a11y@bb84abc) - \[meta] use `npmignore` to autogenerate an npmignore file [`6ad2312`](ljharb/eslint-plugin-jsx-a11y@6ad2312) - \[meta] add `auto-changelog` [`283817b`](ljharb/eslint-plugin-jsx-a11y@283817b) - \[Docs] missing descriptions in some rules [`79b975a`](ljharb/eslint-plugin-jsx-a11y@79b975a) - \[Deps] update `aria-query`, `axobject-query` [`7b3cda3`](ljharb/eslint-plugin-jsx-a11y@7b3cda3) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `aud`, `object.assign` [`0852947`](ljharb/eslint-plugin-jsx-a11y@0852947) - \[meta] move `.eslintignore` to `ignorePatterns` [`65be35b`](ljharb/eslint-plugin-jsx-a11y@65be35b) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `aud`, `eslint-doc-generator` [`60c2df5`](ljharb/eslint-plugin-jsx-a11y@60c2df5) - \[Deps] update `@babel/runtime`, `array-includes`, `axe-core` [`4abc751`](ljharb/eslint-plugin-jsx-a11y@4abc751) - \[Deps] update `@babel/runtime`, `axe-core` [`89f766c`](ljharb/eslint-plugin-jsx-a11y@89f766c) - \[meta] run the build in prepack, not prepublish [`e411ce3`](ljharb/eslint-plugin-jsx-a11y@e411ce3) - \[Dev Deps] update `@babel/core`, `minimist` [`cccdb62`](ljharb/eslint-plugin-jsx-a11y@cccdb62) - \[Dev Deps] update `markdown-magic` [`3382059`](ljharb/eslint-plugin-jsx-a11y@3382059) - \[Fix] expose `prefer-tag-over-role` [`38d52f8`](ljharb/eslint-plugin-jsx-a11y@38d52f8) - \[Docs] `label-has-for`: reran generate-list-of-rules [`9a2af01`](ljharb/eslint-plugin-jsx-a11y@9a2af01) - \[Deps] pin `language-tags` to `v1.0.5` [`f84bb74`](ljharb/eslint-plugin-jsx-a11y@f84bb74) - \[Dev Deps] update `@babel/core` [`cf3f8d0`](ljharb/eslint-plugin-jsx-a11y@cf3f8d0) - \[Deps] update `axe-core` [`0a73cf4`](ljharb/eslint-plugin-jsx-a11y@0a73cf4) - \[Deps] update `@babel/runtime` [`053f04d`](ljharb/eslint-plugin-jsx-a11y@053f04d) - \[Deps] update `@babel/runtime` [`bccf0ae`](ljharb/eslint-plugin-jsx-a11y@bccf0ae) - \[Deps] update `jsx-ast-utils` [`c9687cc`](ljharb/eslint-plugin-jsx-a11y@c9687cc) - \[readme] Preventing code repetition in user's eslint config file [`8b889bf`](ljharb/eslint-plugin-jsx-a11y@8b889bf) - \[Docs] `prefer-tag-over-role`: rename docs file [`0bdf95b`](ljharb/eslint-plugin-jsx-a11y@0bdf95b) <!-- auto-changelog-above -->
| datasource | package | from | to | | ---------- | ---------------------- | ----- | ----- | | npm | eslint-plugin-jsx-a11y | 6.6.1 | 6.9.0 | ## [v6.9.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v690---2024-06-19) ##### Fixed - \[Fix] `img-redundant-alt`: fixed multibyte character support [`#969`](jsx-eslint/eslint-plugin-jsx-a11y#969) - \[meta] fix changelog links [`#960`](jsx-eslint/eslint-plugin-jsx-a11y#960) ##### Commits - \[New] add support for Flat Config [`6b5f096`](jsx-eslint/eslint-plugin-jsx-a11y@6b5f096) - Revert "\[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1" [`75d5dd7`](jsx-eslint/eslint-plugin-jsx-a11y@75d5dd7) - \[Robustness] use `safe-regex-test` [`4c7e781`](jsx-eslint/eslint-plugin-jsx-a11y@4c7e781) - \[actions] update actions/checkout [`51a1ca7`](jsx-eslint/eslint-plugin-jsx-a11y@51a1ca7) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `eslint-doc-generator`, `object.entries` [`1271ac1`](jsx-eslint/eslint-plugin-jsx-a11y@1271ac1) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/register`, `aud`, `eslint-plugin-import`, `npmignore`, `object.assign` [`540cb7a`](jsx-eslint/eslint-plugin-jsx-a11y@540cb7a) - \[Deps] update `@babel/runtime`, `array-includes`, `es-iterator-helpers`, `hasown`, `object.fromentries`, `safe-regex-test` [`5d14408`](jsx-eslint/eslint-plugin-jsx-a11y@5d14408) - \[Deps] pin `aria-query` and `axobject-query`, add `ls-engines` test to CI [`32fd82c`](jsx-eslint/eslint-plugin-jsx-a11y@32fd82c) - \[Dev Deps] update `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `eslint-doc-generator` [`d1b4114`](jsx-eslint/eslint-plugin-jsx-a11y@d1b4114) - \[Fix] ensure `summary` remains non-interactive [`6a048da`](jsx-eslint/eslint-plugin-jsx-a11y@6a048da) - \[Deps] remove `@babel/runtime` [`0a98ad8`](jsx-eslint/eslint-plugin-jsx-a11y@0a98ad8) - \[New] `no-noninteractive-element-to-interactive-role`: allow `menuitemradio` and `menuitemcheckbox` on \<li> [`c0733f9`](jsx-eslint/eslint-plugin-jsx-a11y@c0733f9) - \[Deps] update `@babel/runtime`, `safe-regex-test` [`0d5321a`](jsx-eslint/eslint-plugin-jsx-a11y@0d5321a) - \[actions] pin codecov to v3.1.5 [`961817f`](jsx-eslint/eslint-plugin-jsx-a11y@961817f) - \[Deps] unpin `axe-core` [`b3559cf`](jsx-eslint/eslint-plugin-jsx-a11y@b3559cf) - \[Deps] move `object.entries` to dev deps [`1be7b70`](jsx-eslint/eslint-plugin-jsx-a11y@1be7b70) - \[Deps] update `@babel/runtime` [`2a48abb`](jsx-eslint/eslint-plugin-jsx-a11y@2a48abb) - \[Deps] update `@babel/runtime` [`1adec35`](jsx-eslint/eslint-plugin-jsx-a11y@1adec35) ## [v6.8.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v680---2023-11-01) ##### Merged - Allow `title` attribute or `aria-label` attribute instead of accessible child in the "anchor-has-content" rule [`#727`](jsx-eslint/eslint-plugin-jsx-a11y#727) ##### Fixed - \[Docs] `aria-activedescendant-has-tabindex`: align with changes from [#708](jsx-eslint/eslint-plugin-jsx-a11y#708) [`#924`](jsx-eslint/eslint-plugin-jsx-a11y#924) - \[Fix] `control-has-associated-label`: don't accept whitespace as an accessible label [`#918`](jsx-eslint/eslint-plugin-jsx-a11y#918) ##### Commits - \[Tests] migrate helper parsers function from `eslint-plugin-react` [`ce4d57f`](jsx-eslint/eslint-plugin-jsx-a11y@ce4d57f) - \[Refactor] use `es-iterator-helpers` [`52de824`](jsx-eslint/eslint-plugin-jsx-a11y@52de824) - \[New] `mouse-events-have-key-events`: add `hoverInHandlers`/`hoverOutHandlers` config [`db64898`](jsx-eslint/eslint-plugin-jsx-a11y@db64898) - \[New] add `polymorphicPropName` setting for polymorphic components [`fffb05b`](jsx-eslint/eslint-plugin-jsx-a11y@fffb05b) - \[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1 [`64bfea6`](jsx-eslint/eslint-plugin-jsx-a11y@64bfea6) - \[Refactor] use `hasown` instead of `has` [`9a8edde`](jsx-eslint/eslint-plugin-jsx-a11y@9a8edde) - \[actions] update used actions [`10c061a`](jsx-eslint/eslint-plugin-jsx-a11y@10c061a) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `aud`, `eslint-doc-generator`, `eslint-plugin-import`, `minimist` [`6d5022d`](jsx-eslint/eslint-plugin-jsx-a11y@6d5022d) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/register`, `eslint-doc-generator`, `eslint-plugin-import` [`4dc7f1e`](jsx-eslint/eslint-plugin-jsx-a11y@4dc7f1e) - \[New] `anchor-has-content`: Allow title attribute OR aria-label attribute [`e6bfd5c`](jsx-eslint/eslint-plugin-jsx-a11y@e6bfd5c) - \[patch] `mouse-events-have-key-events`: rport the attribute, not the node [`eadd70c`](jsx-eslint/eslint-plugin-jsx-a11y@eadd70c) - \[Deps] update `@babel/runtime`, `array-includes`, `array.prototype.flatmap`, `object.entries`, `object.fromentries` [`46ffbc3`](jsx-eslint/eslint-plugin-jsx-a11y@46ffbc3) - \[Deps] update `@babel/runtime`, `axobject-query`, `jsx-ast-utils`, `semver` [`5999555`](jsx-eslint/eslint-plugin-jsx-a11y@5999555) - \[Fix] pin `aria-query` and `axe-core` to fix failing tests on main [`8d8f016`](jsx-eslint/eslint-plugin-jsx-a11y@8d8f016) - \[patch] move `semver` from Deps to Dev Deps [`4da13e7`](jsx-eslint/eslint-plugin-jsx-a11y@4da13e7) - \[Deps] update `ast-types-flow` [`b755318`](jsx-eslint/eslint-plugin-jsx-a11y@b755318) - \[Dev Deps] update `eslint-plugin-import` [`f1c976b`](jsx-eslint/eslint-plugin-jsx-a11y@f1c976b) - \[Deps] unpin `language-tags` [`3d1d26d`](jsx-eslint/eslint-plugin-jsx-a11y@3d1d26d) - \[Docs] `no-static-element-interactions`: tabIndex is written tabindex [`1271153`](jsx-eslint/eslint-plugin-jsx-a11y@1271153) - \[Deps] Upgrade ast-types-flow to mitigate Docker user namespacing problems [`f0d2ddb`](jsx-eslint/eslint-plugin-jsx-a11y@f0d2ddb) - \[Dev Deps] pin `jackspeak` since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 [`0c278f4`](jsx-eslint/eslint-plugin-jsx-a11y@0c278f4) ## [v6.7.1](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v671---2023-01-11) ##### Commits - \[Fix] `no-aria-hidden-on-focusable` rule's missing export [`b01219e`](ljharb/eslint-plugin-jsx-a11y@b01219e) ## [v6.7.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v670---2023-01-09) ##### Merged - New rule: prefer-tag-over-role [`#833`](https://github.com/ljharb/eslint-plugin-jsx-a11y/pull/833) ##### Fixed - \[Tests] `aria-role`: add now-passing test [`#756`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/756) - \[Docs] `control-has-associated-label`: fix metadata [`#892`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/892) - \[New] add `no-aria-hidden-on-focusable` rule [`#881`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/881) ##### Commits - \[Docs] automate docs with `eslint-doc-generator` [`6d7a857`](ljharb/eslint-plugin-jsx-a11y@6d7a857) - \[Refactor] use fromEntries, flatMap, etc; better use iteration methods [`3d77c84`](ljharb/eslint-plugin-jsx-a11y@3d77c84) - \[New] add `anchor-ambiguous-text` rule [`7f6463e`](ljharb/eslint-plugin-jsx-a11y@7f6463e) - \[New] add `getAccessibleChildText` util [`630116b`](ljharb/eslint-plugin-jsx-a11y@630116b) - \[New] Add `isFocusable` utils method [`e199d17`](ljharb/eslint-plugin-jsx-a11y@e199d17) - \[Docs] update `eslint-doc-generator` to v1.0.0 [`6b9855b`](ljharb/eslint-plugin-jsx-a11y@6b9855b) - \[Fix] `no-noninteractive-element-interactions`: Ignore contenteditable elements in no-noninteractive-element-interactions [`9aa878b`](ljharb/eslint-plugin-jsx-a11y@9aa878b) - \[New] `anchor-ambiguous-text`: ignore punctuation [`bbae2c4`](ljharb/eslint-plugin-jsx-a11y@bbae2c4) - \[New] `anchor-ambiguous-text`, `getAccessibleChildText`: Implements check for `alt` tags on `<img />` elements [`bb84abc`](ljharb/eslint-plugin-jsx-a11y@bb84abc) - \[meta] use `npmignore` to autogenerate an npmignore file [`6ad2312`](ljharb/eslint-plugin-jsx-a11y@6ad2312) - \[meta] add `auto-changelog` [`283817b`](ljharb/eslint-plugin-jsx-a11y@283817b) - \[Docs] missing descriptions in some rules [`79b975a`](ljharb/eslint-plugin-jsx-a11y@79b975a) - \[Deps] update `aria-query`, `axobject-query` [`7b3cda3`](ljharb/eslint-plugin-jsx-a11y@7b3cda3) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `aud`, `object.assign` [`0852947`](ljharb/eslint-plugin-jsx-a11y@0852947) - \[meta] move `.eslintignore` to `ignorePatterns` [`65be35b`](ljharb/eslint-plugin-jsx-a11y@65be35b) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `aud`, `eslint-doc-generator` [`60c2df5`](ljharb/eslint-plugin-jsx-a11y@60c2df5) - \[Deps] update `@babel/runtime`, `array-includes`, `axe-core` [`4abc751`](ljharb/eslint-plugin-jsx-a11y@4abc751) - \[Deps] update `@babel/runtime`, `axe-core` [`89f766c`](ljharb/eslint-plugin-jsx-a11y@89f766c) - \[meta] run the build in prepack, not prepublish [`e411ce3`](ljharb/eslint-plugin-jsx-a11y@e411ce3) - \[Dev Deps] update `@babel/core`, `minimist` [`cccdb62`](ljharb/eslint-plugin-jsx-a11y@cccdb62) - \[Dev Deps] update `markdown-magic` [`3382059`](ljharb/eslint-plugin-jsx-a11y@3382059) - \[Fix] expose `prefer-tag-over-role` [`38d52f8`](ljharb/eslint-plugin-jsx-a11y@38d52f8) - \[Docs] `label-has-for`: reran generate-list-of-rules [`9a2af01`](ljharb/eslint-plugin-jsx-a11y@9a2af01) - \[Deps] pin `language-tags` to `v1.0.5` [`f84bb74`](ljharb/eslint-plugin-jsx-a11y@f84bb74) - \[Dev Deps] update `@babel/core` [`cf3f8d0`](ljharb/eslint-plugin-jsx-a11y@cf3f8d0) - \[Deps] update `axe-core` [`0a73cf4`](ljharb/eslint-plugin-jsx-a11y@0a73cf4) - \[Deps] update `@babel/runtime` [`053f04d`](ljharb/eslint-plugin-jsx-a11y@053f04d) - \[Deps] update `@babel/runtime` [`bccf0ae`](ljharb/eslint-plugin-jsx-a11y@bccf0ae) - \[Deps] update `jsx-ast-utils` [`c9687cc`](ljharb/eslint-plugin-jsx-a11y@c9687cc) - \[readme] Preventing code repetition in user's eslint config file [`8b889bf`](ljharb/eslint-plugin-jsx-a11y@8b889bf) - \[Docs] `prefer-tag-over-role`: rename docs file [`0bdf95b`](ljharb/eslint-plugin-jsx-a11y@0bdf95b) <!-- auto-changelog-above -->
| datasource | package | from | to | | ---------- | ---------------------- | ----- | ----- | | npm | eslint-plugin-jsx-a11y | 6.6.1 | 6.9.0 | ## [v6.9.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v690---2024-06-19) ##### Fixed - \[Fix] `img-redundant-alt`: fixed multibyte character support [`#969`](jsx-eslint/eslint-plugin-jsx-a11y#969) - \[meta] fix changelog links [`#960`](jsx-eslint/eslint-plugin-jsx-a11y#960) ##### Commits - \[New] add support for Flat Config [`6b5f096`](jsx-eslint/eslint-plugin-jsx-a11y@6b5f096) - Revert "\[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1" [`75d5dd7`](jsx-eslint/eslint-plugin-jsx-a11y@75d5dd7) - \[Robustness] use `safe-regex-test` [`4c7e781`](jsx-eslint/eslint-plugin-jsx-a11y@4c7e781) - \[actions] update actions/checkout [`51a1ca7`](jsx-eslint/eslint-plugin-jsx-a11y@51a1ca7) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `eslint-doc-generator`, `object.entries` [`1271ac1`](jsx-eslint/eslint-plugin-jsx-a11y@1271ac1) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/register`, `aud`, `eslint-plugin-import`, `npmignore`, `object.assign` [`540cb7a`](jsx-eslint/eslint-plugin-jsx-a11y@540cb7a) - \[Deps] update `@babel/runtime`, `array-includes`, `es-iterator-helpers`, `hasown`, `object.fromentries`, `safe-regex-test` [`5d14408`](jsx-eslint/eslint-plugin-jsx-a11y@5d14408) - \[Deps] pin `aria-query` and `axobject-query`, add `ls-engines` test to CI [`32fd82c`](jsx-eslint/eslint-plugin-jsx-a11y@32fd82c) - \[Dev Deps] update `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `eslint-doc-generator` [`d1b4114`](jsx-eslint/eslint-plugin-jsx-a11y@d1b4114) - \[Fix] ensure `summary` remains non-interactive [`6a048da`](jsx-eslint/eslint-plugin-jsx-a11y@6a048da) - \[Deps] remove `@babel/runtime` [`0a98ad8`](jsx-eslint/eslint-plugin-jsx-a11y@0a98ad8) - \[New] `no-noninteractive-element-to-interactive-role`: allow `menuitemradio` and `menuitemcheckbox` on \<li> [`c0733f9`](jsx-eslint/eslint-plugin-jsx-a11y@c0733f9) - \[Deps] update `@babel/runtime`, `safe-regex-test` [`0d5321a`](jsx-eslint/eslint-plugin-jsx-a11y@0d5321a) - \[actions] pin codecov to v3.1.5 [`961817f`](jsx-eslint/eslint-plugin-jsx-a11y@961817f) - \[Deps] unpin `axe-core` [`b3559cf`](jsx-eslint/eslint-plugin-jsx-a11y@b3559cf) - \[Deps] move `object.entries` to dev deps [`1be7b70`](jsx-eslint/eslint-plugin-jsx-a11y@1be7b70) - \[Deps] update `@babel/runtime` [`2a48abb`](jsx-eslint/eslint-plugin-jsx-a11y@2a48abb) - \[Deps] update `@babel/runtime` [`1adec35`](jsx-eslint/eslint-plugin-jsx-a11y@1adec35) ## [v6.8.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v680---2023-11-01) ##### Merged - Allow `title` attribute or `aria-label` attribute instead of accessible child in the "anchor-has-content" rule [`#727`](jsx-eslint/eslint-plugin-jsx-a11y#727) ##### Fixed - \[Docs] `aria-activedescendant-has-tabindex`: align with changes from [#708](jsx-eslint/eslint-plugin-jsx-a11y#708) [`#924`](jsx-eslint/eslint-plugin-jsx-a11y#924) - \[Fix] `control-has-associated-label`: don't accept whitespace as an accessible label [`#918`](jsx-eslint/eslint-plugin-jsx-a11y#918) ##### Commits - \[Tests] migrate helper parsers function from `eslint-plugin-react` [`ce4d57f`](jsx-eslint/eslint-plugin-jsx-a11y@ce4d57f) - \[Refactor] use `es-iterator-helpers` [`52de824`](jsx-eslint/eslint-plugin-jsx-a11y@52de824) - \[New] `mouse-events-have-key-events`: add `hoverInHandlers`/`hoverOutHandlers` config [`db64898`](jsx-eslint/eslint-plugin-jsx-a11y@db64898) - \[New] add `polymorphicPropName` setting for polymorphic components [`fffb05b`](jsx-eslint/eslint-plugin-jsx-a11y@fffb05b) - \[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1 [`64bfea6`](jsx-eslint/eslint-plugin-jsx-a11y@64bfea6) - \[Refactor] use `hasown` instead of `has` [`9a8edde`](jsx-eslint/eslint-plugin-jsx-a11y@9a8edde) - \[actions] update used actions [`10c061a`](jsx-eslint/eslint-plugin-jsx-a11y@10c061a) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `aud`, `eslint-doc-generator`, `eslint-plugin-import`, `minimist` [`6d5022d`](jsx-eslint/eslint-plugin-jsx-a11y@6d5022d) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/register`, `eslint-doc-generator`, `eslint-plugin-import` [`4dc7f1e`](jsx-eslint/eslint-plugin-jsx-a11y@4dc7f1e) - \[New] `anchor-has-content`: Allow title attribute OR aria-label attribute [`e6bfd5c`](jsx-eslint/eslint-plugin-jsx-a11y@e6bfd5c) - \[patch] `mouse-events-have-key-events`: rport the attribute, not the node [`eadd70c`](jsx-eslint/eslint-plugin-jsx-a11y@eadd70c) - \[Deps] update `@babel/runtime`, `array-includes`, `array.prototype.flatmap`, `object.entries`, `object.fromentries` [`46ffbc3`](jsx-eslint/eslint-plugin-jsx-a11y@46ffbc3) - \[Deps] update `@babel/runtime`, `axobject-query`, `jsx-ast-utils`, `semver` [`5999555`](jsx-eslint/eslint-plugin-jsx-a11y@5999555) - \[Fix] pin `aria-query` and `axe-core` to fix failing tests on main [`8d8f016`](jsx-eslint/eslint-plugin-jsx-a11y@8d8f016) - \[patch] move `semver` from Deps to Dev Deps [`4da13e7`](jsx-eslint/eslint-plugin-jsx-a11y@4da13e7) - \[Deps] update `ast-types-flow` [`b755318`](jsx-eslint/eslint-plugin-jsx-a11y@b755318) - \[Dev Deps] update `eslint-plugin-import` [`f1c976b`](jsx-eslint/eslint-plugin-jsx-a11y@f1c976b) - \[Deps] unpin `language-tags` [`3d1d26d`](jsx-eslint/eslint-plugin-jsx-a11y@3d1d26d) - \[Docs] `no-static-element-interactions`: tabIndex is written tabindex [`1271153`](jsx-eslint/eslint-plugin-jsx-a11y@1271153) - \[Deps] Upgrade ast-types-flow to mitigate Docker user namespacing problems [`f0d2ddb`](jsx-eslint/eslint-plugin-jsx-a11y@f0d2ddb) - \[Dev Deps] pin `jackspeak` since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 [`0c278f4`](jsx-eslint/eslint-plugin-jsx-a11y@0c278f4) ## [v6.7.1](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v671---2023-01-11) ##### Commits - \[Fix] `no-aria-hidden-on-focusable` rule's missing export [`b01219e`](ljharb/eslint-plugin-jsx-a11y@b01219e) ## [v6.7.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v670---2023-01-09) ##### Merged - New rule: prefer-tag-over-role [`#833`](https://github.com/ljharb/eslint-plugin-jsx-a11y/pull/833) ##### Fixed - \[Tests] `aria-role`: add now-passing test [`#756`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/756) - \[Docs] `control-has-associated-label`: fix metadata [`#892`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/892) - \[New] add `no-aria-hidden-on-focusable` rule [`#881`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/881) ##### Commits - \[Docs] automate docs with `eslint-doc-generator` [`6d7a857`](ljharb/eslint-plugin-jsx-a11y@6d7a857) - \[Refactor] use fromEntries, flatMap, etc; better use iteration methods [`3d77c84`](ljharb/eslint-plugin-jsx-a11y@3d77c84) - \[New] add `anchor-ambiguous-text` rule [`7f6463e`](ljharb/eslint-plugin-jsx-a11y@7f6463e) - \[New] add `getAccessibleChildText` util [`630116b`](ljharb/eslint-plugin-jsx-a11y@630116b) - \[New] Add `isFocusable` utils method [`e199d17`](ljharb/eslint-plugin-jsx-a11y@e199d17) - \[Docs] update `eslint-doc-generator` to v1.0.0 [`6b9855b`](ljharb/eslint-plugin-jsx-a11y@6b9855b) - \[Fix] `no-noninteractive-element-interactions`: Ignore contenteditable elements in no-noninteractive-element-interactions [`9aa878b`](ljharb/eslint-plugin-jsx-a11y@9aa878b) - \[New] `anchor-ambiguous-text`: ignore punctuation [`bbae2c4`](ljharb/eslint-plugin-jsx-a11y@bbae2c4) - \[New] `anchor-ambiguous-text`, `getAccessibleChildText`: Implements check for `alt` tags on `<img />` elements [`bb84abc`](ljharb/eslint-plugin-jsx-a11y@bb84abc) - \[meta] use `npmignore` to autogenerate an npmignore file [`6ad2312`](ljharb/eslint-plugin-jsx-a11y@6ad2312) - \[meta] add `auto-changelog` [`283817b`](ljharb/eslint-plugin-jsx-a11y@283817b) - \[Docs] missing descriptions in some rules [`79b975a`](ljharb/eslint-plugin-jsx-a11y@79b975a) - \[Deps] update `aria-query`, `axobject-query` [`7b3cda3`](ljharb/eslint-plugin-jsx-a11y@7b3cda3) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `aud`, `object.assign` [`0852947`](ljharb/eslint-plugin-jsx-a11y@0852947) - \[meta] move `.eslintignore` to `ignorePatterns` [`65be35b`](ljharb/eslint-plugin-jsx-a11y@65be35b) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `aud`, `eslint-doc-generator` [`60c2df5`](ljharb/eslint-plugin-jsx-a11y@60c2df5) - \[Deps] update `@babel/runtime`, `array-includes`, `axe-core` [`4abc751`](ljharb/eslint-plugin-jsx-a11y@4abc751) - \[Deps] update `@babel/runtime`, `axe-core` [`89f766c`](ljharb/eslint-plugin-jsx-a11y@89f766c) - \[meta] run the build in prepack, not prepublish [`e411ce3`](ljharb/eslint-plugin-jsx-a11y@e411ce3) - \[Dev Deps] update `@babel/core`, `minimist` [`cccdb62`](ljharb/eslint-plugin-jsx-a11y@cccdb62) - \[Dev Deps] update `markdown-magic` [`3382059`](ljharb/eslint-plugin-jsx-a11y@3382059) - \[Fix] expose `prefer-tag-over-role` [`38d52f8`](ljharb/eslint-plugin-jsx-a11y@38d52f8) - \[Docs] `label-has-for`: reran generate-list-of-rules [`9a2af01`](ljharb/eslint-plugin-jsx-a11y@9a2af01) - \[Deps] pin `language-tags` to `v1.0.5` [`f84bb74`](ljharb/eslint-plugin-jsx-a11y@f84bb74) - \[Dev Deps] update `@babel/core` [`cf3f8d0`](ljharb/eslint-plugin-jsx-a11y@cf3f8d0) - \[Deps] update `axe-core` [`0a73cf4`](ljharb/eslint-plugin-jsx-a11y@0a73cf4) - \[Deps] update `@babel/runtime` [`053f04d`](ljharb/eslint-plugin-jsx-a11y@053f04d) - \[Deps] update `@babel/runtime` [`bccf0ae`](ljharb/eslint-plugin-jsx-a11y@bccf0ae) - \[Deps] update `jsx-ast-utils` [`c9687cc`](ljharb/eslint-plugin-jsx-a11y@c9687cc) - \[readme] Preventing code repetition in user's eslint config file [`8b889bf`](ljharb/eslint-plugin-jsx-a11y@8b889bf) - \[Docs] `prefer-tag-over-role`: rename docs file [`0bdf95b`](ljharb/eslint-plugin-jsx-a11y@0bdf95b) <!-- auto-changelog-above -->
| datasource | package | from | to | | ---------- | ---------------------- | ----- | ----- | | npm | eslint-plugin-jsx-a11y | 6.6.1 | 6.9.0 | ## [v6.9.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v690---2024-06-19) ##### Fixed - \[Fix] `img-redundant-alt`: fixed multibyte character support [`#969`](jsx-eslint/eslint-plugin-jsx-a11y#969) - \[meta] fix changelog links [`#960`](jsx-eslint/eslint-plugin-jsx-a11y#960) ##### Commits - \[New] add support for Flat Config [`6b5f096`](jsx-eslint/eslint-plugin-jsx-a11y@6b5f096) - Revert "\[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1" [`75d5dd7`](jsx-eslint/eslint-plugin-jsx-a11y@75d5dd7) - \[Robustness] use `safe-regex-test` [`4c7e781`](jsx-eslint/eslint-plugin-jsx-a11y@4c7e781) - \[actions] update actions/checkout [`51a1ca7`](jsx-eslint/eslint-plugin-jsx-a11y@51a1ca7) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `eslint-doc-generator`, `object.entries` [`1271ac1`](jsx-eslint/eslint-plugin-jsx-a11y@1271ac1) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/register`, `aud`, `eslint-plugin-import`, `npmignore`, `object.assign` [`540cb7a`](jsx-eslint/eslint-plugin-jsx-a11y@540cb7a) - \[Deps] update `@babel/runtime`, `array-includes`, `es-iterator-helpers`, `hasown`, `object.fromentries`, `safe-regex-test` [`5d14408`](jsx-eslint/eslint-plugin-jsx-a11y@5d14408) - \[Deps] pin `aria-query` and `axobject-query`, add `ls-engines` test to CI [`32fd82c`](jsx-eslint/eslint-plugin-jsx-a11y@32fd82c) - \[Dev Deps] update `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `eslint-doc-generator` [`d1b4114`](jsx-eslint/eslint-plugin-jsx-a11y@d1b4114) - \[Fix] ensure `summary` remains non-interactive [`6a048da`](jsx-eslint/eslint-plugin-jsx-a11y@6a048da) - \[Deps] remove `@babel/runtime` [`0a98ad8`](jsx-eslint/eslint-plugin-jsx-a11y@0a98ad8) - \[New] `no-noninteractive-element-to-interactive-role`: allow `menuitemradio` and `menuitemcheckbox` on \<li> [`c0733f9`](jsx-eslint/eslint-plugin-jsx-a11y@c0733f9) - \[Deps] update `@babel/runtime`, `safe-regex-test` [`0d5321a`](jsx-eslint/eslint-plugin-jsx-a11y@0d5321a) - \[actions] pin codecov to v3.1.5 [`961817f`](jsx-eslint/eslint-plugin-jsx-a11y@961817f) - \[Deps] unpin `axe-core` [`b3559cf`](jsx-eslint/eslint-plugin-jsx-a11y@b3559cf) - \[Deps] move `object.entries` to dev deps [`1be7b70`](jsx-eslint/eslint-plugin-jsx-a11y@1be7b70) - \[Deps] update `@babel/runtime` [`2a48abb`](jsx-eslint/eslint-plugin-jsx-a11y@2a48abb) - \[Deps] update `@babel/runtime` [`1adec35`](jsx-eslint/eslint-plugin-jsx-a11y@1adec35) ## [v6.8.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v680---2023-11-01) ##### Merged - Allow `title` attribute or `aria-label` attribute instead of accessible child in the "anchor-has-content" rule [`#727`](jsx-eslint/eslint-plugin-jsx-a11y#727) ##### Fixed - \[Docs] `aria-activedescendant-has-tabindex`: align with changes from [#708](jsx-eslint/eslint-plugin-jsx-a11y#708) [`#924`](jsx-eslint/eslint-plugin-jsx-a11y#924) - \[Fix] `control-has-associated-label`: don't accept whitespace as an accessible label [`#918`](jsx-eslint/eslint-plugin-jsx-a11y#918) ##### Commits - \[Tests] migrate helper parsers function from `eslint-plugin-react` [`ce4d57f`](jsx-eslint/eslint-plugin-jsx-a11y@ce4d57f) - \[Refactor] use `es-iterator-helpers` [`52de824`](jsx-eslint/eslint-plugin-jsx-a11y@52de824) - \[New] `mouse-events-have-key-events`: add `hoverInHandlers`/`hoverOutHandlers` config [`db64898`](jsx-eslint/eslint-plugin-jsx-a11y@db64898) - \[New] add `polymorphicPropName` setting for polymorphic components [`fffb05b`](jsx-eslint/eslint-plugin-jsx-a11y@fffb05b) - \[Fix] `isNonInteractiveElement`: Upgrade aria-query to 5.3.0 and axobject-query to 3.2.1 [`64bfea6`](jsx-eslint/eslint-plugin-jsx-a11y@64bfea6) - \[Refactor] use `hasown` instead of `has` [`9a8edde`](jsx-eslint/eslint-plugin-jsx-a11y@9a8edde) - \[actions] update used actions [`10c061a`](jsx-eslint/eslint-plugin-jsx-a11y@10c061a) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `@babel/register`, `aud`, `eslint-doc-generator`, `eslint-plugin-import`, `minimist` [`6d5022d`](jsx-eslint/eslint-plugin-jsx-a11y@6d5022d) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/register`, `eslint-doc-generator`, `eslint-plugin-import` [`4dc7f1e`](jsx-eslint/eslint-plugin-jsx-a11y@4dc7f1e) - \[New] `anchor-has-content`: Allow title attribute OR aria-label attribute [`e6bfd5c`](jsx-eslint/eslint-plugin-jsx-a11y@e6bfd5c) - \[patch] `mouse-events-have-key-events`: rport the attribute, not the node [`eadd70c`](jsx-eslint/eslint-plugin-jsx-a11y@eadd70c) - \[Deps] update `@babel/runtime`, `array-includes`, `array.prototype.flatmap`, `object.entries`, `object.fromentries` [`46ffbc3`](jsx-eslint/eslint-plugin-jsx-a11y@46ffbc3) - \[Deps] update `@babel/runtime`, `axobject-query`, `jsx-ast-utils`, `semver` [`5999555`](jsx-eslint/eslint-plugin-jsx-a11y@5999555) - \[Fix] pin `aria-query` and `axe-core` to fix failing tests on main [`8d8f016`](jsx-eslint/eslint-plugin-jsx-a11y@8d8f016) - \[patch] move `semver` from Deps to Dev Deps [`4da13e7`](jsx-eslint/eslint-plugin-jsx-a11y@4da13e7) - \[Deps] update `ast-types-flow` [`b755318`](jsx-eslint/eslint-plugin-jsx-a11y@b755318) - \[Dev Deps] update `eslint-plugin-import` [`f1c976b`](jsx-eslint/eslint-plugin-jsx-a11y@f1c976b) - \[Deps] unpin `language-tags` [`3d1d26d`](jsx-eslint/eslint-plugin-jsx-a11y@3d1d26d) - \[Docs] `no-static-element-interactions`: tabIndex is written tabindex [`1271153`](jsx-eslint/eslint-plugin-jsx-a11y@1271153) - \[Deps] Upgrade ast-types-flow to mitigate Docker user namespacing problems [`f0d2ddb`](jsx-eslint/eslint-plugin-jsx-a11y@f0d2ddb) - \[Dev Deps] pin `jackspeak` since 2.1.2+ depends on npm aliases, which kill the install process in npm < 6 [`0c278f4`](jsx-eslint/eslint-plugin-jsx-a11y@0c278f4) ## [v6.7.1](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v671---2023-01-11) ##### Commits - \[Fix] `no-aria-hidden-on-focusable` rule's missing export [`b01219e`](ljharb/eslint-plugin-jsx-a11y@b01219e) ## [v6.7.0](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/HEAD/CHANGELOG.md#v670---2023-01-09) ##### Merged - New rule: prefer-tag-over-role [`#833`](https://github.com/ljharb/eslint-plugin-jsx-a11y/pull/833) ##### Fixed - \[Tests] `aria-role`: add now-passing test [`#756`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/756) - \[Docs] `control-has-associated-label`: fix metadata [`#892`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/892) - \[New] add `no-aria-hidden-on-focusable` rule [`#881`](https://github.com/ljharb/eslint-plugin-jsx-a11y/issues/881) ##### Commits - \[Docs] automate docs with `eslint-doc-generator` [`6d7a857`](ljharb/eslint-plugin-jsx-a11y@6d7a857) - \[Refactor] use fromEntries, flatMap, etc; better use iteration methods [`3d77c84`](ljharb/eslint-plugin-jsx-a11y@3d77c84) - \[New] add `anchor-ambiguous-text` rule [`7f6463e`](ljharb/eslint-plugin-jsx-a11y@7f6463e) - \[New] add `getAccessibleChildText` util [`630116b`](ljharb/eslint-plugin-jsx-a11y@630116b) - \[New] Add `isFocusable` utils method [`e199d17`](ljharb/eslint-plugin-jsx-a11y@e199d17) - \[Docs] update `eslint-doc-generator` to v1.0.0 [`6b9855b`](ljharb/eslint-plugin-jsx-a11y@6b9855b) - \[Fix] `no-noninteractive-element-interactions`: Ignore contenteditable elements in no-noninteractive-element-interactions [`9aa878b`](ljharb/eslint-plugin-jsx-a11y@9aa878b) - \[New] `anchor-ambiguous-text`: ignore punctuation [`bbae2c4`](ljharb/eslint-plugin-jsx-a11y@bbae2c4) - \[New] `anchor-ambiguous-text`, `getAccessibleChildText`: Implements check for `alt` tags on `<img />` elements [`bb84abc`](ljharb/eslint-plugin-jsx-a11y@bb84abc) - \[meta] use `npmignore` to autogenerate an npmignore file [`6ad2312`](ljharb/eslint-plugin-jsx-a11y@6ad2312) - \[meta] add `auto-changelog` [`283817b`](ljharb/eslint-plugin-jsx-a11y@283817b) - \[Docs] missing descriptions in some rules [`79b975a`](ljharb/eslint-plugin-jsx-a11y@79b975a) - \[Deps] update `aria-query`, `axobject-query` [`7b3cda3`](ljharb/eslint-plugin-jsx-a11y@7b3cda3) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `@babel/eslint-parser`, `@babel/plugin-transform-flow-strip-types`, `aud`, `object.assign` [`0852947`](ljharb/eslint-plugin-jsx-a11y@0852947) - \[meta] move `.eslintignore` to `ignorePatterns` [`65be35b`](ljharb/eslint-plugin-jsx-a11y@65be35b) - \[Dev Deps] update `@babel/cli`, `@babel/core`, `aud`, `eslint-doc-generator` [`60c2df5`](ljharb/eslint-plugin-jsx-a11y@60c2df5) - \[Deps] update `@babel/runtime`, `array-includes`, `axe-core` [`4abc751`](ljharb/eslint-plugin-jsx-a11y@4abc751) - \[Deps] update `@babel/runtime`, `axe-core` [`89f766c`](ljharb/eslint-plugin-jsx-a11y@89f766c) - \[meta] run the build in prepack, not prepublish [`e411ce3`](ljharb/eslint-plugin-jsx-a11y@e411ce3) - \[Dev Deps] update `@babel/core`, `minimist` [`cccdb62`](ljharb/eslint-plugin-jsx-a11y@cccdb62) - \[Dev Deps] update `markdown-magic` [`3382059`](ljharb/eslint-plugin-jsx-a11y@3382059) - \[Fix] expose `prefer-tag-over-role` [`38d52f8`](ljharb/eslint-plugin-jsx-a11y@38d52f8) - \[Docs] `label-has-for`: reran generate-list-of-rules [`9a2af01`](ljharb/eslint-plugin-jsx-a11y@9a2af01) - \[Deps] pin `language-tags` to `v1.0.5` [`f84bb74`](ljharb/eslint-plugin-jsx-a11y@f84bb74) - \[Dev Deps] update `@babel/core` [`cf3f8d0`](ljharb/eslint-plugin-jsx-a11y@cf3f8d0) - \[Deps] update `axe-core` [`0a73cf4`](ljharb/eslint-plugin-jsx-a11y@0a73cf4) - \[Deps] update `@babel/runtime` [`053f04d`](ljharb/eslint-plugin-jsx-a11y@053f04d) - \[Deps] update `@babel/runtime` [`bccf0ae`](ljharb/eslint-plugin-jsx-a11y@bccf0ae) - \[Deps] update `jsx-ast-utils` [`c9687cc`](ljharb/eslint-plugin-jsx-a11y@c9687cc) - \[readme] Preventing code repetition in user's eslint config file [`8b889bf`](ljharb/eslint-plugin-jsx-a11y@8b889bf) - \[Docs] `prefer-tag-over-role`: rename docs file [`0bdf95b`](ljharb/eslint-plugin-jsx-a11y@0bdf95b) <!-- auto-changelog-above -->
Fixes #423
Allowed
title
andaria-label
attributes instead of text content in the "anchor-has-content" rule.