Results / Headless UI

Headless UI accordion

96% against @headlessui/react@2.2.10. Every check below cites the clause it measures, and every failure carries the command that reproduces it.

Reproduce this whole run

Serve the adapter from a clone of the repository, then:

npx @railing-dev/runner run --target headlessui --component accordion \
  --repeat 3 \
  --base-url http://localhost:5180

Or replay it without running anything: download the Playwright trace and open it with npx playwright show-trace.

One or more header controls are not contained in a heading.

Check
accordion.header-is-heading
Status
fail
Severity
moderate
Why it matters
Screen reader users navigate documents by heading. If accordion headers are not headings, an entire page structure disappears from the shortcut that most users rely on to move around it.
Expected
each control inside an h1–h6 or role=heading element
Measured
hr-header-1, hr-header-2, hr-header-3 have no heading ancestor
Measured against
APG pattern · WCAG 1.3.1 Info and Relationships
Reproduce
npx @railing-dev/runner run --target headlessui --component accordion \
  --only accordion.header-is-heading \
  --base-url http://localhost:5180

Tab moves between accordion headers

Check
accordion.headers-are-tab-stops
Status
pass
Severity
serious
Why it matters
Accordion headers are each a stop in the tab sequence, the opposite of a tablist, which is a single stop navigated with arrows. Implementations that copy tab behaviour here strand the user on the first header.
Measured against
APG pattern · WCAG 2.4.3 Focus Order

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.