Documentation
Page blocksPricing

Pricing Split

A two-plan split layout — a compact entry plan beside an expanded featured plan with its full feature list.

v0.1.0Page blockPricing familyPricing section
import type { Block } from 'payload'import { planFields, pricingFields } from '@/blocks/shared/pricingFields'export const PricingSplit: Block = {  slug: 'pricingSplit',  interfaceName: 'PricingSplitBlock',  fields: [    // Shared pricing heading (eyebrow, title, description). Variant-specific    // fields follow; edit the shared shape in @/blocks/shared/pricingFields.    ...pricingFields,    {      name: 'plans',      type: 'array',      required: true,      // Exactly two plans: the entry plan on the left, the featured plan      // (mark one `featured`) expanded across the right panel.      minRows: 2,      maxRows: 2,      admin: {        initCollapsed: true,      },      fields: planFields,    },  ],  labels: {    plural: 'Pricing Split Blocks',    singular: 'Pricing Split',  },}

Installation

npx payload-components add pricing-split

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/pricing-split.json

What it installs

Copies 3 source files into your project:

  • src/blocks/shared/pricingFields.tsshared
  • src/blocks/PricingSplit/config.ts
  • src/blocks/PricingSplit/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
pricingFields.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 pricingFields base; plans is built from the shared planFields. This variant expects exactly two plans: the first renders as the compact entry column on the left, the second as the expanded panel on the right (mark it featured for the emerald "Popular" badge).

Prop

Type

Each item in plans carries:

Prop

Type

Usage

Add the block to a page. In the Payload admin, open (or create) a Page and add the PricingSplit 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
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


Layout adapted from tailark/blocks (MIT), retokenized onto the Payload Components design system.