āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā ā š shadcn/directory/dodopayments/billingsdk/components/pricing-table/pricing-table-seven ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
<Tabs items={['Preview', 'Code']} className="bg-transparent border-none"> <Tab value="Preview" className="border-none bg-transparent p-0 mt-3"> <PreviewComponents registryName="pricing-table-seven"> <PricingTableSevenDemo /> </PreviewComponents> </Tab>
<Tab value="Code" className="mt-3"> <include cwd lang="tsx" meta='title="src/components/pricing-table-seven-demo.tsx"'>src/components/pricing-table-seven-demo.tsx</include> </Tab> </Tabs><Tabs items={['Preview', 'Code']} className="bg-transparent border-none"> <Tab value="Preview" className="border-none bg-transparent p-0 mt-3"> <PreviewComponents registryName="pricing-table-seven"> <PricingTableSevenMinimalDemo /> </PreviewComponents> </Tab>
<Tab value="Code" className="mt-3"> <include cwd lang="tsx" meta='title="src/components/pricing-table-seven-minimal-demo.tsx"'>src/components/pricing-table-seven-minimal-demo.tsx</include> </Tab> </Tabs><Tabs items={['npx', 'pnpm', 'yarn', 'bun']} defaultValue="npx" groupId="installation-tabs">
<Tab value="npx">
bash npx shadcn@latest add @billingsdk/pricing-table-seven
</Tab>
<Tab value="pnpm">
bash pnpm dlx shadcn@latest add @billingsdk/pricing-table-seven
</Tab>
<Tab value="yarn">
bash yarn dlx shadcn@latest add @billingsdk/pricing-table-seven
</Tab>
<Tab value="bun">
bash bunx shadcn@latest add @billingsdk/pricing-table-seven
</Tab>
</Tabs>
import { PricingTableSeven } from "@/components/billingsdk/pricing-table-seven";
const plans = [
{
id: "basic",
name: "Basic plan",
description: "Our most popular plan.",
price: 10,
popular: false,
users: 5,
},
{
id: "business",
name: "Business plan",
description: "Best for growing teams.",
price: 20,
popular: true,
users: 15,
},
{
id: "enterprise",
name: "Enterprise plan",
description: "Best for large teams.",
price: 40,
popular: false,
users: 25,
},
];
const features = [
{
category: "Overview",
items: [
{
name: "Basic features",
tooltip: true,
basic: true,
business: true,
enterprise: true,
},
{
name: "Users",
tooltip: true,
basic: "10",
business: "20",
enterprise: "Unlimited",
},
],
},
];
<PricingTableSeven
plans={plans}
features={features}
title="Choose a plan that's right for you"
description="We believe Untitled should be accessible to all companies, no matter the size of your startup."
onPlanSelect={(planId) => console.log('Selected plan:', planId)}
size="medium" // small, medium, large
theme="classic" // minimal or classic
/>
| Prop | Type | Description |
|------|------|-------------|
| plans | PricingTableSevenPlan[] | Array of pricing plans |
| features | FeatureCategory[] | Array of feature categories with items |
| title | string | Page title (default: "Choose a plan that's right for you") |
| description | string | Page description |
| onPlanSelect | (planId: string) => void | Callback when a plan is selected |
| size | "small" \| "medium" \| "large" | Component size variant |
| theme | "minimal" \| "classic" | Theme variant |
| className | string | Additional CSS classes |
interface PricingTableSevenPlan {
id: string; // Unique identifier for the plan
name: string; // Display name of the plan
description: string; // Plan description
price: number; // Price in dollars
users: number | string; // Number of users (can be "25+" for unlimited)
popular?: boolean; // Whether this plan is marked as popular
}
interface FeatureCategory {
category: string; // Category name (e.g., "Overview", "Reporting")
items: FeatureItemRecord[]; // Array of features in this category
}
interface FeatureItemRecord {
name: string; // Feature name
tooltip?: boolean; // Whether to show tooltip icon
[planId: string]: boolean | string | undefined; // Feature value per plan
}
The pricing table component supports two themes:
You can customize the colors and fonts by overriding the CSS variables. You can also get the theme from the Theming page.
<include cwd lang="tsx" meta='title="src/components/pricing-table-seven-demo.tsx"'>src/components/pricing-table-seven-demo.tsx</include>
ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā