import Section from "@unom/ui/section"; import { MonitorPlay, RefreshCw, Video, Volume2, ZapOff } from "lucide-react"; import type { FC, ReactNode } from "react"; import type { RuntimeStatus } from "@/api/gen/model/runtimeStatus"; import { QueryState } from "@/components/query-state"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import type { Loadable } from "@/lib/query"; import { m } from "@/paraglide/messages"; export const DashboardView: FC<{ status: Loadable; onStopSession: () => void; onRequestIdr: () => void; isStopping: boolean; isRequestingIdr: boolean; }> = ({ status, onStopSession, onRequestIdr, isStopping, isRequestingIdr }) => { const s = status.data; return (

{m.status_title()}

{s && (
} label={m.status_video()} on={s.video_streaming} /> } label={m.status_audio()} on={s.audio_streaming} /> {m.status_paired_count()} {s.paired_clients} {m.status_pin_pending()} {s.pin_pending ? "●" : "—"}
{m.status_session()}
{s.stream ? (
) : (

{m.status_no_session()}

)}
)}
); }; const StatCard: FC<{ icon: ReactNode; label: string; on: boolean }> = ({ icon, label, on, }) => ( {icon} {label} {on ? m.status_streaming() : m.status_idle()} ); const Field: FC<{ label: string; value: string }> = ({ label, value }) => (
{label}
{value}
);