import type { HandleElement, Position } from '@reactflow/system'; import { isNodeBase, isEdgeBase, addEdgeBase, getOutgoersBase, getIncomersBase, updateEdgeBase, getConnectedEdgesBase, getDimensions } from '@reactflow/utils'; import type { Edge, Node } from '$lib/types'; export const isNode = isNodeBase; export const isEdge = isEdgeBase; export const getOutgoers = getOutgoersBase; export const getIncomers = getIncomersBase; export const addEdge = addEdgeBase; export const updateEdge = updateEdgeBase; export const getConnectedEdges = getConnectedEdgesBase; export const getHandleBounds = ( selector: string, nodeElement: HTMLDivElement, zoom: number ): HandleElement[] | null => { const handles = nodeElement.querySelectorAll(selector); if (!handles || !handles.length) { return null; } const handlesArray = Array.from(handles) as HTMLDivElement[]; const nodeBounds = nodeElement.getBoundingClientRect(); return handlesArray.map((handle): HandleElement => { const handleBounds = handle.getBoundingClientRect(); return { id: handle.getAttribute('data-handleid'), position: handle.getAttribute('data-handlepos') as unknown as Position, x: (handleBounds.left - nodeBounds.left) / zoom, y: (handleBounds.top - nodeBounds.top) / zoom, ...getDimensions(handle) }; }); };