feat(eslint-plugin): add new @elastic/eui/callout-announce-on-mount rule#9005
Merged
weronikaolejniczak merged 7 commits intoelastic:mainfrom Sep 15, 2025
Conversation
@elastic/eui/callout-announce-on-mount rule
alexwizp
reviewed
Sep 11, 2025
| schema: [], | ||
| messages: { | ||
| missingAnnounceOnMount: [ | ||
| 'EuiCallout should have "announceOnMount" prop when conditionally rendered for better accessibility.', |
Contributor
There was a problem hiding this comment.
please replace EuiCallout -> CALLOUT_COMPONENT (for all places) + in description
alexwizp
reviewed
Sep 11, 2025
| }; | ||
| }, | ||
| meta: { | ||
| type: 'suggestion', |
alexwizp
reviewed
Sep 11, 2025
| return; | ||
| } | ||
| if (isInConditionalRendering(node)) { | ||
| const hasSpread = openingElement.attributes.some(a => a.type === 'JSXSpreadAttribute'); |
Contributor
There was a problem hiding this comment.
can we reuse packages/eslint-plugin/src/utils/has_spread.ts
alexwizp
reviewed
Sep 11, 2025
|
|
||
| export const CallOutAnnounceOnMount = ESLintUtils.RuleCreator.withoutDocs({ | ||
| create(context) { | ||
| function isInConditionalRendering(node: TSESTree.JSXElement): boolean { |
Contributor
There was a problem hiding this comment.
candidate for moving into packages/eslint-plugin/src/utils/
Co-authored-by: Weronika Olejniczak <32842468+weronikaolejniczak@users.noreply.github.com>
Collaborator
💚 Build SucceededHistory
|
Collaborator
💚 Build Succeeded
History
|
weronikaolejniczak
approved these changes
Sep 12, 2025
Contributor
weronikaolejniczak
left a comment
There was a problem hiding this comment.
LGTM 🟢 Thanks for contributing @paulinashakirova! 🥳
weronikaolejniczak
added a commit
to elastic/kibana
that referenced
this pull request
Sep 16, 2025
- `@elastic/eui`: `v106.5.0` ⏩ `v106.6.0` - `@elastic/eui-theme-borealis`: `v3.3.2` ⏩ `v3.4.0` - `@elastic/eslint-plugin-eui`: `v2.3.0` ⏩ `v2.4.0` [Questions? Please see our Kibana upgrade FAQ.](https://github.com/elastic/eui/blob/main/wiki/eui-team-processes/upgrading-kibana.md#faq-for-kibana-teams) ## Package updates ### `@elastic/eui` #### [`v106.6.0`](https://github.com/elastic/eui/releases/v106.6.0) **Accessibility** - Removed focus state styles for `iconOnClick` on `EuiBadge` to improve color contrast in dark mode ([#9004](elastic/eui#9004)) ### `@elastic/eui-theme-borealis` #### [`v3.4.0`](https://www.npmjs.com/package/@elastic/eui-theme-borealis/v/3.4.0) - Updated values for component tokens ([#8983](elastic/eui#8983)) - `dataGridRowStripesBackgroundHover` - `dataGridRowStripesBackgroundStripedHover` - `dataGridRowStripesBackgroundSelectHover` - `dataGridRowStripesBackgroundHover` - `dataGridRowStripesBackgroundStripedHover` ### `@elastic/eslint-plugin-eui` #### [`v2.4.0`](https://www.npmjs.com/package/@elastic/eslint-plugin-eui/v/2.4.0) - Added new `callout-announce-on-mount` rule. ([#9005](elastic/eui#9005)) - Added new `no-unnamed-interactive-element` rule. ([#8973](elastic/eui#8973))
CAWilson94
pushed a commit
to CAWilson94/kibana
that referenced
this pull request
Sep 24, 2025
- `@elastic/eui`: `v106.5.0` ⏩ `v106.6.0` - `@elastic/eui-theme-borealis`: `v3.3.2` ⏩ `v3.4.0` - `@elastic/eslint-plugin-eui`: `v2.3.0` ⏩ `v2.4.0` [Questions? Please see our Kibana upgrade FAQ.](https://github.com/elastic/eui/blob/main/wiki/eui-team-processes/upgrading-kibana.md#faq-for-kibana-teams) ## Package updates ### `@elastic/eui` #### [`v106.6.0`](https://github.com/elastic/eui/releases/v106.6.0) **Accessibility** - Removed focus state styles for `iconOnClick` on `EuiBadge` to improve color contrast in dark mode ([elastic#9004](elastic/eui#9004)) ### `@elastic/eui-theme-borealis` #### [`v3.4.0`](https://www.npmjs.com/package/@elastic/eui-theme-borealis/v/3.4.0) - Updated values for component tokens ([elastic#8983](elastic/eui#8983)) - `dataGridRowStripesBackgroundHover` - `dataGridRowStripesBackgroundStripedHover` - `dataGridRowStripesBackgroundSelectHover` - `dataGridRowStripesBackgroundHover` - `dataGridRowStripesBackgroundStripedHover` ### `@elastic/eslint-plugin-eui` #### [`v2.4.0`](https://www.npmjs.com/package/@elastic/eslint-plugin-eui/v/2.4.0) - Added new `callout-announce-on-mount` rule. ([elastic#9005](elastic/eui#9005)) - Added new `no-unnamed-interactive-element` rule. ([elastic#8973](elastic/eui#8973))
niros1
pushed a commit
to elastic/kibana
that referenced
this pull request
Sep 30, 2025
- `@elastic/eui`: `v106.5.0` ⏩ `v106.6.0` - `@elastic/eui-theme-borealis`: `v3.3.2` ⏩ `v3.4.0` - `@elastic/eslint-plugin-eui`: `v2.3.0` ⏩ `v2.4.0` [Questions? Please see our Kibana upgrade FAQ.](https://github.com/elastic/eui/blob/main/wiki/eui-team-processes/upgrading-kibana.md#faq-for-kibana-teams) ## Package updates ### `@elastic/eui` #### [`v106.6.0`](https://github.com/elastic/eui/releases/v106.6.0) **Accessibility** - Removed focus state styles for `iconOnClick` on `EuiBadge` to improve color contrast in dark mode ([#9004](elastic/eui#9004)) ### `@elastic/eui-theme-borealis` #### [`v3.4.0`](https://www.npmjs.com/package/@elastic/eui-theme-borealis/v/3.4.0) - Updated values for component tokens ([#8983](elastic/eui#8983)) - `dataGridRowStripesBackgroundHover` - `dataGridRowStripesBackgroundStripedHover` - `dataGridRowStripesBackgroundSelectHover` - `dataGridRowStripesBackgroundHover` - `dataGridRowStripesBackgroundStripedHover` ### `@elastic/eslint-plugin-eui` #### [`v2.4.0`](https://www.npmjs.com/package/@elastic/eslint-plugin-eui/v/2.4.0) - Added new `callout-announce-on-mount` rule. ([#9005](elastic/eui#9005)) - Added new `no-unnamed-interactive-element` rule. ([#8973](elastic/eui#8973))
rylnd
pushed a commit
to rylnd/kibana
that referenced
this pull request
Oct 17, 2025
- `@elastic/eui`: `v106.5.0` ⏩ `v106.6.0` - `@elastic/eui-theme-borealis`: `v3.3.2` ⏩ `v3.4.0` - `@elastic/eslint-plugin-eui`: `v2.3.0` ⏩ `v2.4.0` [Questions? Please see our Kibana upgrade FAQ.](https://github.com/elastic/eui/blob/main/wiki/eui-team-processes/upgrading-kibana.md#faq-for-kibana-teams) ## Package updates ### `@elastic/eui` #### [`v106.6.0`](https://github.com/elastic/eui/releases/v106.6.0) **Accessibility** - Removed focus state styles for `iconOnClick` on `EuiBadge` to improve color contrast in dark mode ([elastic#9004](elastic/eui#9004)) ### `@elastic/eui-theme-borealis` #### [`v3.4.0`](https://www.npmjs.com/package/@elastic/eui-theme-borealis/v/3.4.0) - Updated values for component tokens ([elastic#8983](elastic/eui#8983)) - `dataGridRowStripesBackgroundHover` - `dataGridRowStripesBackgroundStripedHover` - `dataGridRowStripesBackgroundSelectHover` - `dataGridRowStripesBackgroundHover` - `dataGridRowStripesBackgroundStripedHover` ### `@elastic/eslint-plugin-eui` #### [`v2.4.0`](https://www.npmjs.com/package/@elastic/eslint-plugin-eui/v/2.4.0) - Added new `callout-announce-on-mount` rule. ([elastic#9005](elastic/eui#9005)) - Added new `no-unnamed-interactive-element` rule. ([elastic#8973](elastic/eui#8973))
paulinashakirova
added a commit
to elastic/kibana
that referenced
this pull request
Oct 30, 2025
…ceOnMount` in conditional rendered instances (#235054) ## Summary This PR introduces fix for our new eslint rule [`@elastic/eui/callout-announce-on-mount`](elastic/eui#9005). ### Problem tldr; When callouts appear dynamically (e.g., after user interactions, form validation errors, or status changes), screen readers may not announce their content to users. The `announceOnMount` prop ensures these messages are properly announced to users with assistive technologies. #### Please double check your code - to make sure that if `EuiCallout` appears dynamically after a user interaction, the `announceOnMount` is NOT set to false. I did my best, but might have missed some because of my lacking context. > [!NOTE] > If `EuiCallOut` is inside a condition, announceOnMount must be set explicitly. --------- Co-authored-by: Robert Jaszczurek <92210485+rbrtj@users.noreply.github.com> Co-authored-by: Davis McPhee <davismcphee@hotmail.com> Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com>
ana-davydova
pushed a commit
to ana-davydova/kibana
that referenced
this pull request
Nov 3, 2025
…ceOnMount` in conditional rendered instances (elastic#235054) ## Summary This PR introduces fix for our new eslint rule [`@elastic/eui/callout-announce-on-mount`](elastic/eui#9005). ### Problem tldr; When callouts appear dynamically (e.g., after user interactions, form validation errors, or status changes), screen readers may not announce their content to users. The `announceOnMount` prop ensures these messages are properly announced to users with assistive technologies. #### Please double check your code - to make sure that if `EuiCallout` appears dynamically after a user interaction, the `announceOnMount` is NOT set to false. I did my best, but might have missed some because of my lacking context. > [!NOTE] > If `EuiCallOut` is inside a condition, announceOnMount must be set explicitly. --------- Co-authored-by: Robert Jaszczurek <92210485+rbrtj@users.noreply.github.com> Co-authored-by: Davis McPhee <davismcphee@hotmail.com> Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com>
albertoblaz
pushed a commit
to albertoblaz/kibana
that referenced
this pull request
Nov 4, 2025
…ceOnMount` in conditional rendered instances (elastic#235054) ## Summary This PR introduces fix for our new eslint rule [`@elastic/eui/callout-announce-on-mount`](elastic/eui#9005). ### Problem tldr; When callouts appear dynamically (e.g., after user interactions, form validation errors, or status changes), screen readers may not announce their content to users. The `announceOnMount` prop ensures these messages are properly announced to users with assistive technologies. #### Please double check your code - to make sure that if `EuiCallout` appears dynamically after a user interaction, the `announceOnMount` is NOT set to false. I did my best, but might have missed some because of my lacking context. > [!NOTE] > If `EuiCallOut` is inside a condition, announceOnMount must be set explicitly. --------- Co-authored-by: Robert Jaszczurek <92210485+rbrtj@users.noreply.github.com> Co-authored-by: Davis McPhee <davismcphee@hotmail.com> Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Vitalii Dmyterko <92328789+vitaliidm@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR introduces a new ESLint rule
@elastic/eui/callout-announce-on-mountProblem
When callouts appear dynamically (e.g., after user interactions, form validation errors, or status changes), screen readers may not announce their content to users.
The
announceOnMountprop ensures these messages are properly announced to users with assistive technologies.Screen.Recording.2025-09-10.at.21.22.15.mov