'use client'; import { cn } from '@/lib/cn'; import type { Mission, MissionStatus } from '@/lib/types'; interface MissionTimelineProps { missions: Mission[]; } const statusOrder: MissionStatus[] = ['planning', 'active', 'paused', 'completed', 'failed']; const statusStyles: Record = { planning: { dot: 'bg-gray-400', label: 'text-gray-400', badge: 'bg-gray-600/20 text-gray-300', }, active: { dot: 'bg-blue-400', label: 'text-blue-400', badge: 'bg-blue-600/20 text-blue-400', }, paused: { dot: 'bg-warning', label: 'text-warning', badge: 'bg-warning/20 text-warning', }, completed: { dot: 'bg-success', label: 'text-success', badge: 'bg-success/20 text-success', }, failed: { dot: 'bg-error', label: 'text-error', badge: 'bg-error/20 text-error', }, }; function sortMissions(missions: Mission[]): Mission[] { return [...missions].sort((a, b) => { const aIdx = statusOrder.indexOf(a.status); const bIdx = statusOrder.indexOf(b.status); if (aIdx !== bIdx) return aIdx - bIdx; return new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime(); }); } export function MissionTimeline({ missions }: MissionTimelineProps): React.ReactElement { if (missions.length === 0) { return (

No missions for this project

); } const sorted = sortMissions(missions); return (
    {sorted.map((mission, idx) => { const styles = statusStyles[mission.status] ?? statusStyles.planning; const isLast = idx === sorted.length - 1; return (
  1. {/* Vertical line */} {!isLast &&
    } {/* Status dot */}
    {mission.name} {mission.status}
    {mission.description && (

    {mission.description}

    )}

    Created {new Date(mission.createdAt).toLocaleDateString()}

  2. ); })}
); }