Accordion

Expandable disclosure sections for FAQs and settings, with single or multiple open modes and nested content support.

Loading preview

Examples

Practical examples and common states for the same installable component.

Bordered

Enclosed container with item dividers.

examples/accordion-bordered.tsx
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/wensity/accordion";
export function AccordionBordered() {
return (
<Accordion type="single" variant="bordered" defaultValue="item-1">
<AccordionItem value="item-1">
<AccordionTrigger>What is included in the free plan?</AccordionTrigger>
<AccordionContent>
Every primitive in the library, unlimited projects, and community support.
</AccordionContent>
</AccordionItem>
</Accordion>
);
}

Separated

Individually spaced accordion items.

examples/accordion-separated.tsx
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/wensity/accordion";
export function AccordionSeparated() {
return (
<Accordion type="single" variant="separated" defaultValue="item-1">
<AccordionItem value="item-1">
<AccordionTrigger>What is included in the free plan?</AccordionTrigger>
<AccordionContent>
Every primitive in the library, unlimited projects, and community support.
</AccordionContent>
</AccordionItem>
</Accordion>
);
}

Card

Wrap the Accordion in a Card component.

Requires: card

examples/accordion-card.tsx
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/wensity/accordion";
import {
Card,
CardContent,
CardDescription,
CardHeader,
CardTitle,
} from "@/components/wensity/card";
export function AccordionCard() {
return (
<Card className="max-w-md">
<CardHeader>
<CardTitle className="text-lg">Subscription & Billing</CardTitle>
<CardDescription className="text-[14px] leading-5">
Common questions about your account, plans, payments and cancellations.
</CardDescription>
</CardHeader>
<CardContent>
<Accordion type="single">
<AccordionItem value="item-1">
<AccordionTrigger>What subscription plans do you offer?</AccordionTrigger>
<AccordionContent>
We offer Starter, Pro, and Team plans billed monthly or annually.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionTrigger>How does billing work?</AccordionTrigger>
<AccordionContent>
You are billed automatically at the start of each cycle.
</AccordionContent>
</AccordionItem>
<AccordionItem value="item-3">
<AccordionTrigger>How do I cancel my subscription?</AccordionTrigger>
<AccordionContent>
Cancel anytime from your account settings.
</AccordionContent>
</AccordionItem>
</Accordion>
</CardContent>
</Card>
);
}

FAQ

Spacious layout optimized for FAQ sections.

examples/accordion-faq.tsx
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/wensity/accordion";
export function AccordionFaq() {
return (
<Accordion type="single" variant="faq" defaultValue="item-1">
<AccordionItem value="item-1">
<AccordionTrigger>What is included in the free plan?</AccordionTrigger>
<AccordionContent>
Every primitive in the library, unlimited projects, and community support.
</AccordionContent>
</AccordionItem>
</Accordion>
);
}

Props

PropTypeDefaultDescription
type"single" | "multiple""single"Whether one item or several may be open at once.
variant"bordered" | "separated" | "minimal" | "faq""minimal"Item treatment. faq is tuned for question and answer lists.
valuestring | string[]-Controlled open item or items.
defaultValuestring | string[]-Initially open items when uncontrolled.
collapsiblebooleantrueWith a single-type accordion, allows closing the open item so none remain open.
onValueChange(value: string | string[]) => void-Called when the open items change.