"use client"; import { useMemo, useRef } from "react"; import { CalendarDays } from "lucide-react"; import type { AgentState } from "@/features/agents/state/store"; import { useApprovalMetrics } from "@/features/office/hooks/useApprovalMetrics"; import { useOfficeUsageAnalyticsViewModel } from "@/features/office/hooks/useOfficeUsageAnalyticsViewModel"; import { usePerformanceAnalytics } from "@/features/office/hooks/usePerformanceAnalytics"; import type { RunRecord } from "@/features/office/hooks/useRunLog"; import type { GatewayClient, GatewayStatus } from "@/lib/gateway/GatewayClient"; import { formatCurrency, formatNumber, } from "@/lib/office/usageAnalyticsPresentation"; import type { StudioSettingsCoordinator } from "@/lib/studio/coordinator"; const formatPercent = (value: number | null | undefined) => { if (value === null || value === undefined) return "n/a"; return `${Math.round(value * 100)}%`; }; const formatDuration = (valueMs: number | null | undefined) => { if (!valueMs) return "n/a"; const seconds = Math.round(valueMs / 1000); if (seconds < 60) return `${seconds}s`; const minutes = Math.floor(seconds / 60); const remainingSeconds = seconds % 60; if (minutes < 60) { return remainingSeconds > 0 ? `${minutes}m ${remainingSeconds}s` : `${minutes}m`; } const hours = Math.floor(minutes / 60); const remainingMinutes = minutes % 60; return remainingMinutes > 0 ? `${hours}h ${remainingMinutes}m` : `${hours}h`; }; const formatBudgetInput = (value: number | null) => (value === null ? "" : String(value)); const parseBudgetInput = (value: string): number | null => { const trimmed = value.trim(); if (!trimmed) return null; const parsed = Number(trimmed); if (!Number.isFinite(parsed) || parsed < 0) return null; return parsed; }; const StatCard = ({ label, value, hint, }: { label: string; value: string; hint: string; }) => (