@uipath/apollo-react 4.17.0 → 4.18.0

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 (67) 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 +154 -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 +114 -0
  7. package/dist/canvas/components/AddNodePanel/AddNodeManager.js +35 -21
  8. package/dist/canvas/components/AddNodePanel/createAddNodePreview.cjs +15 -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 +15 -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 +25 -19
  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 +17 -11
  27. package/dist/canvas/components/LoopNode/LoopNodePreview.cjs +17 -4
  28. package/dist/canvas/components/LoopNode/LoopNodePreview.d.ts.map +1 -1
  29. package/dist/canvas/components/LoopNode/LoopNodePreview.js +17 -4
  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/utils/NodeUtils.cjs +26 -10
  42. package/dist/canvas/utils/NodeUtils.d.ts +7 -0
  43. package/dist/canvas/utils/NodeUtils.d.ts.map +1 -1
  44. package/dist/canvas/utils/NodeUtils.js +13 -6
  45. package/dist/canvas/utils/collapse.cjs +3 -3
  46. package/dist/canvas/utils/collapse.d.ts.map +1 -1
  47. package/dist/canvas/utils/collapse.js +1 -1
  48. package/dist/canvas/utils/container.cjs +643 -0
  49. package/dist/canvas/utils/container.d.ts +97 -0
  50. package/dist/canvas/utils/container.d.ts.map +1 -0
  51. package/dist/canvas/utils/container.js +567 -0
  52. package/dist/canvas/utils/createPreviewGraph.cjs +13 -15
  53. package/dist/canvas/utils/createPreviewGraph.d.ts +9 -7
  54. package/dist/canvas/utils/createPreviewGraph.d.ts.map +1 -1
  55. package/dist/canvas/utils/createPreviewGraph.js +13 -15
  56. package/dist/canvas/utils/createPreviewNode.cjs +16 -10
  57. package/dist/canvas/utils/createPreviewNode.d.ts.map +1 -1
  58. package/dist/canvas/utils/createPreviewNode.js +16 -10
  59. package/dist/canvas/utils/index.cjs +29 -22
  60. package/dist/canvas/utils/index.d.ts +1 -0
  61. package/dist/canvas/utils/index.d.ts.map +1 -1
  62. package/dist/canvas/utils/index.js +1 -0
  63. package/package.json +3 -3
  64. package/dist/canvas/components/LoopNode/LoopNode.constants.cjs +0 -56
  65. package/dist/canvas/components/LoopNode/LoopNode.constants.d.ts +0 -7
  66. package/dist/canvas/components/LoopNode/LoopNode.constants.d.ts.map +0 -1
  67. package/dist/canvas/components/LoopNode/LoopNode.constants.js +0 -7
@@ -2,10 +2,10 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import { NodeResizeControl, useStore, useUpdateNodeInternals } from "../../xyflow/react.js";
3
3
  import { cn } from "@uipath/apollo-wind";
4
4
  import { memo, useCallback, useEffect, useMemo, useState } from "react";
5
- import { DEFAULT_CONTAINER_HEIGHT, DEFAULT_CONTAINER_WIDTH } from "../../constants.js";
6
5
  import { useOptionalNodeTypeRegistry } from "../../core/index.js";
7
6
  import { useElementValidationStatus, useNodeExecutionState } from "../../hooks/index.js";
8
7
  import { resolveAdornments } from "../../utils/adornment-resolver.js";
8
+ import { DEFAULT_CONTAINER_HEIGHT, DEFAULT_CONTAINER_MIN_HEIGHT, DEFAULT_CONTAINER_MIN_WIDTH, DEFAULT_CONTAINER_WIDTH } from "../../utils/container.js";
9
9
  import { CanvasIcon } from "../../utils/icon-registry.js";
10
10
  import { resolveDisplay, resolveHandles } from "../../utils/manifest-resolver.js";
11
11
  import { selectIsConnecting, snapToGrid } from "../../utils/NodeUtils.js";
@@ -18,8 +18,9 @@ import { getStatusBorder } from "../BaseNode/BaseNodeContainer.js";
18
18
  import { MissingManifestNode } from "../BaseNode/BaseNodeMissingManifest.js";
19
19
  import { ButtonHandles } from "../ButtonHandle/index.js";
20
20
  import { NodeToolbar } from "../Toolbar/index.js";
21
- import { DEFAULT_CONTAINER_MIN_HEIGHT, DEFAULT_CONTAINER_MIN_WIDTH, DEFAULT_LOOP_ICON, DEFAULT_LOOP_TITLE } from "./LoopNode.constants.js";
22
21
  import { resolveContainerHandleGroups } from "./LoopNode.helpers.js";
22
+ const DEFAULT_LOOP_ICON = 'repeat';
23
+ const DEFAULT_LOOP_TITLE = 'Loop';
23
24
  const EMPTY_DATA = {};
24
25
  const RESIZE_CONTROLS = [
25
26
  {
@@ -186,7 +187,7 @@ function LoopNodeComponent(props) {
186
187
  ]);
187
188
  const handleMouseEnter = useCallback(()=>setIsHovered(true), []);
188
189
  const handleMouseLeave = useCallback(()=>setIsHovered(false), []);
189
- const handleOuterHandleAction = useCallback((_event)=>{
190
+ const handleHandleAction = useCallback((_event)=>{
190
191
  setIsHovered(false);
191
192
  }, []);
192
193
  const shouldShowHandles = (isConnecting || selected || isHovered) && !dragging;
@@ -264,7 +265,7 @@ function LoopNodeComponent(props) {
264
265
  nodeWidth: containerWidth,
265
266
  nodeHeight: containerHeight,
266
267
  connectedHandleIds: connectedHandleIds,
267
- onOuterHandleAction: handleOuterHandleAction
268
+ onHandleAction: handleHandleAction
268
269
  })
269
270
  ]
270
271
  });
@@ -376,24 +377,29 @@ function HandleGroups({ groups, ...handleGroupProps }) {
376
377
  }, `${group.boundary}:${group.position}:${groupIndex}`))
377
378
  });
378
379
  }
379
- function HandleGroup({ nodeId, group, selected, hovered, shouldShowHandles, showAddButton, showNotches, nodeWidth, nodeHeight, connectedHandleIds, onOuterHandleAction }) {
380
+ function HandleGroup({ nodeId, group, selected, hovered, shouldShowHandles, showAddButton, showNotches, nodeWidth, nodeHeight, connectedHandleIds, onHandleAction }) {
380
381
  const groupVisible = shouldShowHandles && (group.visible ?? true);
381
382
  const position = group.position;
382
383
  const enhancedHandles = useMemo(()=>group.handles.map((handle)=>{
383
- const isInnerSourceHandle = 'inner' === group.boundary && 'source' === handle.type;
384
- const shouldResetHoverOnAction = 'outer' === group.boundary && 'source' === handle.type && handle.showButton;
384
+ const showHandle = connectedHandleIds.has(handle.id) || groupVisible;
385
+ if ('inner' === group.boundary) return {
386
+ ...handle,
387
+ showHandle,
388
+ showButton: false,
389
+ onAction: void 0
390
+ };
385
391
  return {
386
392
  ...handle,
387
- showHandle: connectedHandleIds.has(handle.id) || groupVisible,
388
- showButton: isInnerSourceHandle ? false : handle.showButton,
389
- onAction: handle.onAction ?? (shouldResetHoverOnAction ? onOuterHandleAction : void 0)
393
+ showHandle,
394
+ showButton: handle.showButton,
395
+ onAction: handle.onAction ?? onHandleAction
390
396
  };
391
397
  }), [
392
398
  group.boundary,
393
399
  group.handles,
394
400
  connectedHandleIds,
395
401
  groupVisible,
396
- onOuterHandleAction
402
+ onHandleAction
397
403
  ]);
398
404
  return /*#__PURE__*/ jsx(ButtonHandles, {
399
405
  nodeId: nodeId,
@@ -39,15 +39,28 @@ function showCenteredContainerPreview({ containerId, reactFlowInstance, previewH
39
39
  x: (0, NodeUtils_cjs_namespaceObject.snapToGrid)(containerAbsolutePosition.x + relativeCenter.x),
40
40
  y: (0, NodeUtils_cjs_namespaceObject.snapToGrid)(containerAbsolutePosition.y + relativeCenter.y)
41
41
  };
42
- (0, createPreviewGraph_cjs_namespaceObject.showPreviewGraph)({
42
+ const placement = {
43
+ containerId,
43
44
  sourceNodeId: containerId,
44
- sourceHandleId: previewHandles.sourceHandleId,
45
+ targetNodeId: containerId,
46
+ mode: 'first-child'
47
+ };
48
+ (0, createPreviewGraph_cjs_namespaceObject.showPreviewGraph)({
49
+ source: {
50
+ nodeId: containerId,
51
+ handleId: previewHandles.sourceHandleId
52
+ },
45
53
  reactFlowInstance,
46
54
  position: previewCenter,
47
55
  positionMode: 'center',
48
56
  handlePosition: previewHandles.sourceHandlePosition,
49
- targetNodeId: containerId,
50
- targetHandleId: previewHandles.targetHandleId,
57
+ target: {
58
+ nodeId: containerId,
59
+ handleId: previewHandles.targetHandleId
60
+ },
61
+ data: {
62
+ placement
63
+ },
51
64
  containerId,
52
65
  trailingEdgeId
53
66
  });
@@ -1 +1 @@
1
- {"version":3,"file":"LoopNodePreview.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNodePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,OAAO,EACL,KAAK,iCAAiC,EAEvC,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,4BAA4B,CAAC,EAC3C,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,iCAAiC,CAAC;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,QAwBA"}
1
+ {"version":3,"file":"LoopNodePreview.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNodePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAIlF,OAAO,EACL,KAAK,iCAAiC,EAEvC,MAAM,oBAAoB,CAAC;AAE5B,wBAAgB,4BAA4B,CAAC,EAC3C,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,iCAAiC,CAAC;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,QAmCA"}
@@ -11,15 +11,28 @@ function showCenteredContainerPreview({ containerId, reactFlowInstance, previewH
11
11
  x: snapToGrid(containerAbsolutePosition.x + relativeCenter.x),
12
12
  y: snapToGrid(containerAbsolutePosition.y + relativeCenter.y)
13
13
  };
14
- showPreviewGraph({
14
+ const placement = {
15
+ containerId,
15
16
  sourceNodeId: containerId,
16
- sourceHandleId: previewHandles.sourceHandleId,
17
+ targetNodeId: containerId,
18
+ mode: 'first-child'
19
+ };
20
+ showPreviewGraph({
21
+ source: {
22
+ nodeId: containerId,
23
+ handleId: previewHandles.sourceHandleId
24
+ },
17
25
  reactFlowInstance,
18
26
  position: previewCenter,
19
27
  positionMode: 'center',
20
28
  handlePosition: previewHandles.sourceHandlePosition,
21
- targetNodeId: containerId,
22
- targetHandleId: previewHandles.targetHandleId,
29
+ target: {
30
+ nodeId: containerId,
31
+ handleId: previewHandles.targetHandleId
32
+ },
33
+ data: {
34
+ placement
35
+ },
23
36
  containerId,
24
37
  trailingEdgeId
25
38
  });
@@ -29,14 +29,20 @@ __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
33
  const createPreviewGraph_cjs_namespaceObject = require("../../../utils/createPreviewGraph.cjs");
33
34
  const createPreviewNode_cjs_namespaceObject = require("../../../utils/createPreviewNode.cjs");
34
35
  const BaseCanvasModeProvider_cjs_namespaceObject = require("../../BaseCanvas/BaseCanvasModeProvider.cjs");
36
+ const LoopNode_helpers_cjs_namespaceObject = require("../../LoopNode/LoopNode.helpers.cjs");
35
37
  const external_useEdgeToolbarPositioning_cjs_namespaceObject = require("./useEdgeToolbarPositioning.cjs");
36
38
  function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target, sourceHandleId, targetHandleId, sourcePosition, targetPosition, ignoredNodeTypes }) {
37
39
  const reactFlow = (0, react_cjs_namespaceObject.useReactFlow)();
40
+ const registry = (0, index_cjs_namespaceObject.useOptionalNodeTypeRegistry)();
38
41
  const { mode } = (0, BaseCanvasModeProvider_cjs_namespaceObject.useBaseCanvasMode)();
39
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
+ ]);
40
46
  const previewEdge = (0, createPreviewNode_cjs_namespaceObject.isPreviewEdge)({
41
47
  id: edgeId,
42
48
  source,
@@ -48,36 +54,42 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
48
54
  targetPosition
49
55
  });
50
56
  const handleAddNodeOnEdge = (0, external_react_namespaceObject.useCallback)((position)=>{
51
- const originalEdge = {
52
- id: edgeId,
53
- source,
54
- sourceHandle: sourceHandleId,
55
- target,
56
- targetHandle: targetHandleId,
57
- type: 'default'
57
+ const originalEdge = reactFlow.getEdges().find((edge)=>edge.id === edgeId);
58
+ if (!originalEdge) return;
59
+ const sourceEndpoint = {
60
+ nodeId: source,
61
+ handleId: sourceHandleId ?? external_constants_cjs_namespaceObject.DEFAULT_SOURCE_HANDLE_ID
58
62
  };
63
+ const containerOverrides = registry ? (0, LoopNode_helpers_cjs_namespaceObject.resolveContainerAddNodePreview)({
64
+ source: sourceEndpoint,
65
+ sourceHandleType: 'source',
66
+ reactFlowInstance: reactFlow,
67
+ getManifestForNode
68
+ }) : null;
59
69
  (0, createPreviewGraph_cjs_namespaceObject.showPreviewGraph)({
60
- sourceNodeId: source,
61
- sourceHandleId: sourceHandleId ?? external_constants_cjs_namespaceObject.DEFAULT_SOURCE_HANDLE_ID,
70
+ source: sourceEndpoint,
62
71
  reactFlowInstance: reactFlow,
63
72
  position,
73
+ positionMode: 'drop',
64
74
  data: {
65
75
  originalEdge
66
76
  },
67
77
  sourceHandleType: 'source',
68
78
  handlePosition: sourcePosition,
69
79
  ignoredNodeTypes: ignoredNodeTypes ?? [],
70
- targetNodeId: target,
71
- targetHandleId,
72
- removedEdgeIds: [
73
- edgeId
74
- ]
80
+ target: {
81
+ nodeId: target,
82
+ handleId: targetHandleId
83
+ },
84
+ ...containerOverrides ?? {}
75
85
  });
76
86
  }, [
77
87
  sourcePosition,
78
88
  source,
79
89
  sourceHandleId,
80
90
  reactFlow,
91
+ registry,
92
+ getManifestForNode,
81
93
  target,
82
94
  targetHandleId,
83
95
  edgeId,
@@ -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;AAMlG,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,CAgF7C"}
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,14 +1,20 @@
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
5
  import { showPreviewGraph } from "../../../utils/createPreviewGraph.js";
5
6
  import { isPreviewEdge } from "../../../utils/createPreviewNode.js";
6
7
  import { useBaseCanvasMode } from "../../BaseCanvas/BaseCanvasModeProvider.js";
8
+ import { resolveContainerAddNodePreview } from "../../LoopNode/LoopNode.helpers.js";
7
9
  import { useEdgeToolbarPositioning } from "./useEdgeToolbarPositioning.js";
8
10
  function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target, sourceHandleId, targetHandleId, sourcePosition, targetPosition, ignoredNodeTypes }) {
9
11
  const reactFlow = useReactFlow();
12
+ const registry = useOptionalNodeTypeRegistry();
10
13
  const { mode } = useBaseCanvasMode();
11
14
  const isDesignMode = 'design' === mode;
15
+ const getManifestForNode = useCallback((node)=>node.type ? registry?.getManifest(node.type) : void 0, [
16
+ registry
17
+ ]);
12
18
  const previewEdge = isPreviewEdge({
13
19
  id: edgeId,
14
20
  source,
@@ -20,36 +26,42 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
20
26
  targetPosition
21
27
  });
22
28
  const handleAddNodeOnEdge = useCallback((position)=>{
23
- const originalEdge = {
24
- id: edgeId,
25
- source,
26
- sourceHandle: sourceHandleId,
27
- target,
28
- targetHandle: targetHandleId,
29
- type: 'default'
29
+ const originalEdge = reactFlow.getEdges().find((edge)=>edge.id === edgeId);
30
+ if (!originalEdge) return;
31
+ const sourceEndpoint = {
32
+ nodeId: source,
33
+ handleId: sourceHandleId ?? DEFAULT_SOURCE_HANDLE_ID
30
34
  };
35
+ const containerOverrides = registry ? resolveContainerAddNodePreview({
36
+ source: sourceEndpoint,
37
+ sourceHandleType: 'source',
38
+ reactFlowInstance: reactFlow,
39
+ getManifestForNode
40
+ }) : null;
31
41
  showPreviewGraph({
32
- sourceNodeId: source,
33
- sourceHandleId: sourceHandleId ?? DEFAULT_SOURCE_HANDLE_ID,
42
+ source: sourceEndpoint,
34
43
  reactFlowInstance: reactFlow,
35
44
  position,
45
+ positionMode: 'drop',
36
46
  data: {
37
47
  originalEdge
38
48
  },
39
49
  sourceHandleType: 'source',
40
50
  handlePosition: sourcePosition,
41
51
  ignoredNodeTypes: ignoredNodeTypes ?? [],
42
- targetNodeId: target,
43
- targetHandleId,
44
- removedEdgeIds: [
45
- edgeId
46
- ]
52
+ target: {
53
+ nodeId: target,
54
+ handleId: targetHandleId
55
+ },
56
+ ...containerOverrides ?? {}
47
57
  });
48
58
  }, [
49
59
  sourcePosition,
50
60
  source,
51
61
  sourceHandleId,
52
62
  reactFlow,
63
+ registry,
64
+ getManifestForNode,
53
65
  target,
54
66
  targetHandleId,
55
67
  edgeId,
@@ -25,8 +25,6 @@ var __webpack_exports__ = {};
25
25
  __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  CANVAS_COMPACT_BREAKPOINT: ()=>CANVAS_COMPACT_BREAKPOINT,
28
- DEFAULT_CONTAINER_HEIGHT: ()=>DEFAULT_CONTAINER_HEIGHT,
29
- DEFAULT_CONTAINER_WIDTH: ()=>DEFAULT_CONTAINER_WIDTH,
30
28
  DEFAULT_NODE_SIZE: ()=>DEFAULT_NODE_SIZE,
31
29
  DEFAULT_RECTANGLE_NODE_WIDTH: ()=>DEFAULT_RECTANGLE_NODE_WIDTH,
32
30
  DEFAULT_SOURCE_HANDLE_ID: ()=>DEFAULT_SOURCE_HANDLE_ID,
@@ -60,8 +58,6 @@ const PREVIEW_EDGE_ID = 'preview-edge-id';
60
58
  const DEFAULT_SOURCE_HANDLE_ID = 'output';
61
59
  const DEFAULT_NODE_SIZE = 96;
62
60
  const GRID_SPACING = 16;
63
- const DEFAULT_CONTAINER_WIDTH = 35 * GRID_SPACING;
64
- const DEFAULT_CONTAINER_HEIGHT = 20 * GRID_SPACING;
65
61
  const CANVAS_COMPACT_BREAKPOINT = 600;
66
62
  const TOOLBOX_WIDTH = 320;
67
63
  const TOOLBOX_HEIGHT = 440;
@@ -86,8 +82,6 @@ const NODE_BADGE_SIZE = 20;
86
82
  const NODE_BADGE_INSET_SQUARE = 6;
87
83
  const NODE_BADGE_INSET_CIRCLE = 12;
88
84
  exports.CANVAS_COMPACT_BREAKPOINT = __webpack_exports__.CANVAS_COMPACT_BREAKPOINT;
89
- exports.DEFAULT_CONTAINER_HEIGHT = __webpack_exports__.DEFAULT_CONTAINER_HEIGHT;
90
- exports.DEFAULT_CONTAINER_WIDTH = __webpack_exports__.DEFAULT_CONTAINER_WIDTH;
91
85
  exports.DEFAULT_NODE_SIZE = __webpack_exports__.DEFAULT_NODE_SIZE;
92
86
  exports.DEFAULT_RECTANGLE_NODE_WIDTH = __webpack_exports__.DEFAULT_RECTANGLE_NODE_WIDTH;
93
87
  exports.DEFAULT_SOURCE_HANDLE_ID = __webpack_exports__.DEFAULT_SOURCE_HANDLE_ID;
@@ -117,8 +111,6 @@ exports.TOOLBOX_PADDING_Y = __webpack_exports__.TOOLBOX_PADDING_Y;
117
111
  exports.TOOLBOX_WIDTH = __webpack_exports__.TOOLBOX_WIDTH;
118
112
  for(var __rspack_i in __webpack_exports__)if (-1 === [
119
113
  "CANVAS_COMPACT_BREAKPOINT",
120
- "DEFAULT_CONTAINER_HEIGHT",
121
- "DEFAULT_CONTAINER_WIDTH",
122
114
  "DEFAULT_NODE_SIZE",
123
115
  "DEFAULT_RECTANGLE_NODE_WIDTH",
124
116
  "DEFAULT_SOURCE_HANDLE_ID",
@@ -3,8 +3,6 @@ export declare const PREVIEW_EDGE_ID = "preview-edge-id";
3
3
  export declare const DEFAULT_SOURCE_HANDLE_ID = "output";
4
4
  export declare const DEFAULT_NODE_SIZE = 96;
5
5
  export declare const GRID_SPACING = 16;
6
- export declare const DEFAULT_CONTAINER_WIDTH: number;
7
- export declare const DEFAULT_CONTAINER_HEIGHT: number;
8
6
  export declare const CANVAS_COMPACT_BREAKPOINT = 600;
9
7
  export declare const TOOLBOX_WIDTH = 320;
10
8
  export declare const TOOLBOX_HEIGHT = 440;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/canvas/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,wBAAwB,WAAW,CAAC;AACjD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,YAAY,KAAK,CAAC;AAG/B,eAAO,MAAM,uBAAuB,QAAoB,CAAC;AACzD,eAAO,MAAM,wBAAwB,QAAoB,CAAC;AAG1D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAG7C,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,WAAW,KAAK,CAAC;AAU9B,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAG/C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAGhD,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AACpD,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAC1D,eAAO,MAAM,yBAAyB,QAAoB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,QAAoB,CAAC;AAO3D,eAAO,MAAM,2BAA2B,QAAyB,CAAC;AAClE,eAAO,MAAM,sBAAsB,QAAyB,CAAC;AAC7D,eAAO,MAAM,qBAAqB,QAAyB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,QAAyB,CAAC;AAC9D,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAGlC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAGvC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAGxD,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,uBAAuB,KAAK,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/canvas/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,wBAAwB,WAAW,CAAC;AACjD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,YAAY,KAAK,CAAC;AAG/B,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAG7C,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,WAAW,KAAK,CAAC;AAU9B,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAG/C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAGhD,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AACpD,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAC1D,eAAO,MAAM,yBAAyB,QAAoB,CAAC;AAC3D,eAAO,MAAM,yBAAyB,QAAoB,CAAC;AAO3D,eAAO,MAAM,2BAA2B,QAAyB,CAAC;AAClE,eAAO,MAAM,sBAAsB,QAAyB,CAAC;AAC7D,eAAO,MAAM,qBAAqB,QAAyB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,QAAyB,CAAC;AAC9D,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAGlC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAGvC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAGxD,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,uBAAuB,KAAK,CAAC"}
@@ -3,8 +3,6 @@ const PREVIEW_EDGE_ID = 'preview-edge-id';
3
3
  const DEFAULT_SOURCE_HANDLE_ID = 'output';
4
4
  const DEFAULT_NODE_SIZE = 96;
5
5
  const GRID_SPACING = 16;
6
- const DEFAULT_CONTAINER_WIDTH = 35 * GRID_SPACING;
7
- const DEFAULT_CONTAINER_HEIGHT = 20 * GRID_SPACING;
8
6
  const CANVAS_COMPACT_BREAKPOINT = 600;
9
7
  const TOOLBOX_WIDTH = 320;
10
8
  const TOOLBOX_HEIGHT = 440;
@@ -28,4 +26,4 @@ const NODE_TEXT_BOTTOM_OFFSET_WITH_HANDLES = -40;
28
26
  const NODE_BADGE_SIZE = 20;
29
27
  const NODE_BADGE_INSET_SQUARE = 6;
30
28
  const NODE_BADGE_INSET_CIRCLE = 12;
31
- export { CANVAS_COMPACT_BREAKPOINT, DEFAULT_CONTAINER_HEIGHT, DEFAULT_CONTAINER_WIDTH, DEFAULT_NODE_SIZE, DEFAULT_RECTANGLE_NODE_WIDTH, DEFAULT_SOURCE_HANDLE_ID, FLOATING_CANVAS_PANEL_OFFSET, GRID_SPACING, NODE_BADGE_INSET_CIRCLE, NODE_BADGE_INSET_SQUARE, NODE_BADGE_SIZE, NODE_BORDER_SIZE, NODE_CONTAINER_RADIUS_RATIO, NODE_ERROR_ICON_SIZE, NODE_HEIGHT_DEFAULT, NODE_HEIGHT_FOOTER_BUTTON, NODE_HEIGHT_FOOTER_DOUBLE, NODE_HEIGHT_FOOTER_SINGLE, NODE_INNER_ICON_RATIO, NODE_INNER_RADIUS_RATIO, NODE_INNER_SHAPE_RATIO, NODE_TEXT_BOTTOM_OFFSET, NODE_TEXT_BOTTOM_OFFSET_WITH_HANDLES, PREVIEW_EDGE_ID, PREVIEW_NODE_ID, TOOLBOX_GAP, TOOLBOX_HEIGHT, TOOLBOX_PADDING_X, TOOLBOX_PADDING_Y, TOOLBOX_WIDTH };
29
+ export { CANVAS_COMPACT_BREAKPOINT, DEFAULT_NODE_SIZE, DEFAULT_RECTANGLE_NODE_WIDTH, DEFAULT_SOURCE_HANDLE_ID, FLOATING_CANVAS_PANEL_OFFSET, GRID_SPACING, NODE_BADGE_INSET_CIRCLE, NODE_BADGE_INSET_SQUARE, NODE_BADGE_SIZE, NODE_BORDER_SIZE, NODE_CONTAINER_RADIUS_RATIO, NODE_ERROR_ICON_SIZE, NODE_HEIGHT_DEFAULT, NODE_HEIGHT_FOOTER_BUTTON, NODE_HEIGHT_FOOTER_DOUBLE, NODE_HEIGHT_FOOTER_SINGLE, NODE_INNER_ICON_RATIO, NODE_INNER_RADIUS_RATIO, NODE_INNER_SHAPE_RATIO, NODE_TEXT_BOTTOM_OFFSET, NODE_TEXT_BOTTOM_OFFSET_WITH_HANDLES, PREVIEW_EDGE_ID, PREVIEW_NODE_ID, TOOLBOX_GAP, TOOLBOX_HEIGHT, TOOLBOX_PADDING_X, TOOLBOX_PADDING_Y, TOOLBOX_WIDTH };
@@ -49,8 +49,10 @@ function useAddNodeOnConnectEnd(ignoredNodeTypes = EMPTY_IGNORED_NODE_TYPES) {
49
49
  if (!clientPosition) return;
50
50
  const flowDropPosition = reactFlowInstance.screenToFlowPosition(clientPosition);
51
51
  (0, index_cjs_namespaceObject.showPreviewGraph)({
52
- sourceNodeId: connectionState.fromNode.id,
53
- sourceHandleId: connectionState.fromHandle.id ?? 'output',
52
+ source: {
53
+ nodeId: connectionState.fromNode.id,
54
+ handleId: connectionState.fromHandle.id ?? 'output'
55
+ },
54
56
  reactFlowInstance,
55
57
  position: flowDropPosition,
56
58
  sourceHandleType: connectionState.fromHandle.type,
@@ -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,gBA+B3F"}
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"}
@@ -21,8 +21,10 @@ function useAddNodeOnConnectEnd(ignoredNodeTypes = EMPTY_IGNORED_NODE_TYPES) {
21
21
  if (!clientPosition) return;
22
22
  const flowDropPosition = reactFlowInstance.screenToFlowPosition(clientPosition);
23
23
  showPreviewGraph({
24
- sourceNodeId: connectionState.fromNode.id,
25
- sourceHandleId: connectionState.fromHandle.id ?? 'output',
24
+ source: {
25
+ nodeId: connectionState.fromNode.id,
26
+ handleId: connectionState.fromHandle.id ?? 'output'
27
+ },
26
28
  reactFlowInstance,
27
29
  position: flowDropPosition,
28
30
  sourceHandleType: connectionState.fromHandle.type,
@@ -1 +1 @@
1
- {"version":3,"file":"useCanvasStory.d.ts","sourceRoot":"","sources":["../../../../src/canvas/storybook-utils/hooks/useCanvasStory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,SAAS,EACV,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAW,aAAa,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAMjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKjD,MAAM,WAAW,qBAAqB;IAIpC,YAAY,EAAE,IAAI,EAAE,CAAC;IAMrB,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IAMtB,aAAa,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAKlC,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAKD,MAAM,WAAW,oBAAoB;IAEnC,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEvD,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAGnD,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd,SAAS,EAAE,SAAS,CAAC;IAErB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEvD,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAGnD,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAG5C,gBAAgB,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IAEzD,SAAS,EAAE,SAAS,CAAC;IAMrB,WAAW,EAAE;QACX,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;QAC5C,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,SAAS,CAAC;KACtB,CAAC;CACH;AA8BD,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CA8DnF;AAYD,wBAAgB,wBAAwB,CAAC,aAAa,GAAE,SAAS,CAAC,MAAM,CAAY,GAAG,SAAS,CAY/F"}
1
+ {"version":3,"file":"useCanvasStory.d.ts","sourceRoot":"","sources":["../../../../src/canvas/storybook-utils/hooks/useCanvasStory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,SAAS,EACV,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAW,aAAa,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAMjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,WAAW,qBAAqB;IAIpC,YAAY,EAAE,IAAI,EAAE,CAAC;IAMrB,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IAMtB,aAAa,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAKlC,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAKD,MAAM,WAAW,oBAAoB;IAEnC,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEvD,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAGnD,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd,SAAS,EAAE,SAAS,CAAC;IAErB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEvD,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAGnD,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAG5C,gBAAgB,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IAEzD,SAAS,EAAE,SAAS,CAAC;IAMrB,WAAW,EAAE;QACX,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;QAC5C,SAAS,EAAE,SAAS,CAAC;QACrB,SAAS,EAAE,SAAS,CAAC;KACtB,CAAC;CACH;AA8BD,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CA8DnF;AAYD,wBAAgB,wBAAwB,CAAC,aAAa,GAAE,SAAS,CAAC,MAAM,CAAY,GAAG,SAAS,CAY/F"}
@@ -26,11 +26,14 @@ __webpack_require__.r(__webpack_exports__);
26
26
  __webpack_require__.d(__webpack_exports__, {
27
27
  getAbsolutePosition: ()=>getAbsolutePosition,
28
28
  getNonOverlappingPositionForDirection: ()=>getNonOverlappingPositionForDirection,
29
- resolveCollisions: ()=>resolveCollisions,
30
- resolveHandleContext: ()=>resolveHandleContext,
31
- getHandleIndex: ()=>getHandleIndex,
32
29
  selectIsConnecting: ()=>selectIsConnecting,
33
- snapToGrid: ()=>snapToGrid
30
+ clamp: ()=>clamp,
31
+ getHandleIndex: ()=>getHandleIndex,
32
+ snapToGrid: ()=>snapToGrid,
33
+ snapUpToGrid: ()=>snapUpToGrid,
34
+ resolveHandleContext: ()=>resolveHandleContext,
35
+ resolveCollisions: ()=>resolveCollisions,
36
+ snapDownToGrid: ()=>snapDownToGrid
34
37
  });
35
38
  const react_cjs_namespaceObject = require("../xyflow/react.cjs");
36
39
  const external_constants_cjs_namespaceObject = require("../constants.cjs");
@@ -63,25 +66,32 @@ function getNonOverlappingPositionForDirection(nodes, newNodePosition, newNodeSt
63
66
  return newNodePosition;
64
67
  }
65
68
  const snapToGrid = (value)=>Math.round(value / external_constants_cjs_namespaceObject.GRID_SPACING) * external_constants_cjs_namespaceObject.GRID_SPACING;
66
- function getBoxesFromNodes(nodes, margin = 0) {
69
+ const snapUpToGrid = (value)=>Math.ceil(value / external_constants_cjs_namespaceObject.GRID_SPACING) * external_constants_cjs_namespaceObject.GRID_SPACING;
70
+ const snapDownToGrid = (value)=>Math.floor(value / external_constants_cjs_namespaceObject.GRID_SPACING) * external_constants_cjs_namespaceObject.GRID_SPACING;
71
+ const clamp = (value, min, max)=>Math.min(Math.max(value, min), max);
72
+ function getBoxesFromNodes(nodes, margin = 0, getNodeSize) {
67
73
  const boxes = new Array(nodes.length);
68
74
  for(let i = 0; i < nodes.length; i++){
69
75
  const node = nodes[i];
76
+ const nodeSize = getNodeSize?.(node) ?? {
77
+ width: node.width ?? node.measured?.width ?? external_constants_cjs_namespaceObject.DEFAULT_NODE_SIZE,
78
+ height: node.height ?? node.measured?.height ?? external_constants_cjs_namespaceObject.DEFAULT_NODE_SIZE
79
+ };
70
80
  boxes[i] = {
71
81
  x: node.position.x - margin,
72
82
  y: node.position.y - margin,
73
- width: (node.width ?? node.measured?.width ?? external_constants_cjs_namespaceObject.DEFAULT_NODE_SIZE) + 2 * margin,
74
- height: (node.height ?? node.measured?.height ?? external_constants_cjs_namespaceObject.DEFAULT_NODE_SIZE) + 2 * margin,
83
+ width: nodeSize.width + 2 * margin,
84
+ height: nodeSize.height + 2 * margin,
75
85
  node,
76
86
  moved: false
77
87
  };
78
88
  }
79
89
  return boxes;
80
90
  }
81
- const resolveCollisions = (nodes, { maxIterations = 50, overlapThreshold = 0, margin = 2 * external_constants_cjs_namespaceObject.GRID_SPACING, ignoredNodeTypes } = {})=>{
91
+ const resolveCollisions = (nodes, { maxIterations = 50, overlapThreshold = 0, margin = 2 * external_constants_cjs_namespaceObject.GRID_SPACING, ignoredNodeTypes, getNodeSize } = {})=>{
82
92
  const ignoredSet = new Set(ignoredNodeTypes);
83
93
  const collisionNodes = ignoredSet.size > 0 ? nodes.filter((n)=>!ignoredSet.has(n.type ?? '')) : nodes;
84
- const boxes = getBoxesFromNodes(collisionNodes, margin);
94
+ const boxes = getBoxesFromNodes(collisionNodes, margin, getNodeSize);
85
95
  for(let iter = 0; iter < maxIterations; iter++){
86
96
  let moved = false;
87
97
  for(let i = 0; i < boxes.length; i++)for(let j = i + 1; j < boxes.length; j++){
@@ -143,21 +153,27 @@ function getHandleIndex(handleId, position, allHandles) {
143
153
  const index = peers.findIndex((h)=>h.id === handleId);
144
154
  return -1 === index ? null : index;
145
155
  }
156
+ exports.clamp = __webpack_exports__.clamp;
146
157
  exports.getAbsolutePosition = __webpack_exports__.getAbsolutePosition;
147
158
  exports.getHandleIndex = __webpack_exports__.getHandleIndex;
148
159
  exports.getNonOverlappingPositionForDirection = __webpack_exports__.getNonOverlappingPositionForDirection;
149
160
  exports.resolveCollisions = __webpack_exports__.resolveCollisions;
150
161
  exports.resolveHandleContext = __webpack_exports__.resolveHandleContext;
151
162
  exports.selectIsConnecting = __webpack_exports__.selectIsConnecting;
163
+ exports.snapDownToGrid = __webpack_exports__.snapDownToGrid;
152
164
  exports.snapToGrid = __webpack_exports__.snapToGrid;
165
+ exports.snapUpToGrid = __webpack_exports__.snapUpToGrid;
153
166
  for(var __rspack_i in __webpack_exports__)if (-1 === [
167
+ "clamp",
154
168
  "getAbsolutePosition",
155
169
  "getHandleIndex",
156
170
  "getNonOverlappingPositionForDirection",
157
171
  "resolveCollisions",
158
172
  "resolveHandleContext",
159
173
  "selectIsConnecting",
160
- "snapToGrid"
174
+ "snapDownToGrid",
175
+ "snapToGrid",
176
+ "snapUpToGrid"
161
177
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
162
178
  Object.defineProperty(exports, '__esModule', {
163
179
  value: true
@@ -12,11 +12,18 @@ export declare function getNonOverlappingPositionForDirection(nodes: Node[], new
12
12
  y: 'up' | 'down';
13
13
  }): XYPosition;
14
14
  export declare const snapToGrid: (value: number) => number;
15
+ export declare const snapUpToGrid: (value: number) => number;
16
+ export declare const snapDownToGrid: (value: number) => number;
17
+ export declare const clamp: (value: number, min: number, max: number) => number;
15
18
  export type CollisionAlgorithmOptions = {
16
19
  maxIterations?: number;
17
20
  overlapThreshold?: number;
18
21
  margin?: number;
19
22
  ignoredNodeTypes?: string[];
23
+ getNodeSize?: (node: Node) => {
24
+ width: number;
25
+ height: number;
26
+ };
20
27
  };
21
28
  export type CollisionAlgorithm = (nodes: Node[], options?: CollisionAlgorithmOptions) => Node[];
22
29
  export declare const resolveCollisions: CollisionAlgorithm;
@@ -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,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;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,EAAE,yBAAyB,KAAK,IAAI,EAAE,CAAC;AA6BhG,eAAO,MAAM,iBAAiB,EAAE,kBAwE/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;AAMF,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,QAAQ,GACvB,aAAa,GAAG,SAAS,CAgB3B;AAWD,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,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;AAMF,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,QAAQ,GACvB,aAAa,GAAG,SAAS,CAgB3B;AAWD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAAE,GACnB,MAAM,GAAG,IAAI,CAQf"}
@@ -29,25 +29,32 @@ function getNonOverlappingPositionForDirection(nodes, newNodePosition, newNodeSt
29
29
  return newNodePosition;
30
30
  }
31
31
  const snapToGrid = (value)=>Math.round(value / GRID_SPACING) * GRID_SPACING;
32
- function getBoxesFromNodes(nodes, margin = 0) {
32
+ const snapUpToGrid = (value)=>Math.ceil(value / GRID_SPACING) * GRID_SPACING;
33
+ const snapDownToGrid = (value)=>Math.floor(value / GRID_SPACING) * GRID_SPACING;
34
+ const clamp = (value, min, max)=>Math.min(Math.max(value, min), max);
35
+ function getBoxesFromNodes(nodes, margin = 0, getNodeSize) {
33
36
  const boxes = new Array(nodes.length);
34
37
  for(let i = 0; i < nodes.length; i++){
35
38
  const node = nodes[i];
39
+ const nodeSize = getNodeSize?.(node) ?? {
40
+ width: node.width ?? node.measured?.width ?? DEFAULT_NODE_SIZE,
41
+ height: node.height ?? node.measured?.height ?? DEFAULT_NODE_SIZE
42
+ };
36
43
  boxes[i] = {
37
44
  x: node.position.x - margin,
38
45
  y: node.position.y - margin,
39
- width: (node.width ?? node.measured?.width ?? DEFAULT_NODE_SIZE) + 2 * margin,
40
- height: (node.height ?? node.measured?.height ?? DEFAULT_NODE_SIZE) + 2 * margin,
46
+ width: nodeSize.width + 2 * margin,
47
+ height: nodeSize.height + 2 * margin,
41
48
  node,
42
49
  moved: false
43
50
  };
44
51
  }
45
52
  return boxes;
46
53
  }
47
- const resolveCollisions = (nodes, { maxIterations = 50, overlapThreshold = 0, margin = 2 * GRID_SPACING, ignoredNodeTypes } = {})=>{
54
+ const resolveCollisions = (nodes, { maxIterations = 50, overlapThreshold = 0, margin = 2 * GRID_SPACING, ignoredNodeTypes, getNodeSize } = {})=>{
48
55
  const ignoredSet = new Set(ignoredNodeTypes);
49
56
  const collisionNodes = ignoredSet.size > 0 ? nodes.filter((n)=>!ignoredSet.has(n.type ?? '')) : nodes;
50
- const boxes = getBoxesFromNodes(collisionNodes, margin);
57
+ const boxes = getBoxesFromNodes(collisionNodes, margin, getNodeSize);
51
58
  for(let iter = 0; iter < maxIterations; iter++){
52
59
  let moved = false;
53
60
  for(let i = 0; i < boxes.length; i++)for(let j = i + 1; j < boxes.length; j++){
@@ -109,4 +116,4 @@ function getHandleIndex(handleId, position, allHandles) {
109
116
  const index = peers.findIndex((h)=>h.id === handleId);
110
117
  return -1 === index ? null : index;
111
118
  }
112
- export { getAbsolutePosition, getHandleIndex, getNonOverlappingPositionForDirection, resolveCollisions, resolveHandleContext, selectIsConnecting, snapToGrid };
119
+ export { clamp, getAbsolutePosition, getHandleIndex, getNonOverlappingPositionForDirection, resolveCollisions, resolveHandleContext, selectIsConnecting, snapDownToGrid, snapToGrid, snapUpToGrid };
@@ -31,7 +31,7 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  COLLAPSED_NODE_SIZE: ()=>COLLAPSED_NODE_SIZE,
32
32
  getCollapsedSize: ()=>getCollapsedSize
33
33
  });
34
- const external_constants_cjs_namespaceObject = require("../constants.cjs");
34
+ const external_container_cjs_namespaceObject = require("./container.cjs");
35
35
  const COLLAPSED_NODE_SIZE = 96;
36
36
  const EXPANDED_RECTANGLE_WIDTH = 288;
37
37
  const getCollapsedShape = (originalShape)=>'rectangle' === originalShape ? 'square' : originalShape;
@@ -42,8 +42,8 @@ const getCollapsedSize = ()=>({
42
42
  });
43
43
  const getExpandedSize = (shape)=>{
44
44
  if ('container' === shape) return {
45
- width: external_constants_cjs_namespaceObject.DEFAULT_CONTAINER_WIDTH,
46
- height: external_constants_cjs_namespaceObject.DEFAULT_CONTAINER_HEIGHT
45
+ width: external_container_cjs_namespaceObject.DEFAULT_CONTAINER_WIDTH,
46
+ height: external_container_cjs_namespaceObject.DEFAULT_CONTAINER_HEIGHT
47
47
  };
48
48
  return {
49
49
  width: 'rectangle' === shape ? EXPANDED_RECTANGLE_WIDTH : COLLAPSED_NODE_SIZE,
@@ -1 +1 @@
1
- {"version":3,"file":"collapse.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/collapse.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAK3D,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAKtC,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAM5C,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,SAAS,KAAG,SAAS,GAAG,SAEzE,CAAC;AAOF,eAAO,MAAM,gBAAgB,GAAI,iBAAiB,SAAS,KAAG,SAAS,GAAG,SAEzE,CAAC;AAMF,eAAO,MAAM,gBAAgB,QAAO;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAKlE,CAAC;AAOF,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,KAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAYlF,CAAC"}
1
+ {"version":3,"file":"collapse.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/collapse.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAM3D,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAKtC,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAM5C,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,SAAS,KAAG,SAAS,GAAG,SAEzE,CAAC;AAOF,eAAO,MAAM,gBAAgB,GAAI,iBAAiB,SAAS,KAAG,SAAS,GAAG,SAEzE,CAAC;AAMF,eAAO,MAAM,gBAAgB,QAAO;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAKlE,CAAC;AAOF,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,KAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAYlF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { DEFAULT_CONTAINER_HEIGHT, DEFAULT_CONTAINER_WIDTH } from "../constants.js";
1
+ import { DEFAULT_CONTAINER_HEIGHT, DEFAULT_CONTAINER_WIDTH } from "./container.js";
2
2
  const COLLAPSED_NODE_SIZE = 96;
3
3
  const EXPANDED_RECTANGLE_WIDTH = 288;
4
4
  const getCollapsedShape = (originalShape)=>'rectangle' === originalShape ? 'square' : originalShape;