Glin UI
Block / Organismbeta

FAQ Section

Accordion based FAQ with two column or centered layout, category tabs and a FAQPage JSON-LD helper.

Edit on GitHub

FAQ

Questions, answered

Everything you need before you start.

Installation

Install from
pnpm dlx @glinui/cli@latest add faq-section

Prefer the package?

Usage

Composes our Accordion, so keyboard and ARIA come from it.

`faqJsonLd(items)` returns an escaped JSON string for a script tag, or pass `jsonLd` to render it. Rich answers need `answerText` to appear in the JSON-LD.

Variants

Centered, and with category tabs.

Centered

With category tabs

<FaqSection items={items} layout="centered" />
<FaqSection items={items} categories />

States

Single open item by default, `multiple` opens several.

Centered

With category tabs

<FaqSection items={items} multiple />

In a layout

Between social proof and the closing CTA.

Trusted by builders

Placeholder quote: the setup took an afternoon and the team stopped asking where the buttons came from.

APAlex PlaceholderEngineer, Acme

Placeholder quote: accessible by default, which saved us a long audit.

SESam ExampleDesigner, Nimbus

Placeholder quote: the tokens made dark mode a one line change.

JSJo SampleFounder, Orbit

FAQ

Start today

<FaqSection items={items} layout="centered" />

Accessibility

  • Section labelled by its heading.
  • Accordion triggers are buttons with aria-expanded.
  • Category tabs use the tablist pattern with arrow key navigation.

Keyboard Interactions

KeyAction
Enter / SpaceToggle the focused question
Arrow keysMove between category tabs

Reduced Motion

The accordion height animation is removed under reduced motion by the Accordion itself.

Affected properties

accordion open and close

API Reference

PropTypeRequiredDefaultDescription
itemsFaqItem[]Yes-question, answer, optional answerText and category.
layoutFaqSectionLayoutNotwo-columnTitle left and accordion right, or stacked.
variantAccordionVariantNoambientAccordion look.
categoriesbooleanNofalseShow category tabs when items carry two or more categories.
multiplebooleanNofalseAllow several items open.
jsonLdbooleanNofalseRender a FAQPage script.
asideReact.ReactNodeNo-Slot such as a contact card.
descriptionReact.ReactNodeNo-Auto-generated from TypeScript source.
eyebrowReact.ReactNodeNo-Auto-generated from TypeScript source.
titleReact.ReactNodeNo-Auto-generated from TypeScript source.

Source

Import directly from the package or browse the source on GitHub. Click any file to view it.

Import

import { FAQSection } from "@glinui/ui"

Source Files

Dependencies

@glinui/ui

Generated API Snapshot

Beta

Auto-extracted from TypeScript source in packages/ui/src/components/faq-section.tsx. This section is in beta and may lag behind hand-curated docs. Regenerate with pnpm --filter @glinui/docs api:generate.

Generated: 2026-10-08T01:41:21.546Z · Full index: /docs/api-metadata

Primary Props Type

FaqSectionProps

FaqSectionProps

PropTypeRequiredDefaultDescription
asideReact.ReactNodeNo-Extra content under the title in the two-column layout, such as a contact card.
categoriesbooleanNofalseGroup items into category tabs (items need a `category`).
descriptionReact.ReactNodeNo--
eyebrowReact.ReactNodeNo--
itemsFaqItem[]Yes--
jsonLdbooleanNofalseRender a FAQPage JSON-LD script.
layoutFaqSectionLayoutNo"two-column"-
multiplebooleanNofalseAllow several items open at once.
titleReact.ReactNodeNo--
variantAccordionVariantNo-Accordion look. Omit to follow the ambient style.