Skip to content

Missing accessible names: DonutChart, List, ListItem and several stories warn in every dev run #3015

Description

@mfal

50 react-aria warnings across the docs site and Storybook, all variations of "this element has no accessible name". Each one is a real a11y gap, not console noise.

If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility

Stack traces put the warning inside react-aria's own components, reached from ours:

Origin Where it shows
DonutChart renders react-aria ProgressBar with no label data-visualisation-donutchart--default, --with-unit, --with-text-value
Slider form-controls-slider--default, --with-format-options, 04-components/form-controls/slider
Select form-controls-select--with-country-options, --with-country-options-and-custom-sort
Modal overlays-modal--long-content
ProgressBar 04-components/status/progress-bar

The docs examples for Slider and ProgressBar do pass a <Label>, so the warning comes from an inner react-aria element that never receives it — worth checking whether the label is forwarded, not just adding labels at the call site.

DonutChart has no label API at all today. Deciding what its ProgressBar should be called (or whether it should be aria-hidden with the value exposed elsewhere) is a UX question.

An aria-label or aria-labelledby prop is required for accessibility

15 occurrences, all from react-aria's GridListInner — i.e. List rendering a GridList with no accessible name:

structure-list-listitem--with-content, --with-action-group, --with-custom-tile-max-width, --with-checkbox, --with-column-layout

A textValue prop is required for <GridListItem> elements with non-plain text children

33 occurrences — the largest single group. Type-to-select does not work on these items.

structure-list--with-summary, --infinite-scroll, --with-accordion, structure-list-edge-cases--custom-sorting

Scope note

Fixing this properly needs decisions the code cannot make: any label that ships inside a component becomes UI text and belongs in locales/de-DE.locale.json + locales/en-US.locale.json, which follows product voice. Story-level labels are free.

Found while clearing the warnings in #3019.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions