'use client'; import { ChevronDown, ChevronUp, Clock, CheckCircle2, XCircle, AlertCircle, Loader2 } from 'lucide-react'; import { cn } from '@/lib/utils'; import { useState } from 'react'; export interface ProcessStep { id: string; label: string; status: 'pending' | 'running' | 'completed' | 'error'; timestamp?: number; duration?: number; details?: string; error?: string; } interface PostProcessingPanelProps { steps: ProcessStep[]; className?: string; } export function PostProcessingPanel({ steps, className }: PostProcessingPanelProps) { const [isExpanded, setIsExpanded] = useState(false); if (!steps || steps.length === 0) { return null; } const completedSteps = steps.filter(s => s.status === 'completed').length; const hasErrors = steps.some(s => s.status === 'error'); const isRunning = steps.some(s => s.status === 'running'); const getStepIcon = (step: ProcessStep) => { switch (step.status) { case 'completed': return ; case 'error': return ; case 'running': return ; default: return ; } }; const formatDuration = (ms?: number) => { if (!ms) return ''; if (ms < 1000) return `${ms}ms`; return `${(ms / 1000).toFixed(1)}s`; }; return (
{isExpanded && (
{steps.map((step, idx) => (
{getStepIcon(step)}
{step.label} {step.duration && ( ({formatDuration(step.duration)}) )}
{step.details && (

{step.details}

)} {step.error && (

{step.error}

)}
))}
)}
); }