import React from "react"; import { Usage } from "../types"; interface UsageDetailModalProps { usage: Usage; durationMs: number | null; onClose: () => void; } function UsageDetailModal({ usage, durationMs, onClose }: UsageDetailModalProps) { // Format duration in human-readable format const formatDuration = (ms: number): string => { if (ms < 1000) return `${ms}ms`; if (ms < 60000) return `${(ms / 1000).toFixed(2)}s`; return `${(ms / 60000).toFixed(2)}m`; }; // Format timestamp for display const formatTimestamp = (isoString: string): string => { const date = new Date(isoString); return date.toLocaleString(undefined, { year: "numeric", month: "short", day: "numeric", hour: "2-digit", minute: "2-digit", second: "2-digit", }); }; // Close on escape key React.useEffect(() => { const handleEscape = (e: KeyboardEvent) => { if (e.key === "Escape") { onClose(); } }; document.addEventListener("keydown", handleEscape); return () => document.removeEventListener("keydown", handleEscape); }, [onClose]); return (
e.stopPropagation()} >

Usage Details

{usage.model && ( <>
Model:
{usage.model}
)}
Input Tokens:
{usage.input_tokens.toLocaleString()}
{usage.cache_read_input_tokens > 0 && ( <>
Cache Read:
{usage.cache_read_input_tokens.toLocaleString()}
)} {usage.cache_creation_input_tokens > 0 && ( <>
Cache Write:
{usage.cache_creation_input_tokens.toLocaleString()}
)}
Output Tokens:
{usage.output_tokens.toLocaleString()}
{usage.cost_usd > 0 && ( <>
Cost:
${usage.cost_usd.toFixed(4)}
)} {durationMs !== null && ( <>
Duration:
{formatDuration(durationMs)}
)} {usage.end_time && ( <>
Timestamp:
{formatTimestamp(usage.end_time)}
)}
); } export default UsageDetailModal;