Add-on List Pricing
A base plan card shows its price and core features, followed by a checklist of optional add-ons, each with its own name, description, and price. Checking add-ons updates an estimated monthly total at the bottom in real time, like a build-your-own-plan calculator.
Docs
Installation
A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its button dependencies and any missing npm packages, and installs them straight into your project.
npx shadcn add https://staaarter.com/r/addon-list-pricing.jsonPrefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/pricing/pricing8.tsx instead.
Usage
The file also exports pricing8Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.
import { Pricing8, pricing8Demo } from "@/components/blocks/pricing/pricing8"; export default function Page() { return <Pricing8 {...pricing8Demo} />; }
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| heading | ReactNode | undefined | Centered headline above the plan card. |
| description | string | undefined | Supporting subtext below the heading. |
| basePlan | BasePlan | none | The base plan's name, price, description, and core feature list. Required. |
| addons | AddonItem[] | none | Optional add-ons, each with an id, name, description, and price. Required. |
| ctaLabel | string | none | Label for the bottom CTA button. Required. |
| ctaHref | string | undefined | Link target for the CTA button. |
| className | string | none | Extra classes for the outer section element. |
Types
type BasePlan = { name: string; price: number; period?: string; description?: string; features: string[]; }; type AddonItem = { id: string; name: string; description: string; price: number; };
Behavior notes
- The add-on checkboxes are real local state (a Record<string, boolean> keyed by addon id): checking or unchecking one immediately recalculates the estimated total shown at the bottom (basePlan.price plus every checked add-on's price).
- No add-ons are pre-selected on load; the initial total always equals the base plan price alone.
- The bottom CTA button is an inert placeholder (href defaults to "#" in the demo) with no real checkout wired up.
More Pricing Blocks
View all →Three Tier Cards
Classic three-column pricing cards with one plan visually highlighted as the recommended choice.
Monthly/Yearly Toggle
Three-tier pricing cards with a real billing-period toggle that switches every displayed price.
Single Plan Highlight
One centered, larger card for a single plan with a big price, full feature list, and a primary CTA.
Comparison Table
A full feature-matrix table comparing 3-4 plan tiers row by row, with a horizontal scroll fallback on mobile.
Enterprise Contact Card
A standard self-serve plan card next to a distinctly-styled Enterprise card with custom-quote messaging.
Pricing With Testimonial
Pricing cards paired with a single customer quote block for social proof, side by side on large screens.