@xyflow/system 0.0.37 → 0.0.39

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
  }
@@ -1744,71 +1744,71 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
1744
1744
  };
1745
1745
  }
1746
1746
 
1747
- // this functions collects all handles and adds an absolute position
1748
- // so that we can later find the closest handle to the mouse position
1749
- function getHandles(node, handleBounds, type, currentHandle) {
1750
- let excludedHandle = null;
1751
- const handles = (handleBounds[type] || []).reduce((res, handle) => {
1752
- if (node.id === currentHandle.nodeId && type === currentHandle.handleType && handle.id === currentHandle.handleId) {
1753
- excludedHandle = handle;
1754
- }
1755
- else {
1756
- const handleXY = getHandlePosition(node, handle, handle.position, true);
1757
- 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);
1758
1758
  }
1759
- return res;
1760
- }, []);
1761
- return [handles, excludedHandle];
1759
+ }
1760
+ return nodes;
1762
1761
  }
1763
- function getClosestHandle(pos, connectionRadius, handleLookup) {
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) {
1764
1766
  let closestHandles = [];
1765
1767
  let minDistance = Infinity;
1766
- for (const handle of handleLookup.values()) {
1767
- const distance = Math.sqrt(Math.pow(handle.x - pos.x, 2) + Math.pow(handle.y - pos.y, 2));
1768
- 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
+ }
1769
1782
  if (distance < minDistance) {
1770
- closestHandles = [handle];
1783
+ closestHandles = [{ ...handle, x, y }];
1784
+ minDistance = distance;
1771
1785
  }
1772
1786
  else if (distance === minDistance) {
1773
1787
  // when multiple handles are on the same distance we collect all of them
1774
- closestHandles.push(handle);
1788
+ closestHandles.push({ ...handle, x, y });
1775
1789
  }
1776
- minDistance = distance;
1777
1790
  }
1778
1791
  }
1779
1792
  if (!closestHandles.length) {
1780
1793
  return null;
1781
1794
  }
1782
- return closestHandles.length === 1
1783
- ? closestHandles[0]
1784
- : // 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
1785
- closestHandles.find((handle) => handle.type === 'target') || closestHandles[0];
1786
- }
1787
- function getHandleLookup({ nodeLookup, nodeId, handleId, handleType, }) {
1788
- const connectionHandles = new Map();
1789
- const currentHandle = { nodeId, handleId, handleType };
1790
- let matchingHandle = null;
1791
- for (const node of nodeLookup.values()) {
1792
- if (node.internals.handleBounds) {
1793
- const [sourceHandles, excludedSource] = getHandles(node, node.internals.handleBounds, 'source', currentHandle);
1794
- const [targetHandles, excludedTarget] = getHandles(node, node.internals.handleBounds, 'target', currentHandle);
1795
- matchingHandle = matchingHandle ? matchingHandle : excludedSource ?? excludedTarget;
1796
- [...sourceHandles, ...targetHandles].forEach((handle) => connectionHandles.set(`${handle.nodeId}-${handle.type}-${handle.id}`, handle));
1797
- }
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];
1798
1799
  }
1799
- // if the user only works with handles that are type="source" + connectionMode="loose"
1800
- // it happens that we can't find a matching handle. The reason for this is, that the
1801
- // edge don't know about the handles and always assumes that there is source and a target.
1802
- // In this case we need to find the matching handle by switching the handleType
1803
- if (!matchingHandle) {
1804
- const node = nodeLookup.get(nodeId);
1805
- if (node?.internals.handleBounds) {
1806
- currentHandle.handleType = handleType === 'source' ? 'target' : 'source';
1807
- const [, excluded] = getHandles(node, node.internals.handleBounds, currentHandle.handleType, currentHandle);
1808
- matchingHandle = excluded;
1809
- }
1800
+ return closestHandles[0];
1801
+ }
1802
+ function getHandle(nodeId, handleType, handleId, nodeLookup, withAbsolutePosition = false) {
1803
+ const node = nodeLookup.get(nodeId);
1804
+ if (!node) {
1805
+ return null;
1810
1806
  }
1811
- return [connectionHandles, matchingHandle];
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;
1812
1812
  }
1813
1813
  function getHandleType(edgeUpdaterType, handleDomNode) {
1814
1814
  if (edgeUpdaterType) {
@@ -1846,17 +1846,15 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1846
1846
  if (!containerBounds || !handleType) {
1847
1847
  return;
1848
1848
  }
1849
+ const fromHandleInternal = getHandle(nodeId, handleType, handleId, nodeLookup);
1850
+ if (!fromHandleInternal) {
1851
+ return;
1852
+ }
1849
1853
  let position = getEventPosition(event, containerBounds);
1850
1854
  let autoPanStarted = false;
1851
1855
  let connection = null;
1852
1856
  let isValid = false;
1853
1857
  let handleDomNode = null;
1854
- const [handleLookup, fromHandleInternal] = getHandleLookup({
1855
- nodeLookup,
1856
- nodeId,
1857
- handleId,
1858
- handleType,
1859
- });
1860
1858
  // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas
1861
1859
  function autoPan() {
1862
1860
  if (!autoPanOnConnect || !containerBounds) {
@@ -1897,7 +1895,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1897
1895
  }
1898
1896
  const transform = getTransform();
1899
1897
  position = getEventPosition(event, containerBounds);
1900
- closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, handleLookup);
1898
+ closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, nodeLookup, fromHandle);
1901
1899
  if (!autoPanStarted) {
1902
1900
  autoPan();
1903
1901
  autoPanStarted = true;
@@ -1912,7 +1910,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1912
1910
  doc,
1913
1911
  lib,
1914
1912
  flowId,
1915
- handleLookup,
1913
+ nodeLookup,
1916
1914
  });
1917
1915
  handleDomNode = result.handleDomNode;
1918
1916
  connection = result.connection;
@@ -1936,7 +1934,9 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1936
1934
  newConnection.toHandle &&
1937
1935
  previousConnection.toHandle.type === newConnection.toHandle.type &&
1938
1936
  previousConnection.toHandle.nodeId === newConnection.toHandle.nodeId &&
1939
- 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) {
1940
1940
  return;
1941
1941
  }
1942
1942
  updateConnection(newConnection);
@@ -1948,9 +1948,15 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1948
1948
  }
1949
1949
  // it's important to get a fresh reference from the store here
1950
1950
  // in order to get the latest state of onConnectEnd
1951
- 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);
1952
1958
  if (edgeUpdaterType) {
1953
- onReconnectEnd?.(event);
1959
+ onReconnectEnd?.(event, finalConnectionState);
1954
1960
  }
1955
1961
  cancelConnection();
1956
1962
  cancelAnimationFrame(autoPanId);
@@ -1969,7 +1975,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1969
1975
  doc.addEventListener('touchend', onPointerUp);
1970
1976
  }
1971
1977
  // checks if and returns connection in fom of an object { source: 123, target: 312 }
1972
- 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, }) {
1973
1979
  const isTarget = fromType === 'target';
1974
1980
  const handleDomNode = handle
1975
1981
  ? doc.querySelector(`.${lib}-flow__handle[data-id="${flowId}-${handle?.nodeId}-${handle?.id}-${handle?.type}"]`)
@@ -1991,7 +1997,7 @@ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId
1991
1997
  const handleId = handleToCheck.getAttribute('data-handleid');
1992
1998
  const connectable = handleToCheck.classList.contains('connectable');
1993
1999
  const connectableEnd = handleToCheck.classList.contains('connectableend');
1994
- if (!handleNodeId) {
2000
+ if (!handleNodeId || !handleType) {
1995
2001
  return result;
1996
2002
  }
1997
2003
  const connection = {
@@ -2008,12 +2014,7 @@ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId
2008
2014
  ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target')
2009
2015
  : handleNodeId !== fromNodeId || handleId !== fromHandleId);
2010
2016
  result.isValid = isValid && isValidConnection(connection);
2011
- const toHandle = handleLookup?.get(`${handleNodeId}-${handleType}-${handleId}`);
2012
- if (toHandle) {
2013
- result.toHandle = {
2014
- ...toHandle,
2015
- };
2016
- }
2017
+ result.toHandle = getHandle(handleNodeId, handleType, handleId, nodeLookup, false);
2017
2018
  }
2018
2019
  return result;
2019
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
  }
@@ -1744,71 +1744,71 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
1744
1744
  };
1745
1745
  }
1746
1746
 
1747
- // this functions collects all handles and adds an absolute position
1748
- // so that we can later find the closest handle to the mouse position
1749
- function getHandles(node, handleBounds, type, currentHandle) {
1750
- let excludedHandle = null;
1751
- const handles = (handleBounds[type] || []).reduce((res, handle) => {
1752
- if (node.id === currentHandle.nodeId && type === currentHandle.handleType && handle.id === currentHandle.handleId) {
1753
- excludedHandle = handle;
1754
- }
1755
- else {
1756
- const handleXY = getHandlePosition(node, handle, handle.position, true);
1757
- 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);
1758
1758
  }
1759
- return res;
1760
- }, []);
1761
- return [handles, excludedHandle];
1759
+ }
1760
+ return nodes;
1762
1761
  }
1763
- function getClosestHandle(pos, connectionRadius, handleLookup) {
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) {
1764
1766
  let closestHandles = [];
1765
1767
  let minDistance = Infinity;
1766
- for (const handle of handleLookup.values()) {
1767
- const distance = Math.sqrt(Math.pow(handle.x - pos.x, 2) + Math.pow(handle.y - pos.y, 2));
1768
- 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
+ }
1769
1782
  if (distance < minDistance) {
1770
- closestHandles = [handle];
1783
+ closestHandles = [{ ...handle, x, y }];
1784
+ minDistance = distance;
1771
1785
  }
1772
1786
  else if (distance === minDistance) {
1773
1787
  // when multiple handles are on the same distance we collect all of them
1774
- closestHandles.push(handle);
1788
+ closestHandles.push({ ...handle, x, y });
1775
1789
  }
1776
- minDistance = distance;
1777
1790
  }
1778
1791
  }
1779
1792
  if (!closestHandles.length) {
1780
1793
  return null;
1781
1794
  }
1782
- return closestHandles.length === 1
1783
- ? closestHandles[0]
1784
- : // 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
1785
- closestHandles.find((handle) => handle.type === 'target') || closestHandles[0];
1786
- }
1787
- function getHandleLookup({ nodeLookup, nodeId, handleId, handleType, }) {
1788
- const connectionHandles = new Map();
1789
- const currentHandle = { nodeId, handleId, handleType };
1790
- let matchingHandle = null;
1791
- for (const node of nodeLookup.values()) {
1792
- if (node.internals.handleBounds) {
1793
- const [sourceHandles, excludedSource] = getHandles(node, node.internals.handleBounds, 'source', currentHandle);
1794
- const [targetHandles, excludedTarget] = getHandles(node, node.internals.handleBounds, 'target', currentHandle);
1795
- matchingHandle = matchingHandle ? matchingHandle : excludedSource ?? excludedTarget;
1796
- [...sourceHandles, ...targetHandles].forEach((handle) => connectionHandles.set(`${handle.nodeId}-${handle.type}-${handle.id}`, handle));
1797
- }
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];
1798
1799
  }
1799
- // if the user only works with handles that are type="source" + connectionMode="loose"
1800
- // it happens that we can't find a matching handle. The reason for this is, that the
1801
- // edge don't know about the handles and always assumes that there is source and a target.
1802
- // In this case we need to find the matching handle by switching the handleType
1803
- if (!matchingHandle) {
1804
- const node = nodeLookup.get(nodeId);
1805
- if (node?.internals.handleBounds) {
1806
- currentHandle.handleType = handleType === 'source' ? 'target' : 'source';
1807
- const [, excluded] = getHandles(node, node.internals.handleBounds, currentHandle.handleType, currentHandle);
1808
- matchingHandle = excluded;
1809
- }
1800
+ return closestHandles[0];
1801
+ }
1802
+ function getHandle(nodeId, handleType, handleId, nodeLookup, withAbsolutePosition = false) {
1803
+ const node = nodeLookup.get(nodeId);
1804
+ if (!node) {
1805
+ return null;
1810
1806
  }
1811
- return [connectionHandles, matchingHandle];
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;
1812
1812
  }
1813
1813
  function getHandleType(edgeUpdaterType, handleDomNode) {
1814
1814
  if (edgeUpdaterType) {
@@ -1846,17 +1846,15 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1846
1846
  if (!containerBounds || !handleType) {
1847
1847
  return;
1848
1848
  }
1849
+ const fromHandleInternal = getHandle(nodeId, handleType, handleId, nodeLookup);
1850
+ if (!fromHandleInternal) {
1851
+ return;
1852
+ }
1849
1853
  let position = getEventPosition(event, containerBounds);
1850
1854
  let autoPanStarted = false;
1851
1855
  let connection = null;
1852
1856
  let isValid = false;
1853
1857
  let handleDomNode = null;
1854
- const [handleLookup, fromHandleInternal] = getHandleLookup({
1855
- nodeLookup,
1856
- nodeId,
1857
- handleId,
1858
- handleType,
1859
- });
1860
1858
  // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas
1861
1859
  function autoPan() {
1862
1860
  if (!autoPanOnConnect || !containerBounds) {
@@ -1897,7 +1895,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1897
1895
  }
1898
1896
  const transform = getTransform();
1899
1897
  position = getEventPosition(event, containerBounds);
1900
- closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, handleLookup);
1898
+ closestHandle = getClosestHandle(pointToRendererPoint(position, transform, false, [1, 1]), connectionRadius, nodeLookup, fromHandle);
1901
1899
  if (!autoPanStarted) {
1902
1900
  autoPan();
1903
1901
  autoPanStarted = true;
@@ -1912,7 +1910,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1912
1910
  doc,
1913
1911
  lib,
1914
1912
  flowId,
1915
- handleLookup,
1913
+ nodeLookup,
1916
1914
  });
1917
1915
  handleDomNode = result.handleDomNode;
1918
1916
  connection = result.connection;
@@ -1936,7 +1934,9 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1936
1934
  newConnection.toHandle &&
1937
1935
  previousConnection.toHandle.type === newConnection.toHandle.type &&
1938
1936
  previousConnection.toHandle.nodeId === newConnection.toHandle.nodeId &&
1939
- 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) {
1940
1940
  return;
1941
1941
  }
1942
1942
  updateConnection(newConnection);
@@ -1948,9 +1948,15 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1948
1948
  }
1949
1949
  // it's important to get a fresh reference from the store here
1950
1950
  // in order to get the latest state of onConnectEnd
1951
- 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);
1952
1958
  if (edgeUpdaterType) {
1953
- onReconnectEnd?.(event);
1959
+ onReconnectEnd?.(event, finalConnectionState);
1954
1960
  }
1955
1961
  cancelConnection();
1956
1962
  cancelAnimationFrame(autoPanId);
@@ -1969,7 +1975,7 @@ function onPointerDown(event, { connectionMode, connectionRadius, handleId, node
1969
1975
  doc.addEventListener('touchend', onPointerUp);
1970
1976
  }
1971
1977
  // checks if and returns connection in fom of an object { source: 123, target: 312 }
1972
- 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, }) {
1973
1979
  const isTarget = fromType === 'target';
1974
1980
  const handleDomNode = handle
1975
1981
  ? doc.querySelector(`.${lib}-flow__handle[data-id="${flowId}-${handle?.nodeId}-${handle?.id}-${handle?.type}"]`)
@@ -1991,7 +1997,7 @@ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId
1991
1997
  const handleId = handleToCheck.getAttribute('data-handleid');
1992
1998
  const connectable = handleToCheck.classList.contains('connectable');
1993
1999
  const connectableEnd = handleToCheck.classList.contains('connectableend');
1994
- if (!handleNodeId) {
2000
+ if (!handleNodeId || !handleType) {
1995
2001
  return result;
1996
2002
  }
1997
2003
  const connection = {
@@ -2008,12 +2014,7 @@ function isValidHandle(event, { handle, connectionMode, fromNodeId, fromHandleId
2008
2014
  ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target')
2009
2015
  : handleNodeId !== fromNodeId || handleId !== fromHandleId);
2010
2016
  result.isValid = isValid && isValidConnection(connection);
2011
- const toHandle = handleLookup?.get(`${handleNodeId}-${handleType}-${handleId}`);
2012
- if (toHandle) {
2013
- result.toHandle = {
2014
- ...toHandle,
2015
- };
2016
- }
2017
+ result.toHandle = getHandle(handleNodeId, handleType, handleId, nodeLookup, false);
2017
2018
  }
2018
2019
  return result;
2019
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":"AAaA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,OAAO,EACP,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACb,MAAM,UAAU,CAAC;AAGlB;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,kDAAmD,GAAG,wBACd,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,kDAAmD,GAAG,wBACiB,CAAC;AAE/F,eAAO,MAAM,kBAAkB,kEACpB,GAAG,wBACyG,CAAC;AAExH;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,qFAChB,QAAQ,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,SACxB,QAAQ,EAAE,SACV,QAAQ,EAAE,KAChB,QAAQ,EAaV,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,qFAChB,QAAQ,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,SACxB,QAAQ,EAAE,SACV,QAAQ,EAAE,KAChB,QAAQ,EAYV,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAAU,QAAQ,8BAAoC,UAU3F,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,UAAW,QAAQ,EAAE,WAAU,oBAAoB,KAA4B,IAczG,CAAC;AAEF,MAAM,MAAM,4BAA4B,CAAC,QAAQ,IAAI;IACnD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,iEACrB,IAAI,MAAM,EAAE,QAAQ,CAAC,WACzB,6BAA6B,QAAQ,CAAC,KAC7C,IAeF,CAAC;AAEF,eAAO,MAAM,cAAc,gDAClB,IAAI,MAAM,EAAE,iBAAiB,QAAQ,CAAC,CAAC,QACxC,IAAI,6FAKT,iBAAiB,QAAQ,CAAC,EAgC5B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,sFACrB,QAAQ,EAAE,SACV,QAAQ,EAAE,KAChB,QAAQ,EAOV,CAAC;AAEF,wBAAgB,eAAe,CAC7B,MAAM,SAAS,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EACrD,OAAO,SAAS,kBAAkB,CAAC,QAAQ,CAAC,EAC5C,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,CAAC,cAa5E;AAED,wBAAsB,OAAO,CAAC,MAAM,SAAS,iBAAiB,CAAC,QAAQ,CAAC,EAAE,OAAO,SAAS,kBAAkB,CAAC,QAAQ,CAAC,EACpH,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAC3D,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,CAAC,GACtD,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAoBD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,SAAS,QAAQ,EAAE,EAC/D,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAmB,EACnB,UAAU,EACV,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,gBAAgB,EAAE,UAAU,CAAA;CAAE,CA2CzD;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,SAAS,QAAQ,GAAG,QAAQ,EAAE,QAAQ,SAAS,QAAQ,GAAG,QAAQ,EAAE,EACpH,aAAkB,EAClB,aAAkB,EAClB,KAAK,EACL,KAAK,EACL,cAAc,GACf,EAAE;IACD,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IACnC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;CACzD,GAAG,OAAO,CAAC;IACV,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB,CAAC,CA+CD"}
@@ -1 +1 @@
1
- {"version":3,"file":"XYHandle.d.ts","sourceRoot":"","sources":["../../src/xyhandle/XYHandle.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA8C,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAsRvF,eAAO,MAAM,QAAQ,EAAE,gBAGtB,CAAC"}
1
+ {"version":3,"file":"XYHandle.d.ts","sourceRoot":"","sources":["../../src/xyhandle/XYHandle.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA8C,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAuRvF,eAAO,MAAM,QAAQ,EAAE,gBAGtB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ConnectionMode, type Connection, type OnConnect, type OnConnectStart, type HandleType, type PanBy, type Transform, type Handle, type OnConnectEnd, type UpdateConnection, type IsValidConnection, NodeLookup } from '../types';
1
+ import { ConnectionMode, type Connection, type OnConnect, type OnConnectStart, type HandleType, type PanBy, type Transform, type Handle, type OnConnectEnd, type UpdateConnection, type IsValidConnection, NodeLookup, FinalConnectionState } from '../types';
2
2
  export type OnPointerDownParams = {
3
3
  autoPanOnConnect: boolean;
4
4
  connectionMode: ConnectionMode;
@@ -18,7 +18,7 @@ export type OnPointerDownParams = {
18
18
  onConnect?: OnConnect;
19
19
  onConnectEnd?: OnConnectEnd;
20
20
  isValidConnection?: IsValidConnection;
21
- onReconnectEnd?: (evt: MouseEvent | TouchEvent) => void;
21
+ onReconnectEnd?: (evt: MouseEvent | TouchEvent, connectionState: FinalConnectionState) => void;
22
22
  getTransform: () => Transform;
23
23
  getFromHandle: () => Handle | null;
24
24
  autoPanSpeed?: number;
@@ -33,7 +33,7 @@ export type IsValidParams = {
33
33
  doc: Document | ShadowRoot;
34
34
  lib: string;
35
35
  flowId: string | null;
36
- handleLookup?: Map<string, Handle>;
36
+ nodeLookup: NodeLookup;
37
37
  };
38
38
  export type XYHandleInstance = {
39
39
  onPointerDown: (event: MouseEvent | TouchEvent, params: OnPointerDownParams) => void;