"use client"; import { useRef, useState, useEffect } from "react"; import { Users, ChevronLeft, ChevronRight, Shield, TrendingDown, TrendingUp, } from "lucide-react"; import gsap from "gsap"; import { cn } from "@/src/lib/utils"; import { GlowingEffect } from "@/src/components/ui/glowing-effect"; import type { ActivityItem } from "./GlobePage"; const COLLAPSED_WIDTH = 48; const EXPANDED_WIDTH = 360; const AGENT_COLORS: Record = { us: "#e53935", israel: "#64b5f6", iran: "#689f38", hezbollah: "#ffa000", gulf: "#a1887f", oversight: "#b0b0b0", }; const ACTION_LABELS: Record = { negotiate: "NEGOTIATE", defend: "DEFEND", intel_query: "INTEL", hold: "HOLD", strike: "STRIKE", sanction: "SANCTION", mobilize: "MOBILIZE", deceive: "DECEIVE", oversight_review: "REVIEW", }; function AgentDot({ agent }: { agent: string }) { const color = AGENT_COLORS[agent] ?? "#888"; return (
); } function TensionIndicator({ delta }: { delta: number }) { if (Math.abs(delta) < 0.1) return null; if (delta > 0) { return ; } return ; } export function ActivityLog({ items, onRegisterToggle }: { items: ActivityItem[]; onRegisterToggle?: (fn: (collapsed: boolean) => void) => void }) { const [collapsed, setCollapsed] = useState(false); const panelRef = useRef(null); const applyCollapse = (next: boolean) => { setCollapsed(next); if (panelRef.current) { gsap.to(panelRef.current, { width: next ? COLLAPSED_WIDTH : EXPANDED_WIDTH, duration: 0.4, ease: "power2.inOut", }); } }; useEffect(() => { onRegisterToggle?.(applyCollapse); }, []); const toggle = () => applyCollapse(!collapsed); return (
{/* Edge toggle bar — always visible, full height, LEFT side for right panel */} {/* Content area — hidden when collapsed via overflow */}
{/* Header */}
Agent Activity {items.length}
{/* Scrollable list */}
{items.length === 0 ? (

No agent actions recorded.
Awaiting simulation step.

) : (
{items.map((item) => (
{item.agent} {ACTION_LABELS[item.actionType] ?? item.actionType.toUpperCase()} {item.target && ( <> {item.target} )}

{item.summary}

T{item.turn} {item.rewardTotal !== null && ( = 0 ? "text-secondary" : "text-primary" )} > {item.rewardTotal >= 0 ? "+" : ""} {item.rewardTotal.toFixed(2)} )} {item.oversightTriggered && (
OVERSIGHT
)}
))}
)}
); }