FAQ section
BlockQuestions that open to reveal answers.
pnpm dlx shadcn@latest add https://caliperui.site/r/faq-section.jsonFrequently asked questions
Short answers. Search if you are looking for something specific.
Still have a question? Ask us directly
When to use #
Use it for
- Answering objections near a purchase decision.
- Content is short and scannable.
Skip it when
- The answers are long documents.
Installation #
pnpm dlx shadcn@latest add https://caliperui.site/r/faq-section.json
Adds its 6 files to components/ui/, each with its own stylesheet, and installs their packages. No account needed. The first part also adds Caliper UI’s tokens; import them once as in Installation.
Usage #
This is the code behind the preview above.
import { FaqSection } from "@/components/ui/faq-section" const faq = [ { id: "own", question: "Do I own the code?", answer: "Yes. Components are copied into your project as readable source. You can edit, rename or delete anything." }, { id: "license", question: "What does the license allow?", answer: "Use it in unlimited projects for your own products and clients. You may not resell the components as a competing library." }, { id: "frameworks", question: "Which frameworks do you support?", answer: "React 19 with any bundler. The examples run in Next.js, and nothing depends on it." }, { id: "a11y", question: "How is accessibility handled?", answer: "Every component is tested with the keyboard and a screen reader, and keeps visible focus, text alternatives and reduced-motion behavior." }, { id: "theming", question: "Can I change the look?", answer: "Colors, spacing, radii and motion live in a small set of tokens. Change them once and everything follows." }, { id: "updates", question: "How do updates work?", answer: "Run the update command to see a diff of what changed upstream, then accept the parts you want." }, { id: "support", question: "Where do I get help?", answer: "Read the docs first, then ask in the community or email support. Paid plans include a two-day reply." }, { id: "refunds", question: "Can I get a refund?", answer: "Within 30 days, no questions asked, if it is not right for your team." }, ]; export function FaqSectionDemo() { return ( <FaqSection description="Short answers. Search if you are looking for something specific." items={faq} contact={{ label: "Ask us directly", href: "#contact" }} /> ); }
API reference #
FaqSection
component
Accessibility #
It exposes status semantics, with aria-labelledby and aria-label kept in step with state. Changes that matter are announced through a live region.
No custom key handling; Tab and the native activation keys do the work.
Motion #
It declares no animation in its component source. Any transition comes from its stylesheet, which uses the duration tokens that collapse to instant under prefers-reduced-motion.