Skip to content
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

Merged

Conversation

gorohash
Copy link
Contributor

@gorohash gorohash commented Jul 8, 2020

Fixes #423

Allowed title and aria-label attributes instead of text content in the "anchor-has-content" rule.

@jessebeach
Copy link
Collaborator

@gorohash are you thinking that using both title and aria-label provides visual and non-visual label access?

@gorohash
Copy link
Contributor Author

@jessebeach
I think it provides non-visual label access, but it doesn't necessarily provide enough visual label access.
However, as discussed in #423, icons can provide the meaning visually.

@backwardok
Copy link
Collaborator

backwardok commented Mar 23, 2021

@gorohash Requiring both title and aria-label seems like you're trying to use the title as a hover tooltip for visual affordance, but I don't think that's always necessary. I would update this to allow for passing for having a title or aria-label but not forcing them both to be present.

@gorohash
Copy link
Contributor Author

@backwardok I agree with you. A tooltip shown by title is not always the best way to provide visual affordance. I look forward to your update!

@backwardok
Copy link
Collaborator

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?

@gorohash gorohash force-pushed the anchor-has-title-and-aria-label branch from d423ff5 to ff93739 Compare May 3, 2021 06:20
@gorohash gorohash changed the title Allow title and aria-label attributes in the "anchor-has-content" rule Allow title attribute or aria-label attribute instead of accessible child in the "anchor-has-content" rule May 3, 2021
@gorohash
Copy link
Contributor Author

gorohash commented May 3, 2021

@backwardok Thanks for your advice! I updated my code

@gorohash gorohash force-pushed the anchor-has-title-and-aria-label branch from 5177497 to 2a36fa5 Compare May 3, 2021 06:53
Copy link
Collaborator

@backwardok backwardok left a 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!

@ljharb ljharb requested a review from jessebeach May 3, 2021 17:53
@ljharb ljharb force-pushed the anchor-has-title-and-aria-label branch from 2a36fa5 to 1abfa34 Compare July 13, 2021 23:22
@codecov
Copy link

codecov bot commented Jul 13, 2021

Codecov Report

Merging #727 (e6bfd5c) into main (7b3492b) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           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           
Files Changed Coverage Δ
src/rules/anchor-has-content.js 100.00% <100.00%> (ø)

@backwardok
Copy link
Collaborator

Hey @jessebeach ! Was wondering if you could review this PR? Thanks! 😄

@ljharb ljharb force-pushed the anchor-has-title-and-aria-label branch from 1abfa34 to e6bfd5c Compare August 12, 2023 00:34
@ljharb
Copy link
Member

ljharb commented Aug 12, 2023

@jessebeach this is freshly rebased; mind giving it a review?

@jessebeach
Copy link
Collaborator

I'll have a look tonight after the kiddo goes to sleep.

Copy link
Collaborator

@jessebeach jessebeach left a 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.

@jessebeach jessebeach merged commit 9688ad8 into jsx-eslint:main Aug 13, 2023
85 checks passed
@jessebeach
Copy link
Collaborator

Thank you @backwardok !!

@jessebeach
Copy link
Collaborator

ack, apologies @ljharb! I hit the Merge button on this one. I know you like to merge the commits in a different way.

@ljharb
Copy link
Member

ljharb commented Aug 13, 2023

No worries, it’s fine :-) thanks for reviewing!

renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 15, 2024
| 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 `&lt;img /&gt;` 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 -->
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 15, 2024
| 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 `&lt;img /&gt;` 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 -->
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 15, 2024
| 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 `&lt;img /&gt;` 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 -->
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 15, 2024
| 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 `&lt;img /&gt;` 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 -->
renovate bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 16, 2024
| 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 `&lt;img /&gt;` 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 -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

anchor-has-content and aria-label / title tags?
4 participants