@uipath/apollo-react 3.68.2 → 3.68.3-pr431.8e3b0c3

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 (52) hide show
  1. package/dist/canvas/components/CanvasPerformance.stories.cjs +361 -0
  2. package/dist/canvas/components/CanvasPerformance.stories.d.ts +6 -0
  3. package/dist/canvas/components/CanvasPerformance.stories.d.ts.map +1 -0
  4. package/dist/canvas/components/CanvasPerformance.stories.js +324 -0
  5. package/dist/canvas/components/NodePropertiesPanel/hooks/index.cjs +4 -1
  6. package/dist/canvas/components/NodePropertiesPanel/hooks/index.d.ts +1 -1
  7. package/dist/canvas/components/NodePropertiesPanel/hooks/index.d.ts.map +1 -1
  8. package/dist/canvas/components/NodePropertiesPanel/hooks/index.js +2 -2
  9. package/dist/canvas/components/NodePropertiesPanel/hooks/useNodeSelection.cjs +27 -6
  10. package/dist/canvas/components/NodePropertiesPanel/hooks/useNodeSelection.d.ts +3 -0
  11. package/dist/canvas/components/NodePropertiesPanel/hooks/useNodeSelection.d.ts.map +1 -1
  12. package/dist/canvas/components/NodePropertiesPanel/hooks/useNodeSelection.js +23 -5
  13. package/dist/canvas/components/StageNode/AdhocTask.cjs +148 -0
  14. package/dist/canvas/components/StageNode/AdhocTask.d.ts +13 -0
  15. package/dist/canvas/components/StageNode/AdhocTask.d.ts.map +1 -0
  16. package/dist/canvas/components/StageNode/AdhocTask.js +104 -0
  17. package/dist/canvas/components/StageNode/DraggableTask.cjs +14 -5
  18. package/dist/canvas/components/StageNode/DraggableTask.d.ts +1 -1
  19. package/dist/canvas/components/StageNode/DraggableTask.d.ts.map +1 -1
  20. package/dist/canvas/components/StageNode/DraggableTask.js +14 -5
  21. package/dist/canvas/components/StageNode/DraggableTask.types.d.ts +3 -3
  22. package/dist/canvas/components/StageNode/DraggableTask.types.d.ts.map +1 -1
  23. package/dist/canvas/components/StageNode/StageEdge.cjs +34 -11
  24. package/dist/canvas/components/StageNode/StageEdge.d.ts +2 -1
  25. package/dist/canvas/components/StageNode/StageEdge.d.ts.map +1 -1
  26. package/dist/canvas/components/StageNode/StageEdge.js +35 -12
  27. package/dist/canvas/components/StageNode/StageNode.cjs +90 -122
  28. package/dist/canvas/components/StageNode/StageNode.d.ts +1 -1
  29. package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
  30. package/dist/canvas/components/StageNode/StageNode.js +97 -119
  31. package/dist/canvas/components/StageNode/StageNode.stories.cjs +123 -158
  32. package/dist/canvas/components/StageNode/StageNode.stories.d.ts.map +1 -1
  33. package/dist/canvas/components/StageNode/StageNode.stories.js +119 -154
  34. package/dist/canvas/components/StageNode/StageNode.stories.utils.cjs +42 -0
  35. package/dist/canvas/components/StageNode/StageNode.stories.utils.d.ts +3 -0
  36. package/dist/canvas/components/StageNode/StageNode.stories.utils.d.ts.map +1 -0
  37. package/dist/canvas/components/StageNode/StageNode.stories.utils.js +8 -0
  38. package/dist/canvas/components/StageNode/StageNode.styles.cjs +1 -1
  39. package/dist/canvas/components/StageNode/StageNode.styles.js +1 -1
  40. package/dist/canvas/components/StageNode/StageNode.types.d.ts +9 -1
  41. package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
  42. package/dist/canvas/components/StageNode/StageTaskDragOverlay.cjs +68 -0
  43. package/dist/canvas/components/StageNode/StageTaskDragOverlay.d.ts +3 -0
  44. package/dist/canvas/components/StageNode/StageTaskDragOverlay.d.ts.map +1 -0
  45. package/dist/canvas/components/StageNode/StageTaskDragOverlay.js +34 -0
  46. package/dist/canvas/components/StageNode/TaskMenu.cjs +13 -17
  47. package/dist/canvas/components/StageNode/TaskMenu.d.ts +1 -2
  48. package/dist/canvas/components/StageNode/TaskMenu.d.ts.map +1 -1
  49. package/dist/canvas/components/StageNode/TaskMenu.js +14 -18
  50. package/dist/canvas/components/StageNode/index.d.ts +1 -1
  51. package/dist/canvas/components/StageNode/index.d.ts.map +1 -1
  52. package/package.json +1 -1
@@ -0,0 +1,104 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Spacing } from "@uipath/apollo-core";
3
+ import { ApCircularProgress, ApIconButton, ApTooltip } from "../../../material/index.js";
4
+ import debounce from "debounce";
5
+ import { memo, useCallback, useMemo, useRef, useState } from "react";
6
+ import { PlayIcon } from "../../icons/index.js";
7
+ import { TaskContent } from "./DraggableTask.js";
8
+ import { StageTask } from "./StageNode.styles.js";
9
+ import { TaskMenu } from "./TaskMenu.js";
10
+ const AdhocTaskPlayButton = /*#__PURE__*/ memo(({ taskId, onTaskPlay })=>{
11
+ const [playLoading, setPlayLoading] = useState(false);
12
+ const debouncedTaskPlay = useMemo(()=>debounce(async (id)=>{
13
+ setPlayLoading(true);
14
+ try {
15
+ await onTaskPlay(id);
16
+ } catch {} finally{
17
+ setPlayLoading(false);
18
+ }
19
+ }, 500, {
20
+ immediate: true
21
+ }), [
22
+ onTaskPlay
23
+ ]);
24
+ const handlePlayClick = useCallback((e)=>{
25
+ e.stopPropagation();
26
+ e.preventDefault();
27
+ debouncedTaskPlay(taskId);
28
+ }, [
29
+ debouncedTaskPlay,
30
+ taskId
31
+ ]);
32
+ return /*#__PURE__*/ jsx(ApTooltip, {
33
+ content: "Trigger task",
34
+ placement: "top",
35
+ children: /*#__PURE__*/ jsx(ApIconButton, {
36
+ "data-testid": `stage-task-play-${taskId}`,
37
+ onClick: handlePlayClick,
38
+ onMouseDown: (e)=>e.stopPropagation(),
39
+ onKeyDown: (e)=>e.stopPropagation(),
40
+ className: "task-menu-icon-button",
41
+ sx: {
42
+ color: 'var(--uix-canvas-primary) !important',
43
+ minWidth: 'unset !important',
44
+ width: `${Spacing.SpacingL} !important`,
45
+ height: `${Spacing.SpacingL} !important`,
46
+ padding: '0 !important'
47
+ },
48
+ children: playLoading ? /*#__PURE__*/ jsx(ApCircularProgress, {
49
+ size: 20
50
+ }) : /*#__PURE__*/ jsx(PlayIcon, {
51
+ w: 20,
52
+ h: 20
53
+ })
54
+ })
55
+ });
56
+ });
57
+ const AdhocTaskItemComponent = ({ task, taskExecution, isSelected, getContextMenuItems, onTaskClick, onTaskPlay })=>{
58
+ const [isMenuOpen, setIsMenuOpen] = useState(false);
59
+ const taskRef = useRef(null);
60
+ const menuRef = useRef(null);
61
+ const handleClick = useCallback((e)=>{
62
+ if (isMenuOpen) return;
63
+ onTaskClick(e, task.id);
64
+ }, [
65
+ isMenuOpen,
66
+ onTaskClick,
67
+ task.id
68
+ ]);
69
+ const handleMenuOpenChange = useCallback((isOpen)=>{
70
+ setIsMenuOpen(isOpen);
71
+ }, []);
72
+ const handleContextMenu = useCallback((e)=>{
73
+ menuRef.current?.handleContextMenu(e);
74
+ }, []);
75
+ return /*#__PURE__*/ jsxs(StageTask, {
76
+ ref: taskRef,
77
+ "data-testid": `stage-task-${task.id}`,
78
+ selected: isSelected,
79
+ status: taskExecution?.status,
80
+ onClick: handleClick,
81
+ ...getContextMenuItems && {
82
+ onContextMenu: handleContextMenu
83
+ },
84
+ children: [
85
+ /*#__PURE__*/ jsx(TaskContent, {
86
+ task: task,
87
+ taskExecution: taskExecution
88
+ }),
89
+ onTaskPlay && /*#__PURE__*/ jsx(AdhocTaskPlayButton, {
90
+ taskId: task.id,
91
+ onTaskPlay: onTaskPlay
92
+ }),
93
+ getContextMenuItems && /*#__PURE__*/ jsx(TaskMenu, {
94
+ ref: menuRef,
95
+ taskId: task.id,
96
+ getContextMenuItems: getContextMenuItems,
97
+ onMenuOpenChange: handleMenuOpenChange,
98
+ taskRef: taskRef
99
+ })
100
+ ]
101
+ });
102
+ };
103
+ const AdhocTaskItem = /*#__PURE__*/ memo(AdhocTaskItemComponent);
104
+ export { AdhocTaskItem };
@@ -32,6 +32,7 @@ const sortable_namespaceObject = require("@dnd-kit/sortable");
32
32
  const utilities_namespaceObject = require("@dnd-kit/utilities");
33
33
  const apollo_core_namespaceObject = require("@uipath/apollo-core");
34
34
  const index_cjs_namespaceObject = require("../../layouts/index.cjs");
35
+ const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
35
36
  const external_material_index_cjs_namespaceObject = require("../../../material/index.cjs");
36
37
  const external_react_namespaceObject = require("react");
37
38
  const external_icons_index_cjs_namespaceObject = require("../../icons/index.cjs");
@@ -171,8 +172,9 @@ const TaskContent = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(({ ta
171
172
  ]
172
173
  })
173
174
  }));
174
- const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, contextMenuItems, onTaskClick, onMenuOpen, isDragDisabled, projectedDepth, zoom = 1 })=>{
175
+ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, groupIndex, taskIndex, getContextMenuItems, onTaskClick, isDragDisabled, projectedDepth })=>{
175
176
  const [isMenuOpen, setIsMenuOpen] = (0, external_react_namespaceObject.useState)(false);
177
+ const zoom = (0, react_cjs_namespaceObject.useStore)((s)=>s.transform[2]);
176
178
  const taskRef = (0, external_react_namespaceObject.useRef)(null);
177
179
  const menuRef = (0, external_react_namespaceObject.useRef)(null);
178
180
  const handleClick = (0, external_react_namespaceObject.useCallback)((e)=>{
@@ -189,6 +191,14 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, c
189
191
  const handleContextMenu = (0, external_react_namespaceObject.useCallback)((e)=>{
190
192
  menuRef.current?.handleContextMenu(e);
191
193
  }, []);
194
+ const handleGetContextMenuItems = (0, external_react_namespaceObject.useCallback)(()=>{
195
+ if (!getContextMenuItems) return [];
196
+ return getContextMenuItems(groupIndex, taskIndex);
197
+ }, [
198
+ getContextMenuItems,
199
+ groupIndex,
200
+ taskIndex
201
+ ]);
192
202
  const { attributes, listeners, setNodeRef, transition, transform, isDragging } = (0, sortable_namespaceObject.useSortable)({
193
203
  id: task.id,
194
204
  disabled: isDragDisabled
@@ -234,7 +244,7 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, c
234
244
  isParallel: isParallel,
235
245
  isDragEnabled: !isDragDisabled,
236
246
  onClick: handleClick,
237
- ...contextMenuItems.length > 0 && {
247
+ ...getContextMenuItems && {
238
248
  onContextMenu: handleContextMenu
239
249
  },
240
250
  children: [
@@ -258,12 +268,11 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, c
258
268
  })
259
269
  })
260
270
  }),
261
- contextMenuItems.length > 0 && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_TaskMenu_cjs_namespaceObject.TaskMenu, {
271
+ getContextMenuItems && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_TaskMenu_cjs_namespaceObject.TaskMenu, {
262
272
  ref: menuRef,
263
273
  taskId: task.id,
264
- contextMenuItems: contextMenuItems,
274
+ getContextMenuItems: handleGetContextMenuItems,
265
275
  onMenuOpenChange: handleMenuOpenChange,
266
- onMenuOpen: onMenuOpen,
267
276
  taskRef: taskRef
268
277
  })
269
278
  ]
@@ -1,4 +1,4 @@
1
1
  import type { DraggableTaskProps, TaskContentProps } from './DraggableTask.types';
2
2
  export declare const TaskContent: import("react").MemoExoticComponent<({ task, taskExecution, isDragging }: TaskContentProps) => import("react/jsx-runtime").JSX.Element>;
3
- export declare const DraggableTask: import("react").MemoExoticComponent<({ task, taskExecution, isSelected, isParallel, contextMenuItems, onTaskClick, onMenuOpen, isDragDisabled, projectedDepth, zoom, }: DraggableTaskProps) => import("react/jsx-runtime").JSX.Element>;
3
+ export declare const DraggableTask: import("react").MemoExoticComponent<({ task, taskExecution, isSelected, isParallel, groupIndex, taskIndex, getContextMenuItems, onTaskClick, isDragDisabled, projectedDepth, }: DraggableTaskProps) => import("react/jsx-runtime").JSX.Element>;
4
4
  //# sourceMappingURL=DraggableTask.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DraggableTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/DraggableTask.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAgClF,eAAO,MAAM,WAAW,4EAA8C,gBAAgB,6CAwEpF,CAAC;AAkIH,eAAO,MAAM,aAAa,0KArHvB,kBAAkB,6CAqHoC,CAAC"}
1
+ {"version":3,"file":"DraggableTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/DraggableTask.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAgClF,eAAO,MAAM,WAAW,4EAA8C,gBAAgB,6CAwEpF,CAAC;AAyIH,eAAO,MAAM,aAAa,kLA5HvB,kBAAkB,6CA4HoC,CAAC"}
@@ -3,6 +3,7 @@ import { useSortable } from "@dnd-kit/sortable";
3
3
  import { CSS } from "@dnd-kit/utilities";
4
4
  import { FontVariantToken, Padding, Spacing } from "@uipath/apollo-core";
5
5
  import { Column, Row } from "../../layouts/index.js";
6
+ import { useStore } from "../../xyflow/react.js";
6
7
  import { ApBadge, ApIconButton, ApTooltip, ApTypography, BadgeSize } from "../../../material/index.js";
7
8
  import { memo, useCallback, useMemo, useRef, useState } from "react";
8
9
  import { EntryConditionIcon } from "../../icons/index.js";
@@ -142,8 +143,9 @@ const TaskContent = /*#__PURE__*/ memo(({ task, taskExecution, isDragging })=>/*
142
143
  ]
143
144
  })
144
145
  }));
145
- const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, contextMenuItems, onTaskClick, onMenuOpen, isDragDisabled, projectedDepth, zoom = 1 })=>{
146
+ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, groupIndex, taskIndex, getContextMenuItems, onTaskClick, isDragDisabled, projectedDepth })=>{
146
147
  const [isMenuOpen, setIsMenuOpen] = useState(false);
148
+ const zoom = useStore((s)=>s.transform[2]);
147
149
  const taskRef = useRef(null);
148
150
  const menuRef = useRef(null);
149
151
  const handleClick = useCallback((e)=>{
@@ -160,6 +162,14 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, c
160
162
  const handleContextMenu = useCallback((e)=>{
161
163
  menuRef.current?.handleContextMenu(e);
162
164
  }, []);
165
+ const handleGetContextMenuItems = useCallback(()=>{
166
+ if (!getContextMenuItems) return [];
167
+ return getContextMenuItems(groupIndex, taskIndex);
168
+ }, [
169
+ getContextMenuItems,
170
+ groupIndex,
171
+ taskIndex
172
+ ]);
163
173
  const { attributes, listeners, setNodeRef, transition, transform, isDragging } = useSortable({
164
174
  id: task.id,
165
175
  disabled: isDragDisabled
@@ -205,7 +215,7 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, c
205
215
  isParallel: isParallel,
206
216
  isDragEnabled: !isDragDisabled,
207
217
  onClick: handleClick,
208
- ...contextMenuItems.length > 0 && {
218
+ ...getContextMenuItems && {
209
219
  onContextMenu: handleContextMenu
210
220
  },
211
221
  children: [
@@ -229,12 +239,11 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, c
229
239
  })
230
240
  })
231
241
  }),
232
- contextMenuItems.length > 0 && /*#__PURE__*/ jsx(TaskMenu, {
242
+ getContextMenuItems && /*#__PURE__*/ jsx(TaskMenu, {
233
243
  ref: menuRef,
234
244
  taskId: task.id,
235
- contextMenuItems: contextMenuItems,
245
+ getContextMenuItems: handleGetContextMenuItems,
236
246
  onMenuOpenChange: handleMenuOpenChange,
237
- onMenuOpen: onMenuOpen,
238
247
  taskRef: taskRef
239
248
  })
240
249
  ]
@@ -10,12 +10,12 @@ export interface DraggableTaskProps {
10
10
  taskExecution?: StageTaskExecution;
11
11
  isSelected: boolean;
12
12
  isParallel: boolean;
13
- contextMenuItems: NodeMenuItem[];
13
+ groupIndex: number;
14
+ taskIndex: number;
15
+ getContextMenuItems?: (groupIndex: number, taskIndex: number) => NodeMenuItem[];
14
16
  onTaskClick: (e: React.MouseEvent, taskId: string) => void;
15
- onMenuOpen?: () => void;
16
17
  onTaskPlay?: (taskId: string) => Promise<void>;
17
18
  isDragDisabled?: boolean;
18
19
  projectedDepth?: number;
19
- zoom?: number;
20
20
  }
21
21
  //# sourceMappingURL=DraggableTask.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DraggableTask.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/DraggableTask.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,YAAY,EAAE,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"DraggableTask.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/DraggableTask.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,YAAY,EAAE,CAAC;IAChF,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -40,6 +40,7 @@ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
40
40
  const styled_namespaceObject = require("@emotion/styled");
41
41
  var styled_default = /*#__PURE__*/ __webpack_require__.n(styled_namespaceObject);
42
42
  const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
43
+ const external_react_namespaceObject = require("react");
43
44
  const StageEdgeLabel = styled_default().div`
44
45
  position: absolute;
45
46
  color: var(--uix-canvas-foreground);
@@ -57,6 +58,9 @@ const StageEdgeLabel = styled_default().div`
57
58
  border-color: var(--uix-canvas-border-hover);
58
59
  }
59
60
  `;
61
+ function stageEdgeGeometryEquality(previous, next) {
62
+ return previous.sourceX === next.sourceX && previous.sourceY === next.sourceY && previous.targetX === next.targetX && previous.targetY === next.targetY;
63
+ }
60
64
  function getArrowFromBezier(path, arrowSize) {
61
65
  const pathEl = document.createElementNS('http://www.w3.org/2000/svg', 'path');
62
66
  pathEl.setAttribute('d', path);
@@ -70,19 +74,13 @@ function getArrowFromBezier(path, arrowSize) {
70
74
  angle
71
75
  };
72
76
  }
73
- function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke = 'var(--uix-canvas-foreground-emp)', strokeWidth = 2, arrowSize = 8, ...rest }) {
74
- const sourceNode = (0, react_cjs_namespaceObject.useInternalNode)(rest.source);
75
- const targetNode = (0, react_cjs_namespaceObject.useInternalNode)(rest.target);
76
- const sourceNodeX = sourceNode ? sourceNode.position.x + (sourceNode.measured?.width ?? 0) : sourceX;
77
- const sourceNodeY = sourceNode?.position.y ? sourceNode.position.y + 32 : sourceY;
78
- const targetNodeX = targetNode?.position.x ?? targetX;
79
- const targetNodeY = targetNode?.position.y ? targetNode.position.y + 32 : targetY;
77
+ function StageEdgeInner({ geometry, sourcePosition, targetPosition, selected, style, stroke = 'var(--uix-canvas-foreground-emp)', strokeWidth = 2, arrowSize = 8, ...rest }) {
80
78
  const [pathData, labelX, labelY, _ex, _ey] = (0, react_cjs_namespaceObject.getSmoothStepPath)({
81
- sourceX: sourceNodeX,
82
- sourceY: sourceNodeY,
79
+ sourceX: geometry.sourceX,
80
+ sourceY: geometry.sourceY,
83
81
  sourcePosition,
84
- targetX: targetNodeX - 1,
85
- targetY: targetNodeY,
82
+ targetX: geometry.targetX - 1,
83
+ targetY: geometry.targetY,
86
84
  targetPosition,
87
85
  borderRadius: 40
88
86
  });
@@ -141,6 +139,31 @@ function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetP
141
139
  ]
142
140
  });
143
141
  }
142
+ const StageEdgeInnerMemo = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StageEdgeInner);
143
+ function StageEdgeComponent({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke, strokeWidth, arrowSize, ...rest }) {
144
+ const geometry = (0, react_cjs_namespaceObject.useStore)((state)=>{
145
+ const sourceNode = state.nodeLookup.get(rest.source);
146
+ const targetNode = state.nodeLookup.get(rest.target);
147
+ return {
148
+ sourceX: sourceNode ? sourceNode.position.x + (sourceNode.measured?.width ?? 0) : sourceX,
149
+ sourceY: sourceNode ? sourceNode.position.y + 32 : sourceY,
150
+ targetX: targetNode?.position.x ?? targetX,
151
+ targetY: targetNode ? targetNode.position.y + 32 : targetY
152
+ };
153
+ }, stageEdgeGeometryEquality);
154
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(StageEdgeInnerMemo, {
155
+ geometry: geometry,
156
+ sourcePosition: sourcePosition,
157
+ targetPosition: targetPosition,
158
+ selected: selected,
159
+ style: style,
160
+ stroke: stroke,
161
+ strokeWidth: strokeWidth,
162
+ arrowSize: arrowSize,
163
+ ...rest
164
+ });
165
+ }
166
+ const StageEdge = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StageEdgeComponent);
144
167
  exports.StageEdge = __webpack_exports__.StageEdge;
145
168
  exports.StageEdgeLabel = __webpack_exports__.StageEdgeLabel;
146
169
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -8,6 +8,7 @@ type Props = EdgeProps & {
8
8
  strokeWidth?: number;
9
9
  arrowSize?: number;
10
10
  };
11
- export declare function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke, strokeWidth, arrowSize, ...rest }: Props): import("react/jsx-runtime").JSX.Element;
11
+ declare function StageEdgeComponent({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke, strokeWidth, arrowSize, ...rest }: Props): import("react/jsx-runtime").JSX.Element;
12
+ export declare const StageEdge: import("react").MemoExoticComponent<typeof StageEdgeComponent>;
12
13
  export {};
13
14
  //# sourceMappingURL=StageEdge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StageEdge.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageEdge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAO1E,eAAO,MAAM,cAAc;;;yGAgB1B,CAAC;AAEF,KAAK,KAAK,GAAG,SAAS,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAkBF,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,QAAQ,EACR,KAAK,EACL,MAA2C,EAC3C,WAAe,EACf,SAAa,EACb,GAAG,IAAI,EACR,EAAE,KAAK,2CAiFP"}
1
+ {"version":3,"file":"StageEdge.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageEdge.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,0CAA0C,CAAC;AAQ1F,eAAO,MAAM,cAAc;;;yGAgB1B,CAAC;AAEF,KAAK,KAAK,GAAG,SAAS,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA4HF,iBAAS,kBAAkB,CAAC,EAC1B,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,cAAc,EACd,cAAc,EACd,QAAQ,EACR,KAAK,EACL,MAAM,EACN,WAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,KAAK,2CA0BP;AAED,eAAO,MAAM,SAAS,gEAA2B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
2
  import styled from "@emotion/styled";
3
- import { EdgeLabelRenderer, getSmoothStepPath, useInternalNode } from "../../xyflow/react.js";
3
+ import { EdgeLabelRenderer, getSmoothStepPath, useStore } from "../../xyflow/react.js";
4
+ import { memo } from "react";
4
5
  const StageEdgeLabel = styled.div`
5
6
  position: absolute;
6
7
  color: var(--uix-canvas-foreground);
@@ -18,6 +19,9 @@ const StageEdgeLabel = styled.div`
18
19
  border-color: var(--uix-canvas-border-hover);
19
20
  }
20
21
  `;
22
+ function stageEdgeGeometryEquality(previous, next) {
23
+ return previous.sourceX === next.sourceX && previous.sourceY === next.sourceY && previous.targetX === next.targetX && previous.targetY === next.targetY;
24
+ }
21
25
  function getArrowFromBezier(path, arrowSize) {
22
26
  const pathEl = document.createElementNS('http://www.w3.org/2000/svg', 'path');
23
27
  pathEl.setAttribute('d', path);
@@ -31,19 +35,13 @@ function getArrowFromBezier(path, arrowSize) {
31
35
  angle
32
36
  };
33
37
  }
34
- function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke = 'var(--uix-canvas-foreground-emp)', strokeWidth = 2, arrowSize = 8, ...rest }) {
35
- const sourceNode = useInternalNode(rest.source);
36
- const targetNode = useInternalNode(rest.target);
37
- const sourceNodeX = sourceNode ? sourceNode.position.x + (sourceNode.measured?.width ?? 0) : sourceX;
38
- const sourceNodeY = sourceNode?.position.y ? sourceNode.position.y + 32 : sourceY;
39
- const targetNodeX = targetNode?.position.x ?? targetX;
40
- const targetNodeY = targetNode?.position.y ? targetNode.position.y + 32 : targetY;
38
+ function StageEdgeInner({ geometry, sourcePosition, targetPosition, selected, style, stroke = 'var(--uix-canvas-foreground-emp)', strokeWidth = 2, arrowSize = 8, ...rest }) {
41
39
  const [pathData, labelX, labelY, _ex, _ey] = getSmoothStepPath({
42
- sourceX: sourceNodeX,
43
- sourceY: sourceNodeY,
40
+ sourceX: geometry.sourceX,
41
+ sourceY: geometry.sourceY,
44
42
  sourcePosition,
45
- targetX: targetNodeX - 1,
46
- targetY: targetNodeY,
43
+ targetX: geometry.targetX - 1,
44
+ targetY: geometry.targetY,
47
45
  targetPosition,
48
46
  borderRadius: 40
49
47
  });
@@ -102,4 +100,29 @@ function StageEdge({ sourceX, sourceY, targetX, targetY, sourcePosition, targetP
102
100
  ]
103
101
  });
104
102
  }
103
+ const StageEdgeInnerMemo = /*#__PURE__*/ memo(StageEdgeInner);
104
+ function StageEdgeComponent({ sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, selected, style, stroke, strokeWidth, arrowSize, ...rest }) {
105
+ const geometry = useStore((state)=>{
106
+ const sourceNode = state.nodeLookup.get(rest.source);
107
+ const targetNode = state.nodeLookup.get(rest.target);
108
+ return {
109
+ sourceX: sourceNode ? sourceNode.position.x + (sourceNode.measured?.width ?? 0) : sourceX,
110
+ sourceY: sourceNode ? sourceNode.position.y + 32 : sourceY,
111
+ targetX: targetNode?.position.x ?? targetX,
112
+ targetY: targetNode ? targetNode.position.y + 32 : targetY
113
+ };
114
+ }, stageEdgeGeometryEquality);
115
+ return /*#__PURE__*/ jsx(StageEdgeInnerMemo, {
116
+ geometry: geometry,
117
+ sourcePosition: sourcePosition,
118
+ targetPosition: targetPosition,
119
+ selected: selected,
120
+ style: style,
121
+ stroke: stroke,
122
+ strokeWidth: strokeWidth,
123
+ arrowSize: arrowSize,
124
+ ...rest
125
+ });
126
+ }
127
+ const StageEdge = /*#__PURE__*/ memo(StageEdgeComponent);
105
128
  export { StageEdge, StageEdgeLabel };