Basel Standard

Basel Standard / Docs

Accordion

Disclosure primitive for stacked details, specs, and secondary content that should stay on the page.

Dispatches in five business days with white-glove delivery for oversized pieces.

Accordions let a page hold supporting detail without forcing a route change, modal, or giant wall of always-open copy. In this system they work especially well for product specifications, policy notes, and FAQs that are useful but not primary.

Installation

Install
Purchase access, then open /account/install to issue a registry token.

Usage

import {
  Accordion,
  AccordionContent,
  AccordionItem,
  AccordionTrigger,
} from "@/components/ui/accordion"
<Accordion type="single" collapsible>
  <AccordionItem value="shipping">
    <AccordionTrigger>Shipping profile</AccordionTrigger>
    <AccordionContent>Dispatches in five business days.</AccordionContent>
  </AccordionItem>
</Accordion>

Why This Primitive Exists

The accordion gives you progressive disclosure without hiding information behind a separate interaction surface.

  • Use it when readers may need the detail, but not all at once.
  • Prefer it to a modal when the content belongs to the current page's narrative.
  • Avoid it for short lists that can stay visible without increasing noise.

Examples

Single-Open Detail Stack

Use type="single" when sections are mutually exclusive or when expanded content is long enough that multiple open rows would feel heavy.

Dispatches in five business days with white-glove delivery for oversized pieces.

<Accordion type="single" collapsible defaultValue="shipping">
  <AccordionItem value="shipping">
    <AccordionTrigger>Shipping profile</AccordionTrigger>
    <AccordionContent>Dispatches in five business days.</AccordionContent>
  </AccordionItem>
</Accordion>

Multiple Open Sections

Switch to type="multiple" when readers are likely to compare adjacent spec groups.

Width 1980 mm, depth 820 mm, seat height 410 mm.

Wipe the powder coat with a dry cloth and oil the timber elements every six months.
<Accordion type="multiple" defaultValue={["dimensions", "care"]}>
  <AccordionItem value="dimensions">{/* ... */}</AccordionItem>
  <AccordionItem value="care">{/* ... */}</AccordionItem>
</Accordion>

In Context

The primitive becomes more useful when the surrounding layout carries the overview and the accordion handles only the secondary layers.

Dense product detail

Use an accordion when readers need selective depth, not a hidden route.

The surrounding card carries the overview while the accordion reveals secondary operational details on demand.

Eligible within 30 days when original packaging and hardware kit are intact.

Guidance

Keep Triggers Specific

  • Write trigger labels so readers know what opens before they interact.
  • Prefer concrete labels like Materials and finish over vague labels like More info.
  • If every row needs a paragraph to explain itself, the content may want a different structure.

Choose The Right Expansion Model

  • Use single for dense policy or FAQ stacks.
  • Use multiple for spec comparisons or short independent sections.
  • Add collapsible when it should be valid to leave everything closed.

Keep Hidden Content Secondary

  • Put the primary summary above the accordion, not inside the first row.
  • Avoid burying essential task instructions in collapsed panels.
  • If the expanded content includes major actions, consider a card, dialog, or separate section instead.

API Reference

Root And Slots

ExportRendersNotes
AccordionAccordionPrimitive.RootAccepts Radix root props like type, value, defaultValue, and collapsible.
AccordionItemAccordionPrimitive.ItemAdds the shared border treatment for each row.
AccordionTriggerAccordionPrimitive.Trigger inside a headerUppercase Swiss trigger styling with the built-in chevron.
AccordionContentAccordionPrimitive.ContentAnimated content wrapper with shared body spacing.

Notable Props

PropApplies ToType
typeAccordion"single" | "multiple"
collapsibleAccordionboolean
value / defaultValueAccordioncontrolled or uncontrolled Radix values
classNameall exportsstring

Because the implementation is a thin Swiss wrapper around Radix Accordion, the underlying accessibility and state props remain available.