@xyflow/system 0.0.36 → 0.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -11,7 +11,7 @@ const errorMessages = {
11
11
  error006: () => "Can't create edge. An edge needs a source and a target.",
12
12
  error007: (id) => `The old edge with id=${id} does not exist.`,
13
13
  error009: (type) => `Marker type "${type}" doesn't exist.`,
14
- error008: (handleType, { id, sourceHandle, targetHandle }) => `Couldn't create edge for ${handleType} handle id: "${!sourceHandle ? sourceHandle : targetHandle}", edge id: ${id}.`,
14
+ error008: (handleType, { id, sourceHandle, targetHandle }) => `Couldn't create edge for ${handleType} handle id: "${handleType === 'source' ? sourceHandle : targetHandle}", edge id: ${id}.`,
15
15
  error010: () => 'Handle: No node id found. Make sure to only use a Handle inside a custom Node.',
16
16
  error011: (edgeType) => `Edge type "${edgeType}" not found. Using fallback type "default".`,
17
17
  error012: (id) => `Node with id "${id}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,
@@ -235,18 +235,18 @@ excludeNonSelectableNodes = false) => {
235
235
  height: rect.height / tScale,
236
236
  };
237
237
  const visibleNodes = [];
238
- for (const [, node] of nodes) {
238
+ for (const node of nodes.values()) {
239
239
  const { measured, selectable = true, hidden = false } = node;
240
- const width = measured.width ?? node.width ?? node.initialWidth ?? null;
241
- const height = measured.height ?? node.height ?? node.initialHeight ?? null;
242
240
  if ((excludeNonSelectableNodes && !selectable) || hidden) {
243
241
  continue;
244
242
  }
243
+ const width = measured.width ?? node.width ?? node.initialWidth ?? null;
244
+ const height = measured.height ?? node.height ?? node.initialHeight ?? null;
245
245
  const overlappingArea = getOverlappingArea(paneRect, nodeToRect(node));
246
- const notInitialized = width === null || height === null;
247
- const partiallyVisible = partially && overlappingArea > 0;
248
246
  const area = (width ?? 0) * (height ?? 0);
249
- const isVisible = notInitialized || partiallyVisible || overlappingArea >= area;
247
+ const partiallyVisible = partially && overlappingArea > 0;
248
+ const forceInitialRender = !node.internals.handleBounds;
249
+ const isVisible = forceInitialRender || partiallyVisible || overlappingArea >= area;
250
250
  if (isVisible || node.dragging) {
251
251
  visibleNodes.push(node);
252
252
  }
@@ -1035,8 +1035,8 @@ function getEdgePosition(params) {
1035
1035
  }
1036
1036
  const sourceHandleBounds = sourceNode.internals.handleBounds || toHandleBounds(sourceNode.handles);
1037
1037
  const targetHandleBounds = targetNode.internals.handleBounds || toHandleBounds(targetNode.handles);
1038
- const sourceHandle = getHandle(sourceHandleBounds?.source ?? [], params.sourceHandle);
1039
- const targetHandle = getHandle(
1038
+ const sourceHandle = getHandle$1(sourceHandleBounds?.source ?? [], params.sourceHandle);
1039
+ const targetHandle = getHandle$1(
1040
1040
  // when connection type is loose we can define all handles as sources and connect source -> source
1041
1041
  params.connectionMode === ConnectionMode.Strict
1042
1042
  ? targetHandleBounds?.target ?? []
@@ -1102,7 +1102,7 @@ function getHandlePosition(node, handle, fallbackPosition = Position.Left, cente
1102
1102
  return { x, y: y + height / 2 };
1103
1103
  }
1104
1104
  }
1105
- function getHandle(bounds, handleId) {
1105
+ function getHandle$1(bounds, handleId) {
1106
1106
  if (!bounds) {
1107
1107
  return null;
1108
1108
  }
@@ -1219,7 +1219,8 @@ function adoptUserNodes(nodes, nodeLookup, parentLookup, options) {
1219
1219
  },
1220
1220
  internals: {
1221
1221
  positionAbsolute: getNodePositionWithOrigin(userNode, _options.nodeOrigin),
1222
- handleBounds: internalNode?.internals.handleBounds,
1222
+ // if user re-initializes the node or removes `measured` for whatever reason, we reset the handleBounds so that the node gets re-measured
1223
+ handleBounds: !userNode.measured ? undefined : internalNode?.internals.handleBounds,
1223
1224
  z: calculateZ(userNode, selectedNodeZ),
1224
1225
  userNode,
1225
1226
  },
@@ -1236,7 +1237,8 @@ function updateChildPosition(node, nodeLookup, parentLookup, options) {
1236
1237
  const parentId = node.parentId;
1237
1238
  const parentNode = nodeLookup.get(parentId);
1238
1239
  if (!parentNode) {
1239
- throw new Error(`Parent node ${parentId} not found`);
1240
+ console.warn(`Parent node ${parentId} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);
1241
+ return;
1240
1242
  }
1241
1243
  // update the parentLookup
1242
1244
  const childNodes = parentLookup.get(parentId);
@@ -1742,59 +1744,71 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
1742
1744
  };
1743
1745
  }
1744
1746
 
1745
- // this functions collects all handles and adds an absolute position
1746
- // so that we can later find the closest handle to the mouse position
1747
- function getHandles(node, handleBounds, type, currentHandle) {
1748
- let excludedHandle = null;
1749
- const handles = (handleBounds[type] || []).reduce((res, handle) => {
1750
- if (node.id === currentHandle.nodeId && type === currentHandle.handleType && handle.id === currentHandle.handleId) {
1751
- excludedHandle = handle;
1752
- }
1753
- else {
1754
- const handleXY = getHandlePosition(node, handle, handle.position, true);
1755
- res.push({ ...handle, ...handleXY });
1747
+ function getNodesWithinDistance(position, nodeLookup, distance) {
1748
+ const nodes = [];
1749
+ const rect = {
1750
+ x: position.x - distance,
1751
+ y: position.y - distance,
1752
+ width: distance * 2,
1753
+ height: distance * 2,
1754
+ };
1755
+ for (const node of nodeLookup.values()) {
1756
+ if (getOverlappingArea(rect, nodeToRect(node)) > 0) {
1757
+ nodes.push(node);
1756
1758
  }
1757
- return res;
1758
- }, []);
1759
- return [handles, excludedHandle];
1759
+ }
1760
+ return nodes;
1760
1761
  }
1761
- function getClosestHandle(pos, connectionRadius, handles) {
1762
+ // this distance is used for the area around the user pointer
1763
+ // while doing a connection for finding the closest nodes
1764
+ const ADDITIONAL_DISTANCE = 250;
1765
+ function getClosestHandle(position, connectionRadius, nodeLookup, fromHandle) {
1762
1766
  let closestHandles = [];
1763
1767
  let minDistance = Infinity;
1764
- for (const handle of handles) {
1765
- const distance = Math.sqrt(Math.pow(handle.x - pos.x, 2) + Math.pow(handle.y - pos.y, 2));
1766
- if (distance <= connectionRadius) {
1768
+ const closeNodes = getNodesWithinDistance(position, nodeLookup, connectionRadius + ADDITIONAL_DISTANCE);
1769
+ for (const node of closeNodes) {
1770
+ const allHandles = [...(node.internals.handleBounds?.source ?? []), ...(node.internals.handleBounds?.target ?? [])];
1771
+ for (const handle of allHandles) {
1772
+ // if the handle is the same as the fromHandle we skip it
1773
+ if (fromHandle.nodeId === handle.nodeId && fromHandle.type === handle.type && fromHandle.id === handle.id) {
1774
+ continue;
1775
+ }
1776
+ // determine absolute position of the handle
1777
+ const { x, y } = getHandlePosition(node, handle, handle.position, true);
1778
+ const distance = Math.sqrt(Math.pow(x - position.x, 2) + Math.pow(y - position.y, 2));
1779
+ if (distance > connectionRadius) {
1780
+ continue;
1781
+ }
1767
1782
  if (distance < minDistance) {
1768
- closestHandles = [handle];
1783
+ closestHandles = [{ ...handle, x, y }];
1784
+ minDistance = distance;
1769
1785
  }
1770
1786
  else if (distance === minDistance) {
1771
1787
  // when multiple handles are on the same distance we collect all of them
1772
- closestHandles.push(handle);
1788
+ closestHandles.push({ ...handle, x, y });
1773
1789
  }
1774
- minDistance = distance;
1775
1790
  }
1776
1791
  }
1777
1792
  if (!closestHandles.length) {
1778
1793
  return null;
1779
1794
  }
1780
- return closestHandles.length === 1
1781
- ? closestHandles[0]
1782
- : // if multiple handles are layouted on top of each other we take the one with type = target because it's more likely that the user wants to connect to this one
1783
- closestHandles.find((handle) => handle.type === 'target') || closestHandles[0];
1795
+ // when multiple handles overlay each other we prefer the opposite handle
1796
+ if (closestHandles.length > 1) {
1797
+ const oppositeHandleType = fromHandle.type === 'source' ? 'target' : 'source';
1798
+ return closestHandles.find((handle) => handle.type === oppositeHandleType) ?? closestHandles[0];
1799
+ }
1800
+ return closestHandles[0];
1784
1801
  }
1785
- function getHandleLookup({ nodeLookup, nodeId, handleId, handleType, }) {
1786
- const connectionHandles = [];
1787
- const currentHandle = { nodeId, handleId, handleType };
1788
- let excludedHandle = null;
1789
- for (const node of nodeLookup.values()) {
1790
- if (node.internals.handleBounds) {
1791
- const [sourceHandles, excludedSource] = getHandles(node, node.internals.handleBounds, 'source', currentHandle);
1792
- const [targetHandles, excludedTarget] = getHandles(node, node.internals.handleBounds, 'target', currentHandle);
1793
- excludedHandle = excludedHandle ? excludedHandle : excludedSource ?? excludedTarget;
1794
- connectionHandles.push(...sourceHandles, ...targetHandles);
1795
- }
1802
+ function getHandle(nodeId, handleType, handleId, nodeLookup, withAbsolutePosition = false) {
1803
+ const node = nodeLookup.get(nodeId);
1804
+ if (!node) {
1805
+ return null;
1796
1806
  }
1797
- return [connectionHandles, excludedHandle];
1807
+ const handles = node.internals.handleBounds?.[handleType];
1808
+ const handle = (handleId ? handles?.find((h) => h.id === handleId) : handles?.[0]) ?? null;
1809
+ return handle && withAbsolutePosition
1810
+ ? { ...handle, ...getHandlePosition(node, handle, handle.position, true) }
1811
+ : handle;
1798
1812
  }
1799
1813
  function getHandleType(edgeUpdaterType, handleDomNode) {
1800
1814
  if (edgeUpdaterType) {
@@ -1832,17 +1846,15 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1832
1846
  if (!containerBounds || !handleType) {
1833
1847
  return;
1834
1848
  }
1849
+ const fromHandleInternal = getHandle(nodeId, handleType, handleId, nodeLookup);
1850
+ if (!fromHandleInternal) {
1851
+ return;
1852
+ }
1835
1853
  let position = getEventPosition(event, containerBounds);
1836
1854
  let autoPanStarted = false;
1837
1855
  let connection = null;
1838
1856
  let isValid = false;
1839
1857
  let handleDomNode = null;
1840
- const [handleLookup, fromHandleInternal] = getHandleLookup({
1841
- nodeLookup,
1842
- nodeId,
1843
- handleId,
1844
- handleType,
1845
- });
1846
1858
  // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas
1847
1859
  function autoPan() {
1848
1860
  if (!autoPanOnConnect || !containerBounds) {
@@ -1883,7 +1895,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1883
1895
  }
1884
1896
  const transform = getTransform();
1885
1897
  position = getEventPosition(event, containerBounds);
1886
- closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, handleLookup);
1898
+ closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, nodeLookup, fromHandle);
1887
1899
  if (!autoPanStarted) {
1888
1900
  autoPan();
1889
1901
  autoPanStarted = true;
@@ -1898,7 +1910,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1898
1910
  doc,
1899
1911
  lib,
1900
1912
  flowId,
1901
- handleLookup,
1913
+ nodeLookup,
1902
1914
  });
1903
1915
  handleDomNode = result.handleDomNode;
1904
1916
  connection = result.connection;
@@ -1922,7 +1934,9 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1922
1934
  newConnection.toHandle &&
1923
1935
  previousConnection.toHandle.type === newConnection.toHandle.type &&
1924
1936
  previousConnection.toHandle.nodeId === newConnection.toHandle.nodeId &&
1925
- previousConnection.toHandle.id === newConnection.toHandle.id) {
1937
+ previousConnection.toHandle.id === newConnection.toHandle.id &&
1938
+ previousConnection.to.x === newConnection.to.x &&
1939
+ previousConnection.to.y === newConnection.to.y) {
1926
1940
  return;
1927
1941
  }
1928
1942
  updateConnection(newConnection);
@@ -1934,9 +1948,15 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1934
1948
  }
1935
1949
  // it's important to get a fresh reference from the store here
1936
1950
  // in order to get the latest state of onConnectEnd
1937
- onConnectEnd?.(event);
1951
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1952
+ const { inProgress, ...connectionState } = previousConnection;
1953
+ const finalConnectionState = {
1954
+ ...connectionState,
1955
+ toPosition: previousConnection.toHandle ? previousConnection.toPosition : null,
1956
+ };
1957
+ onConnectEnd?.(event, finalConnectionState);
1938
1958
  if (edgeUpdaterType) {
1939
- onReconnectEnd?.(event);
1959
+ onReconnectEnd?.(event, finalConnectionState);
1940
1960
  }
1941
1961
  cancelConnection();
1942
1962
  cancelAnimationFrame(autoPanId);
@@ -1955,7 +1975,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1955
1975
  doc.addEventListener('touchend', onPointerUp);
1956
1976
  }
1957
1977
  // checks if and returns connection in fom of an object { source: 123, target: 312 }
1958
- function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId, fromType, doc, lib, flowId, isValidConnection = alwaysValid, handleLookup, }) {
1978
+ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId, fromType, doc, lib, flowId, isValidConnection = alwaysValid, nodeLookup, }) {
1959
1979
  const isTarget = fromType === 'target';
1960
1980
  const handleDomNode = handle
1961
1981
  ? doc.querySelector(`.${lib}-flow__handle[data-id="${flowId}-${handle?.nodeId}-${handle?.id}-${handle?.type}"]`)
@@ -1977,7 +1997,7 @@ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId
1977
1997
  const handleId = handleToCheck.getAttribute('data-handleid');
1978
1998
  const connectable = handleToCheck.classList.contains('connectable');
1979
1999
  const connectableEnd = handleToCheck.classList.contains('connectableend');
1980
- if (!handleNodeId) {
2000
+ if (!handleNodeId || !handleType) {
1981
2001
  return result;
1982
2002
  }
1983
2003
  const connection = {
@@ -1994,14 +2014,7 @@ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId
1994
2014
  ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target')
1995
2015
  : handleNodeId !== fromNodeId || handleId !== fromHandleId);
1996
2016
  result.isValid = isValid && isValidConnection(connection);
1997
- if (handleLookup) {
1998
- const toHandle = handleLookup.find((h) => h.id === handleId && h.nodeId === handleNodeId && h.type === handleType);
1999
- if (toHandle) {
2000
- result.toHandle = {
2001
- ...toHandle,
2002
- };
2003
- }
2004
- }
2017
+ result.toHandle = getHandle(handleNodeId, handleType, handleId, nodeLookup, false);
2005
2018
  }
2006
2019
  return result;
2007
2020
  }
@@ -11,7 +11,7 @@ const errorMessages = {
11
11
  error006: () => "Can't create edge. An edge needs a source and a target.",
12
12
  error007: (id) => `The old edge with id=${id} does not exist.`,
13
13
  error009: (type) => `Marker type "${type}" doesn't exist.`,
14
- error008: (handleType, { id, sourceHandle, targetHandle }) => `Couldn't create edge for ${handleType} handle id: "${!sourceHandle ? sourceHandle : targetHandle}", edge id: ${id}.`,
14
+ error008: (handleType, { id, sourceHandle, targetHandle }) => `Couldn't create edge for ${handleType} handle id: "${handleType === 'source' ? sourceHandle : targetHandle}", edge id: ${id}.`,
15
15
  error010: () => 'Handle: No node id found. Make sure to only use a Handle inside a custom Node.',
16
16
  error011: (edgeType) => `Edge type "${edgeType}" not found. Using fallback type "default".`,
17
17
  error012: (id) => `Node with id "${id}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,
@@ -235,18 +235,18 @@ excludeNonSelectableNodes = false) => {
235
235
  height: rect.height / tScale,
236
236
  };
237
237
  const visibleNodes = [];
238
- for (const [, node] of nodes) {
238
+ for (const node of nodes.values()) {
239
239
  const { measured, selectable = true, hidden = false } = node;
240
- const width = measured.width ?? node.width ?? node.initialWidth ?? null;
241
- const height = measured.height ?? node.height ?? node.initialHeight ?? null;
242
240
  if ((excludeNonSelectableNodes && !selectable) || hidden) {
243
241
  continue;
244
242
  }
243
+ const width = measured.width ?? node.width ?? node.initialWidth ?? null;
244
+ const height = measured.height ?? node.height ?? node.initialHeight ?? null;
245
245
  const overlappingArea = getOverlappingArea(paneRect, nodeToRect(node));
246
- const notInitialized = width === null || height === null;
247
- const partiallyVisible = partially && overlappingArea > 0;
248
246
  const area = (width ?? 0) * (height ?? 0);
249
- const isVisible = notInitialized || partiallyVisible || overlappingArea >= area;
247
+ const partiallyVisible = partially && overlappingArea > 0;
248
+ const forceInitialRender = !node.internals.handleBounds;
249
+ const isVisible = forceInitialRender || partiallyVisible || overlappingArea >= area;
250
250
  if (isVisible || node.dragging) {
251
251
  visibleNodes.push(node);
252
252
  }
@@ -1035,8 +1035,8 @@ function getEdgePosition(params) {
1035
1035
  }
1036
1036
  const sourceHandleBounds = sourceNode.internals.handleBounds || toHandleBounds(sourceNode.handles);
1037
1037
  const targetHandleBounds = targetNode.internals.handleBounds || toHandleBounds(targetNode.handles);
1038
- const sourceHandle = getHandle(sourceHandleBounds?.source ?? [], params.sourceHandle);
1039
- const targetHandle = getHandle(
1038
+ const sourceHandle = getHandle$1(sourceHandleBounds?.source ?? [], params.sourceHandle);
1039
+ const targetHandle = getHandle$1(
1040
1040
  // when connection type is loose we can define all handles as sources and connect source -> source
1041
1041
  params.connectionMode === ConnectionMode.Strict
1042
1042
  ? targetHandleBounds?.target ?? []
@@ -1102,7 +1102,7 @@ function getHandlePosition(node, handle, fallbackPosition = Position.Left, cente
1102
1102
  return { x, y: y + height / 2 };
1103
1103
  }
1104
1104
  }
1105
- function getHandle(bounds, handleId) {
1105
+ function getHandle$1(bounds, handleId) {
1106
1106
  if (!bounds) {
1107
1107
  return null;
1108
1108
  }
@@ -1219,7 +1219,8 @@ function adoptUserNodes(nodes, nodeLookup, parentLookup, options) {
1219
1219
  },
1220
1220
  internals: {
1221
1221
  positionAbsolute: getNodePositionWithOrigin(userNode, _options.nodeOrigin),
1222
- handleBounds: internalNode?.internals.handleBounds,
1222
+ // if user re-initializes the node or removes `measured` for whatever reason, we reset the handleBounds so that the node gets re-measured
1223
+ handleBounds: !userNode.measured ? undefined : internalNode?.internals.handleBounds,
1223
1224
  z: calculateZ(userNode, selectedNodeZ),
1224
1225
  userNode,
1225
1226
  },
@@ -1236,7 +1237,8 @@ function updateChildPosition(node, nodeLookup, parentLookup, options) {
1236
1237
  const parentId = node.parentId;
1237
1238
  const parentNode = nodeLookup.get(parentId);
1238
1239
  if (!parentNode) {
1239
- throw new Error(`Parent node ${parentId} not found`);
1240
+ console.warn(`Parent node ${parentId} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);
1241
+ return;
1240
1242
  }
1241
1243
  // update the parentLookup
1242
1244
  const childNodes = parentLookup.get(parentId);
@@ -1742,59 +1744,71 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
1742
1744
  };
1743
1745
  }
1744
1746
 
1745
- // this functions collects all handles and adds an absolute position
1746
- // so that we can later find the closest handle to the mouse position
1747
- function getHandles(node, handleBounds, type, currentHandle) {
1748
- let excludedHandle = null;
1749
- const handles = (handleBounds[type] || []).reduce((res, handle) => {
1750
- if (node.id === currentHandle.nodeId && type === currentHandle.handleType && handle.id === currentHandle.handleId) {
1751
- excludedHandle = handle;
1752
- }
1753
- else {
1754
- const handleXY = getHandlePosition(node, handle, handle.position, true);
1755
- res.push({ ...handle, ...handleXY });
1747
+ function getNodesWithinDistance(position, nodeLookup, distance) {
1748
+ const nodes = [];
1749
+ const rect = {
1750
+ x: position.x - distance,
1751
+ y: position.y - distance,
1752
+ width: distance * 2,
1753
+ height: distance * 2,
1754
+ };
1755
+ for (const node of nodeLookup.values()) {
1756
+ if (getOverlappingArea(rect, nodeToRect(node)) > 0) {
1757
+ nodes.push(node);
1756
1758
  }
1757
- return res;
1758
- }, []);
1759
- return [handles, excludedHandle];
1759
+ }
1760
+ return nodes;
1760
1761
  }
1761
- function getClosestHandle(pos, connectionRadius, handles) {
1762
+ // this distance is used for the area around the user pointer
1763
+ // while doing a connection for finding the closest nodes
1764
+ const ADDITIONAL_DISTANCE = 250;
1765
+ function getClosestHandle(position, connectionRadius, nodeLookup, fromHandle) {
1762
1766
  let closestHandles = [];
1763
1767
  let minDistance = Infinity;
1764
- for (const handle of handles) {
1765
- const distance = Math.sqrt(Math.pow(handle.x - pos.x, 2) + Math.pow(handle.y - pos.y, 2));
1766
- if (distance <= connectionRadius) {
1768
+ const closeNodes = getNodesWithinDistance(position, nodeLookup, connectionRadius + ADDITIONAL_DISTANCE);
1769
+ for (const node of closeNodes) {
1770
+ const allHandles = [...(node.internals.handleBounds?.source ?? []), ...(node.internals.handleBounds?.target ?? [])];
1771
+ for (const handle of allHandles) {
1772
+ // if the handle is the same as the fromHandle we skip it
1773
+ if (fromHandle.nodeId === handle.nodeId && fromHandle.type === handle.type && fromHandle.id === handle.id) {
1774
+ continue;
1775
+ }
1776
+ // determine absolute position of the handle
1777
+ const { x, y } = getHandlePosition(node, handle, handle.position, true);
1778
+ const distance = Math.sqrt(Math.pow(x - position.x, 2) + Math.pow(y - position.y, 2));
1779
+ if (distance > connectionRadius) {
1780
+ continue;
1781
+ }
1767
1782
  if (distance < minDistance) {
1768
- closestHandles = [handle];
1783
+ closestHandles = [{ ...handle, x, y }];
1784
+ minDistance = distance;
1769
1785
  }
1770
1786
  else if (distance === minDistance) {
1771
1787
  // when multiple handles are on the same distance we collect all of them
1772
- closestHandles.push(handle);
1788
+ closestHandles.push({ ...handle, x, y });
1773
1789
  }
1774
- minDistance = distance;
1775
1790
  }
1776
1791
  }
1777
1792
  if (!closestHandles.length) {
1778
1793
  return null;
1779
1794
  }
1780
- return closestHandles.length === 1
1781
- ? closestHandles[0]
1782
- : // if multiple handles are layouted on top of each other we take the one with type = target because it's more likely that the user wants to connect to this one
1783
- closestHandles.find((handle) => handle.type === 'target') || closestHandles[0];
1795
+ // when multiple handles overlay each other we prefer the opposite handle
1796
+ if (closestHandles.length > 1) {
1797
+ const oppositeHandleType = fromHandle.type === 'source' ? 'target' : 'source';
1798
+ return closestHandles.find((handle) => handle.type === oppositeHandleType) ?? closestHandles[0];
1799
+ }
1800
+ return closestHandles[0];
1784
1801
  }
1785
- function getHandleLookup({ nodeLookup, nodeId, handleId, handleType, }) {
1786
- const connectionHandles = [];
1787
- const currentHandle = { nodeId, handleId, handleType };
1788
- let excludedHandle = null;
1789
- for (const node of nodeLookup.values()) {
1790
- if (node.internals.handleBounds) {
1791
- const [sourceHandles, excludedSource] = getHandles(node, node.internals.handleBounds, 'source', currentHandle);
1792
- const [targetHandles, excludedTarget] = getHandles(node, node.internals.handleBounds, 'target', currentHandle);
1793
- excludedHandle = excludedHandle ? excludedHandle : excludedSource ?? excludedTarget;
1794
- connectionHandles.push(...sourceHandles, ...targetHandles);
1795
- }
1802
+ function getHandle(nodeId, handleType, handleId, nodeLookup, withAbsolutePosition = false) {
1803
+ const node = nodeLookup.get(nodeId);
1804
+ if (!node) {
1805
+ return null;
1796
1806
  }
1797
- return [connectionHandles, excludedHandle];
1807
+ const handles = node.internals.handleBounds?.[handleType];
1808
+ const handle = (handleId ? handles?.find((h) => h.id === handleId) : handles?.[0]) ?? null;
1809
+ return handle && withAbsolutePosition
1810
+ ? { ...handle, ...getHandlePosition(node, handle, handle.position, true) }
1811
+ : handle;
1798
1812
  }
1799
1813
  function getHandleType(edgeUpdaterType, handleDomNode) {
1800
1814
  if (edgeUpdaterType) {
@@ -1832,17 +1846,15 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1832
1846
  if (!containerBounds || !handleType) {
1833
1847
  return;
1834
1848
  }
1849
+ const fromHandleInternal = getHandle(nodeId, handleType, handleId, nodeLookup);
1850
+ if (!fromHandleInternal) {
1851
+ return;
1852
+ }
1835
1853
  let position = getEventPosition(event, containerBounds);
1836
1854
  let autoPanStarted = false;
1837
1855
  let connection = null;
1838
1856
  let isValid = false;
1839
1857
  let handleDomNode = null;
1840
- const [handleLookup, fromHandleInternal] = getHandleLookup({
1841
- nodeLookup,
1842
- nodeId,
1843
- handleId,
1844
- handleType,
1845
- });
1846
1858
  // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas
1847
1859
  function autoPan() {
1848
1860
  if (!autoPanOnConnect || !containerBounds) {
@@ -1883,7 +1895,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1883
1895
  }
1884
1896
  const transform = getTransform();
1885
1897
  position = getEventPosition(event, containerBounds);
1886
- closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, handleLookup);
1898
+ closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, nodeLookup, fromHandle);
1887
1899
  if (!autoPanStarted) {
1888
1900
  autoPan();
1889
1901
  autoPanStarted = true;
@@ -1898,7 +1910,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1898
1910
  doc,
1899
1911
  lib,
1900
1912
  flowId,
1901
- handleLookup,
1913
+ nodeLookup,
1902
1914
  });
1903
1915
  handleDomNode = result.handleDomNode;
1904
1916
  connection = result.connection;
@@ -1922,7 +1934,9 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1922
1934
  newConnection.toHandle &&
1923
1935
  previousConnection.toHandle.type === newConnection.toHandle.type &&
1924
1936
  previousConnection.toHandle.nodeId === newConnection.toHandle.nodeId &&
1925
- previousConnection.toHandle.id === newConnection.toHandle.id) {
1937
+ previousConnection.toHandle.id === newConnection.toHandle.id &&
1938
+ previousConnection.to.x === newConnection.to.x &&
1939
+ previousConnection.to.y === newConnection.to.y) {
1926
1940
  return;
1927
1941
  }
1928
1942
  updateConnection(newConnection);
@@ -1934,9 +1948,15 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1934
1948
  }
1935
1949
  // it's important to get a fresh reference from the store here
1936
1950
  // in order to get the latest state of onConnectEnd
1937
- onConnectEnd?.(event);
1951
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1952
+ const { inProgress, ...connectionState } = previousConnection;
1953
+ const finalConnectionState = {
1954
+ ...connectionState,
1955
+ toPosition: previousConnection.toHandle ? previousConnection.toPosition : null,
1956
+ };
1957
+ onConnectEnd?.(event, finalConnectionState);
1938
1958
  if (edgeUpdaterType) {
1939
- onReconnectEnd?.(event);
1959
+ onReconnectEnd?.(event, finalConnectionState);
1940
1960
  }
1941
1961
  cancelConnection();
1942
1962
  cancelAnimationFrame(autoPanId);
@@ -1955,7 +1975,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1955
1975
  doc.addEventListener('touchend', onPointerUp);
1956
1976
  }
1957
1977
  // checks if and returns connection in fom of an object { source: 123, target: 312 }
1958
- function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId, fromType, doc, lib, flowId, isValidConnection = alwaysValid, handleLookup, }) {
1978
+ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId, fromType, doc, lib, flowId, isValidConnection = alwaysValid, nodeLookup, }) {
1959
1979
  const isTarget = fromType === 'target';
1960
1980
  const handleDomNode = handle
1961
1981
  ? doc.querySelector(`.${lib}-flow__handle[data-id="${flowId}-${handle?.nodeId}-${handle?.id}-${handle?.type}"]`)
@@ -1977,7 +1997,7 @@ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId
1977
1997
  const handleId = handleToCheck.getAttribute('data-handleid');
1978
1998
  const connectable = handleToCheck.classList.contains('connectable');
1979
1999
  const connectableEnd = handleToCheck.classList.contains('connectableend');
1980
- if (!handleNodeId) {
2000
+ if (!handleNodeId || !handleType) {
1981
2001
  return result;
1982
2002
  }
1983
2003
  const connection = {
@@ -1994,14 +2014,7 @@ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId
1994
2014
  ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target')
1995
2015
  : handleNodeId !== fromNodeId || handleId !== fromHandleId);
1996
2016
  result.isValid = isValid && isValidConnection(connection);
1997
- if (handleLookup) {
1998
- const toHandle = handleLookup.find((h) => h.id === handleId && h.nodeId === handleNodeId && h.type === handleType);
1999
- if (toHandle) {
2000
- result.toHandle = {
2001
- ...toHandle,
2002
- };
2003
- }
2004
- }
2017
+ result.toHandle = getHandle(handleNodeId, handleType, handleId, nodeLookup, false);
2005
2018
  }
2006
2019
  return result;
2007
2020
  }
@@ -37,7 +37,7 @@ export type OnConnectStartParams = {
37
37
  };
38
38
  export type OnConnectStart = (event: MouseEvent | TouchEvent, params: OnConnectStartParams) => void;
39
39
  export type OnConnect = (connection: Connection) => void;
40
- export type OnConnectEnd = (event: MouseEvent | TouchEvent) => void;
40
+ export type OnConnectEnd = (event: MouseEvent | TouchEvent, connectionState: FinalConnectionState) => void;
41
41
  export type IsValidConnection = (edge: EdgeBase | Connection) => boolean;
42
42
  export type FitViewParamsBase<NodeType extends NodeBase> = {
43
43
  nodes: Map<string, InternalNodeBase<NodeType>>;
@@ -126,6 +126,7 @@ export type ConnectionInProgress<NodeType extends InternalNodeBase = InternalNod
126
126
  toNode: NodeType | null;
127
127
  };
128
128
  export type ConnectionState<NodeType extends InternalNodeBase = InternalNodeBase> = ConnectionInProgress<NodeType> | NoConnection;
129
+ export type FinalConnectionState<NodeType extends InternalNodeBase = InternalNodeBase> = Omit<ConnectionState<NodeType>, 'inProgress'>;
129
130
  export type UpdateConnection<NodeType extends InternalNodeBase = InternalNodeBase> = (params: ConnectionState<NodeType>) => void;
130
131
  export type ColorModeClass = 'light' | 'dark';
131
132
  export type ColorMode = ColorModeClass | 'system';
@@ -1 +1 @@
1
- {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../src/types/general.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"general.d.ts","sourceRoot":"","sources":["../../src/types/general.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/utils/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/utils/graph.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/utils/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,UAAU,EAEV,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACb,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAY5C,wBAAgB,uBAAuB,CAAC,QAAQ,SAAS,QAAQ,EAC/D,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAClD,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,QAUvC;AAED,KAAK,kBAAkB,CAAC,QAAQ,SAAS,QAAQ,IAAI;IACnD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,wBAAgB,cAAc,CAAC,QAAQ,SAAS,QAAQ,EACtD,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAClD,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,QAmCvC;AA6DD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,UAAmB,GAC9B,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,EAAE,CA+E9C;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,SAAS,gBAAgB,EACnE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EACxC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,EAChC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,EACpC,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,UAAU,CAAC,EAAE,UAAU,GACtB;IAAE,OAAO,EAAE,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,EAAE,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,CA8EtF;AAED,wBAAsB,KAAK,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,SAAS,EACT,eAAe,EACf,KAAK,EACL,MAAM,GACP,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,gBAAgB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAkBnH"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/utils/store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,UAAU,EAEV,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACb,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAY5C,wBAAgB,uBAAuB,CAAC,QAAQ,SAAS,QAAQ,EAC/D,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAClD,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,QAUvC;AAED,KAAK,kBAAkB,CAAC,QAAQ,SAAS,QAAQ,IAAI;IACnD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,wBAAgB,cAAc,CAAC,QAAQ,SAAS,QAAQ,EACtD,KAAK,EAAE,QAAQ,EAAE,EACjB,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAClD,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EACtD,OAAO,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,QAoCvC;AAiED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,UAAU,GAAE,UAAmB,GAC9B,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,EAAE,CA+E9C;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,SAAS,gBAAgB,EACnE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EACxC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,EAChC,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,EACpC,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,UAAU,CAAC,EAAE,UAAU,GACtB;IAAE,OAAO,EAAE,CAAC,mBAAmB,GAAG,kBAAkB,CAAC,EAAE,CAAC;IAAC,gBAAgB,EAAE,OAAO,CAAA;CAAE,CA8EtF;AAED,wBAAsB,KAAK,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,SAAS,EACT,eAAe,EACf,KAAK,EACL,MAAM,GACP,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,gBAAgB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnB;AAED,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,QAkBnH"}