Documentation
Page blocksFAQ

Faq Grouped

An FAQ split into titled, icon-tagged category groups of accordions.

v0.1.0Page blockFAQ familyFAQ section
import type { Block } from 'payload'import { faqFields } from '@/blocks/shared/faqFields'import { iconField } from '@/blocks/shared/faqIcons'export const FaqGrouped: Block = {  slug: 'faqGrouped',  interfaceName: 'FaqGroupedBlock',  fields: [    // Shared FAQ core (eyebrow, title, description). This variant buckets    // questions under titled, icon-tagged groups, so it defines a nested    // groups array rather than the shared faqItemsField.    ...faqFields,    {      name: 'groups',      type: 'array',      required: true,      minRows: 1,      admin: {        initCollapsed: true,      },      fields: [        iconField,        {          name: 'title',          type: 'text',          required: true,        },        {          name: 'items',          type: 'array',          required: true,          minRows: 1,          fields: [            {              name: 'question',              type: 'text',              required: true,            },            {              name: 'answer',              type: 'textarea',              required: true,            },          ],        },      ],    },  ],  labels: {    plural: 'FAQ Grouped Blocks',    singular: 'FAQ Grouped',  },}

Installation

npx payload-components add faq-grouped

Copy the files straight from the registry, then wire the Payload fragments by hand:

pnpm dlx shadcn@latest add https://www.payload-components.xyz/r/faq-grouped.json

What it installs

Copies 4 source files into your project:

  • src/blocks/shared/faqFields.tsshared
  • src/blocks/shared/faqIcons.ts
  • src/blocks/FaqGrouped/config.ts
  • src/blocks/FaqGrouped/Component.tsx

…and makes 4 edits to wire the block into your project:

Registers the blocksrc/collections/Pages/index.ts
Maps the renderersrc/blocks/RenderBlocks.tsx
Regenerates typessrc/payload-types.ts
Regenerates the admin import mapsrc/app/(payload)/admin/importMap.js
faqFields.ts is the shared field core for this family — every variant composes it. Editing it updates each installed block at once, and re-running an install never overwrites a copy you have changed.

Re-running the install converges: it detects existing wiring, skips it, and records install state in .payload-components/state.json.

Content model

The first three fields come from the shared faqFields base; groups is specific to this variant. Each group's icon is a select over the faqIcons allowlist — Payload stores the name and the frontend looks up the matching lucide mark at render.

Prop

Type

Each group in groups carries:

Prop

Type

Usage

Add the block to a page. In the Payload admin, open (or create) a Page and add the FaqGrouped block to its layout.
Fill the content. Complete the fields from the content model above — the component ships sample content you can start from.
Publish. Save and publish the page; the block renders through RenderBlocks on the frontend, fully typed — no extra wiring.

Requirements

Target
payload-website-starter
Payload
v3
Next.js
15 / 16
shadcn UI
accordion, badge

Your project must already expose components.json, src/payload.config.ts, src/blocks/RenderBlocks.tsx, src/collections/Pages/index.ts — the surfaces payload-components add patches. The CLI verifies this against the support matrix before touching anything.

In this family