Skip to content

Conversation

@mgadewoll
Copy link
Contributor

@mgadewoll mgadewoll commented Mar 26, 2025

Summary

Relates to elastic/kibana#214104 (comment)
Relates to #8429

This PR enables EuiToolTip to optionally disable the automatic linking of trigger and tooltip element via aria-describedby. In most cases this should not be used, as we want the tooltip content to be available for screen reader users when focusing the trigger element.
There are use cases though were this automatic screen reader output for the tooltip content is an issue because it creates duplication. In those cases the tooltip is used solely as visual text alternative, not as accessible one.

Example use cases:

  • the trigger element already has a descriptive aria-label which is identical to the tooltip content (e.g. when used with an icon button where the tooltip is only a visual text alternative to the icon graphic)

    • ⚠️ most of the time we should try to advise to change the aria-label copy instead to make it more actionable and the tooltip content more into "additional information"
  • the trigger element already has a descriptive aria-label which includes the content of the tooltip (e.g. color labels on EuiColorPickerSwatch: Select {color} as the color & {color})

Screenshot 2025-03-27 at 16 44 36

hasScreenReaderContent=true (default) hasScreenReaderContent=false
Screenshot 2025-03-26 at 17 40 26 Screenshot 2025-03-26 at 17 41 40

Changes

  • adds prop disableScreenReaderOutput on EuiTooltip (default value: true)

Important

I purposefully did not add any further description about the prop in our docs, as on average we don't want consumers to use this pattern but instead ensure an aria-label on the trigger and the tooltip content are standalone information.

QA

  • verify EuiTooltip functionality does not have any regression
  • verify that toggling disableScreenReaderOutput en/disables if the tooltip content is output by screen readers.

General checklist

  • Browser QA
    • Checked in both light and dark modes
    • Checked in both MacOS and Windows high contrast modes
    • Checked in mobile
    • Checked in Chrome, Safari, Edge, and Firefox
    • Checked for accessibility including keyboard-only and screenreader modes
  • Docs site QA
  • Code quality checklist
  • Release checklist
    • A changelog entry exists and is marked appropriately.
    • If applicable, added the breaking change issue label (and filled out the breaking change checklist)
  • Designer checklist
    • If applicable, file an issue to update EUI's Figma library with any corresponding UI changes. (This is an internal repo, if you are external to Elastic, ask a maintainer to submit this request)

- adds support to manually disable screen readers reading the tooltip content; this is useful when the tooltip is used as visual text alternative only and trigger and tooltip have the same text content
@mgadewoll mgadewoll self-assigned this Mar 26, 2025
@mgadewoll mgadewoll marked this pull request as ready for review March 27, 2025 15:47
@mgadewoll mgadewoll requested a review from a team as a code owner March 27, 2025 15:47
@acstll acstll self-requested a review March 28, 2025 10:17
Copy link
Contributor

@acstll acstll left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left one comment regarding the prop name, but I tested manually (only in dev tools) and it works as expected — great work (as always)

@kibanamachine
Copy link

Preview staging links for this PR:

@elasticmachine
Copy link
Collaborator

💚 Build Succeeded

History

cc @mgadewoll

@mgadewoll mgadewoll merged commit c1cf32e into elastic:main Mar 28, 2025
5 checks passed
weronikaolejniczak added a commit to elastic/kibana that referenced this pull request Apr 10, 2025
> [!Note]
> This PR is a manual backport of the already merged
#217491

`101.0.1` ⏩ `101.3.0-classic.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`

#### [`v101.3.0`](https://github.com/elastic/eui/releases/v101.3.0)

- Updated 78 existing and added two new glyphs (`code` and
`checkCircle`) for `EuiIcon`
([#8530](elastic/eui#8530))
- Changed `gutterSize` to `m` between right side items on
`EuiPageHeader` ([#8529](elastic/eui#8529))

**Bug fixes**

- Fixed a visual bug on disabled `EuiButton` in high contrast mode where
wrong text colors were applied
([#8550](elastic/eui#8550))

#### [`v101.2.0`](https://github.com/elastic/eui/releases/v101.2.0)

- Added `showToolTip` prop on `EuiColorPickerSwatch`
([#8512](elastic/eui#8512))

**Bug fixes**

- Fixed a visual issue of overlapping borders for layered `EuiPanel`s
([#8519](elastic/eui#8519))
- Fixes wrong `colorMode` styling for the search in `EuiHeader` with
`theme="dark"` ([#8496](elastic/eui#8496))

**Accessibility**

- Improved the accessibility of `EuiColorPicker` by adding color label
tooltips on hover and focus for color swatches
([#8512](elastic/eui#8512))
- Added `disableScreenReaderOutput` prop on `EuiToolTip` to manually
control if the tooltip content should be read when focusing the trigger.
This prevents duplicate screen reader output when the tooltip content
and `aria-label` on the trigger element have the same text content.
([#8508](elastic/eui#8508))
- Improves text color contrast for `EuiButton` with `color="warning"` in
high contrast mode ([#8496](elastic/eui#8496))
- Improves contrast and visible distinction of the following components
in high contrast mode:
([#8496](elastic/eui#8496))
  - `EuiCode`
  - `EuiBadge`
  - `EuiBetaBadge`
  - `EuiNotificationBadge`

**Dependency updates**

- Updated `prismjs` to v1.30.0
([#8506](elastic/eui#8506))

#### [`v101.1.0`](https://github.com/elastic/eui/releases/v101.1.0)

- Updates `EuiTableRow` styles to check support for `:has(+)` selector
([#8498](elastic/eui#8498))


<!--ONMERGE {"backportTargets":["9.0"]} ONMERGE-->

---------

Co-authored-by: Weronika Olejniczak <weronika.olejniczak@elastic.co>
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.

4 participants