import type { DiagramNode as DiagramNodeType } from '../../api/queries/diagrams'; import type { NodeConfig } from './types'; import { colorForType } from './node-colors'; import { DiagramNode } from './DiagramNode'; const HEADER_HEIGHT = 22; const CORNER_RADIUS = 4; interface CompoundNodeProps { node: DiagramNodeType; selectedNodeId?: string; hoveredNodeId: string | null; nodeConfigs?: Map; onNodeClick: (nodeId: string) => void; onNodeEnter: (nodeId: string) => void; onNodeLeave: () => void; } export function CompoundNode({ node, selectedNodeId, hoveredNodeId, nodeConfigs, onNodeClick, onNodeEnter, onNodeLeave, }: CompoundNodeProps) { const x = node.x ?? 0; const y = node.y ?? 0; const w = node.width ?? 200; const h = node.height ?? 100; const color = colorForType(node.type); const typeName = node.type?.replace(/^EIP_/, '').replace(/_/g, ' ') ?? ''; const label = node.label ? `${typeName}: ${node.label}` : typeName; return ( {/* Container body */} {/* Colored header bar */} {/* Header label */} {label} {/* Children nodes (positioned relative to compound) */} {node.children?.map(child => ( child.id && onNodeClick(child.id)} onMouseEnter={() => child.id && onNodeEnter(child.id)} onMouseLeave={onNodeLeave} /> ))} ); }