A split FAQ: a sticky column with an eyebrow, a serif heading that settles in word by word, an intro and a pill action, beside a ruled accordion whose serif questions open to calm, plain answers.
A first-call FAQ: a sticky column of heading, intro and pill action beside a single-open accordion whose serif questions sit on rules of their own.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/faq94?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/faq94?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/faq94.tsx, the shadcn accordion primitive it is built on, and the button22 sliding-marker pill and the text1 word stagger it uses.
The installed file exports faq94Demo alongside the block: the exact props behind the preview above. Spread it to get a working FAQ section in one line.
import { Faq94, faq94Demo } from "@/components/beste/block/faq94";
export default function Page() {
return <Faq94 {...faq94Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Faq94 } from "@/components/beste/block/faq94";
export default function Page() {
return (
<Faq94
eyebrow="Before you begin"
heading="The things people ask on the first call."
description="If your question is not here, ask it anyway."
button={{ label: "Ask something else", href: "/contact", tone: "outline" }}
items={[
{
question: "Do I need to know what I want to talk about?",
answer: "No. Many people arrive with a feeling rather than a topic.",
},
{
question: "Can we meet online?",
answer: "Yes. About half of our sessions happen on video.",
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the heading |
heading | string | – | Section heading, rendered as an h2 through Text1 |
description | string | – | Intro paragraph in the sticky column |
button | ActionButton | – | Pill action under the intro |
items | FaqItem[] | [] | Questions and answers, in the order given |
className | string | – | Extra classes for the outer <section> |
type FaqItem = {
question: string;
answer: string;
};
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};type="single" with collapsible, so one answer is open at a time and the open one can be closed again, leaving the list fully collapsed.faq94-0, faq94-1), so nothing has to be unique in your content for the accordion to track which panel is open.[&>svg] selector rather than being passed as a prop, because the shadcn trigger renders its own icon; that is also where its size and muted colour come from.hover:no-underline is set deliberately: the shadcn default underlines a hovered trigger, which fights a serif question set at this size.md:sticky md:top-28 so the heading and action stay in view down a long list, and falls back to normal flow below md where a sticky column would cover the questions.faq79
A two-column FAQ with a sticky eyebrow, light heading, and support call to action on the left, and an interactive accordion of questions on the right.
faq95
The classic single-column FAQ: a centred serif heading that settles in word by word, a ruled accordion with serif questions and plain answers, and a closing line with a sliding-marker pill for the question that is not on the list.
faq86
An FAQ split across two columns of independent accordions, so opening one answer never closes another, closing on a soft support panel with two actions.