"use client"; import { useState } from "react"; import { ChevronRight, CheckCircle2, AlertTriangle, XCircle, MinusCircle, Loader2, Circle, type LucideIcon, } from "lucide-react"; import type { TraceStep } from "@/lib/api"; const STATUS: Record = { success: { icon: CheckCircle2, cls: "text-ok" }, warning: { icon: AlertTriangle, cls: "text-warn" }, failed: { icon: XCircle, cls: "text-bad" }, skipped: { icon: MinusCircle, cls: "text-fg3" }, running: { icon: Loader2, cls: "text-brand animate-spin" }, pending: { icon: Circle, cls: "text-fg3" }, }; /** * Collapsed-by-default reasoning trace shown under an answer (Perplexity Pro * Search pattern): don't overload until the user is curious, then reveal the * per-step plan + timings on demand. Full detail still lives in the Trace tab. */ export function AnswerSteps({ steps }: { steps: TraceStep[] }) { const [open, setOpen] = useState(false); if (!steps?.length) return null; const total = steps.reduce((a, s) => a + (s.duration_ms || 0), 0); return (
{open && (
    {steps.map((s) => { const st = STATUS[s.status] ?? STATUS.pending; const Icon = st.icon; return (
  1. {s.label || s.name} {s.evidence_count != null && s.evidence_count > 0 && ( · {s.evidence_count} ev )} {Math.round(s.duration_ms)}ms
  2. ); })}
)}
); }