@uipath/apollo-react 4.22.2 → 4.22.3

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 (37) hide show
  1. package/dist/canvas/components/AddNodePanel/AddNodeManager.cjs +4 -1
  2. package/dist/canvas/components/AddNodePanel/AddNodeManager.d.ts.map +1 -1
  3. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.cjs +15 -26
  4. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.d.ts +3 -3
  5. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.d.ts.map +1 -1
  6. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.js +18 -29
  7. package/dist/canvas/components/AddNodePanel/AddNodeManager.js +4 -1
  8. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.cjs +2 -9
  9. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts.map +1 -1
  10. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.js +2 -9
  11. package/dist/canvas/components/LoopNode/LoopNode.helpers.cjs +28 -8
  12. package/dist/canvas/components/LoopNode/LoopNode.helpers.d.ts +8 -2
  13. package/dist/canvas/components/LoopNode/LoopNode.helpers.d.ts.map +1 -1
  14. package/dist/canvas/components/LoopNode/LoopNode.helpers.js +23 -6
  15. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.cjs +6 -9
  16. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.d.ts.map +1 -1
  17. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.js +6 -9
  18. package/dist/canvas/hooks/index.cjs +19 -12
  19. package/dist/canvas/hooks/index.d.ts +1 -0
  20. package/dist/canvas/hooks/index.d.ts.map +1 -1
  21. package/dist/canvas/hooks/index.js +1 -0
  22. package/dist/canvas/hooks/useAddNodeOnConnectEnd.cjs +18 -5
  23. package/dist/canvas/hooks/useAddNodeOnConnectEnd.d.ts.map +1 -1
  24. package/dist/canvas/hooks/useAddNodeOnConnectEnd.js +18 -5
  25. package/dist/canvas/hooks/useCanvasNodeLayout.cjs +66 -0
  26. package/dist/canvas/hooks/useCanvasNodeLayout.d.ts +15 -0
  27. package/dist/canvas/hooks/useCanvasNodeLayout.d.ts.map +1 -0
  28. package/dist/canvas/hooks/useCanvasNodeLayout.js +29 -0
  29. package/dist/canvas/utils/NodeUtils.cjs +4 -4
  30. package/dist/canvas/utils/NodeUtils.d.ts +1 -1
  31. package/dist/canvas/utils/NodeUtils.d.ts.map +1 -1
  32. package/dist/canvas/utils/NodeUtils.js +4 -4
  33. package/dist/canvas/utils/container.cjs +3 -2
  34. package/dist/canvas/utils/container.d.ts +1 -0
  35. package/dist/canvas/utils/container.d.ts.map +1 -1
  36. package/dist/canvas/utils/container.js +3 -2
  37. package/package.json +1 -1
@@ -31,6 +31,7 @@ const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
31
31
  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
+ const useCanvasNodeLayout_cjs_namespaceObject = require("../../hooks/useCanvasNodeLayout.cjs");
34
35
  const usePreviewNode_cjs_namespaceObject = require("../../hooks/usePreviewNode.cjs");
35
36
  const createPreviewNode_cjs_namespaceObject = require("../../utils/createPreviewNode.cjs");
36
37
  const external_FloatingCanvasPanel_index_cjs_namespaceObject = require("../FloatingCanvasPanel/index.cjs");
@@ -39,6 +40,7 @@ const external_AddNodePanel_cjs_namespaceObject = require("./AddNodePanel.cjs");
39
40
  const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData, onBeforeNodeAdded, onNodeAdded, ignoredNodeTypes })=>{
40
41
  const reactFlowInstance = (0, react_cjs_namespaceObject.useReactFlow)();
41
42
  const registry = (0, index_cjs_namespaceObject.useOptionalNodeTypeRegistry)();
43
+ const nodeLayout = (0, useCanvasNodeLayout_cjs_namespaceObject.useCanvasNodeLayout)();
42
44
  const { previewNode, previewNodeConnectionInfo } = (0, usePreviewNode_cjs_namespaceObject.usePreviewNode)();
43
45
  const lastPreviewNodeRef = (0, external_react_namespaceObject.useRef)(null);
44
46
  const restoreEdgesRef = (0, external_react_namespaceObject.useRef)(null);
@@ -142,7 +144,7 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
142
144
  edges: placementEdges,
143
145
  previewNode: currentPreviewNode,
144
146
  insertedNode: finalNode,
145
- registry,
147
+ layout: nodeLayout,
146
148
  ignoredNodeTypes
147
149
  });
148
150
  placedNode = placement.insertedNode;
@@ -170,6 +172,7 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
170
172
  previewNodeConnectionInfo,
171
173
  reactFlowInstance,
172
174
  registry,
175
+ nodeLayout,
173
176
  createNodeData,
174
177
  onBeforeNodeAdded,
175
178
  onNodeAdded,
@@ -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;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"}
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;AAO/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,CA2NxD,CAAC"}
@@ -38,13 +38,6 @@ const TOP_LEVEL_INSERTION_GAP_PX = 5 * external_constants_cjs_namespaceObject.GR
38
38
  function getOriginalEdge(previewNode) {
39
39
  return previewNode?.data?.originalEdge ?? null;
40
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
41
  function getPrimaryPreviewHandlePosition(previewNode, previewConnections) {
49
42
  const primaryConnection = previewConnections.find((connection)=>!connection.addNewNodeAsSource) ?? previewConnections[0];
50
43
  const handlePosition = primaryConnection?.addNewNodeAsSource ? previewNode.data?.outputHandlePosition : previewNode.data?.inputHandlePosition;
@@ -95,10 +88,7 @@ function alignNodeToPreview(node, previewNode, previewConnections, nodeManifest)
95
88
  }
96
89
  function resolveScopedCollisions(nodes, insertedNode, options) {
97
90
  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
- });
91
+ const resolvedSiblings = (0, index_cjs_namespaceObject.resolveCollisions)(siblingNodes, options);
102
92
  const resolvedSiblingById = new Map(resolvedSiblings.map((node)=>[
103
93
  node.id,
104
94
  node
@@ -109,16 +99,16 @@ function resolveScopedCollisions(nodes, insertedNode, options) {
109
99
  insertedNode: resolvedSiblingById.get(insertedNode.id)
110
100
  };
111
101
  }
112
- function shiftForEdgeInsertion({ nodes, edges, previewNode, insertedNode, getNodeSize }) {
102
+ function shiftForEdgeInsertion({ nodes, edges, previewNode, insertedNode, getNodeDimensions }) {
113
103
  const originalEdge = getOriginalEdge(previewNode);
114
104
  if (!originalEdge) return null;
115
105
  const targetNode = nodes.find((node)=>node.id === originalEdge.target);
116
106
  if (!targetNode || targetNode.parentId !== insertedNode.parentId) return null;
117
- const insertedSize = getNodeSize(insertedNode);
107
+ const insertedSize = getNodeDimensions(insertedNode);
118
108
  let insertedX = insertedNode.position.x;
119
109
  const sourceNode = nodes.find((node)=>node.id === originalEdge.source);
120
110
  if (sourceNode && sourceNode.parentId === insertedNode.parentId) {
121
- const sourceSize = getNodeSize(sourceNode);
111
+ const sourceSize = getNodeDimensions(sourceNode);
122
112
  const requiredInsertedLeft = sourceNode.position.x + sourceSize.width + TOP_LEVEL_INSERTION_GAP_PX;
123
113
  if (insertedX < requiredInsertedLeft) insertedX = (0, NodeUtils_cjs_namespaceObject.snapUpToGrid)(requiredInsertedLeft);
124
114
  }
@@ -157,28 +147,27 @@ function shiftForEdgeInsertion({ nodes, edges, previewNode, insertedNode, getNod
157
147
  insertedNode: updatedInsertedNode
158
148
  };
159
149
  }
160
- function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ignoredNodeTypes }) {
161
- const getDimensions = (node)=>getManifestAwareNodeDimensions(registry, node);
150
+ function placeAddedNode({ nodes, edges, previewNode, insertedNode, layout, ignoredNodeTypes }) {
151
+ const { getNodeDimensions, isContainerNode, getContainerFitGeometry } = layout;
162
152
  const placement = (0, container_cjs_namespaceObject.getContainerPlacement)(previewNode);
163
153
  if (placement) {
164
154
  const containerNode = nodes.find((node)=>node.id === placement.containerId);
165
155
  if (!containerNode) return resolveScopedCollisions(nodes, insertedNode, {
166
156
  ignoredNodeTypes,
167
- getNodeSize: getDimensions
157
+ getNodeDimensions
168
158
  });
169
- const containerManifest = getManifestForNode(registry, containerNode);
170
- if (!(0, container_cjs_namespaceObject.isContainerNodeManifest)(containerManifest)) return resolveScopedCollisions(nodes, insertedNode, {
159
+ if (!isContainerNode(containerNode)) return resolveScopedCollisions(nodes, insertedNode, {
171
160
  ignoredNodeTypes,
172
- getNodeSize: getDimensions
161
+ getNodeDimensions
173
162
  });
174
163
  const resolvedNodes = (0, container_cjs_namespaceObject.placeContainerNode)({
175
164
  nodes,
176
165
  insertedNode,
177
166
  placement,
178
167
  edges,
179
- getNodeDimensions: getDimensions,
168
+ getNodeDimensions,
180
169
  safeArea: (0, container_cjs_namespaceObject.getContainerSafeArea)(containerNode),
181
- getContainerFitGeometry: (node)=>(0, container_cjs_namespaceObject.isContainerNodeManifest)(getManifestForNode(registry, node)) ? (0, container_cjs_namespaceObject.getContainerFitGeometry)() : null,
170
+ getContainerFitGeometry,
182
171
  ignoredNodeTypes
183
172
  });
184
173
  return {
@@ -191,11 +180,11 @@ function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ign
191
180
  edges,
192
181
  previewNode,
193
182
  insertedNode,
194
- getNodeSize: getDimensions
183
+ getNodeDimensions
195
184
  });
196
185
  const placementResult = resolveScopedCollisions(shifted?.nodes ?? nodes, shifted?.insertedNode ?? insertedNode, {
197
186
  ignoredNodeTypes,
198
- getNodeSize: getDimensions
187
+ getNodeDimensions
199
188
  });
200
189
  if (!placementResult.insertedNode.parentId) return placementResult;
201
190
  const fittedNodes = (0, container_cjs_namespaceObject.fitContainersAndPushSiblings)({
@@ -203,8 +192,8 @@ function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ign
203
192
  containerIds: [
204
193
  placementResult.insertedNode.parentId
205
194
  ],
206
- getContainerFitGeometry: (node)=>(0, container_cjs_namespaceObject.isContainerNodeManifest)(getManifestForNode(registry, node)) ? (0, container_cjs_namespaceObject.getContainerFitGeometry)() : null,
207
- getNodeDimensions: getDimensions,
195
+ getContainerFitGeometry,
196
+ getNodeDimensions,
208
197
  ignoredNodeTypes,
209
198
  gap: container_cjs_namespaceObject.CONTAINER_SEQUENCE_GAP_PX
210
199
  });
@@ -1,5 +1,5 @@
1
1
  import type { Edge, Node } from '../../xyflow/react.ts';
2
- import type { NodeTypeRegistry } from '../../core';
2
+ import type { NodeLayout } from '../../hooks/useCanvasNodeLayout';
3
3
  import type { PreviewNodeConnectionInfo } from '../../hooks/usePreviewNode';
4
4
  import type { NodeManifest } from '../../schema';
5
5
  interface AddNodePlacementResult {
@@ -8,12 +8,12 @@ interface AddNodePlacementResult {
8
8
  }
9
9
  export declare function getOriginalEdge(previewNode: Node | null | undefined): Edge | null;
10
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, }: {
11
+ export declare function placeAddedNode({ nodes, edges, previewNode, insertedNode, layout, ignoredNodeTypes, }: {
12
12
  nodes: Node[];
13
13
  edges: Edge[];
14
14
  previewNode: Node;
15
15
  insertedNode: Node;
16
- registry: NodeTypeRegistry | null;
16
+ layout: NodeLayout;
17
17
  ignoredNodeTypes?: string[];
18
18
  }): AddNodePlacementResult;
19
19
  export {};
@@ -1 +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;AAwBjD,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;AAqID,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,CAkFzB"}
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,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,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;AAsBD,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;AAkID,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,KAAK,EACL,WAAW,EACX,YAAY,EACZ,MAAM,EACN,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,MAAM,EAAE,UAAU,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B,GAAG,sBAAsB,CA0EzB"}
@@ -2,27 +2,20 @@ import { Position } from "../../xyflow/react.js";
2
2
  import { GRID_SPACING } from "../../constants.js";
3
3
  import { resolveCollisions } from "../../utils/index.js";
4
4
  import { getExpandedSize } from "../../utils/collapse.js";
5
- import { CONTAINER_SEQUENCE_GAP_PX, collectLinearDownstreamSiblings, fitContainersAndPushSiblings, getContainerFitGeometry, getContainerPlacement, getContainerSafeArea, getNodeDimensions, isContainerNodeManifest, placeContainerNode } from "../../utils/container.js";
5
+ import { CONTAINER_SEQUENCE_GAP_PX, collectLinearDownstreamSiblings, fitContainersAndPushSiblings, getContainerPlacement, getContainerSafeArea, getNodeDimensions as container_js_getNodeDimensions, placeContainerNode } from "../../utils/container.js";
6
6
  import { snapUpToGrid } from "../../utils/NodeUtils.js";
7
7
  const TOP_LEVEL_INSERTION_GAP_PX = 5 * GRID_SPACING;
8
8
  function getOriginalEdge(previewNode) {
9
9
  return previewNode?.data?.originalEdge ?? null;
10
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
11
  function getPrimaryPreviewHandlePosition(previewNode, previewConnections) {
19
12
  const primaryConnection = previewConnections.find((connection)=>!connection.addNewNodeAsSource) ?? previewConnections[0];
20
13
  const handlePosition = primaryConnection?.addNewNodeAsSource ? previewNode.data?.outputHandlePosition : previewNode.data?.inputHandlePosition;
21
14
  return handlePosition;
22
15
  }
23
16
  function alignNodeToPreview(node, previewNode, previewConnections, nodeManifest) {
24
- const previewSize = getNodeDimensions(previewNode);
25
- const nodeSize = getNodeDimensions(node, getExpandedSize(nodeManifest?.display.shape));
17
+ const previewSize = container_js_getNodeDimensions(previewNode);
18
+ const nodeSize = container_js_getNodeDimensions(node, getExpandedSize(nodeManifest?.display.shape));
26
19
  if (previewSize.width === nodeSize.width && previewSize.height === nodeSize.height) return node;
27
20
  const previewHandlePosition = getPrimaryPreviewHandlePosition(previewNode, previewConnections);
28
21
  const previewCenterX = previewNode.position.x + previewSize.width / 2;
@@ -65,10 +58,7 @@ function alignNodeToPreview(node, previewNode, previewConnections, nodeManifest)
65
58
  }
66
59
  function resolveScopedCollisions(nodes, insertedNode, options) {
67
60
  const siblingNodes = nodes.filter((node)=>node.parentId === insertedNode.parentId);
68
- const resolvedSiblings = resolveCollisions(siblingNodes, {
69
- ignoredNodeTypes: options.ignoredNodeTypes,
70
- getNodeSize: options.getNodeSize
71
- });
61
+ const resolvedSiblings = resolveCollisions(siblingNodes, options);
72
62
  const resolvedSiblingById = new Map(resolvedSiblings.map((node)=>[
73
63
  node.id,
74
64
  node
@@ -79,16 +69,16 @@ function resolveScopedCollisions(nodes, insertedNode, options) {
79
69
  insertedNode: resolvedSiblingById.get(insertedNode.id)
80
70
  };
81
71
  }
82
- function shiftForEdgeInsertion({ nodes, edges, previewNode, insertedNode, getNodeSize }) {
72
+ function shiftForEdgeInsertion({ nodes, edges, previewNode, insertedNode, getNodeDimensions }) {
83
73
  const originalEdge = getOriginalEdge(previewNode);
84
74
  if (!originalEdge) return null;
85
75
  const targetNode = nodes.find((node)=>node.id === originalEdge.target);
86
76
  if (!targetNode || targetNode.parentId !== insertedNode.parentId) return null;
87
- const insertedSize = getNodeSize(insertedNode);
77
+ const insertedSize = getNodeDimensions(insertedNode);
88
78
  let insertedX = insertedNode.position.x;
89
79
  const sourceNode = nodes.find((node)=>node.id === originalEdge.source);
90
80
  if (sourceNode && sourceNode.parentId === insertedNode.parentId) {
91
- const sourceSize = getNodeSize(sourceNode);
81
+ const sourceSize = getNodeDimensions(sourceNode);
92
82
  const requiredInsertedLeft = sourceNode.position.x + sourceSize.width + TOP_LEVEL_INSERTION_GAP_PX;
93
83
  if (insertedX < requiredInsertedLeft) insertedX = snapUpToGrid(requiredInsertedLeft);
94
84
  }
@@ -127,28 +117,27 @@ function shiftForEdgeInsertion({ nodes, edges, previewNode, insertedNode, getNod
127
117
  insertedNode: updatedInsertedNode
128
118
  };
129
119
  }
130
- function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ignoredNodeTypes }) {
131
- const getDimensions = (node)=>getManifestAwareNodeDimensions(registry, node);
120
+ function placeAddedNode({ nodes, edges, previewNode, insertedNode, layout, ignoredNodeTypes }) {
121
+ const { getNodeDimensions, isContainerNode, getContainerFitGeometry } = layout;
132
122
  const placement = getContainerPlacement(previewNode);
133
123
  if (placement) {
134
124
  const containerNode = nodes.find((node)=>node.id === placement.containerId);
135
125
  if (!containerNode) return resolveScopedCollisions(nodes, insertedNode, {
136
126
  ignoredNodeTypes,
137
- getNodeSize: getDimensions
127
+ getNodeDimensions
138
128
  });
139
- const containerManifest = getManifestForNode(registry, containerNode);
140
- if (!isContainerNodeManifest(containerManifest)) return resolveScopedCollisions(nodes, insertedNode, {
129
+ if (!isContainerNode(containerNode)) return resolveScopedCollisions(nodes, insertedNode, {
141
130
  ignoredNodeTypes,
142
- getNodeSize: getDimensions
131
+ getNodeDimensions
143
132
  });
144
133
  const resolvedNodes = placeContainerNode({
145
134
  nodes,
146
135
  insertedNode,
147
136
  placement,
148
137
  edges,
149
- getNodeDimensions: getDimensions,
138
+ getNodeDimensions,
150
139
  safeArea: getContainerSafeArea(containerNode),
151
- getContainerFitGeometry: (node)=>isContainerNodeManifest(getManifestForNode(registry, node)) ? getContainerFitGeometry() : null,
140
+ getContainerFitGeometry,
152
141
  ignoredNodeTypes
153
142
  });
154
143
  return {
@@ -161,11 +150,11 @@ function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ign
161
150
  edges,
162
151
  previewNode,
163
152
  insertedNode,
164
- getNodeSize: getDimensions
153
+ getNodeDimensions
165
154
  });
166
155
  const placementResult = resolveScopedCollisions(shifted?.nodes ?? nodes, shifted?.insertedNode ?? insertedNode, {
167
156
  ignoredNodeTypes,
168
- getNodeSize: getDimensions
157
+ getNodeDimensions
169
158
  });
170
159
  if (!placementResult.insertedNode.parentId) return placementResult;
171
160
  const fittedNodes = fitContainersAndPushSiblings({
@@ -173,8 +162,8 @@ function placeAddedNode({ nodes, edges, previewNode, insertedNode, registry, ign
173
162
  containerIds: [
174
163
  placementResult.insertedNode.parentId
175
164
  ],
176
- getContainerFitGeometry: (node)=>isContainerNodeManifest(getManifestForNode(registry, node)) ? getContainerFitGeometry() : null,
177
- getNodeDimensions: getDimensions,
165
+ getContainerFitGeometry,
166
+ getNodeDimensions,
178
167
  ignoredNodeTypes,
179
168
  gap: CONTAINER_SEQUENCE_GAP_PX
180
169
  });
@@ -3,6 +3,7 @@ import { useReactFlow } from "../../xyflow/react.js";
3
3
  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
+ import { useCanvasNodeLayout } from "../../hooks/useCanvasNodeLayout.js";
6
7
  import { usePreviewNode } from "../../hooks/usePreviewNode.js";
7
8
  import { isPreviewEdge } from "../../utils/createPreviewNode.js";
8
9
  import { FloatingCanvasPanel } from "../FloatingCanvasPanel/index.js";
@@ -11,6 +12,7 @@ import { AddNodePanel } from "./AddNodePanel.js";
11
12
  const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData, onBeforeNodeAdded, onNodeAdded, ignoredNodeTypes })=>{
12
13
  const reactFlowInstance = useReactFlow();
13
14
  const registry = useOptionalNodeTypeRegistry();
15
+ const nodeLayout = useCanvasNodeLayout();
14
16
  const { previewNode, previewNodeConnectionInfo } = usePreviewNode();
15
17
  const lastPreviewNodeRef = useRef(null);
16
18
  const restoreEdgesRef = useRef(null);
@@ -114,7 +116,7 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
114
116
  edges: placementEdges,
115
117
  previewNode: currentPreviewNode,
116
118
  insertedNode: finalNode,
117
- registry,
119
+ layout: nodeLayout,
118
120
  ignoredNodeTypes
119
121
  });
120
122
  placedNode = placement.insertedNode;
@@ -142,6 +144,7 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
142
144
  previewNodeConnectionInfo,
143
145
  reactFlowInstance,
144
146
  registry,
147
+ nodeLayout,
145
148
  createNodeData,
146
149
  onBeforeNodeAdded,
147
150
  onNodeAdded,
@@ -35,6 +35,7 @@ const index_cjs_namespaceObject = require("../../controls/index.cjs");
35
35
  const external_core_index_cjs_namespaceObject = require("../../core/index.cjs");
36
36
  const useAddNodeOnConnectEnd_cjs_namespaceObject = require("../../hooks/useAddNodeOnConnectEnd.cjs");
37
37
  const useCanvasEvents_cjs_namespaceObject = require("../../hooks/useCanvasEvents.cjs");
38
+ const useCanvasNodeLayout_cjs_namespaceObject = require("../../hooks/useCanvasNodeLayout.cjs");
38
39
  const animatedViewportManager_cjs_namespaceObject = require("../../stores/animatedViewportManager.cjs");
39
40
  const canvasStore_cjs_namespaceObject = require("../../stores/canvasStore.cjs");
40
41
  const viewportManager_cjs_namespaceObject = require("../../stores/viewportManager.cjs");
@@ -77,12 +78,6 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
77
78
  const lastCanvasIdRef = (0, external_react_namespaceObject.useRef)(null);
78
79
  const shouldAnimate = 'design' === mode && !(0, transitions_cjs_namespaceObject.prefersReducedMotion)();
79
80
  const nodeManifests = (0, external_core_index_cjs_namespaceObject.useNodeManifests)();
80
- const nodeManifestByType = (0, external_react_namespaceObject.useMemo)(()=>new Map(nodeManifests.map((manifest)=>[
81
- manifest.nodeType,
82
- manifest
83
- ])), [
84
- nodeManifests
85
- ]);
86
81
  const nodeTypes = (0, external_react_namespaceObject.useMemo)(()=>nodeManifests.reduce((acc, manifest)=>{
87
82
  acc[manifest.nodeType] = (0, external_utils_index_cjs_namespaceObject.isContainerNodeManifest)(manifest) ? external_LoopNode_index_cjs_namespaceObject.LoopCanvasNode : external_BaseNode_index_cjs_namespaceObject.BaseNode;
88
83
  return acc;
@@ -91,9 +86,7 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
91
86
  }), [
92
87
  nodeManifests
93
88
  ]);
94
- const getManifestForNode = (0, external_react_namespaceObject.useCallback)((node)=>node.type ? nodeManifestByType.get(node.type) : void 0, [
95
- nodeManifestByType
96
- ]);
89
+ const { getManifestForNode } = (0, useCanvasNodeLayout_cjs_namespaceObject.useCanvasNodeLayout)();
97
90
  const currentCanvas = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectCurrentCanvas);
98
91
  const previousCanvas = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectPreviousCanvas);
99
92
  const breadcrumbs = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectBreadcrumbs);
@@ -1 +1 @@
1
- {"version":3,"file":"HierarchicalCanvas.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/HierarchicalCanvas/HierarchicalCanvas.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6B/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAe5D,UAAU,uBAAuB;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAKtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAK9C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAMvB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;IAInE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACzC;AAyBD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA0ZhE,CAAC"}
1
+ {"version":3,"file":"HierarchicalCanvas.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/HierarchicalCanvas/HierarchicalCanvas.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA8B/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAe5D,UAAU,uBAAuB;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAKtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAK9C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAMvB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;IAInE,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACzC;AAyBD,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAmZhE,CAAC"}
@@ -7,6 +7,7 @@ import { Breadcrumb } from "../../controls/index.js";
7
7
  import { useNodeManifests } from "../../core/index.js";
8
8
  import { useAddNodeOnConnectEnd } from "../../hooks/useAddNodeOnConnectEnd.js";
9
9
  import { useCanvasEvent } from "../../hooks/useCanvasEvents.js";
10
+ import { useCanvasNodeLayout } from "../../hooks/useCanvasNodeLayout.js";
10
11
  import { animatedViewportManager } from "../../stores/animatedViewportManager.js";
11
12
  import { selectBreadcrumbs, selectCanvasStack, selectCurrentCanvas, selectCurrentPath, selectDrillIntoNode, selectInitializeCanvas, selectInitializeWithData, selectNavigateToDepth, selectNavigateToSiblingCanvas, selectPreviousCanvas, selectTransitionState, selectUpdateEdges, selectUpdateNodes, selectUpdateSelection, selectUpdateViewport, useCanvasStore } from "../../stores/canvasStore.js";
12
13
  import { viewportManager } from "../../stores/viewportManager.js";
@@ -49,12 +50,6 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
49
50
  const lastCanvasIdRef = useRef(null);
50
51
  const shouldAnimate = 'design' === mode && !prefersReducedMotion();
51
52
  const nodeManifests = useNodeManifests();
52
- const nodeManifestByType = useMemo(()=>new Map(nodeManifests.map((manifest)=>[
53
- manifest.nodeType,
54
- manifest
55
- ])), [
56
- nodeManifests
57
- ]);
58
53
  const nodeTypes = useMemo(()=>nodeManifests.reduce((acc, manifest)=>{
59
54
  acc[manifest.nodeType] = isContainerNodeManifest(manifest) ? LoopCanvasNode : BaseNode;
60
55
  return acc;
@@ -63,9 +58,7 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
63
58
  }), [
64
59
  nodeManifests
65
60
  ]);
66
- const getManifestForNode = useCallback((node)=>node.type ? nodeManifestByType.get(node.type) : void 0, [
67
- nodeManifestByType
68
- ]);
61
+ const { getManifestForNode } = useCanvasNodeLayout();
69
62
  const currentCanvas = useCanvasStore(selectCurrentCanvas);
70
63
  const previousCanvas = useCanvasStore(selectPreviousCanvas);
71
64
  const breadcrumbs = useCanvasStore(selectBreadcrumbs);
@@ -24,10 +24,11 @@ var __webpack_require__ = {};
24
24
  var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
- resolveContainerAddNodePreview: ()=>resolveContainerAddNodePreview,
28
- resolveContainerPreviewConnectionHandles: ()=>resolveContainerPreviewConnectionHandles,
29
27
  resolveContainerHandleGroups: ()=>resolveContainerHandleGroups,
30
- getContainerRelativeBodyCenter: ()=>getContainerRelativeBodyCenter
28
+ getInnerHandleContainerId: ()=>getInnerHandleContainerId,
29
+ resolveContainerPreviewConnectionHandles: ()=>resolveContainerPreviewConnectionHandles,
30
+ getContainerRelativeBodyCenter: ()=>getContainerRelativeBodyCenter,
31
+ resolveContainerAddNodePreview: ()=>resolveContainerAddNodePreview
31
32
  });
32
33
  const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
33
34
  const container_cjs_namespaceObject = require("../../utils/container.cjs");
@@ -102,7 +103,7 @@ function pickPreferredInnerHandle(groups, type) {
102
103
  }
103
104
  return null;
104
105
  }
105
- function resolveClickedHandleType({ source, reactFlowInstance, getManifestForNode }) {
106
+ function resolveClickedHandle({ source, reactFlowInstance, getManifestForNode }) {
106
107
  if (!source.handleId) return;
107
108
  const sourceNode = reactFlowInstance.getNode(source.nodeId);
108
109
  if (!sourceNode) return;
@@ -116,20 +117,27 @@ function resolveClickedHandleType({ source, reactFlowInstance, getManifestForNod
116
117
  });
117
118
  for (const group of sourceHandles){
118
119
  const handle = group.handles.find((candidate)=>candidate.id === source.handleId);
119
- if (handle) return handle.handleType;
120
+ if (handle) return {
121
+ boundary: group.boundary ?? 'outer',
122
+ handleType: handle.handleType
123
+ };
120
124
  }
121
125
  }
122
- function resolveContainerAddNodePreview({ source, sourceHandleType, reactFlowInstance, getManifestForNode }) {
123
- const clickedHandleType = resolveClickedHandleType({
126
+ function resolveContainerAddNodePreview({ source, sourceHandleType, reactFlowInstance, getManifestForNode, replacedEdge }) {
127
+ const clickedHandle = resolveClickedHandle({
124
128
  source,
125
129
  reactFlowInstance,
126
130
  getManifestForNode
127
131
  });
128
- if ('output' !== clickedHandleType) return null;
132
+ if (clickedHandle?.handleType !== 'output') return null;
133
+ const sourceNode = reactFlowInstance.getNode(source.nodeId);
134
+ const sourceIsContainer = void 0 !== sourceNode && (0, container_cjs_namespaceObject.isContainerNodeManifest)(getManifestForNode(sourceNode));
135
+ if (sourceIsContainer && 'inner' !== clickedHandle.boundary) return null;
129
136
  return (0, container_cjs_namespaceObject.resolveContainerPreview)({
130
137
  source,
131
138
  sourceHandleType,
132
139
  reactFlowInstance,
140
+ replacedEdge,
133
141
  isContainerNode: (node)=>(0, container_cjs_namespaceObject.isContainerNodeManifest)(getManifestForNode(node)),
134
142
  getContainerSafeArea: container_cjs_namespaceObject.getContainerSafeArea,
135
143
  getContainerContinuationTarget: ({ containerNode })=>{
@@ -144,12 +152,24 @@ function resolveContainerAddNodePreview({ source, sourceHandleType, reactFlowIns
144
152
  }
145
153
  });
146
154
  }
155
+ function getInnerHandleContainerId({ source, reactFlowInstance, getManifestForNode }) {
156
+ const sourceNode = reactFlowInstance.getNode(source.nodeId);
157
+ if (!sourceNode || !(0, container_cjs_namespaceObject.isContainerNodeManifest)(getManifestForNode(sourceNode))) return;
158
+ const clickedHandle = resolveClickedHandle({
159
+ source,
160
+ reactFlowInstance,
161
+ getManifestForNode
162
+ });
163
+ return clickedHandle?.boundary === 'inner' ? sourceNode.id : void 0;
164
+ }
147
165
  exports.getContainerRelativeBodyCenter = __webpack_exports__.getContainerRelativeBodyCenter;
166
+ exports.getInnerHandleContainerId = __webpack_exports__.getInnerHandleContainerId;
148
167
  exports.resolveContainerAddNodePreview = __webpack_exports__.resolveContainerAddNodePreview;
149
168
  exports.resolveContainerHandleGroups = __webpack_exports__.resolveContainerHandleGroups;
150
169
  exports.resolveContainerPreviewConnectionHandles = __webpack_exports__.resolveContainerPreviewConnectionHandles;
151
170
  for(var __rspack_i in __webpack_exports__)if (-1 === [
152
171
  "getContainerRelativeBodyCenter",
172
+ "getInnerHandleContainerId",
153
173
  "resolveContainerAddNodePreview",
154
174
  "resolveContainerHandleGroups",
155
175
  "resolveContainerPreviewConnectionHandles"
@@ -1,4 +1,4 @@
1
- import { type Node, Position, type ReactFlowInstance } from '../../xyflow/react.ts';
1
+ import { type Edge, type Node, Position, type ReactFlowInstance } from '../../xyflow/react.ts';
2
2
  import type { NodeManifest } from '../../schema/node-definition';
3
3
  import type { PreviewEndpoint, PreviewGraphOverrides } from '../../utils/createPreviewGraph';
4
4
  import type { ResolutionContext, ResolvedHandleGroup } from '../../utils/manifest-resolver';
@@ -19,10 +19,16 @@ export declare function getContainerRelativeBodyCenter(containerNode: Pick<Node,
19
19
  y: number;
20
20
  };
21
21
  export declare function resolveContainerPreviewConnectionHandles(manifest: Pick<NodeManifest, 'handleConfiguration'> | undefined, context: ResolutionContext): ContainerPreviewConnectionHandles | null;
22
- export declare function resolveContainerAddNodePreview({ source, sourceHandleType, reactFlowInstance, getManifestForNode, }: {
22
+ export declare function resolveContainerAddNodePreview({ source, sourceHandleType, reactFlowInstance, getManifestForNode, replacedEdge, }: {
23
23
  source: PreviewEndpoint;
24
24
  sourceHandleType: 'source' | 'target';
25
25
  reactFlowInstance: ReactFlowInstance;
26
26
  getManifestForNode: ContainerPreviewManifestResolver;
27
+ replacedEdge?: Edge;
27
28
  }): PreviewGraphOverrides | null;
29
+ export declare function getInnerHandleContainerId({ source, reactFlowInstance, getManifestForNode, }: {
30
+ source: PreviewEndpoint;
31
+ reactFlowInstance: ReactFlowInstance;
32
+ getManifestForNode: ContainerPreviewManifestResolver;
33
+ }): string | undefined;
28
34
  //# sourceMappingURL=LoopNode.helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoopNode.helpers.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,EACT,QAAQ,EACR,KAAK,iBAAiB,EACvB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAuB,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAOtF,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAI5F,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,CAAC;AACxD,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,kBAAkB,EAAE,QAAQ,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,iCAAiC;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,QAAQ,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,gCAAgC,GAAG,CAC7C,IAAI,EAAE,IAAI,KACP,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,qBAAqB,CAAC,GAAG,SAAS,CAAC;AAOvE,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAAE,GAC5B,oBAAoB,EAAE,CAaxB;AAMD,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;;;EAQrE;AAwBD,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,qBAAqB,CAAC,GAAG,SAAS,EAC/D,OAAO,EAAE,iBAAiB,GACzB,iCAAiC,GAAG,IAAI,CAgB1C;AAuDD,wBAAgB,8BAA8B,CAAC,EAC7C,MAAM,EACN,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACtC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,kBAAkB,EAAE,gCAAgC,CAAC;CACtD,GAAG,qBAAqB,GAAG,IAAI,CAuC/B"}
1
+ {"version":3,"file":"LoopNode.helpers.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,EACT,KAAK,IAAI,EACT,QAAQ,EACR,KAAK,iBAAiB,EACvB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAuB,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAOtF,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAE7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAI5F,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,OAAO,CAAC;AACxD,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,kBAAkB,EAAE,QAAQ,CAAC;CAC9B,CAAC;AAEF,MAAM,WAAW,iCAAiC;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,QAAQ,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,gCAAgC,GAAG,CAC7C,IAAI,EAAE,IAAI,KACP,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,qBAAqB,CAAC,GAAG,SAAS,CAAC;AAOvE,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,mBAAmB,EAAE,GAC5B,oBAAoB,EAAE,CAaxB;AAMD,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;;;EAQrE;AAwBD,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,qBAAqB,CAAC,GAAG,SAAS,EAC/D,OAAO,EAAE,iBAAiB,GACzB,iCAAiC,GAAG,IAAI,CAgB1C;AA4DD,wBAAgB,8BAA8B,CAAC,EAC7C,MAAM,EACN,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,gBAAgB,EAAE,QAAQ,GAAG,QAAQ,CAAC;IACtC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,kBAAkB,EAAE,gCAAgC,CAAC;IACrD,YAAY,CAAC,EAAE,IAAI,CAAC;CACrB,GAAG,qBAAqB,GAAG,IAAI,CA+C/B;AAMD,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,iBAAiB,EACjB,kBAAkB,GACnB,EAAE;IACD,MAAM,EAAE,eAAe,CAAC;IACxB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,kBAAkB,EAAE,gCAAgC,CAAC;CACtD,GAAG,MAAM,GAAG,SAAS,CAarB"}
@@ -71,7 +71,7 @@ function pickPreferredInnerHandle(groups, type) {
71
71
  }
72
72
  return null;
73
73
  }
74
- function resolveClickedHandleType({ source, reactFlowInstance, getManifestForNode }) {
74
+ function resolveClickedHandle({ source, reactFlowInstance, getManifestForNode }) {
75
75
  if (!source.handleId) return;
76
76
  const sourceNode = reactFlowInstance.getNode(source.nodeId);
77
77
  if (!sourceNode) return;
@@ -85,20 +85,27 @@ function resolveClickedHandleType({ source, reactFlowInstance, getManifestForNod
85
85
  });
86
86
  for (const group of sourceHandles){
87
87
  const handle = group.handles.find((candidate)=>candidate.id === source.handleId);
88
- if (handle) return handle.handleType;
88
+ if (handle) return {
89
+ boundary: group.boundary ?? 'outer',
90
+ handleType: handle.handleType
91
+ };
89
92
  }
90
93
  }
91
- function resolveContainerAddNodePreview({ source, sourceHandleType, reactFlowInstance, getManifestForNode }) {
92
- const clickedHandleType = resolveClickedHandleType({
94
+ function resolveContainerAddNodePreview({ source, sourceHandleType, reactFlowInstance, getManifestForNode, replacedEdge }) {
95
+ const clickedHandle = resolveClickedHandle({
93
96
  source,
94
97
  reactFlowInstance,
95
98
  getManifestForNode
96
99
  });
97
- if ('output' !== clickedHandleType) return null;
100
+ if (clickedHandle?.handleType !== 'output') return null;
101
+ const sourceNode = reactFlowInstance.getNode(source.nodeId);
102
+ const sourceIsContainer = void 0 !== sourceNode && isContainerNodeManifest(getManifestForNode(sourceNode));
103
+ if (sourceIsContainer && 'inner' !== clickedHandle.boundary) return null;
98
104
  return resolveContainerPreview({
99
105
  source,
100
106
  sourceHandleType,
101
107
  reactFlowInstance,
108
+ replacedEdge,
102
109
  isContainerNode: (node)=>isContainerNodeManifest(getManifestForNode(node)),
103
110
  getContainerSafeArea: getContainerSafeArea,
104
111
  getContainerContinuationTarget: ({ containerNode })=>{
@@ -113,4 +120,14 @@ function resolveContainerAddNodePreview({ source, sourceHandleType, reactFlowIns
113
120
  }
114
121
  });
115
122
  }
116
- export { getContainerRelativeBodyCenter, resolveContainerAddNodePreview, resolveContainerHandleGroups, resolveContainerPreviewConnectionHandles };
123
+ function getInnerHandleContainerId({ source, reactFlowInstance, getManifestForNode }) {
124
+ const sourceNode = reactFlowInstance.getNode(source.nodeId);
125
+ if (!sourceNode || !isContainerNodeManifest(getManifestForNode(sourceNode))) return;
126
+ const clickedHandle = resolveClickedHandle({
127
+ source,
128
+ reactFlowInstance,
129
+ getManifestForNode
130
+ });
131
+ return clickedHandle?.boundary === 'inner' ? sourceNode.id : void 0;
132
+ }
133
+ export { getContainerRelativeBodyCenter, getInnerHandleContainerId, resolveContainerAddNodePreview, resolveContainerHandleGroups, resolveContainerPreviewConnectionHandles };
@@ -29,7 +29,7 @@ __webpack_require__.d(__webpack_exports__, {
29
29
  const react_cjs_namespaceObject = require("../../../xyflow/react.cjs");
30
30
  const external_react_namespaceObject = require("react");
31
31
  const external_constants_cjs_namespaceObject = require("../../../constants.cjs");
32
- const index_cjs_namespaceObject = require("../../../core/index.cjs");
32
+ const useCanvasNodeLayout_cjs_namespaceObject = require("../../../hooks/useCanvasNodeLayout.cjs");
33
33
  const createPreviewGraph_cjs_namespaceObject = require("../../../utils/createPreviewGraph.cjs");
34
34
  const createPreviewNode_cjs_namespaceObject = require("../../../utils/createPreviewNode.cjs");
35
35
  const BaseCanvasModeProvider_cjs_namespaceObject = require("../../BaseCanvas/BaseCanvasModeProvider.cjs");
@@ -37,12 +37,9 @@ const LoopNode_helpers_cjs_namespaceObject = require("../../LoopNode/LoopNode.he
37
37
  const external_useEdgeToolbarPositioning_cjs_namespaceObject = require("./useEdgeToolbarPositioning.cjs");
38
38
  function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target, sourceHandleId, targetHandleId, sourcePosition, targetPosition, ignoredNodeTypes }) {
39
39
  const reactFlow = (0, react_cjs_namespaceObject.useReactFlow)();
40
- const registry = (0, index_cjs_namespaceObject.useOptionalNodeTypeRegistry)();
40
+ const { getManifestForNode } = (0, useCanvasNodeLayout_cjs_namespaceObject.useCanvasNodeLayout)();
41
41
  const { mode } = (0, BaseCanvasModeProvider_cjs_namespaceObject.useBaseCanvasMode)();
42
42
  const isDesignMode = 'design' === mode;
43
- const getManifestForNode = (0, external_react_namespaceObject.useCallback)((node)=>node.type ? registry?.getManifest(node.type) : void 0, [
44
- registry
45
- ]);
46
43
  const previewEdge = (0, createPreviewNode_cjs_namespaceObject.isPreviewEdge)({
47
44
  id: edgeId,
48
45
  source,
@@ -60,12 +57,13 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
60
57
  nodeId: source,
61
58
  handleId: sourceHandleId ?? external_constants_cjs_namespaceObject.DEFAULT_SOURCE_HANDLE_ID
62
59
  };
63
- const containerOverrides = registry ? (0, LoopNode_helpers_cjs_namespaceObject.resolveContainerAddNodePreview)({
60
+ const containerOverrides = (0, LoopNode_helpers_cjs_namespaceObject.resolveContainerAddNodePreview)({
64
61
  source: sourceEndpoint,
65
62
  sourceHandleType: 'source',
66
63
  reactFlowInstance: reactFlow,
67
- getManifestForNode
68
- }) : null;
64
+ getManifestForNode,
65
+ replacedEdge: originalEdge
66
+ });
69
67
  (0, createPreviewGraph_cjs_namespaceObject.showPreviewGraph)({
70
68
  source: sourceEndpoint,
71
69
  reactFlowInstance: reactFlow,
@@ -88,7 +86,6 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
88
86
  source,
89
87
  sourceHandleId,
90
88
  reactFlow,
91
- registry,
92
89
  getManifestForNode,
93
90
  target,
94
91
  targetHandleId,
@@ -1 +1 @@
1
- {"version":3,"file":"useEdgeToolbarState.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAgB,MAAM,0CAA0C,CAAC;AAQlG,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGtF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACnD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC3D;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,cAAc,EACd,SAAS,EACT,MAAM,EACN,MAAM,EACN,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,EAAE,wBAAwB,GAAG,gBAAgB,CA+F7C"}
1
+ {"version":3,"file":"useEdgeToolbarState.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,0CAA0C,CAAC;AAQvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGtF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACnD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC3D;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,cAAc,EACd,SAAS,EACT,MAAM,EACN,MAAM,EACN,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,EAAE,wBAAwB,GAAG,gBAAgB,CAyF7C"}
@@ -1,7 +1,7 @@
1
1
  import { useReactFlow } from "../../../xyflow/react.js";
2
2
  import { useCallback, useMemo } from "react";
3
3
  import { DEFAULT_SOURCE_HANDLE_ID } from "../../../constants.js";
4
- import { useOptionalNodeTypeRegistry } from "../../../core/index.js";
4
+ import { useCanvasNodeLayout } from "../../../hooks/useCanvasNodeLayout.js";
5
5
  import { showPreviewGraph } from "../../../utils/createPreviewGraph.js";
6
6
  import { isPreviewEdge } from "../../../utils/createPreviewNode.js";
7
7
  import { useBaseCanvasMode } from "../../BaseCanvas/BaseCanvasModeProvider.js";
@@ -9,12 +9,9 @@ import { resolveContainerAddNodePreview } from "../../LoopNode/LoopNode.helpers.
9
9
  import { useEdgeToolbarPositioning } from "./useEdgeToolbarPositioning.js";
10
10
  function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target, sourceHandleId, targetHandleId, sourcePosition, targetPosition, ignoredNodeTypes }) {
11
11
  const reactFlow = useReactFlow();
12
- const registry = useOptionalNodeTypeRegistry();
12
+ const { getManifestForNode } = useCanvasNodeLayout();
13
13
  const { mode } = useBaseCanvasMode();
14
14
  const isDesignMode = 'design' === mode;
15
- const getManifestForNode = useCallback((node)=>node.type ? registry?.getManifest(node.type) : void 0, [
16
- registry
17
- ]);
18
15
  const previewEdge = isPreviewEdge({
19
16
  id: edgeId,
20
17
  source,
@@ -32,12 +29,13 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
32
29
  nodeId: source,
33
30
  handleId: sourceHandleId ?? DEFAULT_SOURCE_HANDLE_ID
34
31
  };
35
- const containerOverrides = registry ? resolveContainerAddNodePreview({
32
+ const containerOverrides = resolveContainerAddNodePreview({
36
33
  source: sourceEndpoint,
37
34
  sourceHandleType: 'source',
38
35
  reactFlowInstance: reactFlow,
39
- getManifestForNode
40
- }) : null;
36
+ getManifestForNode,
37
+ replacedEdge: originalEdge
38
+ });
41
39
  showPreviewGraph({
42
40
  source: sourceEndpoint,
43
41
  reactFlowInstance: reactFlow,
@@ -60,7 +58,6 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
60
58
  source,
61
59
  sourceHandleId,
62
60
  reactFlow,
63
- registry,
64
61
  getManifestForNode,
65
62
  target,
66
63
  targetHandleId,
@@ -15,6 +15,9 @@ var __webpack_modules__ = {
15
15
  "./useCanvasEvents" (module) {
16
16
  module.exports = require("./useCanvasEvents.cjs");
17
17
  },
18
+ "./useCanvasNodeLayout" (module) {
19
+ module.exports = require("./useCanvasNodeLayout.cjs");
20
+ },
18
21
  "./useEdgePath" (module) {
19
22
  module.exports = require("./useEdgePath.cjs");
20
23
  },
@@ -90,29 +93,33 @@ var __webpack_exports__ = {};
90
93
  var __rspack_reexport = {};
91
94
  for(const __rspack_import_key in _useCanvasEvents__rspack_import_3)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useCanvasEvents__rspack_import_3[__rspack_import_key];
92
95
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
93
- var _useEdgePath__rspack_import_4 = __webpack_require__("./useEdgePath");
96
+ var _useCanvasNodeLayout__rspack_import_4 = __webpack_require__("./useCanvasNodeLayout");
97
+ var __rspack_reexport = {};
98
+ for(const __rspack_import_key in _useCanvasNodeLayout__rspack_import_4)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useCanvasNodeLayout__rspack_import_4[__rspack_import_key];
99
+ __webpack_require__.d(__webpack_exports__, __rspack_reexport);
100
+ var _useEdgePath__rspack_import_5 = __webpack_require__("./useEdgePath");
94
101
  var __rspack_reexport = {};
95
- for(const __rspack_import_key in _useEdgePath__rspack_import_4)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useEdgePath__rspack_import_4[__rspack_import_key];
102
+ for(const __rspack_import_key in _useEdgePath__rspack_import_5)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useEdgePath__rspack_import_5[__rspack_import_key];
96
103
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
97
- var _useExportCanvas__rspack_import_5 = __webpack_require__("./useExportCanvas");
104
+ var _useExportCanvas__rspack_import_6 = __webpack_require__("./useExportCanvas");
98
105
  var __rspack_reexport = {};
99
- for(const __rspack_import_key in _useExportCanvas__rspack_import_5)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useExportCanvas__rspack_import_5[__rspack_import_key];
106
+ for(const __rspack_import_key in _useExportCanvas__rspack_import_6)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useExportCanvas__rspack_import_6[__rspack_import_key];
100
107
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
101
- var _useNavigationState__rspack_import_6 = __webpack_require__("./useNavigationState");
108
+ var _useNavigationState__rspack_import_7 = __webpack_require__("./useNavigationState");
102
109
  var __rspack_reexport = {};
103
- for(const __rspack_import_key in _useNavigationState__rspack_import_6)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useNavigationState__rspack_import_6[__rspack_import_key];
110
+ for(const __rspack_import_key in _useNavigationState__rspack_import_7)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useNavigationState__rspack_import_7[__rspack_import_key];
104
111
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
105
- var _usePreviewNode__rspack_import_7 = __webpack_require__("./usePreviewNode");
112
+ var _usePreviewNode__rspack_import_8 = __webpack_require__("./usePreviewNode");
106
113
  var __rspack_reexport = {};
107
- for(const __rspack_import_key in _usePreviewNode__rspack_import_7)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_usePreviewNode__rspack_import_7[__rspack_import_key];
114
+ for(const __rspack_import_key in _usePreviewNode__rspack_import_8)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_usePreviewNode__rspack_import_8[__rspack_import_key];
108
115
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
109
- var _useStorageState__rspack_import_8 = __webpack_require__("./useStorageState");
116
+ var _useStorageState__rspack_import_9 = __webpack_require__("./useStorageState");
110
117
  var __rspack_reexport = {};
111
- for(const __rspack_import_key in _useStorageState__rspack_import_8)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useStorageState__rspack_import_8[__rspack_import_key];
118
+ for(const __rspack_import_key in _useStorageState__rspack_import_9)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_useStorageState__rspack_import_9[__rspack_import_key];
112
119
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
113
- var _ValidationStatusContext__rspack_import_9 = __webpack_require__("./ValidationStatusContext");
120
+ var _ValidationStatusContext__rspack_import_10 = __webpack_require__("./ValidationStatusContext");
114
121
  var __rspack_reexport = {};
115
- for(const __rspack_import_key in _ValidationStatusContext__rspack_import_9)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_ValidationStatusContext__rspack_import_9[__rspack_import_key];
122
+ for(const __rspack_import_key in _ValidationStatusContext__rspack_import_10)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_ValidationStatusContext__rspack_import_10[__rspack_import_key];
116
123
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
117
124
  })();
118
125
  for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
@@ -2,6 +2,7 @@ export * from './ExecutionStatusContext';
2
2
  export * from './ToolbarActionContext';
3
3
  export * from './useAddNodeOnConnectEnd';
4
4
  export * from './useCanvasEvents';
5
+ export * from './useCanvasNodeLayout';
5
6
  export * from './useEdgePath';
6
7
  export * from './useExportCanvas';
7
8
  export * from './useNavigationState';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/canvas/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/canvas/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC"}
@@ -2,6 +2,7 @@ export * from "./ExecutionStatusContext.js";
2
2
  export * from "./ToolbarActionContext.js";
3
3
  export * from "./useAddNodeOnConnectEnd.js";
4
4
  export * from "./useCanvasEvents.js";
5
+ export * from "./useCanvasNodeLayout.js";
5
6
  export * from "./useEdgePath.js";
6
7
  export * from "./useExportCanvas.js";
7
8
  export * from "./useNavigationState.js";
@@ -28,7 +28,9 @@ __webpack_require__.d(__webpack_exports__, {
28
28
  });
29
29
  const react_cjs_namespaceObject = require("../xyflow/react.cjs");
30
30
  const external_react_namespaceObject = require("react");
31
+ const LoopNode_helpers_cjs_namespaceObject = require("../components/LoopNode/LoopNode.helpers.cjs");
31
32
  const index_cjs_namespaceObject = require("../utils/index.cjs");
33
+ const external_useCanvasNodeLayout_cjs_namespaceObject = require("./useCanvasNodeLayout.cjs");
32
34
  const EMPTY_IGNORED_NODE_TYPES = [];
33
35
  function getClientPosition(event) {
34
36
  if ('clientX' in event) return {
@@ -43,24 +45,35 @@ function getClientPosition(event) {
43
45
  }
44
46
  function useAddNodeOnConnectEnd(ignoredNodeTypes = EMPTY_IGNORED_NODE_TYPES) {
45
47
  const reactFlowInstance = (0, react_cjs_namespaceObject.useReactFlow)();
48
+ const getManifestForNode = (0, external_useCanvasNodeLayout_cjs_namespaceObject.useNodeManifestResolver)();
46
49
  return (0, external_react_namespaceObject.useCallback)((event, connectionState)=>{
47
50
  if (!(reactFlowInstance && connectionState.fromNode && connectionState.fromHandle) || connectionState.toHandle) return;
48
51
  const clientPosition = getClientPosition(event);
49
52
  if (!clientPosition) return;
50
53
  const flowDropPosition = reactFlowInstance.screenToFlowPosition(clientPosition);
54
+ const source = {
55
+ nodeId: connectionState.fromNode.id,
56
+ handleId: connectionState.fromHandle.id ?? 'output'
57
+ };
58
+ const containerId = (0, LoopNode_helpers_cjs_namespaceObject.getInnerHandleContainerId)({
59
+ source,
60
+ reactFlowInstance,
61
+ getManifestForNode
62
+ });
51
63
  (0, index_cjs_namespaceObject.showPreviewGraph)({
52
- source: {
53
- nodeId: connectionState.fromNode.id,
54
- handleId: connectionState.fromHandle.id ?? 'output'
55
- },
64
+ source,
56
65
  reactFlowInstance,
57
66
  position: flowDropPosition,
58
67
  sourceHandleType: connectionState.fromHandle.type,
59
68
  handlePosition: connectionState.fromHandle.position,
60
- ignoredNodeTypes
69
+ ignoredNodeTypes,
70
+ ...containerId ? {
71
+ containerId
72
+ } : {}
61
73
  });
62
74
  }, [
63
75
  reactFlowInstance,
76
+ getManifestForNode,
64
77
  ignoredNodeTypes
65
78
  ]);
66
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useAddNodeOnConnectEnd.d.ts","sourceRoot":"","sources":["../../../src/canvas/hooks/useAddNodeOnConnectEnd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,0CAA0C,CAAC;AAoB3F,wBAAgB,sBAAsB,CAAC,gBAAgB,GAAE,MAAM,EAA6B,gBAiC3F"}
1
+ {"version":3,"file":"useAddNodeOnConnectEnd.d.ts","sourceRoot":"","sources":["../../../src/canvas/hooks/useAddNodeOnConnectEnd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,0CAA0C,CAAC;AAsB3F,wBAAgB,sBAAsB,CAAC,gBAAgB,GAAE,MAAM,EAA6B,gBAyC3F"}
@@ -1,6 +1,8 @@
1
1
  import { useReactFlow } from "../xyflow/react.js";
2
2
  import { useCallback } from "react";
3
+ import { getInnerHandleContainerId } from "../components/LoopNode/LoopNode.helpers.js";
3
4
  import { showPreviewGraph } from "../utils/index.js";
5
+ import { useNodeManifestResolver } from "./useCanvasNodeLayout.js";
4
6
  const EMPTY_IGNORED_NODE_TYPES = [];
5
7
  function getClientPosition(event) {
6
8
  if ('clientX' in event) return {
@@ -15,24 +17,35 @@ function getClientPosition(event) {
15
17
  }
16
18
  function useAddNodeOnConnectEnd(ignoredNodeTypes = EMPTY_IGNORED_NODE_TYPES) {
17
19
  const reactFlowInstance = useReactFlow();
20
+ const getManifestForNode = useNodeManifestResolver();
18
21
  return useCallback((event, connectionState)=>{
19
22
  if (!(reactFlowInstance && connectionState.fromNode && connectionState.fromHandle) || connectionState.toHandle) return;
20
23
  const clientPosition = getClientPosition(event);
21
24
  if (!clientPosition) return;
22
25
  const flowDropPosition = reactFlowInstance.screenToFlowPosition(clientPosition);
26
+ const source = {
27
+ nodeId: connectionState.fromNode.id,
28
+ handleId: connectionState.fromHandle.id ?? 'output'
29
+ };
30
+ const containerId = getInnerHandleContainerId({
31
+ source,
32
+ reactFlowInstance,
33
+ getManifestForNode
34
+ });
23
35
  showPreviewGraph({
24
- source: {
25
- nodeId: connectionState.fromNode.id,
26
- handleId: connectionState.fromHandle.id ?? 'output'
27
- },
36
+ source,
28
37
  reactFlowInstance,
29
38
  position: flowDropPosition,
30
39
  sourceHandleType: connectionState.fromHandle.type,
31
40
  handlePosition: connectionState.fromHandle.position,
32
- ignoredNodeTypes
41
+ ignoredNodeTypes,
42
+ ...containerId ? {
43
+ containerId
44
+ } : {}
33
45
  });
34
46
  }, [
35
47
  reactFlowInstance,
48
+ getManifestForNode,
36
49
  ignoredNodeTypes
37
50
  ]);
38
51
  }
@@ -0,0 +1,66 @@
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
+ useCanvasNodeLayout: ()=>useCanvasNodeLayout,
28
+ useNodeManifestResolver: ()=>useNodeManifestResolver
29
+ });
30
+ const external_react_namespaceObject = require("react");
31
+ const index_cjs_namespaceObject = require("../core/index.cjs");
32
+ const collapse_cjs_namespaceObject = require("../utils/collapse.cjs");
33
+ const container_cjs_namespaceObject = require("../utils/container.cjs");
34
+ function useNodeManifestResolver() {
35
+ const registry = (0, index_cjs_namespaceObject.useOptionalNodeTypeRegistry)();
36
+ return (0, external_react_namespaceObject.useCallback)((node)=>node.type ? registry?.getManifest(node.type) : void 0, [
37
+ registry
38
+ ]);
39
+ }
40
+ function useCanvasNodeLayout() {
41
+ const getManifestForNode = useNodeManifestResolver();
42
+ return (0, external_react_namespaceObject.useMemo)(()=>{
43
+ const getNodeDimensions = (node)=>{
44
+ const manifest = getManifestForNode(node);
45
+ return (0, container_cjs_namespaceObject.getNodeDimensions)(node, (0, collapse_cjs_namespaceObject.getExpandedSize)(manifest?.display.shape));
46
+ };
47
+ const isContainerNode = (node)=>(0, container_cjs_namespaceObject.isContainerNodeManifest)(getManifestForNode(node));
48
+ return {
49
+ getManifestForNode,
50
+ getNodeDimensions,
51
+ isContainerNode,
52
+ getContainerFitGeometry: (node)=>isContainerNode(node) ? (0, container_cjs_namespaceObject.getContainerFitGeometry)() : null
53
+ };
54
+ }, [
55
+ getManifestForNode
56
+ ]);
57
+ }
58
+ exports.useCanvasNodeLayout = __webpack_exports__.useCanvasNodeLayout;
59
+ exports.useNodeManifestResolver = __webpack_exports__.useNodeManifestResolver;
60
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
61
+ "useCanvasNodeLayout",
62
+ "useNodeManifestResolver"
63
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
64
+ Object.defineProperty(exports, '__esModule', {
65
+ value: true
66
+ });
@@ -0,0 +1,15 @@
1
+ import type { Node } from '../xyflow/react.ts';
2
+ import type { NodeManifest } from '../schema/node-definition';
3
+ import { type ContainerFitGeometry, type NodeDimensions } from '../utils/container';
4
+ export type NodeManifestResolver = (node: Node) => NodeManifest | undefined;
5
+ export interface NodeLayout {
6
+ getNodeDimensions: (node: Node) => NodeDimensions;
7
+ isContainerNode: (node: Node) => boolean;
8
+ getContainerFitGeometry: (node: Node) => ContainerFitGeometry | null;
9
+ }
10
+ export interface CanvasNodeLayout extends NodeLayout {
11
+ getManifestForNode: NodeManifestResolver;
12
+ }
13
+ export declare function useNodeManifestResolver(): NodeManifestResolver;
14
+ export declare function useCanvasNodeLayout(): CanvasNodeLayout;
15
+ //# sourceMappingURL=useCanvasNodeLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCanvasNodeLayout.d.ts","sourceRoot":"","sources":["../../../src/canvas/hooks/useCanvasNodeLayout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAGrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EACL,KAAK,oBAAoB,EAIzB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,YAAY,GAAG,SAAS,CAAC;AAE5E,MAAM,WAAW,UAAU;IACzB,iBAAiB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,cAAc,CAAC;IAClD,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;IACzC,uBAAuB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,oBAAoB,GAAG,IAAI,CAAC;CACtE;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,kBAAkB,EAAE,oBAAoB,CAAC;CAC1C;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CAO9D;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAoBtD"}
@@ -0,0 +1,29 @@
1
+ import { useCallback, useMemo } from "react";
2
+ import { useOptionalNodeTypeRegistry } from "../core/index.js";
3
+ import { getExpandedSize } from "../utils/collapse.js";
4
+ import { getContainerFitGeometry, getNodeDimensions as container_js_getNodeDimensions, isContainerNodeManifest } from "../utils/container.js";
5
+ function useNodeManifestResolver() {
6
+ const registry = useOptionalNodeTypeRegistry();
7
+ return useCallback((node)=>node.type ? registry?.getManifest(node.type) : void 0, [
8
+ registry
9
+ ]);
10
+ }
11
+ function useCanvasNodeLayout() {
12
+ const getManifestForNode = useNodeManifestResolver();
13
+ return useMemo(()=>{
14
+ const getNodeDimensions = (node)=>{
15
+ const manifest = getManifestForNode(node);
16
+ return container_js_getNodeDimensions(node, getExpandedSize(manifest?.display.shape));
17
+ };
18
+ const isContainerNode = (node)=>isContainerNodeManifest(getManifestForNode(node));
19
+ return {
20
+ getManifestForNode,
21
+ getNodeDimensions,
22
+ isContainerNode,
23
+ getContainerFitGeometry: (node)=>isContainerNode(node) ? getContainerFitGeometry() : null
24
+ };
25
+ }, [
26
+ getManifestForNode
27
+ ]);
28
+ }
29
+ export { useCanvasNodeLayout, useNodeManifestResolver };
@@ -69,11 +69,11 @@ const snapToGrid = (value)=>Math.round(value / external_constants_cjs_namespaceO
69
69
  const snapUpToGrid = (value)=>Math.ceil(value / external_constants_cjs_namespaceObject.GRID_SPACING) * external_constants_cjs_namespaceObject.GRID_SPACING;
70
70
  const snapDownToGrid = (value)=>Math.floor(value / external_constants_cjs_namespaceObject.GRID_SPACING) * external_constants_cjs_namespaceObject.GRID_SPACING;
71
71
  const clamp = (value, min, max)=>Math.min(Math.max(value, min), max);
72
- function getBoxesFromNodes(nodes, margin = 0, getNodeSize) {
72
+ function getBoxesFromNodes(nodes, margin = 0, getNodeDimensions) {
73
73
  const boxes = new Array(nodes.length);
74
74
  for(let i = 0; i < nodes.length; i++){
75
75
  const node = nodes[i];
76
- const nodeSize = getNodeSize?.(node) ?? {
76
+ const nodeSize = getNodeDimensions?.(node) ?? {
77
77
  width: node.width ?? node.measured?.width ?? external_constants_cjs_namespaceObject.DEFAULT_NODE_SIZE,
78
78
  height: node.height ?? node.measured?.height ?? external_constants_cjs_namespaceObject.DEFAULT_NODE_SIZE
79
79
  };
@@ -88,10 +88,10 @@ function getBoxesFromNodes(nodes, margin = 0, getNodeSize) {
88
88
  }
89
89
  return boxes;
90
90
  }
91
- const resolveCollisions = (nodes, { maxIterations = 50, overlapThreshold = 0, margin = 2 * external_constants_cjs_namespaceObject.GRID_SPACING, ignoredNodeTypes, getNodeSize } = {})=>{
91
+ const resolveCollisions = (nodes, { maxIterations = 50, overlapThreshold = 0, margin = 2 * external_constants_cjs_namespaceObject.GRID_SPACING, ignoredNodeTypes, getNodeDimensions } = {})=>{
92
92
  const ignoredSet = new Set(ignoredNodeTypes);
93
93
  const collisionNodes = ignoredSet.size > 0 ? nodes.filter((n)=>!ignoredSet.has(n.type ?? '')) : nodes;
94
- const boxes = getBoxesFromNodes(collisionNodes, margin, getNodeSize);
94
+ const boxes = getBoxesFromNodes(collisionNodes, margin, getNodeDimensions);
95
95
  for(let iter = 0; iter < maxIterations; iter++){
96
96
  let moved = false;
97
97
  for(let i = 0; i < boxes.length; i++)for(let j = i + 1; j < boxes.length; j++){
@@ -20,7 +20,7 @@ export type CollisionAlgorithmOptions = {
20
20
  overlapThreshold?: number;
21
21
  margin?: number;
22
22
  ignoredNodeTypes?: string[];
23
- getNodeSize?: (node: Node) => {
23
+ getNodeDimensions?: (node: Node) => {
24
24
  width: number;
25
25
  height: number;
26
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"NodeUtils.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/NodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,QAAQ,EACR,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,0CAA0C,CAAC;AAQlD,eAAO,MAAM,kBAAkB,GAAI,OAAO,cAAc,YAAkC,CAAC;AAS3F,eAAO,MAAM,mBAAmB,GAAI,MAAM,IAAI,EAAE,OAAO,IAAI,EAAE,KAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAWrF,CAAC;AAeF,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,IAAI,EAAE,EACb,eAAe,EAAE,UAAU,EAC3B,YAAY,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAC9C,MAAM,SAAmB,EACzB,gBAAgB,GAAE,MAAM,EAAO,EAC/B,iBAAiB,GAAE;IAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAA8B,GACvF,UAAU,CAgCZ;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAE1C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAE5C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAE9C,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAE/D,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,yBAAyB,KAAK,IAAI,EAAE,CAAC;AAyChG,eAAO,MAAM,iBAAiB,EAAE,kBA8E/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AASF,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzF,MAAM,WAAW,2BAA2B;IAC1C,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAMD,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,QAAQ,EACxB,OAAO,CAAC,EAAE,2BAA2B,GACpC,aAAa,GAAG,SAAS,CAkB3B;AAoCD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,GAAG,IAAI,CAQf"}
1
+ {"version":3,"file":"NodeUtils.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/NodeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,QAAQ,EACR,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,0CAA0C,CAAC;AAQlD,eAAO,MAAM,kBAAkB,GAAI,OAAO,cAAc,YAAkC,CAAC;AAS3F,eAAO,MAAM,mBAAmB,GAAI,MAAM,IAAI,EAAE,OAAO,IAAI,EAAE,KAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAWrF,CAAC;AAeF,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,IAAI,EAAE,EACb,eAAe,EAAE,UAAU,EAC3B,YAAY,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC/C,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,EAC9C,MAAM,SAAmB,EACzB,gBAAgB,GAAE,MAAM,EAAO,EAC/B,iBAAiB,GAAE;IAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAA8B,GACvF,UAAU,CAgCZ;AAED,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAE1C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAE5C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAE9C,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAE/D,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE5B,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,yBAAyB,KAAK,IAAI,EAAE,CAAC;AAyChG,eAAO,MAAM,iBAAiB,EAAE,kBA8E/B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AASF,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzF,MAAM,WAAW,2BAA2B;IAC1C,UAAU,CAAC,EAAE,sBAAsB,CAAC;CACrC;AAMD,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,QAAQ,EACxB,OAAO,CAAC,EAAE,2BAA2B,GACpC,aAAa,GAAG,SAAS,CAkB3B;AAoCD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,GAAG,IAAI,CAQf"}
@@ -32,11 +32,11 @@ const snapToGrid = (value)=>Math.round(value / GRID_SPACING) * GRID_SPACING;
32
32
  const snapUpToGrid = (value)=>Math.ceil(value / GRID_SPACING) * GRID_SPACING;
33
33
  const snapDownToGrid = (value)=>Math.floor(value / GRID_SPACING) * GRID_SPACING;
34
34
  const clamp = (value, min, max)=>Math.min(Math.max(value, min), max);
35
- function getBoxesFromNodes(nodes, margin = 0, getNodeSize) {
35
+ function getBoxesFromNodes(nodes, margin = 0, getNodeDimensions) {
36
36
  const boxes = new Array(nodes.length);
37
37
  for(let i = 0; i < nodes.length; i++){
38
38
  const node = nodes[i];
39
- const nodeSize = getNodeSize?.(node) ?? {
39
+ const nodeSize = getNodeDimensions?.(node) ?? {
40
40
  width: node.width ?? node.measured?.width ?? DEFAULT_NODE_SIZE,
41
41
  height: node.height ?? node.measured?.height ?? DEFAULT_NODE_SIZE
42
42
  };
@@ -51,10 +51,10 @@ function getBoxesFromNodes(nodes, margin = 0, getNodeSize) {
51
51
  }
52
52
  return boxes;
53
53
  }
54
- const resolveCollisions = (nodes, { maxIterations = 50, overlapThreshold = 0, margin = 2 * GRID_SPACING, ignoredNodeTypes, getNodeSize } = {})=>{
54
+ const resolveCollisions = (nodes, { maxIterations = 50, overlapThreshold = 0, margin = 2 * GRID_SPACING, ignoredNodeTypes, getNodeDimensions } = {})=>{
55
55
  const ignoredSet = new Set(ignoredNodeTypes);
56
56
  const collisionNodes = ignoredSet.size > 0 ? nodes.filter((n)=>!ignoredSet.has(n.type ?? '')) : nodes;
57
- const boxes = getBoxesFromNodes(collisionNodes, margin, getNodeSize);
57
+ const boxes = getBoxesFromNodes(collisionNodes, margin, getNodeDimensions);
58
58
  for(let iter = 0; iter < maxIterations; iter++){
59
59
  let moved = false;
60
60
  for(let i = 0; i < boxes.length; i++)for(let j = i + 1; j < boxes.length; j++){
@@ -352,12 +352,13 @@ function collectLinearDownstreamSiblings({ startNodeId, parentId, nodes, edges,
352
352
  }
353
353
  return collectedIds;
354
354
  }
355
- function resolveInsertPreview({ source, sourceHandleType, reactFlowInstance, isContainerNode, getContainerSafeArea, previewNodeSize, gap, getNodeDimensions }) {
355
+ function resolveInsertPreview({ source, sourceHandleType, reactFlowInstance, isContainerNode, replacedEdge: exactReplacedEdge, getContainerSafeArea, previewNodeSize, gap, getNodeDimensions }) {
356
356
  if ('source' !== sourceHandleType || !source.handleId) return null;
357
- const replacedEdge = getSingleOutgoingEdge(source.nodeId, source.handleId, reactFlowInstance.getEdges());
357
+ const replacedEdge = exactReplacedEdge ?? getSingleOutgoingEdge(source.nodeId, source.handleId, reactFlowInstance.getEdges());
358
358
  if (!replacedEdge) return null;
359
359
  const sourceNode = reactFlowInstance.getNode(replacedEdge.source);
360
360
  const targetNode = reactFlowInstance.getNode(replacedEdge.target);
361
+ if (!sourceNode || !targetNode) return null;
361
362
  const nodes = reactFlowInstance.getNodes();
362
363
  const containerNode = getContainerNodeForEdge(sourceNode, targetNode, nodes);
363
364
  if (!containerNode) return null;
@@ -49,6 +49,7 @@ interface ContainerPreviewContext {
49
49
  }
50
50
  interface ContainerPreviewOptions {
51
51
  isContainerNode?: (node: Node) => boolean;
52
+ replacedEdge?: Edge;
52
53
  getContainerSafeArea?: (containerNode: Node) => ContainerSafeArea | undefined;
53
54
  getContainerContinuationTarget?: (context: {
54
55
  containerNode: Node;
@@ -1 +1 @@
1
- {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/container.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/container.ts"],"names":[],"mappings":"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"}
@@ -308,12 +308,13 @@ function collectLinearDownstreamSiblings({ startNodeId, parentId, nodes, edges,
308
308
  }
309
309
  return collectedIds;
310
310
  }
311
- function resolveInsertPreview({ source, sourceHandleType, reactFlowInstance, isContainerNode, getContainerSafeArea, previewNodeSize, gap, getNodeDimensions }) {
311
+ function resolveInsertPreview({ source, sourceHandleType, reactFlowInstance, isContainerNode, replacedEdge: exactReplacedEdge, getContainerSafeArea, previewNodeSize, gap, getNodeDimensions }) {
312
312
  if ('source' !== sourceHandleType || !source.handleId) return null;
313
- const replacedEdge = getSingleOutgoingEdge(source.nodeId, source.handleId, reactFlowInstance.getEdges());
313
+ const replacedEdge = exactReplacedEdge ?? getSingleOutgoingEdge(source.nodeId, source.handleId, reactFlowInstance.getEdges());
314
314
  if (!replacedEdge) return null;
315
315
  const sourceNode = reactFlowInstance.getNode(replacedEdge.source);
316
316
  const targetNode = reactFlowInstance.getNode(replacedEdge.target);
317
+ if (!sourceNode || !targetNode) return null;
317
318
  const nodes = reactFlowInstance.getNodes();
318
319
  const containerNode = getContainerNodeForEdge(sourceNode, targetNode, nodes);
319
320
  if (!containerNode) return null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uipath/apollo-react",
3
- "version": "4.22.2",
3
+ "version": "4.22.3",
4
4
  "description": "Apollo Design System - React component library with Material UI theming",
5
5
  "repository": {
6
6
  "type": "git",