Noctis

Accordion

Stack collapsible sections to fold long content into a scannable list. Items are divided by a single hairline rule, each a heading/trigger over a panel whose height animates open and closed, with a muted chevron that rotates a half-turn as it expands.

Basic

Each item is a trigger over a panel; the trigger renders inside a heading for a correct outline. By default one section is open at a time — opening another closes the last. The trigger row highlights neutrally on hover; the accent is held for the focus ring alone.

Orders placed before 2pm ship the same business day.

Multiple open

Pass multiple to let several sections stay open together — for settings groups or checklists where the reader compares sections side by side rather than stepping through them one at a time.

A summary of the workspace and its members.

Manage the plan, invoices, and payment method.

Sizes

size sets the trigger rhythm: md (default) for FAQ and marketing, sm for dense settings panes. It scales the row padding, label type, chevron, and content together.

Theme, accent colour, and density for the whole workspace.

Theme, accent colour, and density for the whole workspace.

Borders

The accordion carries no chrome of its own, so a bordered layout is pure composition: frame the stack with a rounded border and inset each item with horizontal padding so the dividers and text clear the edge.

We offer monthly and annual plans. Billing runs at the start of each cycle and you can cancel anytime.

Card

Wrap the stack in a bordered Surface for a self-contained FAQ card. Drop the accordion a heading rank below the card title (level) so the document outline stays well-formed.

Subscription & billing

Common questions about plans, payments, and cancellations.

Starter, Professional, and Enterprise — each adding storage, API access, and priority support.

Nested

Accordions nest for settings → sub-settings trees. Set level so each tier's triggers sit at the right rank in the document outline; a logical indent on the nested stack sets it apart from its parent.

Workspace name, URL, and default landing view.

Find in page

By default a closed panel leaves the DOM. Add hiddenUntilFound to keep its content mounted but hidden, so the browser's find-in-page (Ctrl + F / + F) matches text inside a collapsed section and auto-expands it — better for FAQs and SEO.

Refunds are issued to the original payment method within five to ten business days of approval. You'll get an email confirmation once the refund is processed.

Disabled items

Mark an item disabled to show it exists while keeping it inert. It stays in the tab order and is announced as disabled, so the reader still learns the section is there — it just can't be expanded.

Workspace name, language, and time zone.

Controlled

Drive the open sections yourself with value and onValueChange on Accordion.Root — the value is the array of open item values, so it works the same in single and multiple modes. Omit them (use defaultValue) to let the component own its state.

The latest changes shipped this week.

Open sections: release

Keyboard

Only Tab and Enter / Space are required by the WAI-ARIA accordion pattern; the arrow and Home / End keys are an enhanced convenience Base UI adds.

KeyActionSpec
Tab / Shift + TabMove focus to the next / previous trigger (or out of the accordion).Required
Enter / SpaceToggle the focused section open or closed.Required
/ Move focus to the next / previous trigger, looping at the ends.Enhanced
Home / EndFocus the first / last trigger.Enhanced

Arrow-key navigation follows the accordion's orientation; a horizontal accordion uses / instead, mirrored under RTL.

Accessibility

  • Heading level. Each Accordion.Trigger renders inside an <h{level}> — set level on Accordion.Root (default 3, overridable per trigger) so the stack nests correctly in the document outline. A wrong level reads as a broken outline to screen-reader users.
  • Region landmarks. Base UI labels each panel role="region" by its trigger (aria-labelledby), so a screen-reader user can jump to and identify the disclosed content. Past six expandable items the role auto-steps back to group (the APG guidance against flooding the landmark list); landmarkPanels forces it on or off.
  • Chevron. Decorative and aria-hidden; the trigger's label is the accessible name. Its rotation reads in both writing directions.
  • Motion. The height animation and the content fade are dropped under prefers-reduced-motion; the state still swaps instantly.

Anatomy

Compose an accordion from its parts. Accordion.Root owns which sections are open (controlled via value / onValueChange, or uncontrolled via defaultValue) and the stack-wide settings.

  • Accordion.Root — the container. Props: size (sm · md), level (2–6, default 3), landmarkPanels, multiple (default false), orientation (default vertical), plus the Base UI Accordion.Root props.
  • Accordion.Item — one collapsible section. Pass a value to control or initialise its open state; can be disabled. Carries only the hairline rule dividing it from the next — pad it or wrap the stack to build a bordered or card layout.
  • Accordion.Trigger — the full-width toggle button, rendered inside its own heading (<h{level}>, override level per trigger). Base UI wires aria-expanded and aria-controls; the rotating chevron sits in its own slot after the label.
  • Accordion.Panel — the disclosed content. Its height animates via Base UI's measured value and respects prefers-reduced-motion. Keep it mounted while closed with keepMounted, or expose it to in-page find with hiddenUntilFound.

Every part carries a data-slot (accordion, accordion-item, accordion-header, accordion-trigger, accordion-trigger-icon, accordion-panel, accordion-panel-content) for host-side styling — pair it with the Base UI state attributes (data-open, data-panel-open, data-disabled, data-index, data-orientation) and with the root's data-size.

Design tokens

Generated from the component's declaration — the same graph that mints the CSS, so a variable name or its resolution default can't drift. The minted tokens are the public override seam: set one on any ancestor and every accordion in that region retunes — e.g. .faq { --noctis-accordion-trigger-padding-block: var(--noctis-space-2); } tightens the trigger rows. Knobs that aren't minted are reached through the part's data-slot. See Customization for the full override ladder and Tokens for the whole graph.

Token

API reference

Generated from the component's types — every prop, type, default, and description comes straight from the source. Each part gets its own table; parts that only forward to Base UI list just the props they pass through. Expand a row for the full type and description.

Accordion.Root

Prop

Accordion.Item

Prop

Accordion.Trigger

Prop

Accordion.Panel

Prop

AttributeDescription
data-slotThe slot name on every rendered part.
data-openPresent on the item, header, and panel while that item is expanded.
data-panel-openPresent on the trigger while its panel is expanded.
data-disabledPresent on a disabled item, header, trigger, and panel.
data-indexThe item's zero-based position in the stack.
data-orientation`horizontal` | `vertical` — the accordion's orientation.
data-starting-styleThe transition phase of the panel — present while it animates open or closed.