Accordion
A set of stacked headings that expand or collapse to reveal related content, supporting single or multiple open sections.
An accordion is a vertically stacked set of interactive headings that each reveal a section of content. They're commonly used to reduce the need to scroll when presenting multiple sections of content on a single page.
Use accordions when you need to save vertical space by hiding content until needed, particularly with a large amount of content that's not all needed at once.
Ensure accordion headers are properly marked up with buttons and use aria-expanded to indicate the state to screen readers. Our component handles this for you automatically.
Variants
An accordion is a vertically stacked set of interactive headings that each reveal a section of content. They're commonly used to reduce the need to scroll when presenting multiple sections of content on a single page.
Use accordions when you need to save vertical space by hiding content until needed, particularly with a large amount of content that's not all needed at once.
Features
- Supports single and multiple selection modes
- Controlled and uncontrolled modes
- CVA-powered design variants
- Smooth transitions with optional animations
- Customizable padding, color, and border per item
- Built-in accessibility via aria-*attributes
Variants
Props
Accordion Props
| Prop | Type | Default | Description | 
|---|---|---|---|
| children | ReactNode | — | Accordion items | 
| selectionMode | "single" | "multiple" | "single" | Controls how many items can be expanded | 
| expandedItems | string[] | — | Controlled list of expanded item IDs | 
| onExpandedChange | (ids: string[]) => void | — | Callback when expanded items change | 
AccordionItem Props
| Prop | Type | Default | Description | 
|---|---|---|---|
| id | string | — | Unique identifier for the item | 
| title | ReactNode | — | Accordion item title | 
| children | ReactNode | — | Content inside the accordion item | 
| itemColor | "light" | "dark" | "light" | Background color variant | 
| itemPadding | "sm" | "md" | "lg" | "md" | Padding size variant | 
| itemBorder | "none" | "default" | "default" | Border style variant | 
| itemDisableAnimation | boolean | false | Whether to disable expand/collapse animation |