import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { cn, formatDateTime } from "../lib/utils"; import { Identity } from "../components/Identity"; import { StatusBadge } from "../components/StatusBadge"; import { RunTranscriptView, type TranscriptDensity, type TranscriptMode } from "../components/transcript/RunTranscriptView"; import { runTranscriptFixtureEntries, runTranscriptFixtureMeta } from "../fixtures/runTranscriptFixtures"; import { ExternalLink, FlaskConical, LayoutPanelLeft, MonitorCog, PanelsTopLeft, RadioTower } from "lucide-react"; type SurfaceId = "detail" | "live" | "dashboard"; const surfaceOptions: Array<{ id: SurfaceId; label: string; eyebrow: string; description: string; icon: typeof LayoutPanelLeft; }> = [ { id: "detail", label: "Run Detail", eyebrow: "Full transcript", description: "The long-form run page with the `Nice | Raw` toggle and the most inspectable transcript view.", icon: MonitorCog, }, { id: "live", label: "Issue Widget", eyebrow: "Live stream", description: "The issue-detail live run widget, optimized for following an active run without leaving the task page.", icon: RadioTower, }, { id: "dashboard", label: "Dashboard Card", eyebrow: "Dense card", description: "The active-agents dashboard card, tuned for compact scanning while keeping the same transcript language.", icon: PanelsTopLeft, }, ]; function previewEntries(surface: SurfaceId) { if (surface === "dashboard") { return runTranscriptFixtureEntries.slice(-9); } if (surface === "live") { return runTranscriptFixtureEntries.slice(-14); } return runTranscriptFixtureEntries; } function RunDetailPreview({ mode, streaming, density, }: { mode: TranscriptMode; streaming: boolean; density: TranscriptDensity; }) { return (
Run Detail {formatDateTime(runTranscriptFixtureMeta.startedAt)}
Transcript ({runTranscriptFixtureEntries.length})
); } function LiveWidgetPreview({ streaming, mode, density, }: { streaming: boolean; mode: TranscriptMode; density: TranscriptDensity; }) { return (
Live Runs
Compact live transcript stream for the issue detail page.
{runTranscriptFixtureMeta.sourceRunId.slice(0, 8)} {formatDateTime(runTranscriptFixtureMeta.startedAt)}
Open run
); } function DashboardPreview({ streaming, mode, density, }: { streaming: boolean; mode: TranscriptMode; density: TranscriptDensity; }) { return (
{streaming ? "Live now" : "Finished 2m ago"}
{runTranscriptFixtureMeta.issueIdentifier} - {runTranscriptFixtureMeta.issueTitle}
); } export function RunTranscriptUxLab() { const [selectedSurface, setSelectedSurface] = useState("detail"); const [detailMode, setDetailMode] = useState("nice"); const [streaming, setStreaming] = useState(true); const [density, setDensity] = useState("comfortable"); const selected = surfaceOptions.find((option) => option.id === selectedSurface) ?? surfaceOptions[0]; return (
{selected.eyebrow}

{selected.label}

{selected.description}

Source run {runTranscriptFixtureMeta.sourceRunId.slice(0, 8)} {runTranscriptFixtureMeta.issueIdentifier}
Controls
{(["nice", "raw"] as const).map((mode) => ( ))}
{(["comfortable", "compact"] as const).map((nextDensity) => ( ))}
{selectedSurface === "detail" ? (
) : selectedSurface === "live" ? (
) : ( )}
); }