"use client"; import { Children, useState, type ReactNode } from "react"; import Image from "next/image"; import { ArrowLeft, BadgeCheck, Ban, Check, Clock3, Copy, CircleHelp, LoaderCircle, Mail, Send, TicketCheck, X, } from "lucide-react"; import { Link } from "@/lib/router"; import { Button } from "@/components/ui/button"; export type OutcomeTone = "success" | "pending" | "failed" | "canceled" | "unknown" | "checking"; export type OutcomeAction = { label: string; href?: string; onClick?: () => void; disabled?: boolean; loading?: boolean; }; type OutcomeDetail = { label: string; value: ReactNode }; type OutcomePageProps = { tone: OutcomeTone; statusLabel: string; title: string; subtitle: string; event?: { title: string; imageUrl?: string | null; href?: string; caption?: string }; details?: OutcomeDetail[]; reference?: string | null; referenceLabel?: string; support?: boolean; supportDescription?: string; refreshing?: boolean; primaryAction?: OutcomeAction; secondaryActions?: OutcomeAction[]; receiptRef?: React.Ref; children?: ReactNode; }; const toneClasses: Record = { success: { badge: "border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900 dark:bg-emerald-950/50 dark:text-emerald-200", halo: "text-emerald-600 dark:text-emerald-300", card: "border-emerald-200/80 dark:border-emerald-900/80", }, pending: { badge: "border-amber-200 bg-amber-50 text-amber-900 dark:border-amber-900 dark:bg-amber-950/40 dark:text-amber-200", halo: "text-amber-600 dark:text-amber-300", card: "border-amber-200/80 dark:border-amber-900/80", }, failed: { badge: "border-destructive/25 bg-destructive/10 text-destructive", halo: "text-destructive", card: "border-destructive/20", }, canceled: { badge: "border-destructive/25 bg-destructive/10 text-destructive", halo: "text-destructive", card: "border-destructive/20", }, unknown: { badge: "border-primary/20 bg-primary/5 text-primary", halo: "text-primary", card: "border-border", }, checking: { badge: "border-primary/20 bg-primary/5 text-primary", halo: "text-primary", card: "border-border", }, }; function ToneIcon({ tone, className = "size-5" }: { tone: OutcomeTone; className?: string }) { if (tone === "success") return ; if (tone === "pending") return ; if (tone === "failed") return ; if (tone === "canceled") return ; if (tone === "checking") return ; return ; } function PaymentIllustration({ tone }: { tone: OutcomeTone }) { const colors = toneClasses[tone]; return (