Installation
Theme
Mode

Layout & containers

Accordion

Collapsible sections that keep a long page scannable — FAQs, settings groups, nested detail. Open one at a time or many at once, with a smooth height transition and a quietly rotating chevron.

$npx shadcn@latest add @orbit/accordion

Overview

Live — click a row to expand it.

A milestone is a dated checkpoint that groups related tasks toward a deliverable — a beta launch, a design review, a release. Milestones roll their tasks’ progress up into a single bar so you can see slippage at a glance.

Anatomy

Each header carries an optional leading icon, a title, an optional badge and a meta line — so a row can say a lot before it's even opened. The 32px icon square and the chevron pick up the accent when the row is open.

Leading icon · title · badge · meta line

Invite teammates from Workspace → Members, or share a project link with edit or view access. Roles cascade: a workspace admin can manage every project, while project members only see what they’re added to.

Variants

Separated cards for standalone groups, a single bordered list for a tight stack, and flush for embedding inside an existing panel.

separated

bordered

flush

Single vs. multiple

By default opening a row closes the others — best for FAQs where one answer at a time keeps focus. Set multiple to let people open several sections together, useful for settings.

Single — one open

A milestone is a dated checkpoint that groups related tasks toward a deliverable — a beta launch, a design review, a release. Milestones roll their tasks’ progress up into a single bar so you can see slippage at a glance.

Multiple — many open

A milestone is a dated checkpoint that groups related tasks toward a deliverable — a beta launch, a design review, a release. Milestones roll their tasks’ progress up into a single bar so you can see slippage at a glance.

Props

PropTypeDefaultDescription
<Accordion> variant"separated" | "bordered" | "flush""separated"Spaced cards, one framed list with row dividers, or bare rows for embedding.
<Accordion> multiplebooleanfalseAllow several sections to be open at once.
<Accordion> defaultValuestring[][]Item value(s) that start open (uncontrolled).
<Accordion> valuestring[]Controlled open item value(s); pair with onValueChange.
<Accordion> onValueChange(value: string[]) => voidCalled with the new open value(s) when an item is toggled.
<Accordion> accentstringvar(--pri)CSS color for the open accent — chevron, icon tint, open border and shadow.
<Accordion> disabledbooleanfalseIgnore all user interaction.
<AccordionItem> valuestringUnique value matched by value/defaultValue. Auto-generated when omitted.
<AccordionItem> disabledbooleanfalseDims the row and blocks toggling.
<AccordionItem> onOpenChange(open: boolean) => voidCalled when this item opens or closes.
<AccordionTrigger> iconReactNodeLeading 16px glyph in a 32px tinted square — picks up the accent when open.
<AccordionTrigger> badgeReactNodeSmall mono uppercase pill after the title (e.g. “Admin”).
<AccordionTrigger> metaReactNodeMuted second line under the title (e.g. “3 settings”).
<AccordionContent> childrenReactNodePanel body — indented to align under the title and animated over 260ms.

Usage

Do

Lead with a clear header

People decide whether to expand from the title alone — make it specific and front-load the keyword.

Don’t

Hide critical content

Anything a user must see to act shouldn’t start collapsed behind a click.

Do

Use single mode for FAQs

One answer at a time keeps the reader oriented and the page from jumping.

Don’t

Nest accordions deeply

More than one level of disclosure gets disorienting fast — flatten or split the page.

Keyboard & accessibility

Built on Base UI Accordion: each header is a native <button> inside a heading, aria-expanded reflects the open state, and the panel is referenced via aria-controls. Panels respect prefers-reduced-motion through the global guard.

buttonEach header is a real button
aria-expandedReflects open state
Enter / SpaceToggles the section
TabMoves between headers