"use client"; import { Check, ChevronsUpDown } from "lucide-react"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import { cn } from "@/lib/utils"; type PlanType = "free" | "startup" | "enterprise"; interface Plan { name: string; type: PlanType; button: { text: string; variant: "outline"; href: string; }; features: { [Category in "usage" | "features" | "support"]: { name: string; value: string | boolean; }[]; }; } const CATEGORY_LABELS: Record = { usage: "میزان استفاده", features: "امکانات", support: "پشتیبانی", }; const plans: Plan[] = [ { name: "رایگان", type: "free", button: { text: "شروع رایگان", variant: "outline", href: "/signup", }, features: { usage: [ { name: "اعضا", value: "نامحدود" }, { name: "تراکنش‌ها", value: "۲۵۰" }, { name: "تیم‌ها", value: "۲" }, ], features: [ { name: "گزارش‌دهی", value: true }, { name: "تحلیل‌ها", value: true }, { name: "ورود و خروج داده", value: true }, { name: "یکپارچه‌سازی‌ها", value: true }, { name: "هوش مصنوعی نوافروش", value: false }, { name: "نقش‌های مدیریتی", value: false }, { name: "گزارش ممیزی", value: false }, ], support: [ { name: "پشتیبانی اولویت‌دار", value: true }, { name: "مدیر حساب", value: false }, { name: "SLA پایداری", value: false }, ], }, }, { name: "پایه", type: "startup", button: { text: "شروع رایگان", variant: "outline", href: "/signup", }, features: { usage: [ { name: "اعضا", value: "نامحدود" }, { name: "تراکنش‌ها", value: "نامحدود" }, { name: "تیم‌ها", value: "نامحدود" }, ], features: [ { name: "گزارش‌دهی", value: true }, { name: "تحلیل‌ها", value: true }, { name: "ورود و خروج داده", value: true }, { name: "یکپارچه‌سازی‌ها", value: true }, { name: "هوش مصنوعی نوافروش", value: true }, { name: "نقش‌های مدیریتی", value: false }, { name: "گزارش ممیزی", value: false }, ], support: [ { name: "پشتیبانی اولویت‌دار", value: true }, { name: "مدیر حساب", value: false }, { name: "SLA پایداری", value: false }, ], }, }, { name: "سازمانی", type: "enterprise", button: { text: "دریافت دمو", variant: "outline", href: "/", }, features: { usage: [ { name: "اعضا", value: "نامحدود" }, { name: "تراکنش‌ها", value: "نامحدود" }, { name: "تیم‌ها", value: "نامحدود" }, ], features: [ { name: "گزارش‌دهی", value: true }, { name: "تحلیل‌ها", value: true }, { name: "ورود و خروج داده", value: true }, { name: "یکپارچه‌سازی‌ها", value: true }, { name: "هوش مصنوعی نوافروش", value: true }, { name: "نقش‌های مدیریتی", value: false }, { name: "گزارش ممیزی", value: false }, ], support: [ { name: "پشتیبانی اولویت‌دار", value: true }, { name: "مدیر حساب", value: true }, { name: "SLA پایداری", value: true }, ], }, }, ]; export const Pricing30 = () => { const [selectedPlan, setSelectedPlan] = useState(1); return (
); }; const MobilePricingTable = ({ selectedPlan, onPlanChange, }: { selectedPlan: number; onPlanChange: (index: number) => void; }) => { const [isOpen, setIsOpen] = useState(false); const plan = plans[selectedPlan]; return (

{plan.name}

{plans.map( (p, index) => index !== selectedPlan && ( ), )}
{Object.entries(plan.features).map( ([category, features], sectionIndex) => (

{CATEGORY_LABELS[category as keyof Plan["features"]]}

{features.map((feature, featureIndex) => (
{feature.name}
{typeof feature.value === "boolean" ? ( feature.value ? ( ) : ( ) ) : (
{feature.value}
)}
))}
), )}
); }; const DesktopPricingTable = () => { return (
{plans.map((plan, index) => ( ))}
); }; const FeaturesColumn = () => (
{Object.entries(plans[0].features).map(([category, features], index) => (

{CATEGORY_LABELS[category as keyof Plan["features"]]}

{features.map((feature, featureIndex) => (
{feature.name}
))}
))}
); const PricingColumn = ({ plan, isHighlighted, }: { plan: Plan; isHighlighted: boolean; }) => { const columnClass = cn("px-6", isHighlighted && "bg-muted border rounded-xl"); return (

{plan.name}

{Object.entries(plan.features).map(([, features], sectionIndex) => (
{features.map((feature, featureIndex) => (
{typeof feature.value === "boolean" ? ( feature.value ? ( ) : ( ) ) : (
{feature.value}
)}
))}
))}
); };