@uipath/apollo-react 4.17.0 → 4.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/canvas/components/AddNodePanel/AddNodeManager.cjs +35 -21
  2. package/dist/canvas/components/AddNodePanel/AddNodeManager.d.ts.map +1 -1
  3. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.cjs +208 -0
  4. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.d.ts +20 -0
  5. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.d.ts.map +1 -0
  6. package/dist/canvas/components/AddNodePanel/AddNodeManager.helpers.js +168 -0
  7. package/dist/canvas/components/AddNodePanel/AddNodeManager.js +35 -21
  8. package/dist/canvas/components/AddNodePanel/createAddNodePreview.cjs +34 -4
  9. package/dist/canvas/components/AddNodePanel/createAddNodePreview.d.ts +5 -1
  10. package/dist/canvas/components/AddNodePanel/createAddNodePreview.d.ts.map +1 -1
  11. package/dist/canvas/components/AddNodePanel/createAddNodePreview.js +34 -4
  12. package/dist/canvas/components/AddNodePanel/index.d.ts +1 -1
  13. package/dist/canvas/components/AddNodePanel/index.d.ts.map +1 -1
  14. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.cjs +23 -1
  15. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts.map +1 -1
  16. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.js +23 -1
  17. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.cjs +0 -14
  18. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.d.ts.map +1 -1
  19. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.js +2 -16
  20. package/dist/canvas/components/LoopNode/LoopNode.cjs +38 -32
  21. package/dist/canvas/components/LoopNode/LoopNode.d.ts.map +1 -1
  22. package/dist/canvas/components/LoopNode/LoopNode.helpers.cjs +33 -42
  23. package/dist/canvas/components/LoopNode/LoopNode.helpers.d.ts +9 -10
  24. package/dist/canvas/components/LoopNode/LoopNode.helpers.d.ts.map +1 -1
  25. package/dist/canvas/components/LoopNode/LoopNode.helpers.js +25 -31
  26. package/dist/canvas/components/LoopNode/LoopNode.js +30 -24
  27. package/dist/canvas/components/LoopNode/LoopNodePreview.cjs +20 -5
  28. package/dist/canvas/components/LoopNode/LoopNodePreview.d.ts.map +1 -1
  29. package/dist/canvas/components/LoopNode/LoopNodePreview.js +20 -5
  30. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.cjs +26 -14
  31. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.d.ts.map +1 -1
  32. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.js +26 -14
  33. package/dist/canvas/constants.cjs +0 -8
  34. package/dist/canvas/constants.d.ts +0 -2
  35. package/dist/canvas/constants.d.ts.map +1 -1
  36. package/dist/canvas/constants.js +1 -3
  37. package/dist/canvas/hooks/useAddNodeOnConnectEnd.cjs +4 -2
  38. package/dist/canvas/hooks/useAddNodeOnConnectEnd.d.ts.map +1 -1
  39. package/dist/canvas/hooks/useAddNodeOnConnectEnd.js +4 -2
  40. package/dist/canvas/storybook-utils/hooks/useCanvasStory.d.ts.map +1 -1
  41. package/dist/canvas/storybook-utils/manifests/node-definitions.d.ts.map +1 -1
  42. package/dist/canvas/storybook-utils/mocks/nodes.d.ts +6 -6
  43. package/dist/canvas/storybook-utils/mocks/nodes.d.ts.map +1 -1
  44. package/dist/canvas/utils/NodeUtils.cjs +41 -13
  45. package/dist/canvas/utils/NodeUtils.d.ts +12 -1
  46. package/dist/canvas/utils/NodeUtils.d.ts.map +1 -1
  47. package/dist/canvas/utils/NodeUtils.js +28 -9
  48. package/dist/canvas/utils/collapse.cjs +3 -3
  49. package/dist/canvas/utils/collapse.d.ts.map +1 -1
  50. package/dist/canvas/utils/collapse.js +1 -1
  51. package/dist/canvas/utils/container.cjs +670 -0
  52. package/dist/canvas/utils/container.d.ts +110 -0
  53. package/dist/canvas/utils/container.d.ts.map +1 -0
  54. package/dist/canvas/utils/container.js +591 -0
  55. package/dist/canvas/utils/createPreviewGraph.cjs +25 -15
  56. package/dist/canvas/utils/createPreviewGraph.d.ts +11 -7
  57. package/dist/canvas/utils/createPreviewGraph.d.ts.map +1 -1
  58. package/dist/canvas/utils/createPreviewGraph.js +25 -15
  59. package/dist/canvas/utils/createPreviewNode.cjs +24 -15
  60. package/dist/canvas/utils/createPreviewNode.d.ts +21 -7
  61. package/dist/canvas/utils/createPreviewNode.d.ts.map +1 -1
  62. package/dist/canvas/utils/createPreviewNode.js +24 -15
  63. package/dist/canvas/utils/index.cjs +29 -22
  64. package/dist/canvas/utils/index.d.ts +1 -0
  65. package/dist/canvas/utils/index.d.ts.map +1 -1
  66. package/dist/canvas/utils/index.js +1 -0
  67. package/package.json +3 -3
  68. package/dist/canvas/components/LoopNode/LoopNode.constants.cjs +0 -56
  69. package/dist/canvas/components/LoopNode/LoopNode.constants.d.ts +0 -7
  70. package/dist/canvas/components/LoopNode/LoopNode.constants.d.ts.map +0 -1
  71. package/dist/canvas/components/LoopNode/LoopNode.constants.js +0 -7
@@ -28,14 +28,44 @@ __webpack_require__.d(__webpack_exports__, {
28
28
  });
29
29
  const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
30
30
  const createPreviewGraph_cjs_namespaceObject = require("../../utils/createPreviewGraph.cjs");
31
- function createAddNodePreview(sourceNodeId, sourceHandleId, reactFlowInstance, handlePosition = react_cjs_namespaceObject.Position.Right, sourceHandleType = 'source', ignoredNodeTypes = []) {
31
+ const manifest_resolver_cjs_namespaceObject = require("../../utils/manifest-resolver.cjs");
32
+ const LoopNode_helpers_cjs_namespaceObject = require("../LoopNode/LoopNode.helpers.cjs");
33
+ function buildSourceBoundaryResolver(sourceNodeId, reactFlowInstance, getManifestForNode) {
34
+ const sourceNode = reactFlowInstance.getNode(sourceNodeId);
35
+ if (!sourceNode) return;
36
+ const manifest = getManifestForNode(sourceNode);
37
+ if (!manifest?.handleConfiguration) return;
38
+ const resolvedGroups = (0, manifest_resolver_cjs_namespaceObject.resolveHandles)(manifest.handleConfiguration, {
39
+ ...sourceNode.data,
40
+ nodeId: sourceNode.id
41
+ });
42
+ const handleToBoundary = new Map();
43
+ for (const group of resolvedGroups){
44
+ const boundary = group.boundary ?? 'outer';
45
+ for (const handle of group.handles)handleToBoundary.set(handle.id, boundary);
46
+ }
47
+ return (handleId)=>handleToBoundary.get(handleId);
48
+ }
49
+ function createAddNodePreview(sourceNodeId, sourceHandleId, reactFlowInstance, handlePosition = react_cjs_namespaceObject.Position.Right, sourceHandleType = 'source', ignoredNodeTypes = [], options = {}) {
50
+ const source = {
51
+ nodeId: sourceNodeId,
52
+ handleId: sourceHandleId
53
+ };
54
+ const overrides = options.getManifestForNode ? (0, LoopNode_helpers_cjs_namespaceObject.resolveContainerAddNodePreview)({
55
+ source,
56
+ sourceHandleType,
57
+ reactFlowInstance,
58
+ getManifestForNode: options.getManifestForNode
59
+ }) : null;
60
+ const sourceBoundaryOf = options.getManifestForNode ? buildSourceBoundaryResolver(sourceNodeId, reactFlowInstance, options.getManifestForNode) : void 0;
32
61
  (0, createPreviewGraph_cjs_namespaceObject.showPreviewGraph)({
33
- sourceNodeId,
34
- sourceHandleId,
62
+ source,
35
63
  reactFlowInstance,
36
64
  sourceHandleType,
37
65
  handlePosition,
38
- ignoredNodeTypes
66
+ ignoredNodeTypes,
67
+ sourceBoundaryOf,
68
+ ...overrides ?? {}
39
69
  });
40
70
  }
41
71
  exports.createAddNodePreview = __webpack_exports__.createAddNodePreview;
@@ -1,3 +1,7 @@
1
1
  import { Position, type ReactFlowInstance } from '../../xyflow/react.ts';
2
- export declare function createAddNodePreview(sourceNodeId: string, sourceHandleId: string, reactFlowInstance: ReactFlowInstance, handlePosition?: Position, sourceHandleType?: 'source' | 'target', ignoredNodeTypes?: string[]): void;
2
+ import { type ContainerPreviewManifestResolver } from '../LoopNode/LoopNode.helpers';
3
+ export interface AddNodePreviewOptions {
4
+ getManifestForNode?: ContainerPreviewManifestResolver;
5
+ }
6
+ export declare function createAddNodePreview(sourceNodeId: string, sourceHandleId: string, reactFlowInstance: ReactFlowInstance, handlePosition?: Position, sourceHandleType?: 'source' | 'target', ignoredNodeTypes?: string[], options?: AddNodePreviewOptions): void;
3
7
  //# sourceMappingURL=createAddNodePreview.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAddNodePreview.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/createAddNodePreview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAa5F,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,GAAE,QAAyB,EACzC,gBAAgB,GAAE,QAAQ,GAAG,QAAmB,EAChD,gBAAgB,GAAE,MAAM,EAAO,GAC9B,IAAI,CASN"}
1
+ {"version":3,"file":"createAddNodePreview.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/createAddNodePreview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAI5F,OAAO,EACL,KAAK,gCAAgC,EAEtC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,gCAAgC,CAAC;CACvD;AAoDD,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,GAAE,QAAyB,EACzC,gBAAgB,GAAE,QAAQ,GAAG,QAAmB,EAChD,gBAAgB,GAAE,MAAM,EAAO,EAC/B,OAAO,GAAE,qBAA0B,GAClC,IAAI,CA0BN"}
@@ -1,13 +1,43 @@
1
1
  import { Position } from "../../xyflow/react.js";
2
2
  import { showPreviewGraph } from "../../utils/createPreviewGraph.js";
3
- function createAddNodePreview(sourceNodeId, sourceHandleId, reactFlowInstance, handlePosition = Position.Right, sourceHandleType = 'source', ignoredNodeTypes = []) {
3
+ import { resolveHandles } from "../../utils/manifest-resolver.js";
4
+ import { resolveContainerAddNodePreview } from "../LoopNode/LoopNode.helpers.js";
5
+ function buildSourceBoundaryResolver(sourceNodeId, reactFlowInstance, getManifestForNode) {
6
+ const sourceNode = reactFlowInstance.getNode(sourceNodeId);
7
+ if (!sourceNode) return;
8
+ const manifest = getManifestForNode(sourceNode);
9
+ if (!manifest?.handleConfiguration) return;
10
+ const resolvedGroups = resolveHandles(manifest.handleConfiguration, {
11
+ ...sourceNode.data,
12
+ nodeId: sourceNode.id
13
+ });
14
+ const handleToBoundary = new Map();
15
+ for (const group of resolvedGroups){
16
+ const boundary = group.boundary ?? 'outer';
17
+ for (const handle of group.handles)handleToBoundary.set(handle.id, boundary);
18
+ }
19
+ return (handleId)=>handleToBoundary.get(handleId);
20
+ }
21
+ function createAddNodePreview(sourceNodeId, sourceHandleId, reactFlowInstance, handlePosition = Position.Right, sourceHandleType = 'source', ignoredNodeTypes = [], options = {}) {
22
+ const source = {
23
+ nodeId: sourceNodeId,
24
+ handleId: sourceHandleId
25
+ };
26
+ const overrides = options.getManifestForNode ? resolveContainerAddNodePreview({
27
+ source,
28
+ sourceHandleType,
29
+ reactFlowInstance,
30
+ getManifestForNode: options.getManifestForNode
31
+ }) : null;
32
+ const sourceBoundaryOf = options.getManifestForNode ? buildSourceBoundaryResolver(sourceNodeId, reactFlowInstance, options.getManifestForNode) : void 0;
4
33
  showPreviewGraph({
5
- sourceNodeId,
6
- sourceHandleId,
34
+ source,
7
35
  reactFlowInstance,
8
36
  sourceHandleType,
9
37
  handlePosition,
10
- ignoredNodeTypes
38
+ ignoredNodeTypes,
39
+ sourceBoundaryOf,
40
+ ...overrides ?? {}
11
41
  });
12
42
  }
13
43
  export { createAddNodePreview };
@@ -3,5 +3,5 @@ export { AddNodeManager } from './AddNodeManager';
3
3
  export { AddNodePanel } from './AddNodePanel';
4
4
  export type { AddNodePanelProps, NodeItemData } from './AddNodePanel.types';
5
5
  export { AddNodePreview, type AddNodePreviewData } from './AddNodePreview';
6
- export { createAddNodePreview } from './createAddNodePreview';
6
+ export { type AddNodePreviewOptions, createAddNodePreview } from './createAddNodePreview';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -34,15 +34,18 @@ const external_constants_cjs_namespaceObject = require("../../constants.cjs");
34
34
  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
+ const useCanvasEvents_cjs_namespaceObject = require("../../hooks/useCanvasEvents.cjs");
37
38
  const animatedViewportManager_cjs_namespaceObject = require("../../stores/animatedViewportManager.cjs");
38
39
  const canvasStore_cjs_namespaceObject = require("../../stores/canvasStore.cjs");
39
40
  const viewportManager_cjs_namespaceObject = require("../../stores/viewportManager.cjs");
40
41
  const external_types_cjs_namespaceObject = require("../../types.cjs");
42
+ const external_utils_index_cjs_namespaceObject = require("../../utils/index.cjs");
41
43
  const createPreviewNode_cjs_namespaceObject = require("../../utils/createPreviewNode.cjs");
42
44
  const icon_registry_cjs_namespaceObject = require("../../utils/icon-registry.cjs");
43
45
  const transitions_cjs_namespaceObject = require("../../utils/transitions.cjs");
44
46
  const AddNodeManager_cjs_namespaceObject = require("../AddNodePanel/AddNodeManager.cjs");
45
47
  const AddNodePreview_cjs_namespaceObject = require("../AddNodePanel/AddNodePreview.cjs");
48
+ const createAddNodePreview_cjs_namespaceObject = require("../AddNodePanel/createAddNodePreview.cjs");
46
49
  const external_BaseCanvas_index_cjs_namespaceObject = require("../BaseCanvas/index.cjs");
47
50
  const external_BaseNode_index_cjs_namespaceObject = require("../BaseNode/index.cjs");
48
51
  const external_BlankCanvasNode_index_cjs_namespaceObject = require("../BlankCanvasNode/index.cjs");
@@ -74,14 +77,23 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
74
77
  const lastCanvasIdRef = (0, external_react_namespaceObject.useRef)(null);
75
78
  const shouldAnimate = 'design' === mode && !(0, transitions_cjs_namespaceObject.prefersReducedMotion)();
76
79
  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
+ ]);
77
86
  const nodeTypes = (0, external_react_namespaceObject.useMemo)(()=>nodeManifests.reduce((acc, manifest)=>{
78
- acc[manifest.nodeType] = (0, external_LoopNode_index_cjs_namespaceObject.isContainerNodeManifest)(manifest) ? external_LoopNode_index_cjs_namespaceObject.LoopCanvasNode : external_BaseNode_index_cjs_namespaceObject.BaseNode;
87
+ acc[manifest.nodeType] = (0, external_utils_index_cjs_namespaceObject.isContainerNodeManifest)(manifest) ? external_LoopNode_index_cjs_namespaceObject.LoopCanvasNode : external_BaseNode_index_cjs_namespaceObject.BaseNode;
79
88
  return acc;
80
89
  }, {
81
90
  ...DEFAULT_NODE_TYPES
82
91
  }), [
83
92
  nodeManifests
84
93
  ]);
94
+ const getManifestForNode = (0, external_react_namespaceObject.useCallback)((node)=>node.type ? nodeManifestByType.get(node.type) : void 0, [
95
+ nodeManifestByType
96
+ ]);
85
97
  const currentCanvas = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectCurrentCanvas);
86
98
  const previousCanvas = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectPreviousCanvas);
87
99
  const breadcrumbs = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectBreadcrumbs);
@@ -104,6 +116,16 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
104
116
  currentPath
105
117
  ]);
106
118
  const addNodeOnConnectEnd = (0, useAddNodeOnConnectEnd_cjs_namespaceObject.useAddNodeOnConnectEnd)();
119
+ const handleAddNodePreviewAction = (0, external_react_namespaceObject.useCallback)((event)=>{
120
+ if (!reactFlowInstance) return;
121
+ (0, createAddNodePreview_cjs_namespaceObject.createAddNodePreview)(event.nodeId, event.handleId, reactFlowInstance, event.position, 'input' === event.handleType ? 'target' : 'source', [], {
122
+ getManifestForNode
123
+ });
124
+ }, [
125
+ reactFlowInstance,
126
+ getManifestForNode
127
+ ]);
128
+ (0, useCanvasEvents_cjs_namespaceObject.useCanvasEvent)('handle:action', handleAddNodePreviewAction);
107
129
  const hasInitialized = (0, external_react_namespaceObject.useRef)(false);
108
130
  (0, external_react_namespaceObject.useEffect)(()=>{
109
131
  if (hasInitialized.current) return;
@@ -1 +1 @@
1
- {"version":3,"file":"HierarchicalCanvas.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/HierarchicalCanvas/HierarchicalCanvas.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA4B/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAa5D,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,CA+XhE,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;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"}
@@ -6,20 +6,23 @@ import { PREVIEW_NODE_ID } from "../../constants.js";
6
6
  import { Breadcrumb } from "../../controls/index.js";
7
7
  import { useNodeManifests } from "../../core/index.js";
8
8
  import { useAddNodeOnConnectEnd } from "../../hooks/useAddNodeOnConnectEnd.js";
9
+ import { useCanvasEvent } from "../../hooks/useCanvasEvents.js";
9
10
  import { animatedViewportManager } from "../../stores/animatedViewportManager.js";
10
11
  import { selectBreadcrumbs, selectCanvasStack, selectCurrentCanvas, selectCurrentPath, selectDrillIntoNode, selectInitializeCanvas, selectInitializeWithData, selectNavigateToDepth, selectNavigateToSiblingCanvas, selectPreviousCanvas, selectTransitionState, selectUpdateEdges, selectUpdateNodes, selectUpdateSelection, selectUpdateViewport, useCanvasStore } from "../../stores/canvasStore.js";
11
12
  import { viewportManager } from "../../stores/viewportManager.js";
12
13
  import { DefaultCanvasTranslations } from "../../types.js";
14
+ import { isContainerNodeManifest } from "../../utils/index.js";
13
15
  import { isPreviewEdge } from "../../utils/createPreviewNode.js";
14
16
  import { CanvasIcon } from "../../utils/icon-registry.js";
15
17
  import { prefersReducedMotion } from "../../utils/transitions.js";
16
18
  import { AddNodeManager } from "../AddNodePanel/AddNodeManager.js";
17
19
  import { AddNodePreview } from "../AddNodePanel/AddNodePreview.js";
20
+ import { createAddNodePreview } from "../AddNodePanel/createAddNodePreview.js";
18
21
  import { BaseCanvas } from "../BaseCanvas/index.js";
19
22
  import { BaseNode } from "../BaseNode/index.js";
20
23
  import { BlankCanvasNode } from "../BlankCanvasNode/index.js";
21
24
  import { CanvasPositionControls } from "../CanvasPositionControls.js";
22
- import { LoopCanvasNode, isContainerNodeManifest } from "../LoopNode/index.js";
25
+ import { LoopCanvasNode } from "../LoopNode/index.js";
23
26
  import { MiniCanvasNavigator } from "../MiniCanvasNavigator/index.js";
24
27
  const DEFAULT_NODE_TYPES = {
25
28
  default: BaseNode,
@@ -46,6 +49,12 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
46
49
  const lastCanvasIdRef = useRef(null);
47
50
  const shouldAnimate = 'design' === mode && !prefersReducedMotion();
48
51
  const nodeManifests = useNodeManifests();
52
+ const nodeManifestByType = useMemo(()=>new Map(nodeManifests.map((manifest)=>[
53
+ manifest.nodeType,
54
+ manifest
55
+ ])), [
56
+ nodeManifests
57
+ ]);
49
58
  const nodeTypes = useMemo(()=>nodeManifests.reduce((acc, manifest)=>{
50
59
  acc[manifest.nodeType] = isContainerNodeManifest(manifest) ? LoopCanvasNode : BaseNode;
51
60
  return acc;
@@ -54,6 +63,9 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
54
63
  }), [
55
64
  nodeManifests
56
65
  ]);
66
+ const getManifestForNode = useCallback((node)=>node.type ? nodeManifestByType.get(node.type) : void 0, [
67
+ nodeManifestByType
68
+ ]);
57
69
  const currentCanvas = useCanvasStore(selectCurrentCanvas);
58
70
  const previousCanvas = useCanvasStore(selectPreviousCanvas);
59
71
  const breadcrumbs = useCanvasStore(selectBreadcrumbs);
@@ -76,6 +88,16 @@ const HierarchicalCanvas = ({ mode = 'design', initialCanvases, initialPath, onC
76
88
  currentPath
77
89
  ]);
78
90
  const addNodeOnConnectEnd = useAddNodeOnConnectEnd();
91
+ const handleAddNodePreviewAction = useCallback((event)=>{
92
+ if (!reactFlowInstance) return;
93
+ createAddNodePreview(event.nodeId, event.handleId, reactFlowInstance, event.position, 'input' === event.handleType ? 'target' : 'source', [], {
94
+ getManifestForNode
95
+ });
96
+ }, [
97
+ reactFlowInstance,
98
+ getManifestForNode
99
+ ]);
100
+ useCanvasEvent('handle:action', handleAddNodePreviewAction);
79
101
  const hasInitialized = useRef(false);
80
102
  useEffect(()=>{
81
103
  if (hasInitialized.current) return;
@@ -32,9 +32,7 @@ const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
32
32
  const external_react_namespaceObject = require("react");
33
33
  const index_cjs_namespaceObject = require("../../core/index.cjs");
34
34
  const canvasStore_cjs_namespaceObject = require("../../stores/canvasStore.cjs");
35
- const CanvasEventBus_cjs_namespaceObject = require("../../utils/CanvasEventBus.cjs");
36
35
  const icon_registry_cjs_namespaceObject = require("../../utils/icon-registry.cjs");
37
- const createAddNodePreview_cjs_namespaceObject = require("../AddNodePanel/createAddNodePreview.cjs");
38
36
  const external_HierarchicalCanvas_cjs_namespaceObject = require("./HierarchicalCanvas.cjs");
39
37
  const createDemoCanvases = ()=>{
40
38
  const rootCanvas = {
@@ -324,24 +322,12 @@ const workflowManifest = {
324
322
  nodes: workflowManifests
325
323
  };
326
324
  const CanvasWithControlsContent = ({ initialCanvases, initialPath, onCanvasesChange, onPathChange })=>{
327
- const reactFlowInstance = (0, react_cjs_namespaceObject.useReactFlow)();
328
325
  const currentCanvas = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectCurrentCanvas);
329
326
  const currentPathLength = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectCurrentPathLength);
330
327
  const addNode = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectAddNode);
331
328
  const removeNode = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectRemoveNode);
332
329
  const removeEdge = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectRemoveEdge);
333
330
  const updateNodes = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectUpdateNodes);
334
- (0, external_react_namespaceObject.useEffect)(()=>{
335
- const handleAction = (event)=>{
336
- if (reactFlowInstance) (0, createAddNodePreview_cjs_namespaceObject.createAddNodePreview)(event.nodeId, event.handleId, reactFlowInstance);
337
- };
338
- CanvasEventBus_cjs_namespaceObject.canvasEventBus.on('handle:action', handleAction);
339
- return ()=>{
340
- CanvasEventBus_cjs_namespaceObject.canvasEventBus.off('handle:action', handleAction);
341
- };
342
- }, [
343
- reactFlowInstance
344
- ]);
345
331
  const handleAddNode = (0, external_react_namespaceObject.useCallback)((nodeType)=>{
346
332
  const existingNodes = currentCanvas?.nodes.filter((n)=>'blank-canvas-node' !== n.id).length || 0;
347
333
  const position = {
@@ -1 +1 @@
1
- {"version":3,"file":"HierarchicalCanvasWithControls.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA6d/B,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EA8BlD,CAAC"}
1
+ {"version":3,"file":"HierarchicalCanvasWithControls.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA2c/B,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EA8BlD,CAAC"}
@@ -1,12 +1,10 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { Panel, ReactFlowProvider, useReactFlow } from "../../xyflow/react.js";
2
+ import { Panel, ReactFlowProvider } from "../../xyflow/react.js";
3
3
  import { Button } from "@uipath/apollo-wind";
4
- import { useCallback, useEffect, useState } from "react";
4
+ import { useCallback, useState } from "react";
5
5
  import { NodeRegistryProvider } from "../../core/index.js";
6
6
  import { selectAddNode, selectCurrentCanvas, selectCurrentPathLength, selectRemoveEdge, selectRemoveNode, selectUpdateNodes, useCanvasStore } from "../../stores/canvasStore.js";
7
- import { canvasEventBus } from "../../utils/CanvasEventBus.js";
8
7
  import { CanvasIcon } from "../../utils/icon-registry.js";
9
- import { createAddNodePreview } from "../AddNodePanel/createAddNodePreview.js";
10
8
  import { HierarchicalCanvas } from "./HierarchicalCanvas.js";
11
9
  const createDemoCanvases = ()=>{
12
10
  const rootCanvas = {
@@ -296,24 +294,12 @@ const workflowManifest = {
296
294
  nodes: workflowManifests
297
295
  };
298
296
  const CanvasWithControlsContent = ({ initialCanvases, initialPath, onCanvasesChange, onPathChange })=>{
299
- const reactFlowInstance = useReactFlow();
300
297
  const currentCanvas = useCanvasStore(selectCurrentCanvas);
301
298
  const currentPathLength = useCanvasStore(selectCurrentPathLength);
302
299
  const addNode = useCanvasStore(selectAddNode);
303
300
  const removeNode = useCanvasStore(selectRemoveNode);
304
301
  const removeEdge = useCanvasStore(selectRemoveEdge);
305
302
  const updateNodes = useCanvasStore(selectUpdateNodes);
306
- useEffect(()=>{
307
- const handleAction = (event)=>{
308
- if (reactFlowInstance) createAddNodePreview(event.nodeId, event.handleId, reactFlowInstance);
309
- };
310
- canvasEventBus.on('handle:action', handleAction);
311
- return ()=>{
312
- canvasEventBus.off('handle:action', handleAction);
313
- };
314
- }, [
315
- reactFlowInstance
316
- ]);
317
303
  const handleAddNode = useCallback((nodeType)=>{
318
304
  const existingNodes = currentCanvas?.nodes.filter((n)=>'blank-canvas-node' !== n.id).length || 0;
319
305
  const position = {
@@ -30,10 +30,10 @@ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
30
30
  const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
31
31
  const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
32
32
  const external_react_namespaceObject = require("react");
33
- const external_constants_cjs_namespaceObject = require("../../constants.cjs");
34
33
  const index_cjs_namespaceObject = require("../../core/index.cjs");
35
34
  const external_hooks_index_cjs_namespaceObject = require("../../hooks/index.cjs");
36
35
  const adornment_resolver_cjs_namespaceObject = require("../../utils/adornment-resolver.cjs");
36
+ const container_cjs_namespaceObject = require("../../utils/container.cjs");
37
37
  const icon_registry_cjs_namespaceObject = require("../../utils/icon-registry.cjs");
38
38
  const manifest_resolver_cjs_namespaceObject = require("../../utils/manifest-resolver.cjs");
39
39
  const NodeUtils_cjs_namespaceObject = require("../../utils/NodeUtils.cjs");
@@ -46,8 +46,9 @@ const BaseNodeContainer_cjs_namespaceObject = require("../BaseNode/BaseNodeConta
46
46
  const BaseNodeMissingManifest_cjs_namespaceObject = require("../BaseNode/BaseNodeMissingManifest.cjs");
47
47
  const external_ButtonHandle_index_cjs_namespaceObject = require("../ButtonHandle/index.cjs");
48
48
  const external_Toolbar_index_cjs_namespaceObject = require("../Toolbar/index.cjs");
49
- const external_LoopNode_constants_cjs_namespaceObject = require("./LoopNode.constants.cjs");
50
49
  const external_LoopNode_helpers_cjs_namespaceObject = require("./LoopNode.helpers.cjs");
50
+ const DEFAULT_LOOP_ICON = 'repeat';
51
+ const DEFAULT_LOOP_TITLE = 'Loop';
51
52
  const EMPTY_DATA = {};
52
53
  const RESIZE_CONTROLS = [
53
54
  {
@@ -163,17 +164,17 @@ function LoopNodeComponent(props) {
163
164
  id,
164
165
  resolvedData
165
166
  ]);
166
- const displayTitle = display.label ?? external_LoopNode_constants_cjs_namespaceObject.DEFAULT_LOOP_TITLE;
167
- const displayIcon = display.icon ?? external_LoopNode_constants_cjs_namespaceObject.DEFAULT_LOOP_ICON;
167
+ const displayTitle = display.label ?? DEFAULT_LOOP_TITLE;
168
+ const displayIcon = display.icon ?? DEFAULT_LOOP_ICON;
168
169
  const isParallel = true === resolvedData.parallel;
169
170
  const isDropTarget = true === resolvedData.isDropTarget;
170
- const containerWidth = width || external_constants_cjs_namespaceObject.DEFAULT_CONTAINER_WIDTH;
171
- const containerHeight = height || external_constants_cjs_namespaceObject.DEFAULT_CONTAINER_HEIGHT;
171
+ const containerWidth = width || container_cjs_namespaceObject.DEFAULT_CONTAINER_WIDTH;
172
+ const containerHeight = height || container_cjs_namespaceObject.DEFAULT_CONTAINER_HEIGHT;
172
173
  const nodeSizeStyle = {
173
174
  width: containerWidth,
174
175
  height: containerHeight,
175
- minWidth: external_LoopNode_constants_cjs_namespaceObject.DEFAULT_CONTAINER_MIN_WIDTH,
176
- minHeight: external_LoopNode_constants_cjs_namespaceObject.DEFAULT_CONTAINER_MIN_HEIGHT
176
+ minWidth: container_cjs_namespaceObject.DEFAULT_CONTAINER_MIN_WIDTH,
177
+ minHeight: container_cjs_namespaceObject.DEFAULT_CONTAINER_MIN_HEIGHT
177
178
  };
178
179
  const toolbarConfig = (0, external_react_namespaceObject.useMemo)(()=>{
179
180
  if (void 0 !== toolbarConfigProp) return null === toolbarConfigProp ? void 0 : toolbarConfigProp;
@@ -214,7 +215,7 @@ function LoopNodeComponent(props) {
214
215
  ]);
215
216
  const handleMouseEnter = (0, external_react_namespaceObject.useCallback)(()=>setIsHovered(true), []);
216
217
  const handleMouseLeave = (0, external_react_namespaceObject.useCallback)(()=>setIsHovered(false), []);
217
- const handleOuterHandleAction = (0, external_react_namespaceObject.useCallback)((_event)=>{
218
+ const handleHandleAction = (0, external_react_namespaceObject.useCallback)((_event)=>{
218
219
  setIsHovered(false);
219
220
  }, []);
220
221
  const shouldShowHandles = (isConnecting || selected || isHovered) && !dragging;
@@ -271,9 +272,14 @@ function LoopNodeComponent(props) {
271
272
  }),
272
273
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(BodyFrame, {
273
274
  isEmpty: showEmptyStateButton,
274
- isLoading: isLoading,
275
- onAddFirstChild: handleEmptyClick
275
+ isLoading: isLoading
276
276
  }),
277
+ showEmptyStateButton ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
278
+ className: (0, apollo_wind_namespaceObject.cn)('pointer-events-none absolute left-1/2 top-1/2', '-translate-x-1/2 -translate-y-1/2'),
279
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(EmptyState, {
280
+ onAddFirstChild: handleEmptyClick
281
+ })
282
+ }) : null,
277
283
  toolbarConfig && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_Toolbar_index_cjs_namespaceObject.NodeToolbar, {
278
284
  nodeId: id,
279
285
  config: toolbarConfig,
@@ -292,7 +298,7 @@ function LoopNodeComponent(props) {
292
298
  nodeWidth: containerWidth,
293
299
  nodeHeight: containerHeight,
294
300
  connectedHandleIds: connectedHandleIds,
295
- onOuterHandleAction: handleOuterHandleAction
301
+ onHandleAction: handleHandleAction
296
302
  })
297
303
  ]
298
304
  });
@@ -355,19 +361,14 @@ function EmptyState({ onAddFirstChild }) {
355
361
  })
356
362
  });
357
363
  }
358
- function BodyFrame({ isEmpty, isLoading, onAddFirstChild }) {
359
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
364
+ function BodyFrame({ isEmpty, isLoading }) {
365
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
360
366
  "data-testid": "loop-body-frame",
361
367
  "data-empty": isEmpty ? 'true' : 'false',
362
- className: (0, apollo_wind_namespaceObject.cn)('relative m-2.5 flex flex-1 rounded-xl border-[1.5px] border-dashed border-border-subtle bg-transparent', 'pointer-events-none', isEmpty && 'items-center justify-center'),
363
- children: [
364
- isLoading ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
365
- className: "m-6 h-14 w-full animate-pulse rounded-[18px] bg-(--canvas-background-overlay)"
366
- }) : null,
367
- isEmpty ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(EmptyState, {
368
- onAddFirstChild: onAddFirstChild
369
- }) : null
370
- ]
368
+ className: (0, apollo_wind_namespaceObject.cn)('relative m-2.5 flex flex-1 rounded-xl border-[1.5px] border-dashed border-border-subtle bg-transparent', 'pointer-events-none'),
369
+ children: isLoading ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
370
+ className: "m-6 h-14 w-full animate-pulse rounded-[18px] bg-(--canvas-background-overlay)"
371
+ }) : null
371
372
  });
372
373
  }
373
374
  function ResizeControls({ onResize }) {
@@ -375,8 +376,8 @@ function ResizeControls({ onResize }) {
375
376
  children: RESIZE_CONTROLS.map(({ position, cursor })=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(react_cjs_namespaceObject.NodeResizeControl, {
376
377
  style: RESIZE_CONTROL_STYLE,
377
378
  position: position,
378
- minWidth: external_LoopNode_constants_cjs_namespaceObject.DEFAULT_CONTAINER_MIN_WIDTH,
379
- minHeight: external_LoopNode_constants_cjs_namespaceObject.DEFAULT_CONTAINER_MIN_HEIGHT,
379
+ minWidth: container_cjs_namespaceObject.DEFAULT_CONTAINER_MIN_WIDTH,
380
+ minHeight: container_cjs_namespaceObject.DEFAULT_CONTAINER_MIN_HEIGHT,
380
381
  onResize: onResize,
381
382
  children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
382
383
  className: "absolute bottom-0 right-0 h-5 w-5 pointer-events-auto",
@@ -404,24 +405,29 @@ function HandleGroups({ groups, ...handleGroupProps }) {
404
405
  }, `${group.boundary}:${group.position}:${groupIndex}`))
405
406
  });
406
407
  }
407
- function HandleGroup({ nodeId, group, selected, hovered, shouldShowHandles, showAddButton, showNotches, nodeWidth, nodeHeight, connectedHandleIds, onOuterHandleAction }) {
408
+ function HandleGroup({ nodeId, group, selected, hovered, shouldShowHandles, showAddButton, showNotches, nodeWidth, nodeHeight, connectedHandleIds, onHandleAction }) {
408
409
  const groupVisible = shouldShowHandles && (group.visible ?? true);
409
410
  const position = group.position;
410
411
  const enhancedHandles = (0, external_react_namespaceObject.useMemo)(()=>group.handles.map((handle)=>{
411
- const isInnerSourceHandle = 'inner' === group.boundary && 'source' === handle.type;
412
- const shouldResetHoverOnAction = 'outer' === group.boundary && 'source' === handle.type && handle.showButton;
412
+ const showHandle = connectedHandleIds.has(handle.id) || groupVisible;
413
+ if ('inner' === group.boundary) return {
414
+ ...handle,
415
+ showHandle,
416
+ showButton: false,
417
+ onAction: void 0
418
+ };
413
419
  return {
414
420
  ...handle,
415
- showHandle: connectedHandleIds.has(handle.id) || groupVisible,
416
- showButton: isInnerSourceHandle ? false : handle.showButton,
417
- onAction: handle.onAction ?? (shouldResetHoverOnAction ? onOuterHandleAction : void 0)
421
+ showHandle,
422
+ showButton: handle.showButton,
423
+ onAction: handle.onAction ?? onHandleAction
418
424
  };
419
425
  }), [
420
426
  group.boundary,
421
427
  group.handles,
422
428
  connectedHandleIds,
423
429
  groupVisible,
424
- onOuterHandleAction
430
+ onHandleAction
425
431
  ]);
426
432
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_ButtonHandle_index_cjs_namespaceObject.ButtonHandles, {
427
433
  nodeId: nodeId,
@@ -1 +1 @@
1
- {"version":3,"file":"LoopNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuEtD,iBAAS,iBAAiB,CAAC,KAAK,EAAE,aAAa,2CA0N9C;AAED,eAAO,MAAM,QAAQ,+DAA0B,CAAC"}
1
+ {"version":3,"file":"LoopNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyEtD,iBAAS,iBAAiB,CAAC,KAAK,EAAE,aAAa,2CAgO9C;AAED,eAAO,MAAM,QAAQ,+DAA0B,CAAC"}