Accordion

Collapsible glass sections for progressive disclosure — single expand by default.

Preview

Live

Packet is ready to submit. Review tailored fields before sending.
<div class="ui-accordion" data-type="single">
  <div class="ui-accordion__item is-open">
    <button type="button" class="ui-accordion__trigger"
      id="acc-trigger-status" aria-expanded="true"
      aria-controls="acc-panel-status">
      <span class="ui-accordion__trigger-label">Application status</span>
      <span class="ui-icon ui-icon--chevron-down ui-accordion__chevron"
        aria-hidden="true"></span>
    </button>
    <div class="ui-accordion__panel" role="region"
      id="acc-panel-status" aria-labelledby="acc-trigger-status">
      <div class="ui-accordion__panel-body">Packet is ready to submit.</div>
    </div>
  </div>
</div>

Variants

Single

Default — only one item open; set data-type="single" / type="single".

One panel at a time.

Multiple

type="multiple" — several items can stay open together.

Open together.
Also open.

Disabled item

Disabled trigger — no toggle; React: disabled on AccordionItem.

Closed

No .is-open — panel collapsed with aria-hidden / inert.

Accessibility

  • Triggers are real <button type="button"> with aria-expanded and aria-controls.
  • Panels use role="region" and aria-labelledby pointing at the trigger.
  • Closed panels set aria-hidden="true" and inert so focus cannot enter them.
  • Decorative chevrons use aria-hidden="true".
  • Respect prefers-reduced-motion — transitions are disabled in CSS.

API

HTML classes

Class Description
.ui-accordion Root stack; optional data-type.
.ui-accordion__item / .is-open Section shell (+ open state).
.ui-accordion__trigger Header button.
.ui-accordion__trigger-label Visible trigger text.
.ui-accordion__chevron Rotating chevron icon.
.ui-accordion__panel Collapsible region.
.ui-accordion__panel-body Inner content padding.

React props

From src/core/Accordion.tsx — compound Accordion* components.

Prop Type Default Description
type 'single' | 'multiple' 'single' One open section vs many.
value / defaultValue string | string[] Controlled / uncontrolled open value(s).
onValueChange fn Called with next open value(s).
collapsible boolean true Allow collapsing the open item when type="single".
AccordionItem value string Required item key.
AccordionItem disabled boolean false Disables the trigger.
AccordionPanel forceMount boolean true Keep closed panels mounted but hidden.