import { IconCircleCheck } from '@tabler/icons-react'; import { cva, type VariantProps } from 'class-variance-authority'; import type { ReactNode } from 'react'; import { cn } from '@/lib/utils'; import { Button } from './button'; /* * Pricing tier column. Adapted from Launch UI (MIT) for Vite: lucide * (CircleCheckBig) -> Tabler (IconCircleCheck), next/link -> plain , and the * "one-time payment / plus local taxes" copy reframed for a monthly * subscription. Retint is automatic — `brand` maps to the template teal. */ const pricingColumnVariants = cva( 'max-w-container relative flex flex-col gap-6 overflow-hidden rounded-2xl p-8 shadow-xl', { variants: { variant: { default: 'glass-1 to-transparent dark:glass-3', glow: "glass-2 to-transparent dark:glass-3 after:content-[''] after:absolute after:-top-[128px] after:left-1/2 after:h-[128px] after:w-[100%] after:max-w-[960px] after:-translate-x-1/2 after:rounded-[50%] dark:after:bg-foreground/30 after:blur-[72px]", 'glow-brand': "glass-3 from-card/100 to-card/100 dark:glass-4 after:content-[''] after:absolute after:-top-[128px] after:left-1/2 after:h-[128px] after:w-[100%] after:max-w-[960px] after:-translate-x-1/2 after:rounded-[50%] after:bg-brand-foreground/70 after:blur-[72px]", }, }, defaultVariants: { variant: 'default', }, } ); export interface PricingColumnProps extends React.HTMLAttributes, VariantProps { name: string; icon?: ReactNode; description: string; price: number; priceNote: string; cta: { variant: 'glow' | 'default'; label: string; href: string; }; features: string[]; } export function PricingColumn({ name, icon, description, price, priceNote, cta, features, variant, className, ...props }: PricingColumnProps) { return (

{icon &&
{icon}
} {name}

{description}

$ {price}
{price > 0 ? ( <> per month billed monthly ) : ( free forever )}

{priceNote}


); } export { pricingColumnVariants };