Skip to content

Accordion

The Accordion component organizes content into collapsible sections. Built on Radix UI Accordion, it supports single or multiple open panels, animated transitions, and full keyboard navigation.

Import

import {
Accordion,
AccordionItem,
AccordionTrigger,
AccordionContent,
} from '@nim-ui/components';

Basic Usage

Single Accordion

View Code
<Accordion type="single" collapsible>
<AccordionItem value="item-1">
<AccordionTrigger>Is it accessible?</AccordionTrigger>
<AccordionContent>
Yes. It adheres to the WAI-ARIA Accordion pattern.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionTrigger>Is it styled?</AccordionTrigger>
<AccordionContent>
Yes. It comes with default styling using Tailwind CSS.
</AccordionContent>
</AccordionItem>
</Accordion>

Multiple Open

Set type="multiple" to allow multiple sections to be open simultaneously.

<Accordion type="multiple" defaultValue={['item-1', 'item-3']}>
<AccordionItem value="item-1">
<AccordionTrigger>Section 1</AccordionTrigger>
<AccordionContent>Content 1</AccordionContent>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionTrigger>Section 2</AccordionTrigger>
<AccordionContent>Content 2</AccordionContent>
</AccordionItem>
<AccordionItem value="item-3">
<AccordionTrigger>Section 3</AccordionTrigger>
<AccordionContent>Content 3</AccordionContent>
</AccordionItem>
</Accordion>

Props

Accordion

Name Type Default Description
type * 'single' | 'multiple' - Whether one or multiple items can be open at once
collapsible boolean false Allow closing all items (only for type="single")
defaultValue string | string[] - Initially open item(s)
className string - Additional CSS classes

AccordionItem

Name Type Default Description
value * string - Unique identifier for this item
disabled boolean - Prevent opening this item

Usage Examples

FAQ Section

const faqs = [
{ q: 'How do I get started?', a: 'Install the package and import components.' },
{ q: 'Is dark mode supported?', a: 'Yes, all components support dark mode.' },
{ q: 'Can I customize styles?', a: 'Yes, use className or Tailwind utilities.' },
];
function FAQ() {
return (
<Accordion type="single" collapsible>
{faqs.map((faq, i) => (
<AccordionItem key={i} value={`faq-${i}`}>
<AccordionTrigger>{faq.q}</AccordionTrigger>
<AccordionContent>{faq.a}</AccordionContent>
</AccordionItem>
))}
</Accordion>
);
}

Accessibility

Built on Radix UI Accordion with full accessibility support:

  • WAI-ARIA Accordion pattern compliance
  • Keyboard navigation: Arrow keys navigate between triggers, Enter/Space toggles
  • Focus management: Focus ring visible on trigger elements
  • Reduced motion: Animations respect prefers-reduced-motion

Keyboard Support

KeyAction
Enter / SpaceToggle the focused section
Arrow DownMove focus to next trigger
Arrow UpMove focus to previous trigger
HomeMove focus to first trigger
EndMove focus to last trigger
  • Tabs — Content organization with tabbed interface
  • Card — Content container