import type { ReactNode, MouseEventHandler } from 'react'; import { cn } from '../../lib/utils'; import type { SocialCard as SocialCardData, AgentStatus } from '../../lib/social-cards'; import { AgentAvatar } from '../shared/agent-avatar'; interface SocialCardProps { data: SocialCardData; className?: string; selected?: boolean; onClick?: MouseEventHandler; onJumpToGraph?: (id: string) => void; onJumpToKanban?: (id: string) => void; } // "Hard Style" Dependency Item (from TaskCardGrid inspiration) function DependencyItem({ id, type }: { id: string; type: 'blocked-by' | 'blocking' }) { const styles = type === 'blocked-by' ? 'border-rose-500/20 hover:border-rose-500/40 hover:bg-rose-500/10' : 'border-amber-500/20 hover:border-amber-500/40 hover:bg-amber-500/10'; const dotColor = type === 'blocked-by' ? 'bg-rose-500' : 'bg-amber-500'; return (
{id}
); } function ActionButton({ icon, label, onClick }: { icon: ReactNode; label: string; onClick?: () => void }) { return ( ); } function StatusIndicator({ status }: { status: string }) { const color = { ready: 'bg-teal-400 shadow-[0_0_10px_rgba(45,212,191,0.5)]', in_progress: 'bg-emerald-400 shadow-[0_0_10px_rgba(52,211,153,0.5)]', blocked: 'bg-rose-500 shadow-[0_0_10px_rgba(244,63,94,0.5)]', closed: 'bg-slate-500', }[status] || 'bg-slate-500'; return (
{status.replace('_', ' ')}
); } export function SocialCard({ data, className, selected = false, onClick, onJumpToGraph, onJumpToKanban, }: SocialCardProps) { const hasBlocks = data.blocks.length > 0; const hasUnblocks = data.unblocks.length > 0; return (
{/* Header: Status & ID */}
{data.id}
{new Date(data.lastActivity).toLocaleDateString()}
{/* Hero: Title */}

{data.title}

{/* Content: Dependencies (Hard Style List) */} {(hasBlocks || hasUnblocks) && (
{/* Blocked By */} {hasUnblocks && (
Blocked By
{data.unblocks.slice(0, 3).map((id) => ( ))} {data.unblocks.length > 3 && (
+{data.unblocks.length - 3} more
)}
)} {/* Blocking */} {hasBlocks && (
Blocking
{data.blocks.slice(0, 3).map((id) => ( ))} {data.blocks.length > 3 && (
+{data.blocks.length - 3} more
)}
)}
)} {/* Footer: Social Actions & Crew */}
{/* Crew (Left) */}
{data.agents.slice(0, 4).map((agent) => (
))} {data.agents.length === 0 && ( No Crew )}
{/* Action Dock (Right) */}
} label="Graph" onClick={() => onJumpToGraph?.(data.id)} />
} label="Kanban" onClick={() => onJumpToKanban?.(data.id)} />
); }