Skip to content
Component installs need the registry setup— the Base UI shadcn project, the @vegastack namespace and the Cloudflare Access service token.
VegaStack Design

Pricing Section

Marketing plan cards — mono price display, check feature lists, highlighted-plan treatment.

Status
stable
Since
0.3.0
Accessibility pattern
headings + feature lists

Last updated

Free

$0

Per user/month, billed annually

For individuals exploring the product.

  • Real-time syncing
  • Automatic enrichment
  • Up to 3 seats

Pro

Popular
$79

Per user/month, billed annually

For growing teams to scale revenue.

  • Call intelligence
  • Permission controls
  • Advanced reporting

Enterprise

Custom

Billed annually

For large orgs needing control.

  • Unlimited objects
  • Unlimited teams
  • Security & admin controls

Install

Add Pricing Section from the VegaStack registry. The CLI verifies the item's integrity hash before writing it.

pnpm dlx shadcn@latest add @vegastack/pricing-section

The same command installs the registry items it composes: @vegastack/badge.

Usage

<PricingSection>
  <PlanCard
    name="Pro"
    price="$79"
    priceNote="Per user/month"
    features={["Call intelligence"]}
    action={<Button className="w-full">Continue with Pro</Button>}
    highlighted
  />
</PricingSection>

Notes

  • Prices render in mono with tabular numerals — the system's numbers rule (a deliberate improvement over the reference).
  • The grid uses auto-fit with the semantic --container-3xs width, so cards reflow from the section's actual available width rather than a viewport breakpoint. Narrow preview frames, sidebars, and split panes therefore get the same one-column layout as a small screen.
  • highlighted promotes a plan onto the surface-3 rung with an alpha-primary hairline and a bordered neutral Popular badge. Promotion is a ladder rung, never a hue — info is reserved for links and informational messages.
  • Billing-cycle toggles compose from Segmented above the grid.
  • Pair with ComparisonMatrix for the feature detail.

Anatomy

Pricing Section is a compound component. Every exported part, with the data-slot it renders (generated from the canonical source):

PlanCard — data-slot="plan-card" | "plan-card-action" | "plan-card-price"
PricingSection — data-slot="pricing-section"

Examples

Free

$0

Per user/month, billed annually

For individuals exploring the product.

  • Real-time syncing
  • Automatic enrichment
  • Up to 3 seats

Pro

Popular
$79

Per user/month, billed annually

For growing teams to scale revenue.

  • Call intelligence
  • Permission controls
  • Advanced reporting

Enterprise

Custom

Billed annually

For large orgs needing control.

  • Unlimited objects
  • Unlimited teams
  • Security & admin controls

Billing cycle

PricingSection is presentational, so a monthly/annual switch is composed above the grid rather than built in: Segmented owns the cycle and the price and note are derived at the call site.

Starter

$12

Per user/month, billed annually

For individuals exploring the product.

  • Real-time syncing
  • Up to 3 seats

Pro

Popular
$79

Per user/month, billed annually

For growing teams to scale revenue.

  • Call intelligence
  • Advanced reporting

API Reference

PricingSection

PricingSection accepts the native props, className, and ref of its responsive grid <div>.

PlanCard

PropTypeDefaultDescription
name*React.ReactNodePlan name ("Free", "Pro").
price*React.ReactNodeThe price display — mono numerals ("$79", "Custom").
actionReact.ReactNodeThe plan's CTA (a full-width Button).
descriptionReact.ReactNodeShort positioning line ("For growing teams…").
featuresReact.ReactNode[]Feature strings rendered as a check list.
highlightedbooleanfalsePromote this plan: lifts the card onto the surface-3 rung, tints its hairline primary, and shows the "Popular" badge.
highlightLabelReact.ReactNode'Popular'Copy for the highlight badge.
priceNoteReact.ReactNodeMuted line under the price ("Per user/month, billed annually").

Data attributes and CSS variables on PlanCard

AttributeValues
data-highlighted""
data-slot"plan-card" | "plan-card-action" | "plan-card-price"

Accessibility

  • Every plan name is an <h3>; place the grid beneath a section heading so the page outline remains coherent.
  • Included features use a decorative check plus visible feature text, never color alone.
  • The promoted plan is identified by the visible highlight badge in addition to its categorical surface treatment.
  • Keep CTA labels explicit about the outcome, such as “Start for free” or “Talk to sales.”
ContractStates tested
Behaviourdefault, success
Accessibilitynative-or-base-ui-semantics, browser-accessibility-test
Visualdefault, success

Do / Don't

Do
Use parallel feature phrasing and one clear, outcome-labelled CTA per plan.
Don't
Rely on the highlighted border alone to identify the recommended plan or hide material billing details.

On this page