An FAQ with a search field that narrows the list as it is typed, matching against topic, question, and answer, with every answer open on its own hairline row and an empty state when nothing matches.
An FAQ with a search field that narrows the list as it is typed, matching against topic, question and answer, with every answer open on its own hairline row and an empty state when nothing matches.
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/faq85?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/faq85?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/faq85.tsx, the shadcn/ui input component it depends on, and the badge23 and button21 components it uses for the eyebrow and the support action.
The installed file exports faq85Demo alongside the block: the exact props behind the preview above. Spread it to get a working FAQ in one line.
import { Faq85, faq85Demo } from "@/components/beste/block/faq85";
export default function FaqPage() {
return <Faq85 {...faq85Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Faq85 } from "@/components/beste/block/faq85";
export default function FaqPage() {
return (
<Faq85
badge={{ label: "Search the answers" }}
heading="Type what you are worried about"
description="Every answer is open by default and the list narrows as you type."
searchLabel="Search questions"
searchPlaceholder="Try migration, uptime, or leaving"
items={[
{
topic: "Migration",
question: "How long does moving off our current system take?",
answer: "Two weeks end to end, and the busy part is three days in the middle.",
},
{
topic: "Uptime",
question: "What happens when the booking service goes down?",
answer: "Member booking links keep working from cache while the admin app recovers.",
},
]}
emptyLabel="Nothing matches that yet. Ask us directly."
support={{ label: "Still not answered?", button: { label: "Ask an engineer", href: "/contact" } }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Centered eyebrow above the heading, rendered through Badge23 |
heading | string | – | Section heading, centered and capped at max-w-2xl |
description | string | – | Centered supporting paragraph, capped at max-w-xl |
searchLabel | string | – | Visually hidden label for the search field |
searchPlaceholder | string | – | Placeholder inside the search field |
items | FaqItem[] | [] | Questions, each carrying the topic it belongs to |
emptyLabel | string | – | Line shown when the query matches nothing |
support | { label: string; button: ActionLink } | – | Fallback prompt at the foot of the list |
className | string | – | Extra classes for the outer section |
type ActionLink = {
label: string;
href: string;
};
type FaqItem = {
topic: string;
question: string;
answer: string;
};topic, question and answer joined into one string, both sides lowercased and the query trimmed. There is no fuzzy matching and no word-boundary logic, so a typo returns nothing.searchLabel is rendered sr-only. The field is visually labelled by its placeholder, but assistive technology still gets a real label.pointer-events-none and absolutely positioned, with pl-11 on the input clearing it, so clicks pass through to the field.Input with type="search", which is why input appears in the block's registry dependencies.max-w-3xl column as the list and carry their own border-t, so the rules stay continuous whether or not results are showing.faq77
A type-forward FAQ with a sticky heading rail and a numbered accordion list of expandable questions.
faq8
Questions with answers displayed below in a simple list. Best for FAQs with shorter answers that don't require expansion.
faq80
An always-open FAQ laid out as a two-column grid of numbered, hairline-separated question and answer entries, closing with a soft support panel that pairs a short prompt with two actions.