import type { FinanceEvent } from "@paperclipai/shared"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { financeDirectionDisplayName, financeEventKindDisplayName, formatCents, formatDateTime, providerDisplayName, } from "@/lib/utils"; interface FinanceTimelineCardProps { rows: FinanceEvent[]; emptyMessage?: string; } export function FinanceTimelineCard({ rows, emptyMessage = "No financial events in this period.", }: FinanceTimelineCardProps) { return ( Recent financial events Top-ups, fees, credits, commitments, and other non-request charges. {rows.length === 0 ? (

{emptyMessage}

) : ( rows.map((row) => (
{financeEventKindDisplayName(row.eventKind)} {financeDirectionDisplayName(row.direction)} {formatDateTime(row.occurredAt)}
{providerDisplayName(row.biller)} {row.provider ? ` -> ${providerDisplayName(row.provider)}` : ""} {row.model ? {row.model} : null}
{(row.description || row.externalInvoiceId || row.region || row.pricingTier) && (
{row.description ?
{row.description}
: null} {row.externalInvoiceId ?
invoice {row.externalInvoiceId}
: null} {row.region ?
region {row.region}
: null} {row.pricingTier ?
tier {row.pricingTier}
: null}
)}
{formatCents(row.amountCents)}
{row.currency}
{row.estimated ?
estimated
: null}
)) )}
); }