'use client' import type React from 'react' import { useDraggable } from '@dnd-kit/core' import { CSS } from '@dnd-kit/utilities' import { Loader2 } from 'lucide-react' import { cn } from '@/lib/utils' import { CodeBadge } from '@/components/shared/code-badge' import { JOB_STATUS_LABELS, JOB_STATUS_COLORS, JOB_STATUS_ACTIVE } from '@/components/shared/job-status' import { useSoloStore } from '@/stores/solo-store' import type { SoloTask } from './solo-board' const PRIORITY_BORDER: Record = { 1: 'border-l-4 border-l-priority-critical', 2: 'border-l-4 border-l-priority-high', 3: 'border-l-4 border-l-priority-medium', 4: 'border-l-4 border-l-priority-low', } interface SoloTaskCardProps { task: SoloTask isDemo: boolean onClick: () => void } export function SoloTaskCard({ task, isDemo, onClick }: SoloTaskCardProps) { const job = useSoloStore(s => s.claudeJobsByTaskId[task.id]) const { attributes, listeners, setNodeRef, transform, isDragging } = useDraggable({ id: task.id, disabled: isDemo, }) // view-transition-name laat de browser deze card snapshotten zodat hij // soepel van kolom naar kolom animeert wanneer de status realtime wijzigt // (ST-805 animatie A). Tijdens drag uit zetten — dnd-kit beheert de // transform dan zelf en dubbele transitions willen we niet. const style: React.CSSProperties | undefined = transform ? { transform: CSS.Translate.toString(transform) } : { viewTransitionName: `solo-task-${task.id}` } return (

{task.title}

{task.task_code && }

{task.story_code && {task.story_code}} {task.story_title}

{job && ( { e.stopPropagation(); onClick() }} onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault() e.stopPropagation() onClick() } }} role="button" tabIndex={0} aria-label={`Agent-status: ${JOB_STATUS_LABELS[job.status]}`} > {JOB_STATUS_ACTIVE.has(job.status) && } {JOB_STATUS_LABELS[job.status]} )}
) } export function SoloTaskCardOverlay({ task }: { task: SoloTask }) { return (

{task.title}

{task.task_code && }

{task.story_code && {task.story_code}} {task.story_title}

) }