shadcn/ui
The entire report: 4 components, 50 scoring checks, none failing. Each check cites the clause it measures; the per-component pages carry the failure detail and the command that reproduces it.
Maintainer response
Findings were delivered privately on 2026-08-19 in this thread, with the adapter source and fourteen days to reply before publication. The combobox result is held back until its pattern match is settled, see the unverified note above.
No reply inside the notice period.
| Check | Verdict | Severity |
|---|---|---|
| The tab container exposes role=tablisttabs.tablist-has-role | pass | serious |
| Each tab exposes role=tabtabs.tabs-have-tab-role | pass | serious |
| Each tab has an accessible nametabs.tab-has-accessible-name | pass | serious |
| The selected panel exposes role=tabpaneltabs.panel-has-tabpanel-role | pass | serious |
| Exactly one tab is marked selectedtabs.selected-tab-communicated | pass | serious |
| The panel takes its accessible name from its tabtabs.panel-labelled-by-tab | pass | moderate |
| The tab references its panel with aria-controlstabs.tab-controls-panel | pass | moderate |
| Unselected panels are hidden from assistive technologytabs.unselected-panels-not-exposed | pass | serious |
| Tab moves focus to the selected tabtabs.tab-key-reaches-selected-tab | pass | blocker |
| The tablist is a single stop in the tab sequencetabs.tablist-is-one-tab-stop | pass | serious |
| Right Arrow moves focus to the next tabtabs.arrow-moves-between-tabs | pass | blocker |
| Keyboard navigation can select a different tabtabs.activation-selects-tab | pass | blocker |
| Selecting a tab reveals its paneltabs.activation-reveals-panel | pass | blocker |
| Check | Verdict | Severity |
|---|---|---|
| Each header control sits inside a headingaccordion.header-is-heading | pass | moderate |
| Each header control exposes role=buttonaccordion.trigger-is-button | pass | serious |
| Each header control has an accessible nameaccordion.trigger-has-accessible-name | pass | serious |
| Collapsed sections expose aria-expanded=falseaccordion.collapsed-state-communicated | pass | serious |
| The header control references its panel with aria-controlsaccordion.trigger-controls-panel | pass | moderate |
| Collapsed panels are hidden from assistive technologyaccordion.collapsed-panel-not-exposed | pass | serious |
| Enter expands the focused sectionaccordion.enter-expands | pass | blocker |
| Space expands the focused sectionaccordion.space-expands | pass | serious |
| An expanded panel is exposed and reveals its contentaccordion.expanded-panel-exposed | pass | blocker |
| Tab moves between accordion headersaccordion.headers-are-tab-stops | pass | serious |
| Activating an expanded header collapses itaccordion.collapses-again | pass | serious |
What this cannot tell you
A high score means no violations were detected by automated testing. It does not mean the component is accessible. Automated tests cannot judge whether a label is meaningful, whether a reading order makes sense, or whether the experience is usable with a screen reader. Those need human judgement and disabled users. This is a floor, not a ceiling.