Accordion
A set of collapsible panels with headings.
Installation
pnpm dlx shadcn@latest add @lumi-ui/accordion
Basic Usage
import {
Accordion,
AccordionItem,
AccordionPanel,
AccordionSummary,
} from "@/components/ui/accordion";export function AccordionDemo() {
return (
<Accordion defaultValue={["item-1"]} className="w-full max-w-md">
<AccordionItem value="item-1">
<AccordionSummary>What is Lumi UI?</AccordionSummary>
<AccordionPanel>
Lumi UI is an open-source component library designed for building
beautiful and accessible user interfaces with React.
</AccordionPanel>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionSummary>Can I customize the components?</AccordionSummary>
<AccordionPanel>
Absolutely. Components are built with Tailwind CSS and CVA, making
them easy to style and extend to match your brand.
</AccordionPanel>
</AccordionItem>
</Accordion>
);
}Anatomy
<Accordion>
<AccordionItem>
<AccordionSummary/>
<AccordionPanel/>
</AccordionItem>
</Accordion>Cookbook
Custom Trigger with icon
Custom Trigger without icon
Default Open Panels
To have an accordion item open by default, assign a unique value to the AccordionItem and pass that value in an array to the defaultValue prop on Accordion component.
To have multiple items open by default, ensure the multiple prop is set to true and include each item's value in the defaultValue array.
Open multiple panels
Set up the accordion to allow multiple panels to be open at the same time using the multiple prop.
Disable Panel
Pass disabled props to AccordionItem to disable a panel.
Usage with Motion
Base UI spreads its className (including transition styles) onto
your custom component via the render prop. This causes both CSS and JS
animations to run simultaneously, resulting in janky behavior.
When using render with animation libraries like Motion, you can set
animation="none" to reset default css transitions and prevent conflicts between CSS transitions and JavaScript animations.
API Reference
AccordionPanel
Migration Guide
Props changes
Component Naming & Structure
Similar AccordionTrigger in shadcn, AccordionSummary explicitly wraps AccordionTrigger and AccordionHeader.
AccordionContent is renamed to AccordionPanel.
lumi/ui export all primitive components, making it easier to customize the components than fits your design.
Migration Example
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion"
function Demo() {
return (
<Accordion type="single" collapsible>
<AccordionItem value="item-1">
<AccordionTrigger>Is it accessible?</AccordionTrigger>
<AccordionContent>
Yes. It adheres to the WAI-ARIA design pattern.
</AccordionContent>
</AccordionItem>
</Accordion>
);
}