"use client"; import * as React from "react"; import Link from "next/link"; import { CheckCircle2, XCircle, CircleStop, ChevronRight } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Tooltip } from "@/components/ui/tooltip"; import { ProviderIcon } from "@/components/brand/provider-icon"; import { providerName } from "@/lib/client/providers"; import { formatUsd, formatTokens, formatMs, formatRelative, cn } from "@/lib/utils"; import { formatDateTime } from "@/lib/client/humanize"; import type { RecentRecord } from "./types"; function StatusBadge({ r }: { r: RecentRecord }) { if (r.status === "ok") return ( ok ); if (r.status === "stopped") return ( stopped ); return ( {r.errorCode?.toLowerCase().replace(/_/g, " ") ?? "error"} ); } /** Phone: stacked rows (tap → conversation). Desktop (md+): table. */ export function RecentActivity({ rows, modelLabel, className }: { rows: RecentRecord[]; modelLabel: (key: string) => string; className?: string }) { return (

Recent requests

Last {rows.length}
{rows.length === 0 ? (

No requests in this period.

) : ( <> {/* Phone rows */} {/* Desktop table */}
{rows.map((r) => ( ))}
Time Model Conversation Kind Tokens in / out Est. cost TTFT Latency Status
{formatRelative(r.createdAt)} {modelLabel(r.modelKey)} {providerName(r.provider)} {r.conversationId && r.kind !== "arena" ? ( {r.conversationTitle ?? "Open"} ) : ( {r.kind === "arena" ? "Arena" : "—"} )} {r.kind} {formatTokens(r.inputTokens)} / {formatTokens(r.outputTokens)} {formatUsd(r.costUsd, { precise: true })} {formatMs(r.ttftMs)} {formatMs(r.latencyMs)}
)}
); }