Skip to main content
Version: 1.0.3

Pricing Grid

Overview

Pricing Grid is a fully customizable and visually engaging component for presenting pricing tiers in modern applications.

It supports:

  • 2–3 pricing tiers per section
  • Displaying price, feature list, and CTA button for each tier
  • Highlighting a recommended tier
  • free/paid toggle
  • Smooth animations for interactions and hover states
  • Fully responsive layout for desktop and mobile.

Preview

Basic

Our Pricing Table

Choose the plan that fits your needs

Monthly
Yearly

Starter

FeatureAvailable
Disk Space 128 GBYes
Bandwidth 15 GBYes
Databases 1Yes
LicenseNo
Email AccountsNo
24 Hours SupportNo
From
$FREE /month

Standard

FeatureAvailable
Storage 20GBYes
Databases 20Yes
LicenseYes
Email AccountsYes
24/7 SupportYes
Agent SupportNo
From
$ 19.99 /month

Enterprise

FeatureAvailable
Storage 50GBYes
Databases 50Yes
LicenseYes
Email AccountsYes
24/7 SupportYes
Agent SupportYes
From
$29.99 /month

Advance

Our Pricing Table

Choose the plan that fits your needs

Monthly
Yearly

Starter

Lorem ipsum dolor sit amet

$FREE /month

  • Disk Space 128 GB
  • Bandwidth 15 GB
  • Databases 1
  • License
  • Email Accounts
  • 24 Hours Support

Standard

Lorem ipsum dolor sit amet

$ 19.99 /month

  • Storage 20GB
  • Databases 20
  • License
  • Email Accounts
  • 24/7 Support
  • Agent Support

Enterprise

Lorem ipsum dolor sit amet

$29.99 /month

  • Storage 50GB
  • Databases 50
  • License
  • Email Accounts
  • 24/7 Support
  • Agent Support

Installation

ignix add component pricingGrid

Usage

Basic Pricing Grid

import { PricingGrid } from "@/components/ui/pricinggrid"
import { Check } from "lucide-react"

export default function PricingPage() {
const plans = [
{
id: 1,
name: "Starter",
price: "$0/month",
ctaLabel: "Get Started",
features: [
{ label: "1 Project", available: true },
{ label: "Community Support", available: true },
{ label: "Analytics", available: false },
],
},
{
id:2,
name: "Pro",
price: "$29/month",
highlighted: true,
currentPlan: true,
ctaLabel: "Upgrade",
features: [
{ label: "Unlimited Projects", available: true },
{ label: "Priority Support", available: true },
{ label: "Advanced Analytics", available: true },
],
},
{
id:3,
name: "Enterprise",
price: "$99/month",
ctaLabel: "Contact Sales",
features: [
{ label: "Custom Integrations", available: true },
{ label: "Dedicated Manager", available: true },
{ label: "SLA Guarantee", available: true },
],
},
]

const [billing, setBilling] = React.useState<"monthly" | "yearly">("monthly")
const [plans, setPlans] = React.useState<any[]>([])

const fetchPlans = async (billingType: "monthly" | "yearly") => {
console.log("Billing Type:" , billingType)
// your fetching plans goes here
}

const handleClick = (plan) => {
console.log(plan.id)
// your plan action goes here
}

// 🔁 Fetch whenever billing changes
React.useEffect(() => {
fetchPlans(billing)
}, [billing])

return (
<PricingGrid
plans={plans}
value={billing}
onValueChange={(v) => setBilling(v as "monthly" | "yearly")}
onCtaClick={(plans) => handleClick(plans)}
/>
)
}

Advance Pricing Grid

import { PricingGrid } from "@/components/ui/pricinggrid"
import { Check } from "lucide-react"
import React from "react"

export default function PricingPage() {
const plans = [
{
name: "Starter",
price: "$FREE /month",
gradient: "bg-gradient-to-br from-yellow-900 to-orange-500",
icon: Lightbulb,
features: [
{ label: "Disk Space 128 GB" },
{ label: "Bandwidth 15 GB" },
{ label: "Databases 1" },
{ label: "License", available: false },
{ label: "Email Accounts", available: false },
{ label: "24 Hours Support", available: false },
],
ctaLabel: "Sign Up"
},
{
name: "Standard",
price: "$ 19.99 /month",
highlighted: true,
icon: CreditCard,
gradient: "bg-gradient-to-br from-purple-500 to-fuchsia-500",
features: [
{ label: "Storage 20GB", icon: HardDrive },
{ label: "Databases 20", icon: Database },
{ label: "License", icon: Settings2 },
{ label: "Email Accounts", icon: Mail },
{ label: "24/7 Support", icon: LifeBuoy },
{ label: "Agent Support", icon: Users, available: false },
],
ctaLabel: "Subscribe"
},
{
name: "Enterprise",
price: "$29.99 /month",
gradient: "bg-gradient-to-br from-teal-500 to-emerald-500",
icon: BarChart3,
features: [
{ label: "Storage 50GB", icon: HardDrive },
{ label: "Databases 50", icon: Database },
{ label: "License", icon: Settings2 },
{ label: "Email Accounts", icon: Mail },
{ label: "24/7 Support", icon: LifeBuoy },
{ label: "Agent Support", icon: Users },
],
ctaLabel: "Check Now"
}
];

const [billing, setBilling] = React.useState<"monthly" | "yearly">("monthly")
const [plans, setPlans] = React.useState<any[]>([])

const fetchPlans = async (billingType: "monthly" | "yearly") => {
console.log("Billing Type:" , billingType)
// your fetching plans goes here
}

const handleClick = (plan) => {
console.log(plan.id)
// your plan action goes here
}

// 🔁 Fetch whenever billing changes
React.useEffect(() => {
fetchPlans(billing)
}, [billing])

return (
<PricingGrid
plans={plans}
value={billing}
onValueChange={(v) => setBilling(v as "monthly" | "yearly")}
onCtaClick={(plans) => handleClick(plans)}
modernUI="advance"
/>
)
}

Props

PricingGrid

PropTypeDefaultDescription
titlestring"Our Pricing Table"Heading text displayed above the pricing grid.
descriptionstring"Choose the plan that fits your needs"Supporting description text below the title.
plansPlanProps[]List of pricing plans to render.
variant"default" | "dark" | "gradient""dark"Visual theme variant applied to cards and pricing badge.
modernUI"basic" | "vector" | "advance""basic"Controls overall card layout and visual style.
pricingBadgePosition"none" | "top" | "middle""middle"Controls the position of the price badge (vector UI only).
allowDifferentCardColorsbooleanfalseEnables per-plan gradients/colors (applies mainly to vector UI).
animation"none" | "fadeIn" | "slideUp" | "scaleIn" | "flipIn" | "bounceIn" | "floatIn""slideUp"Entry animation applied to each pricing card.
interactive"none" | "hover" | "press" | "lift" | "tilt" | "glow""press"Hover and interaction effects for cards.
modernVariant"default" | "dark" | "light""dark"Color theme variant for basic and advance layouts.
tablebooleanfalseDisplays features as a table instead of a list.
toggleOptions[ToggleOption, ToggleOption][{ label: "Monthly", value: "monthly" }, { label: "Yearly", value: "yearly" }]Toggle switch options for pricing cycles.
valuestringControlled value for the pricing toggle.
onValueChange(value: string) => voidCallback fired when the toggle value changes.
classNamestringCustom class names for the outer grid container.
currentPlannumber1Marks the plan as the currently active plan.
onCtaClick(plan: PlanProps) => voidCallback fired when the CTA button is clicked.

PlanProps

PropTypeDefaultDescription
idstringOptional unique identifier for the plan.
namestringPlan name displayed on the card.
pricestringPrice string (e.g. "$29/month").
featuresFeature[]List of features included in the plan.
iconReact.ElementTypeOptional icon shown in modern layouts.
highlightedbooleanfalseVisually emphasizes the plan as recommended.
gradientstringOptional gradient background for the plan card.
buttonColorstringOptional button or card color.
ctaLabelstring"Get Started"Label text for the CTA button.

Feature

PropTypeDefaultDescription
labelstringFeature label text.
availablebooleantrueIndicates whether the feature is available.
iconReact.ElementTypeOptional icon to override the default check/cross icon (Check/X).

ToggleOption

PropTypeDescription
labelReact.ReactNodeLabel displayed next to the toggle option.
valuestringValue associated with the toggle option.