Skip to content

Accordion

Vertically stacked collapsible sections that let users show and hide content panels.

Yes. It adheres to WAI-ARIA design patterns.
Yes you can.
---
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@bejamas/ui/components/accordion';
---
<Accordion class="w-full max-w-[420px] self-start mt-10" collapsible>
<AccordionItem value="accordion-item-1">
<AccordionTrigger>
Is it accessible?
</AccordionTrigger>
<AccordionContent>
Yes. It adheres to WAI-ARIA design patterns.
</AccordionContent>
</AccordionItem>
<AccordionItem value="accordion-item-2">
<AccordionTrigger>
Can I customize the icon?
</AccordionTrigger>
<AccordionContent>
Yes you can.
</AccordionContent>
</AccordionItem>
</Accordion>
Terminal window
bunx bejamas add accordion
---
import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@bejamas/ui/components/accordion';
---
<Accordion class="w-full max-w-[420px] self-start">
<AccordionItem open>
<AccordionTrigger>
Is it accessible?
</AccordionTrigger>
<AccordionContent>
Yes. It adheres to WAI-ARIA design patterns.
</AccordionContent>
</AccordionItem>
</Accordion>
PropTypeDefault
classstring""
multiplebooleanfalse
defaultValuestring""
collapsiblebooleanfalse
Yes. It adheres to WAI-ARIA design patterns.
Yes you can.
Yes you can.
---
import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@bejamas/ui/components/accordion';
---
<Accordion class="w-full max-w-[420px] self-start" multiple>
<AccordionItem value="accordion-item-1">
<AccordionTrigger>
Is it accessible?
</AccordionTrigger>
<AccordionContent>
Yes. It adheres to WAI-ARIA design patterns.
</AccordionContent>
</AccordionItem>
<AccordionItem value="accordion-item-2">
<AccordionTrigger>
Can I customize the icon?
</AccordionTrigger>
<AccordionContent>
Yes you can.
</AccordionContent>
</AccordionItem>
<AccordionItem value="accordion-item-3">
<AccordionTrigger>
Can I customize the icon?
</AccordionTrigger>
<AccordionContent>
Yes you can.
</AccordionContent>
</AccordionItem>
</Accordion>

The accordion emits custom events that you can listen to:

EventDetailDescription
accordion:change{ value: string[] }Fired when expanded items change
Content 1
<Accordion id="my-accordion" collapsible>
<AccordionItem value="item-1">
<AccordionTrigger>Item 1</AccordionTrigger>
<AccordionContent>Content 1</AccordionContent>
</AccordionItem>
</Accordion>
const accordion = document.getElementById('my-accordion');
accordion.addEventListener('accordion:change', (e) => {
console.log('Expanded items:', e.detail.value);
});

You can control the accordion programmatically by dispatching an accordion:set event:

const accordion = document.getElementById('my-accordion');
// Expand a single item
accordion.dispatchEvent(new CustomEvent('accordion:set', {
detail: { value: 'item-1' }
}));
// Expand multiple items (when multiple prop is true)
accordion.dispatchEvent(new CustomEvent('accordion:set', {
detail: { value: ['item-1', 'item-2'] }
}));

The accordion sets these data attributes that you can use for styling or querying state:

AttributeElementDescription
data-stateaccordion-itemCurrent state (open or closed)