import type { SiteListItem } from "@umt/contracts"; import { accessSummary, useSiteRequestStats, useSiteUserData } from "~/api/sites.ts"; import { DetailSection } from "~/components/console/detail-sheet.tsx"; import { ErrorState, LoadingState } from "~/components/console/empty-state.tsx"; import { KvList } from "~/components/console/kv-list.tsx"; import { StatTile } from "~/components/console/stat-tile.tsx"; import { StatusBadge } from "~/components/console/status-badge.tsx"; import { relTime } from "~/components/workbench/release-fields.ts"; import { ACCOUNT_OVERALL, AUTH_KIND_LABEL, bytes, dataAccount, healthLine, healthMessage, overallStatus, primaryAccount, rateLimitText, ratioText, } from "./site-fields.ts"; import { UserDataChart } from "./user-data-chart.tsx"; /** 站点详情"概览":账号数据磁贴 + 30 天趋势 + 状态 */ export function SiteOverview({ site }: { site: SiteListItem }) { const dAcc = dataAccount(site.accounts); const acc = primaryAccount(site.accounts); const u = dAcc?.userData ?? null; const history = useSiteUserData(site.id, dAcc?.id, 30); const stats = useSiteRequestStats(site.id); const st = ACCOUNT_OVERALL[overallStatus(site)]; const h = healthLine(site.lastHealth, site.lastHealthAt); return (