import { useEffect, useState } from "react"; import type { CustomNodeData } from "./CustomNode"; interface NodeTooltipProps { data: CustomNodeData; nodeId: string; incomingCount: number; outgoingCount: number; tags?: string[]; } export default function NodeTooltip({ data, nodeId, incomingCount, outgoingCount, tags = [], }: NodeTooltipProps) { const [position, setPosition] = useState({ x: 0, y: 0 }); const [visible, setVisible] = useState(false); useEffect(() => { const handleMouseMove = (e: Event) => { const me = e as globalThis.MouseEvent; setPosition({ x: me.clientX, y: me.clientY }); }; const showTooltip = () => setVisible(true); const hideTooltip = () => setVisible(false); // Find the node element via data-id (React Flow convention) const nodeElement = document.querySelector(`[data-id="${CSS.escape(nodeId)}"]`); if (nodeElement) { nodeElement.addEventListener("mouseenter", showTooltip); nodeElement.addEventListener("mouseleave", hideTooltip); nodeElement.addEventListener("mousemove", handleMouseMove); return () => { nodeElement.removeEventListener("mouseenter", showTooltip); nodeElement.removeEventListener("mouseleave", hideTooltip); nodeElement.removeEventListener("mousemove", handleMouseMove); }; } }, [nodeId]); if (!visible) return null; const totalConnections = incomingCount + outgoingCount; return (
{data.summary.length > 120 ? data.summary.slice(0, 120) + "..." : data.summary}
)} {/* Tags */} {tags.length > 0 && (