@uipath/apollo-react 4.17.0 → 4.18.1

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.
Files changed (71) hide show
  1. package/dist/canvas/components/AddNodePanel/AddNodeManager.cjs +35 -21
  2. package/dist/canvas/components/AddNodePanel/AddNodeManager.d.ts.map +1 -1
  3. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.cjs +208 -0
  4. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.d.ts +20 -0
  5. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.d.ts.map +1 -0
  6. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.js +168 -0
  7. package/dist/canvas/components/AddNodePanel/AddNodeManager.js +35 -21
  8. package/dist/canvas/components/AddNodePanel/createAddNodePreview.cjs +34 -4
  9. package/dist/canvas/components/AddNodePanel/createAddNodePreview.d.ts +5 -1
  10. package/dist/canvas/components/AddNodePanel/createAddNodePreview.d.ts.map +1 -1
  11. package/dist/canvas/components/AddNodePanel/createAddNodePreview.js +34 -4
  12. package/dist/canvas/components/AddNodePanel/index.d.ts +1 -1
  13. package/dist/canvas/components/AddNodePanel/index.d.ts.map +1 -1
  14. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.cjs +23 -1
  15. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts.map +1 -1
  16. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.js +23 -1
  17. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.cjs +0 -14
  18. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.d.ts.map +1 -1
  19. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.js +2 -16
  20. package/dist/canvas/components/LoopNode/LoopNode.cjs +38 -32
  21. package/dist/canvas/components/LoopNode/LoopNode.d.ts.map +1 -1
  22. package/dist/canvas/components/LoopNode/LoopNode.helpers.cjs +33 -42
  23. package/dist/canvas/components/LoopNode/LoopNode.helpers.d.ts +9 -10
  24. package/dist/canvas/components/LoopNode/LoopNode.helpers.d.ts.map +1 -1
  25. package/dist/canvas/components/LoopNode/LoopNode.helpers.js +25 -31
  26. package/dist/canvas/components/LoopNode/LoopNode.js +30 -24
  27. package/dist/canvas/components/LoopNode/LoopNodePreview.cjs +20 -5
  28. package/dist/canvas/components/LoopNode/LoopNodePreview.d.ts.map +1 -1
  29. package/dist/canvas/components/LoopNode/LoopNodePreview.js +20 -5
  30. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.cjs +26 -14
  31. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.d.ts.map +1 -1
  32. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.js +26 -14
  33. package/dist/canvas/constants.cjs +0 -8
  34. package/dist/canvas/constants.d.ts +0 -2
  35. package/dist/canvas/constants.d.ts.map +1 -1
  36. package/dist/canvas/constants.js +1 -3
  37. package/dist/canvas/hooks/useAddNodeOnConnectEnd.cjs +4 -2
  38. package/dist/canvas/hooks/useAddNodeOnConnectEnd.d.ts.map +1 -1
  39. package/dist/canvas/hooks/useAddNodeOnConnectEnd.js +4 -2
  40. package/dist/canvas/storybook-utils/hooks/useCanvasStory.d.ts.map +1 -1
  41. package/dist/canvas/storybook-utils/manifests/node-definitions.d.ts.map +1 -1
  42. package/dist/canvas/storybook-utils/mocks/nodes.d.ts +6 -6
  43. package/dist/canvas/storybook-utils/mocks/nodes.d.ts.map +1 -1
  44. package/dist/canvas/utils/NodeUtils.cjs +41 -13
  45. package/dist/canvas/utils/NodeUtils.d.ts +12 -1
  46. package/dist/canvas/utils/NodeUtils.d.ts.map +1 -1
  47. package/dist/canvas/utils/NodeUtils.js +28 -9
  48. package/dist/canvas/utils/collapse.cjs +3 -3
  49. package/dist/canvas/utils/collapse.d.ts.map +1 -1
  50. package/dist/canvas/utils/collapse.js +1 -1
  51. package/dist/canvas/utils/container.cjs +670 -0
  52. package/dist/canvas/utils/container.d.ts +110 -0
  53. package/dist/canvas/utils/container.d.ts.map +1 -0
  54. package/dist/canvas/utils/container.js +591 -0
  55. package/dist/canvas/utils/createPreviewGraph.cjs +25 -15
  56. package/dist/canvas/utils/createPreviewGraph.d.ts +11 -7
  57. package/dist/canvas/utils/createPreviewGraph.d.ts.map +1 -1
  58. package/dist/canvas/utils/createPreviewGraph.js +25 -15
  59. package/dist/canvas/utils/createPreviewNode.cjs +24 -15
  60. package/dist/canvas/utils/createPreviewNode.d.ts +21 -7
  61. package/dist/canvas/utils/createPreviewNode.d.ts.map +1 -1
  62. package/dist/canvas/utils/createPreviewNode.js +24 -15
  63. package/dist/canvas/utils/index.cjs +29 -22
  64. package/dist/canvas/utils/index.d.ts +1 -0
  65. package/dist/canvas/utils/index.d.ts.map +1 -1
  66. package/dist/canvas/utils/index.js +1 -0
  67. package/package.json +3 -3
  68. package/dist/canvas/components/LoopNode/LoopNode.constants.cjs +0 -56
  69. package/dist/canvas/components/LoopNode/LoopNode.constants.d.ts +0 -7
  70. package/dist/canvas/components/LoopNode/LoopNode.constants.d.ts.map +0 -1
  71. package/dist/canvas/components/LoopNode/LoopNode.constants.js +0 -7
@@ -32,8 +32,9 @@ const external_react_namespaceObject = require("react");
32
32
  const external_constants_cjs_namespaceObject = require("../../constants.cjs");
33
33
  const index_cjs_namespaceObject = require("../../core/index.cjs");
34
34
  const usePreviewNode_cjs_namespaceObject = require("../../hooks/usePreviewNode.cjs");
35
- const external_utils_index_cjs_namespaceObject = require("../../utils/index.cjs");
35
+ const createPreviewNode_cjs_namespaceObject = require("../../utils/createPreviewNode.cjs");
36
36
  const external_FloatingCanvasPanel_index_cjs_namespaceObject = require("../FloatingCanvasPanel/index.cjs");
37
+ const external_AddNodeManager_helpers_cjs_namespaceObject = require("./AddNodeManager.helpers.cjs");
37
38
  const external_AddNodePanel_cjs_namespaceObject = require("./AddNodePanel.cjs");
38
39
  const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData, onBeforeNodeAdded, onNodeAdded, ignoredNodeTypes })=>{
39
40
  const reactFlowInstance = (0, react_cjs_namespaceObject.useReactFlow)();
@@ -45,15 +46,20 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
45
46
  if (!previewNode && lastPreviewNodeRef.current) {
46
47
  reactFlowInstance.setNodes((nodes)=>nodes.filter((n)=>n.id !== external_constants_cjs_namespaceObject.PREVIEW_NODE_ID));
47
48
  reactFlowInstance.setEdges((edges)=>{
48
- const filteredEdges = edges.filter((e)=>e.source !== external_constants_cjs_namespaceObject.PREVIEW_NODE_ID && e.target !== external_constants_cjs_namespaceObject.PREVIEW_NODE_ID);
49
- return restoreEdgesRef.current ? [
49
+ const filteredEdges = edges.filter((edge)=>!(0, createPreviewNode_cjs_namespaceObject.isPreviewEdge)(edge));
50
+ const restoredEdges = restoreEdgesRef.current ? [
50
51
  ...filteredEdges,
51
52
  ...restoreEdgesRef.current
52
53
  ] : filteredEdges;
54
+ restoreEdgesRef.current = null;
55
+ return restoredEdges;
53
56
  });
54
- } else if (previewNode && !restoreEdgesRef.current) restoreEdgesRef.current = previewNode.data.originalEdge ? [
55
- previewNode.data.originalEdge
56
- ] : null;
57
+ } else if (previewNode && !restoreEdgesRef.current) {
58
+ const originalEdge = (0, external_AddNodeManager_helpers_cjs_namespaceObject.getOriginalEdge)(previewNode);
59
+ restoreEdgesRef.current = originalEdge ? [
60
+ originalEdge
61
+ ] : null;
62
+ }
57
63
  lastPreviewNodeRef.current = previewNode || null;
58
64
  }, [
59
65
  previewNode,
@@ -83,17 +89,17 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
83
89
  parentId: currentPreviewNode.parentId,
84
90
  extent: currentPreviewNode.extent
85
91
  } : {};
86
- const newNode = {
92
+ const newNodeManifest = registry?.getManifest(nodeItem.data.type);
93
+ const newNode = (0, external_AddNodeManager_helpers_cjs_namespaceObject.alignNodeToPreview)({
87
94
  id: newNodeId,
88
95
  type: nodeItem.data.type,
89
96
  position: currentPreviewNode.position,
90
97
  selected: true,
91
98
  data: nodeData,
92
99
  ...previewNodeScope
93
- };
94
- const newNodeManifest = registry?.getManifest(nodeItem.data.type);
100
+ }, currentPreviewNode, previewNodeConnectionInfo, newNodeManifest);
95
101
  const newEdges = [];
96
- const previewEdgeIds = [];
102
+ const previewEdgeIds = new Set();
97
103
  for (const connectionInfoItem of previewNodeConnectionInfo){
98
104
  const newNodeHandleType = connectionInfoItem.addNewNodeAsSource ? 'source' : 'target';
99
105
  const newNodeDefaultHandle = newNodeManifest ? registry?.getDefaultHandle(newNodeManifest.nodeType, newNodeHandleType) : void 0;
@@ -115,12 +121,14 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
115
121
  ...edgeSourceTargetData,
116
122
  type: 'default'
117
123
  });
118
- previewEdgeIds.push(connectionInfoItem.previewEdgeId);
124
+ previewEdgeIds.add(connectionInfoItem.previewEdgeId);
119
125
  }
120
126
  const { newNode: finalNode, newEdges: finalEdges } = onBeforeNodeAdded?.(newNode, newEdges) ?? {
121
127
  newNode,
122
128
  newEdges
123
129
  };
130
+ const placementEdges = reactFlowInstance.getEdges();
131
+ let placedNode = finalNode;
124
132
  reactFlowInstance.setNodes((nodes)=>{
125
133
  const newNodes = [
126
134
  ...nodes.filter((n)=>n.id !== external_constants_cjs_namespaceObject.PREVIEW_NODE_ID).map((n)=>({
@@ -129,28 +137,35 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
129
137
  })),
130
138
  finalNode
131
139
  ];
132
- return (0, external_utils_index_cjs_namespaceObject.resolveCollisions)(newNodes, {
140
+ const placement = (0, external_AddNodeManager_helpers_cjs_namespaceObject.placeAddedNode)({
141
+ nodes: newNodes,
142
+ edges: placementEdges,
143
+ previewNode: currentPreviewNode,
144
+ insertedNode: finalNode,
145
+ registry,
133
146
  ignoredNodeTypes
134
147
  });
148
+ placedNode = placement.insertedNode;
149
+ return placement.nodes;
135
150
  });
136
151
  reactFlowInstance.setEdges((edges)=>[
137
- ...edges.filter((e)=>!previewEdgeIds.includes(e.id)),
152
+ ...edges.filter((edge)=>!previewEdgeIds.has(edge.id) && !(0, createPreviewNode_cjs_namespaceObject.isPreviewEdge)(edge)),
138
153
  ...finalEdges
139
154
  ]);
155
+ restoreEdgesRef.current = null;
140
156
  const [firstConnection] = previewNodeConnectionInfo;
141
157
  if (firstConnection) {
142
- const firstEdgeSourceHandle = firstConnection.addNewNodeAsSource ? newNodeManifest && registry?.getDefaultHandle(newNodeManifest.nodeType, 'source')?.id : firstConnection.existingHandleId;
158
+ const firstMaterializedEdge = finalEdges.find((edge)=>edge.source === placedNode.id || edge.target === placedNode.id);
143
159
  const firstEdgeData = firstConnection.addNewNodeAsSource ? {
144
- source: finalNode.id,
145
- sourceHandle: firstEdgeSourceHandle ?? 'output'
160
+ source: placedNode.id,
161
+ sourceHandle: firstMaterializedEdge?.sourceHandle ?? 'output'
146
162
  } : {
147
163
  source: firstConnection.existingNodeId,
148
164
  sourceHandle: firstConnection.existingHandleId
149
165
  };
150
- onNodeAdded?.(firstEdgeData.source, firstEdgeData.sourceHandle, finalNode);
166
+ onNodeAdded?.(firstEdgeData.source, firstEdgeData.sourceHandle, placedNode);
151
167
  }
152
- restoreEdgesRef.current = null;
153
- handleClose();
168
+ lastPreviewNodeRef.current = null;
154
169
  }, [
155
170
  previewNodeConnectionInfo,
156
171
  reactFlowInstance,
@@ -158,8 +173,7 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
158
173
  createNodeData,
159
174
  onBeforeNodeAdded,
160
175
  onNodeAdded,
161
- ignoredNodeTypes,
162
- handleClose
176
+ ignoredNodeTypes
163
177
  ]);
164
178
  if (!previewNode || !previewNodeConnectionInfo || 0 === previewNodeConnectionInfo.length) return null;
165
179
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_FloatingCanvasPanel_index_cjs_namespaceObject.FloatingCanvasPanel, {
@@ -1 +1 @@
1
- {"version":3,"file":"AddNodeManager.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/AddNodeManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAE3E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAKlC,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC;IAI7E,YAAY,CAAC,EAAE,OAAO,CAAC;IAIvB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAK7F,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC;IAOtE,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IAK7F,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;IAMpF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AASD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyMxD,CAAC"}
1
+ {"version":3,"file":"AddNodeManager.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/AddNodeManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAE3E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAKlC,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC;IAI7E,YAAY,CAAC,EAAE,OAAO,CAAC;IAIvB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAK7F,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC;IAOtE,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IAK7F,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;IAMpF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AASD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyNxD,CAAC"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ getOriginalEdge: ()=>getOriginalEdge,
28
+ placeAddedNode: ()=>placeAddedNode,
29
+ alignNodeToPreview: ()=>alignNodeToPreview
30
+ });
31
+ const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
32
+ const external_constants_cjs_namespaceObject = require("../../constants.cjs");
33
+ const index_cjs_namespaceObject = require("../../utils/index.cjs");
34
+ const collapse_cjs_namespaceObject = require("../../utils/collapse.cjs");
35
+ const container_cjs_namespaceObject = require("../../utils/container.cjs");
36
+ const NodeUtils_cjs_namespaceObject = require("../../utils/NodeUtils.cjs");
37
+ const TOP_LEVEL_INSERTION_GAP_PX = 5 * external_constants_cjs_namespaceObject.GRID_SPACING;
38
+ function getOriginalEdge(previewNode) {
39
+ return previewNode?.data?.originalEdge ?? null;
40
+ }
41
+ function getManifestForNode(registry, node) {
42
+ return node.type ? registry?.getManifest(node.type) : void 0;
43
+ }
44
+ function getManifestAwareNodeDimensions(registry, node) {
45
+ const manifest = getManifestForNode(registry, node);
46
+ return (0, container_cjs_namespaceObject.getNodeDimensions)(node, (0, collapse_cjs_namespaceObject.getExpandedSize)(manifest?.display.shape));
47
+ }
48
+ function getPrimaryPreviewHandlePosition(previewNode, previewConnections) {
49
+ const primaryConnection = previewConnections.find((connection)=>!connection.addNewNodeAsSource) ?? previewConnections[0];
50
+ const handlePosition = primaryConnection?.addNewNodeAsSource ? previewNode.data?.outputHandlePosition : previewNode.data?.inputHandlePosition;
51
+ return handlePosition;
52
+ }
53
+ function alignNodeToPreview(node, previewNode, previewConnections, nodeManifest) {
54
+ const previewSize = (0, container_cjs_namespaceObject.getNodeDimensions)(previewNode);
55
+ const nodeSize = (0, container_cjs_namespaceObject.getNodeDimensions)(node, (0, collapse_cjs_namespaceObject.getExpandedSize)(nodeManifest?.display.shape));
56
+ if (previewSize.width === nodeSize.width && previewSize.height === nodeSize.height) return node;
57
+ const previewHandlePosition = getPrimaryPreviewHandlePosition(previewNode, previewConnections);
58
+ const previewCenterX = previewNode.position.x + previewSize.width / 2;
59
+ const previewCenterY = previewNode.position.y + previewSize.height / 2;
60
+ if (previewHandlePosition === react_cjs_namespaceObject.Position.Left) return {
61
+ ...node,
62
+ position: {
63
+ x: previewNode.position.x,
64
+ y: previewCenterY - nodeSize.height / 2
65
+ }
66
+ };
67
+ if (previewHandlePosition === react_cjs_namespaceObject.Position.Right) return {
68
+ ...node,
69
+ position: {
70
+ x: previewNode.position.x + previewSize.width - nodeSize.width,
71
+ y: previewCenterY - nodeSize.height / 2
72
+ }
73
+ };
74
+ if (previewHandlePosition === react_cjs_namespaceObject.Position.Top) return {
75
+ ...node,
76
+ position: {
77
+ x: previewCenterX - nodeSize.width / 2,
78
+ y: previewNode.position.y
79
+ }
80
+ };
81
+ if (previewHandlePosition === react_cjs_namespaceObject.Position.Bottom) return {
82
+ ...node,
83
+ position: {
84
+ x: previewCenterX - nodeSize.width / 2,
85
+ y: previewNode.position.y + previewSize.height - nodeSize.height
86
+ }
87
+ };
88
+ return {
89
+ ...node,
90
+ position: {
91
+ x: previewCenterX - nodeSize.width / 2,
92
+ y: previewCenterY - nodeSize.height / 2
93
+ }
94
+ };
95
+ }
96
+ function resolveScopedCollisions(nodes, insertedNode, options) {
97
+ const siblingNodes = nodes.filter((node)=>node.parentId === insertedNode.parentId);
98
+ const resolvedSiblings = (0, index_cjs_namespaceObject.resolveCollisions)(siblingNodes, {
99
+ ignoredNodeTypes: options.ignoredNodeTypes,
100
+ getNodeSize: options.getNodeSize
101
+ });
102
+ const resolvedSiblingById = new Map(resolvedSiblings.map((node)=>[
103
+ node.id,
104
+ node
105
+ ]));
106
+ const resolvedNodes = nodes.map((node)=>resolvedSiblingById.get(node.id) ?? node);
107
+ return {
108
+ nodes: resolvedNodes,
109
+ insertedNode: resolvedSiblingById.get(insertedNode.id)
110
+ };
111
+ }
112
+ function shiftForEdgeInsertion({ nodes, edges, previewNode, insertedNode, getNodeSize }) {
113
+ const originalEdge = getOriginalEdge(previewNode);
114
+ if (!originalEdge) return null;
115
+ const targetNode = nodes.find((node)=>node.id === originalEdge.target);
116
+ if (!targetNode || targetNode.parentId !== insertedNode.parentId) return null;
117
+ const insertedSize = getNodeSize(insertedNode);
118
+ let insertedX = insertedNode.position.x;
119
+ const sourceNode = nodes.find((node)=>node.id === originalEdge.source);
120
+ if (sourceNode && sourceNode.parentId === insertedNode.parentId) {
121
+ const sourceSize = getNodeSize(sourceNode);
122
+ const requiredInsertedLeft = sourceNode.position.x + sourceSize.width + TOP_LEVEL_INSERTION_GAP_PX;
123
+ if (insertedX < requiredInsertedLeft) insertedX = (0, NodeUtils_cjs_namespaceObject.snapUpToGrid)(requiredInsertedLeft);
124
+ }
125
+ const requiredTargetLeft = insertedX + insertedSize.width + TOP_LEVEL_INSERTION_GAP_PX;
126
+ const downstreamShift = targetNode.position.x < requiredTargetLeft ? (0, NodeUtils_cjs_namespaceObject.snapUpToGrid)(requiredTargetLeft - targetNode.position.x) : 0;
127
+ const chainIds = downstreamShift > 0 ? new Set((0, container_cjs_namespaceObject.collectLinearDownstreamSiblings)({
128
+ startNodeId: targetNode.id,
129
+ parentId: insertedNode.parentId,
130
+ nodes,
131
+ edges
132
+ })) : new Set();
133
+ const insertedXChanged = insertedX !== insertedNode.position.x;
134
+ if (!insertedXChanged && 0 === downstreamShift) return null;
135
+ const updatedInsertedNode = insertedXChanged ? {
136
+ ...insertedNode,
137
+ position: {
138
+ x: insertedX,
139
+ y: insertedNode.position.y
140
+ }
141
+ } : insertedNode;
142
+ const updatedNodes = nodes.map((node)=>{
143
+ if (node.id === insertedNode.id) return updatedInsertedNode;
144
+ if (chainIds.has(node.id)) return {
145
+ ...node,
146
+ position: {
147
+ x: node.position.x + downstreamShift,
148
+ y: node.position.y
149
+ }
150
+ };
151
+ return node;
152
+ });
153
+ return {
154
+ nodes: updatedNodes,
155
+ insertedNode: updatedInsertedNode
156
+ };
157
+ }
158
+ function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ignoredNodeTypes }) {
159
+ const getDimensions = (node)=>getManifestAwareNodeDimensions(registry, node);
160
+ const placement = (0, container_cjs_namespaceObject.getContainerPlacement)(previewNode);
161
+ if (placement) {
162
+ const containerNode = nodes.find((node)=>node.id === placement.containerId);
163
+ if (!containerNode) return resolveScopedCollisions(nodes, insertedNode, {
164
+ ignoredNodeTypes,
165
+ getNodeSize: getDimensions
166
+ });
167
+ const containerManifest = getManifestForNode(registry, containerNode);
168
+ if (!(0, container_cjs_namespaceObject.isContainerNodeManifest)(containerManifest)) return resolveScopedCollisions(nodes, insertedNode, {
169
+ ignoredNodeTypes,
170
+ getNodeSize: getDimensions
171
+ });
172
+ const resolvedNodes = (0, container_cjs_namespaceObject.placeContainerNode)({
173
+ nodes,
174
+ insertedNode,
175
+ placement,
176
+ edges,
177
+ getNodeDimensions: getDimensions,
178
+ safeArea: (0, container_cjs_namespaceObject.getContainerSafeArea)(containerNode),
179
+ getContainerFitGeometry: (node)=>(0, container_cjs_namespaceObject.isContainerNodeManifest)(getManifestForNode(registry, node)) ? (0, container_cjs_namespaceObject.getContainerFitGeometry)() : null
180
+ });
181
+ return {
182
+ nodes: resolvedNodes,
183
+ insertedNode: resolvedNodes.find((node)=>node.id === insertedNode.id)
184
+ };
185
+ }
186
+ const shifted = shiftForEdgeInsertion({
187
+ nodes,
188
+ edges,
189
+ previewNode,
190
+ insertedNode,
191
+ getNodeSize: getDimensions
192
+ });
193
+ return resolveScopedCollisions(shifted?.nodes ?? nodes, shifted?.insertedNode ?? insertedNode, {
194
+ ignoredNodeTypes,
195
+ getNodeSize: getDimensions
196
+ });
197
+ }
198
+ exports.alignNodeToPreview = __webpack_exports__.alignNodeToPreview;
199
+ exports.getOriginalEdge = __webpack_exports__.getOriginalEdge;
200
+ exports.placeAddedNode = __webpack_exports__.placeAddedNode;
201
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
202
+ "alignNodeToPreview",
203
+ "getOriginalEdge",
204
+ "placeAddedNode"
205
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
206
+ Object.defineProperty(exports, '__esModule', {
207
+ value: true
208
+ });
@@ -0,0 +1,20 @@
1
+ import type { Edge, Node } from '../../xyflow/react.ts';
2
+ import type { NodeTypeRegistry } from '../../core';
3
+ import type { PreviewNodeConnectionInfo } from '../../hooks/usePreviewNode';
4
+ import type { NodeManifest } from '../../schema';
5
+ interface AddNodePlacementResult {
6
+ nodes: Node[];
7
+ insertedNode: Node;
8
+ }
9
+ export declare function getOriginalEdge(previewNode: Node | null | undefined): Edge | null;
10
+ export declare function alignNodeToPreview(node: Node, previewNode: Node, previewConnections: PreviewNodeConnectionInfo[], nodeManifest: NodeManifest | undefined): Node;
11
+ export declare function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ignoredNodeTypes, }: {
12
+ nodes: Node[];
13
+ edges: Edge[];
14
+ previewNode: Node;
15
+ insertedNode: Node;
16
+ registry: NodeTypeRegistry | null;
17
+ ignoredNodeTypes?: string[];
18
+ }): AddNodePlacementResult;
19
+ export {};
20
+ //# sourceMappingURL=AddNodeManager.helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddNodeManager.helpers.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/AddNodeManager.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAG3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAsBjD,UAAU,sBAAsB;IAC9B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,IAAI,CAAC;CACpB;AAMD,wBAAgB,eAAe,CAAC,WAAW,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAEjF;AAmCD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,IAAI,EACjB,kBAAkB,EAAE,yBAAyB,EAAE,EAC/C,YAAY,EAAE,YAAY,GAAG,SAAS,GACrC,IAAI,CA2DN;AAoHD,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,gBAAgB,GACjB,EAAE;IACD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,IAAI,CAAC;IAClB,YAAY,EAAE,IAAI,CAAC;IACnB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,GAAG,sBAAsB,CAsDzB"}
@@ -0,0 +1,168 @@
1
+ import { Position } from "../../xyflow/react.js";
2
+ import { GRID_SPACING } from "../../constants.js";
3
+ import { resolveCollisions } from "../../utils/index.js";
4
+ import { getExpandedSize } from "../../utils/collapse.js";
5
+ import { collectLinearDownstreamSiblings, getContainerFitGeometry, getContainerPlacement, getContainerSafeArea, getNodeDimensions, isContainerNodeManifest, placeContainerNode } from "../../utils/container.js";
6
+ import { snapUpToGrid } from "../../utils/NodeUtils.js";
7
+ const TOP_LEVEL_INSERTION_GAP_PX = 5 * GRID_SPACING;
8
+ function getOriginalEdge(previewNode) {
9
+ return previewNode?.data?.originalEdge ?? null;
10
+ }
11
+ function getManifestForNode(registry, node) {
12
+ return node.type ? registry?.getManifest(node.type) : void 0;
13
+ }
14
+ function getManifestAwareNodeDimensions(registry, node) {
15
+ const manifest = getManifestForNode(registry, node);
16
+ return getNodeDimensions(node, getExpandedSize(manifest?.display.shape));
17
+ }
18
+ function getPrimaryPreviewHandlePosition(previewNode, previewConnections) {
19
+ const primaryConnection = previewConnections.find((connection)=>!connection.addNewNodeAsSource) ?? previewConnections[0];
20
+ const handlePosition = primaryConnection?.addNewNodeAsSource ? previewNode.data?.outputHandlePosition : previewNode.data?.inputHandlePosition;
21
+ return handlePosition;
22
+ }
23
+ function alignNodeToPreview(node, previewNode, previewConnections, nodeManifest) {
24
+ const previewSize = getNodeDimensions(previewNode);
25
+ const nodeSize = getNodeDimensions(node, getExpandedSize(nodeManifest?.display.shape));
26
+ if (previewSize.width === nodeSize.width && previewSize.height === nodeSize.height) return node;
27
+ const previewHandlePosition = getPrimaryPreviewHandlePosition(previewNode, previewConnections);
28
+ const previewCenterX = previewNode.position.x + previewSize.width / 2;
29
+ const previewCenterY = previewNode.position.y + previewSize.height / 2;
30
+ if (previewHandlePosition === Position.Left) return {
31
+ ...node,
32
+ position: {
33
+ x: previewNode.position.x,
34
+ y: previewCenterY - nodeSize.height / 2
35
+ }
36
+ };
37
+ if (previewHandlePosition === Position.Right) return {
38
+ ...node,
39
+ position: {
40
+ x: previewNode.position.x + previewSize.width - nodeSize.width,
41
+ y: previewCenterY - nodeSize.height / 2
42
+ }
43
+ };
44
+ if (previewHandlePosition === Position.Top) return {
45
+ ...node,
46
+ position: {
47
+ x: previewCenterX - nodeSize.width / 2,
48
+ y: previewNode.position.y
49
+ }
50
+ };
51
+ if (previewHandlePosition === Position.Bottom) return {
52
+ ...node,
53
+ position: {
54
+ x: previewCenterX - nodeSize.width / 2,
55
+ y: previewNode.position.y + previewSize.height - nodeSize.height
56
+ }
57
+ };
58
+ return {
59
+ ...node,
60
+ position: {
61
+ x: previewCenterX - nodeSize.width / 2,
62
+ y: previewCenterY - nodeSize.height / 2
63
+ }
64
+ };
65
+ }
66
+ function resolveScopedCollisions(nodes, insertedNode, options) {
67
+ const siblingNodes = nodes.filter((node)=>node.parentId === insertedNode.parentId);
68
+ const resolvedSiblings = resolveCollisions(siblingNodes, {
69
+ ignoredNodeTypes: options.ignoredNodeTypes,
70
+ getNodeSize: options.getNodeSize
71
+ });
72
+ const resolvedSiblingById = new Map(resolvedSiblings.map((node)=>[
73
+ node.id,
74
+ node
75
+ ]));
76
+ const resolvedNodes = nodes.map((node)=>resolvedSiblingById.get(node.id) ?? node);
77
+ return {
78
+ nodes: resolvedNodes,
79
+ insertedNode: resolvedSiblingById.get(insertedNode.id)
80
+ };
81
+ }
82
+ function shiftForEdgeInsertion({ nodes, edges, previewNode, insertedNode, getNodeSize }) {
83
+ const originalEdge = getOriginalEdge(previewNode);
84
+ if (!originalEdge) return null;
85
+ const targetNode = nodes.find((node)=>node.id === originalEdge.target);
86
+ if (!targetNode || targetNode.parentId !== insertedNode.parentId) return null;
87
+ const insertedSize = getNodeSize(insertedNode);
88
+ let insertedX = insertedNode.position.x;
89
+ const sourceNode = nodes.find((node)=>node.id === originalEdge.source);
90
+ if (sourceNode && sourceNode.parentId === insertedNode.parentId) {
91
+ const sourceSize = getNodeSize(sourceNode);
92
+ const requiredInsertedLeft = sourceNode.position.x + sourceSize.width + TOP_LEVEL_INSERTION_GAP_PX;
93
+ if (insertedX < requiredInsertedLeft) insertedX = snapUpToGrid(requiredInsertedLeft);
94
+ }
95
+ const requiredTargetLeft = insertedX + insertedSize.width + TOP_LEVEL_INSERTION_GAP_PX;
96
+ const downstreamShift = targetNode.position.x < requiredTargetLeft ? snapUpToGrid(requiredTargetLeft - targetNode.position.x) : 0;
97
+ const chainIds = downstreamShift > 0 ? new Set(collectLinearDownstreamSiblings({
98
+ startNodeId: targetNode.id,
99
+ parentId: insertedNode.parentId,
100
+ nodes,
101
+ edges
102
+ })) : new Set();
103
+ const insertedXChanged = insertedX !== insertedNode.position.x;
104
+ if (!insertedXChanged && 0 === downstreamShift) return null;
105
+ const updatedInsertedNode = insertedXChanged ? {
106
+ ...insertedNode,
107
+ position: {
108
+ x: insertedX,
109
+ y: insertedNode.position.y
110
+ }
111
+ } : insertedNode;
112
+ const updatedNodes = nodes.map((node)=>{
113
+ if (node.id === insertedNode.id) return updatedInsertedNode;
114
+ if (chainIds.has(node.id)) return {
115
+ ...node,
116
+ position: {
117
+ x: node.position.x + downstreamShift,
118
+ y: node.position.y
119
+ }
120
+ };
121
+ return node;
122
+ });
123
+ return {
124
+ nodes: updatedNodes,
125
+ insertedNode: updatedInsertedNode
126
+ };
127
+ }
128
+ function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ignoredNodeTypes }) {
129
+ const getDimensions = (node)=>getManifestAwareNodeDimensions(registry, node);
130
+ const placement = getContainerPlacement(previewNode);
131
+ if (placement) {
132
+ const containerNode = nodes.find((node)=>node.id === placement.containerId);
133
+ if (!containerNode) return resolveScopedCollisions(nodes, insertedNode, {
134
+ ignoredNodeTypes,
135
+ getNodeSize: getDimensions
136
+ });
137
+ const containerManifest = getManifestForNode(registry, containerNode);
138
+ if (!isContainerNodeManifest(containerManifest)) return resolveScopedCollisions(nodes, insertedNode, {
139
+ ignoredNodeTypes,
140
+ getNodeSize: getDimensions
141
+ });
142
+ const resolvedNodes = placeContainerNode({
143
+ nodes,
144
+ insertedNode,
145
+ placement,
146
+ edges,
147
+ getNodeDimensions: getDimensions,
148
+ safeArea: getContainerSafeArea(containerNode),
149
+ getContainerFitGeometry: (node)=>isContainerNodeManifest(getManifestForNode(registry, node)) ? getContainerFitGeometry() : null
150
+ });
151
+ return {
152
+ nodes: resolvedNodes,
153
+ insertedNode: resolvedNodes.find((node)=>node.id === insertedNode.id)
154
+ };
155
+ }
156
+ const shifted = shiftForEdgeInsertion({
157
+ nodes,
158
+ edges,
159
+ previewNode,
160
+ insertedNode,
161
+ getNodeSize: getDimensions
162
+ });
163
+ return resolveScopedCollisions(shifted?.nodes ?? nodes, shifted?.insertedNode ?? insertedNode, {
164
+ ignoredNodeTypes,
165
+ getNodeSize: getDimensions
166
+ });
167
+ }
168
+ export { alignNodeToPreview, getOriginalEdge, placeAddedNode };
@@ -4,8 +4,9 @@ import { useCallback, useEffect, useRef } from "react";
4
4
  import { FLOATING_CANVAS_PANEL_OFFSET, PREVIEW_NODE_ID } from "../../constants.js";
5
5
  import { useOptionalNodeTypeRegistry } from "../../core/index.js";
6
6
  import { usePreviewNode } from "../../hooks/usePreviewNode.js";
7
- import { resolveCollisions } from "../../utils/index.js";
7
+ import { isPreviewEdge } from "../../utils/createPreviewNode.js";
8
8
  import { FloatingCanvasPanel } from "../FloatingCanvasPanel/index.js";
9
+ import { alignNodeToPreview, getOriginalEdge, placeAddedNode } from "./AddNodeManager.helpers.js";
9
10
  import { AddNodePanel } from "./AddNodePanel.js";
10
11
  const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData, onBeforeNodeAdded, onNodeAdded, ignoredNodeTypes })=>{
11
12
  const reactFlowInstance = useReactFlow();
@@ -17,15 +18,20 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
17
18
  if (!previewNode && lastPreviewNodeRef.current) {
18
19
  reactFlowInstance.setNodes((nodes)=>nodes.filter((n)=>n.id !== PREVIEW_NODE_ID));
19
20
  reactFlowInstance.setEdges((edges)=>{
20
- const filteredEdges = edges.filter((e)=>e.source !== PREVIEW_NODE_ID && e.target !== PREVIEW_NODE_ID);
21
- return restoreEdgesRef.current ? [
21
+ const filteredEdges = edges.filter((edge)=>!isPreviewEdge(edge));
22
+ const restoredEdges = restoreEdgesRef.current ? [
22
23
  ...filteredEdges,
23
24
  ...restoreEdgesRef.current
24
25
  ] : filteredEdges;
26
+ restoreEdgesRef.current = null;
27
+ return restoredEdges;
25
28
  });
26
- } else if (previewNode && !restoreEdgesRef.current) restoreEdgesRef.current = previewNode.data.originalEdge ? [
27
- previewNode.data.originalEdge
28
- ] : null;
29
+ } else if (previewNode && !restoreEdgesRef.current) {
30
+ const originalEdge = getOriginalEdge(previewNode);
31
+ restoreEdgesRef.current = originalEdge ? [
32
+ originalEdge
33
+ ] : null;
34
+ }
29
35
  lastPreviewNodeRef.current = previewNode || null;
30
36
  }, [
31
37
  previewNode,
@@ -55,17 +61,17 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
55
61
  parentId: currentPreviewNode.parentId,
56
62
  extent: currentPreviewNode.extent
57
63
  } : {};
58
- const newNode = {
64
+ const newNodeManifest = registry?.getManifest(nodeItem.data.type);
65
+ const newNode = alignNodeToPreview({
59
66
  id: newNodeId,
60
67
  type: nodeItem.data.type,
61
68
  position: currentPreviewNode.position,
62
69
  selected: true,
63
70
  data: nodeData,
64
71
  ...previewNodeScope
65
- };
66
- const newNodeManifest = registry?.getManifest(nodeItem.data.type);
72
+ }, currentPreviewNode, previewNodeConnectionInfo, newNodeManifest);
67
73
  const newEdges = [];
68
- const previewEdgeIds = [];
74
+ const previewEdgeIds = new Set();
69
75
  for (const connectionInfoItem of previewNodeConnectionInfo){
70
76
  const newNodeHandleType = connectionInfoItem.addNewNodeAsSource ? 'source' : 'target';
71
77
  const newNodeDefaultHandle = newNodeManifest ? registry?.getDefaultHandle(newNodeManifest.nodeType, newNodeHandleType) : void 0;
@@ -87,12 +93,14 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
87
93
  ...edgeSourceTargetData,
88
94
  type: 'default'
89
95
  });
90
- previewEdgeIds.push(connectionInfoItem.previewEdgeId);
96
+ previewEdgeIds.add(connectionInfoItem.previewEdgeId);
91
97
  }
92
98
  const { newNode: finalNode, newEdges: finalEdges } = onBeforeNodeAdded?.(newNode, newEdges) ?? {
93
99
  newNode,
94
100
  newEdges
95
101
  };
102
+ const placementEdges = reactFlowInstance.getEdges();
103
+ let placedNode = finalNode;
96
104
  reactFlowInstance.setNodes((nodes)=>{
97
105
  const newNodes = [
98
106
  ...nodes.filter((n)=>n.id !== PREVIEW_NODE_ID).map((n)=>({
@@ -101,28 +109,35 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
101
109
  })),
102
110
  finalNode
103
111
  ];
104
- return resolveCollisions(newNodes, {
112
+ const placement = placeAddedNode({
113
+ nodes: newNodes,
114
+ edges: placementEdges,
115
+ previewNode: currentPreviewNode,
116
+ insertedNode: finalNode,
117
+ registry,
105
118
  ignoredNodeTypes
106
119
  });
120
+ placedNode = placement.insertedNode;
121
+ return placement.nodes;
107
122
  });
108
123
  reactFlowInstance.setEdges((edges)=>[
109
- ...edges.filter((e)=>!previewEdgeIds.includes(e.id)),
124
+ ...edges.filter((edge)=>!previewEdgeIds.has(edge.id) && !isPreviewEdge(edge)),
110
125
  ...finalEdges
111
126
  ]);
127
+ restoreEdgesRef.current = null;
112
128
  const [firstConnection] = previewNodeConnectionInfo;
113
129
  if (firstConnection) {
114
- const firstEdgeSourceHandle = firstConnection.addNewNodeAsSource ? newNodeManifest && registry?.getDefaultHandle(newNodeManifest.nodeType, 'source')?.id : firstConnection.existingHandleId;
130
+ const firstMaterializedEdge = finalEdges.find((edge)=>edge.source === placedNode.id || edge.target === placedNode.id);
115
131
  const firstEdgeData = firstConnection.addNewNodeAsSource ? {
116
- source: finalNode.id,
117
- sourceHandle: firstEdgeSourceHandle ?? 'output'
132
+ source: placedNode.id,
133
+ sourceHandle: firstMaterializedEdge?.sourceHandle ?? 'output'
118
134
  } : {
119
135
  source: firstConnection.existingNodeId,
120
136
  sourceHandle: firstConnection.existingHandleId
121
137
  };
122
- onNodeAdded?.(firstEdgeData.source, firstEdgeData.sourceHandle, finalNode);
138
+ onNodeAdded?.(firstEdgeData.source, firstEdgeData.sourceHandle, placedNode);
123
139
  }
124
- restoreEdgesRef.current = null;
125
- handleClose();
140
+ lastPreviewNodeRef.current = null;
126
141
  }, [
127
142
  previewNodeConnectionInfo,
128
143
  reactFlowInstance,
@@ -130,8 +145,7 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
130
145
  createNodeData,
131
146
  onBeforeNodeAdded,
132
147
  onNodeAdded,
133
- ignoredNodeTypes,
134
- handleClose
148
+ ignoredNodeTypes
135
149
  ]);
136
150
  if (!previewNode || !previewNodeConnectionInfo || 0 === previewNodeConnectionInfo.length) return null;
137
151
  return /*#__PURE__*/ jsx(FloatingCanvasPanel, {