import type { MouseEventHandler } from 'react'; import { Activity, Clock3, GitBranch, Link2, MessageCircle, Orbit } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; 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; onJumpToActivity?: (id: string) => void; onOpenThread?: () => void; description?: string; updatedLabel?: string; dependencyCount?: number; commentCount?: number; unreadCount?: number; } type StatusTone = { accent: string; glow: string; badgeClass: string; surface: string; accentChip: string; }; const STATUS_TONES: Record = { ready: { accent: '#7CB97A', glow: 'rgba(124,185,122,0.26)', badgeClass: 'bg-[#7CB97A]/26 text-[#DCEED8] shadow-[0_8px_16px_-12px_rgba(0,0,0,0.8)]', surface: 'radial-gradient(circle at 80% 78%, rgba(124,185,122,0.46), transparent 76%), radial-gradient(circle at 8% 6%, rgba(124,185,122,0.26), transparent 68%), linear-gradient(145deg, rgba(45,78,45,0.99), rgba(35,62,35,0.99))', accentChip: 'bg-[#7CB97A]/18 text-[#D2E4CE] shadow-[0_8px_16px_-12px_rgba(0,0,0,0.8)]', }, in_progress: { accent: '#D4A574', glow: 'rgba(212,165,116,0.28)', badgeClass: 'bg-[#D4A574]/28 text-[#EED9C1] shadow-[0_8px_16px_-12px_rgba(0,0,0,0.8)]', surface: 'radial-gradient(circle at 80% 78%, rgba(212,165,116,0.48), transparent 76%), radial-gradient(circle at 8% 6%, rgba(212,165,116,0.28), transparent 68%), linear-gradient(145deg, rgba(86,64,40,0.99), rgba(68,49,30,0.99))', accentChip: 'bg-[#D4A574]/20 text-[#E0C6A7] shadow-[0_8px_16px_-12px_rgba(0,0,0,0.8)]', }, blocked: { accent: '#C97A7A', glow: 'rgba(201,122,122,0.26)', badgeClass: 'bg-[#C97A7A]/28 text-[#EDD3D3] shadow-[0_8px_16px_-12px_rgba(0,0,0,0.8)]', surface: 'radial-gradient(circle at 80% 78%, rgba(201,122,122,0.46), transparent 76%), radial-gradient(circle at 8% 6%, rgba(201,122,122,0.27), transparent 68%), linear-gradient(145deg, rgba(76,46,46,0.99), rgba(60,36,36,0.99))', accentChip: 'bg-[#C97A7A]/18 text-[#E1C0C0] shadow-[0_8px_16px_-12px_rgba(0,0,0,0.8)]', }, closed: { accent: 'var(--status-closed)', glow: 'rgba(136,136,136,0.16)', badgeClass: 'bg-[#888888]/26 text-[#CECECE] shadow-[0_8px_16px_-12px_rgba(0,0,0,0.8)]', surface: 'radial-gradient(circle at 80% 78%, rgba(136,136,136,0.32), transparent 76%), radial-gradient(circle at 8% 6%, rgba(136,136,136,0.16), transparent 68%), linear-gradient(145deg, rgba(56,56,56,0.99), rgba(44,44,44,0.99))', accentChip: 'bg-[#888888]/16 text-[#BEBEBE] shadow-[0_8px_16px_-12px_rgba(0,0,0,0.8)]', }, }; function renderDependencyPreview(ids: string[], toneClass: string, label: string) { if (ids.length === 0) { return null; } return (

{label}

{ids.slice(0, 2).map((id) => ( {id} ))} {ids.length > 2 ? +{ids.length - 2} : null}
); } export function SocialCard({ data, className, selected = false, onClick, onJumpToGraph, onJumpToActivity, onOpenThread, description, updatedLabel = 'just now', dependencyCount, commentCount, unreadCount = 0, }: SocialCardProps) { const tone = STATUS_TONES[data.status]; return (
{data.id} {unreadCount > 0 ? ( {unreadCount} ) : null}
{data.status.replace('_', ' ')} {data.priority}

{data.title}

{description || 'No summary provided yet.'}

{data.blocks.length} blocking {data.unblocks.length} blocked by
{renderDependencyPreview(data.unblocks, 'text-[#D4A574]', 'Blocked By')} {renderDependencyPreview(data.blocks, 'text-[#5BA8A0]', 'Unblocks')}

{updatedLabel}

{dependencyCount ?? data.blocks.length + data.unblocks.length}

{commentCount ?? 0}

{data.agents.slice(0, 4).map((agent) => (
))} {data.agents.length === 0 ? No crew : null}
); }