FAQ — Accordion
FAQ section with accordion for expandable questions and answers.
registry/default/blocks/faq-01.tsx
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion";
import { cn } from "@/lib/utils";
type FaqItem = {
question: string;
answer: string;
};
type Faq01Props = {
title?: string;
description?: string;
items: FaqItem[];
className?: string;
};
export function Faq01({
title = "Frequently Asked Questions",
description,
items,
className,
}: Faq01Props) {
return (
<section className={cn("w-full px-6 py-24 md:py-32", className)}>
<div className="mx-auto max-w-3xl">
<div className="mb-12 text-center">
<h2 className="text-3xl font-bold tracking-tight sm:text-4xl">
{title}
</h2>
{description && (
<p className="mt-4 text-lg text-muted-foreground">{description}</p>
)}
</div>
{/* Base UI: no existen `type` ni `collapsible`. Un solo panel abierto es
el comportamiento por defecto (sin `multiple`), y el colapso libre
también — es decir, `type="single" collapsible` era exactamente esto. */}
<Accordion className="w-full">
{items.map((item, index) => (
<AccordionItem key={index} value={`item-${index}`}>
<AccordionTrigger className="text-left text-base">
{item.question}
</AccordionTrigger>
<AccordionContent className="text-muted-foreground">
{item.answer}
</AccordionContent>
</AccordionItem>
))}
</Accordion>
</div>
</section>
);
}
- Where it goes
- faq
- Interaction
- accordion