Collapsible sections for FAQs, policy pages, editor side panels and the mobile menu. Single or multiple open, three variants, header summaries and actions.
Installation
The whole kit as one package — get updates by bumping the version. Add the styles to globals.css: @import "@vamos-ui/react/styles.css";
Usage
import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from "@vamos-ui/react";
<Accordion type="single" collapsible>
<AccordionItem value="refunds">
<AccordionTrigger>How do refunds work?</AccordionTrigger>
<AccordionContent>…</AccordionContent>
</AccordionItem>
</Accordion>Keyboard: Enter / Space toggles, ↑ ↓ move between headers, Home / End jump to the first / last.
Examples
Variants (HR policies)
plain is a ruled list, separated boxes each item, card puts them in one panel.
plain
separated
card
Editor side panel (CMS)
meta summarises a closed section and is part of its name; actions sit beside the toggle as separate controls. Disabled items stay visible.
Goes live Nov 14, 2026 · 09:00
Visibility: public · Author: Elif Kaya
Meta description is 182 characters — keep it under 160.
Add alt text to 1 image.
Remember open sections
Control value and store it — here in localStorage, so the panel reopens the way the user left it.
API
Accordion
| Prop | Type | Default |
|---|---|---|
typeRequired. One open section, or any number. | "single" | "multiple" | — |
collapsiblesingle: allow closing the open section. | boolean | false |
value · defaultValueOpen section(s); string for single, array for multiple. | string | string[] | — |
onValueChangeCalled when sections open or close. | (value) => void | — |
variantRuled list, boxed items, or one panel. | "plain" | "separated" | "card" | "plain" |
sizesm for side panels. | "sm" | "md" | "md" |
headingLevelHeading that wraps each trigger, to fit the page outline. | 2 | 3 | 4 | 5 | 6 | 3 |
disabledLocks every section. | boolean | false |
AccordionItem
| Prop | Type | Default |
|---|---|---|
valueRequired. Identifies the section. | string | — |
disabledLocks this section. | boolean | false |
AccordionTrigger
| Prop | Type | Default |
|---|---|---|
iconLeading icon. | ReactNode | — |
metaSummary at the end of the header ("3 selected"); included in the button's name. | ReactNode | — |
actionsControls beside the toggle (outside the button). | ReactNode | — |
AccordionContent
| Prop | Type | Default |
|---|---|---|
forceMountKeep the content mounted while closed. | true | — |
classNameApplied to the inner padded box (the outer element animates height). | string | — |