pricing-3

PreviousNext

Three-tier pricing grid with interactive plan cards, badges, and feature lists.

Docs
efferdblock

Preview

Loading preview…
registry/pricing/3/pricing-section.tsx
"use client";

import * as PricingCard from "@/components/pricing-card";
import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
import { Briefcase, Building, CheckCircle2, Users } from "lucide-react";

export function PricingSection() {
	const plans = [
		{
			icon: <Users />,
			description: "Perfect for individuals",
			name: "Basic",
			price: "Free",
			variant: "outline",
			features: [
				"Automated Meeting Scheduling",
				"Basic Calendar Sync",
				"Daily Schedule Overview",
				"Email Reminders",
				"Task Management",
				"24/7 Customer Support",
				"Single User Access",
				"Basic Reporting",
				"Mobile App Access",
			],
		},
		{
			icon: <Briefcase />,
			description: "Ideal for small teams",
			name: "Pro",
			badge: "Popular",
			price: "$29",
			original: "$39",
			period: "/month",
			variant: "default",
			features: [
				"All Basic Plan Features",
				"Advanced Calendar Integrations",
				"Customizable Notifications",
				"Priority Support",
				"Analytics and Insights",
				"Group Scheduling",
				"Multiple User Roles",
				"Advanced Reporting",
				"Custom Branding Options",
			],
		},
		{
			icon: <Building />,
			name: "Enterprise",
			description: "Perfect for large scale companies",
			price: "$99",
			original: "$129",
			period: "/month",
			variant: "outline",
			features: [
				"All Pro Plan Features",
				"Dedicated Account Manager",
				"Custom Integrations",
				"Advanced Security Features",
				"Team Collaboration Tools",
				"Onboarding and Training",
				"Unlimited Users",
				"API Access with Higher Limits",
				"Advanced Audit Logs",
			],
		},
	];

	return (
		<section className="mx-auto grid w-full max-w-4xl gap-4 p-6 md:grid-cols-3">
			{plans.map((plan, index) => (
				<PricingCard.Card
					className={cn("w-full max-w-full", index === 1 && "md:scale-105")}
					key={plan.name}
				>
					<PricingCard.Header>
						<PricingCard.Plan>
							<PricingCard.PlanName>
								{plan.icon}
								<span className="text-muted-foreground">{plan.name}</span>
							</PricingCard.PlanName>
							{plan.badge && (
								<PricingCard.Badge>{plan.badge}</PricingCard.Badge>
							)}
						</PricingCard.Plan>
						<PricingCard.Price>
							<PricingCard.MainPrice>{plan.price}</PricingCard.MainPrice>
							<PricingCard.Period>{plan.period}</PricingCard.Period>
							{plan.original && (
								<PricingCard.OriginalPrice className="ml-auto">
									{plan.original}
								</PricingCard.OriginalPrice>
							)}
						</PricingCard.Price>
						<Button
							className={cn("w-full font-semibold")}
							variant={plan.variant as "outline" | "default"}
						>
							Get Started
						</Button>
					</PricingCard.Header>

					<PricingCard.Body>
						<PricingCard.Description>
							{plan.description}
						</PricingCard.Description>
						<PricingCard.List>
							{plan.features.map((item) => (
								<PricingCard.ListItem className="text-xs" key={item}>
									<CheckCircle2
										aria-hidden="true"
										className="h-4 w-4 text-foreground"
									/>
									<span>{item}</span>
								</PricingCard.ListItem>
							))}
						</PricingCard.List>
					</PricingCard.Body>
				</PricingCard.Card>
			))}
		</section>
	);
}

Installation

npx shadcn@latest add @efferd/pricing-3

Usage

import { Pricing3 } from "@/components/pricing-3"
<Pricing3 />