"use client"; import Link from "next/link"; import { motion } from "framer-motion"; import { cn } from "@/vendor/ui/cn"; import type { SkuTemplate } from "@/vendor/carrier/types"; interface PlanCardProps { plan: SkuTemplate; href?: string; onSelect?: (plan: SkuTemplate) => void; featured?: boolean; /** * This plan is the one currently in the order summary. Only meaningful on * the select-then-continue flow; a card that links straight to checkout is * never in a selected state. */ selected?: boolean; } export function PlanCard({ plan, href, onSelect, featured, selected }: PlanCardProps) { const destination = href ?? (onSelect ? undefined : `/checkout/${plan.id}`); function handleSelect() { onSelect?.(plan); } const inner = ( <> {featured && ( Most popular )}

{plan.name}

{plan.description}

€{(plan.price_cents / 100).toFixed(2)} one-time
{selected ? "Selected" : "Select plan"} ); const cardClass = cn( "relative flex flex-col gap-4 rounded-2xl border p-6 pt-8 transition-colors", selected && "ring-2 ring-[var(--brand-accent)] ring-offset-2 ring-offset-sand-50 dark:ring-offset-sand-950", featured ? "border-[var(--brand-accent)] bg-[color-mix(in_srgb,var(--brand-accent)_6%,white)] dark:bg-[color-mix(in_srgb,var(--brand-accent)_12%,#0F0E0A)]" : "border-sand-200 bg-white hover:border-sand-300 dark:border-sand-800 dark:bg-sand-900 dark:hover:border-sand-700", ); if (destination && !onSelect) { return ( {inner} ); } return ( {inner} ); }