An animated FAQ accordion with expandable panels, powered by Motion. A React component for shadcn/ui.
Made by AxylAnimated FAQ accordion showing expandable panels with smooth height transitions.
For custom content per item, pass a React node as content or compose with the compound API:
| Prop | Type | Default |
|---|---|---|
allowMultiple? | boolean | false |
duration? | number | 0.8 |
iconMode? | "rotate" | "fade" | "both" | "both" |
iconRotation? | number | -180 |
ease? | [number, number, number, number] | expo.inOut |
disabledOn? | ("mobile" | "tablet" | "desktop")[] | - |
items? | { id?: string; title: string; content: React.ReactNode; defaultOpen?: boolean; enableStagger?: boolean }[] | - |
className? | string | - |
| Prop | Type | Default |
|---|---|---|
defaultOpen? | boolean | false |
delay? | number | 0 |
duration? | number | - |
ease? | [number, number, number, number] | - |
iconRotation? | number | - |
disabledOn? | ("mobile" | "tablet" | "desktop")[] | - |
enableStagger? | boolean | false |
staggerDuration? | number | 0.6 |
staggerDelay? | number | 0.15 |
staggerEase? | [number, number, number, number] | expo.out |
staggerYPercent? | number | 110 |
staggerStartDelay? | number | 200 |
onOpen? | () => void | - |
onClose? | () => void | - |
Use the Accordion for FAQ sections, settings panels, or any content group where users need to scan multiple topics quickly and expand only the ones they care about. It works well when you have 4–12 items of similar importance and collapsing them reduces cognitive load — for example, product feature breakdowns, pricing tier details, or support documentation.
Avoid it when all items need to be visible at once, or when there are fewer than 3 items (a simple list or card layout is clearer).
AccordionTrigger renders as a native <button>, so keyboard navigation (Tab, Enter, Space) works without extra configuration. Each panel region gets an aria-expanded attribute and is linked to its trigger via aria-controls. When prefers-reduced-motion: reduce is active, expand and collapse animations are skipped while the items remain fully interactive.
Inspired by Annnimate. Reimplemented for Motion and React.
Stagger Button
A shadcn button that staggers per character or slides the whole label on hover. A React component.
Expandable Tabs
A pill-shaped tab bar that expands into a floating panel, with Motion driving the shell, label, and content transitions. React component.
Built by Axyl. A motion-first component registry for React.
Last updated: 9/14/2026
Help keep SoraLabs moving.
Every contribution helps us build and maintain open-source tools for the community.
Sponsor on GitHubSora UI is an animated component registry for React and Next.js. It ships copy-paste primitives built on Motion and GSAP, with live docs, demos, and a shadcn-compatible install flow so you can add polished UI effects directly into your project.