Documentation
Page blocksPricing

Pricing Enterprise

A single wide enterprise panel — price and CTA beside an included-features list and an editable wall of trust logos.

v0.1.0Page blockPricing familyPricing section
import type { Block } from 'payload'import { planFields, pricingFields } from '@/blocks/shared/pricingFields'export const PricingEnterprise: Block = {  slug: 'pricingEnterprise',  interfaceName: 'PricingEnterpriseBlock',  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,      // A single enterprise plan rendered as one wide panel.      minRows: 1,      maxRows: 1,      admin: {        initCollapsed: true,      },      fields: planFields,    },    {      // Editable trust logos — uploaded images with an accessible name and an      // optional link, mirroring the shared logo-cloud shape so editors insert      // their own brand marks instead of shipping hardcoded SVGs.      name: 'logos',      type: 'array',      minRows: 0,      maxRows: 8,      admin: {        initCollapsed: true,      },      fields: [        {          name: 'logo',          type: 'upload',          relationTo: 'media',          required: true,        },        {          name: 'name',          type: 'text',          required: true,        },        {          name: 'href',          type: 'text',          // Logos link out to arbitrary customer sites, so this can't reuse the          // embed/form allowlists in shared/safeUrls — but still reject anything          // that isn't an absolute http(s) URL (e.g. a `javascript:` payload).          validate: (value: unknown) => {            if (value === null || value === undefined || value === '') return true            try {              const { protocol } = new URL(String(value))              return protocol === 'https:' || protocol === 'http:'                ? true                : 'Use an absolute http(s) URL.'            } catch {              return 'Use an absolute http(s) URL.'            }          },        },      ],    },  ],  labels: {    plural: 'Pricing Enterprise Blocks',    singular: 'Pricing Enterprise',  },}

Installation

npx payload-components add pricing-enterprise

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-enterprise.json

What it installs

Copies 3 source files into your project:

  • src/blocks/shared/pricingFields.tsshared
  • src/blocks/PricingEnterprise/config.ts
  • src/blocks/PricingEnterprise/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 and renders a single enterprise plan. logos is specific to this variant — an editable wall of uploaded trust logos, like the Logo Cloud family, so editors insert their own brand marks.

Prop

Type

Each item in plans carries:

Prop

Type

Each item in logos carries:

Prop

Type

Usage

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