/** * GraphOverlay — minimal built-in popover fallback. * Used ONLY when host app doesn't provide renderOverlay prop. * For full-featured popovers, use renderOverlay with project UI components. */ import type { GraphNode } from '../ports/types'; import type { GraphEventPort } from '../ports/GraphEventPort'; export interface GraphOverlayProps { selectedNode: GraphNode | null; events?: GraphEventPort; onDeselect: () => void; } export function GraphOverlay({ selectedNode, events, onDeselect, }: GraphOverlayProps): React.JSX.Element | null { if (!selectedNode) return null; return (
{selectedNode.label}
{selectedNode.sublabel && (
{selectedNode.sublabel}
)} {selectedNode.role && (
{selectedNode.role}
)}
{(selectedNode.kind === 'member' || selectedNode.kind === 'lead') && ( { const ref = selectedNode.domainRef; if (ref.kind === 'member') events?.onSendMessage?.(ref.memberName, ref.teamName); onDeselect(); }} /> )}
); } function FallbackButton({ label, onClick }: { label: string; onClick: () => void }): React.JSX.Element { return ( ); }