@uipath/apollo-react 3.44.0 → 3.44.2-pr255.af80ea0

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 (121) hide show
  1. package/dist/canvas/components/StageNode/CrossStageTaskDrag.stories.cjs +581 -0
  2. package/dist/canvas/components/StageNode/CrossStageTaskDrag.stories.d.ts +6 -0
  3. package/dist/canvas/components/StageNode/CrossStageTaskDrag.stories.d.ts.map +1 -0
  4. package/dist/canvas/components/StageNode/CrossStageTaskDrag.stories.js +544 -0
  5. package/dist/canvas/components/StageNode/DropPlaceholder.cjs +106 -0
  6. package/dist/canvas/components/StageNode/DropPlaceholder.d.ts +10 -0
  7. package/dist/canvas/components/StageNode/DropPlaceholder.d.ts.map +1 -0
  8. package/dist/canvas/components/StageNode/DropPlaceholder.js +72 -0
  9. package/dist/canvas/components/StageNode/StageNode.cjs +334 -389
  10. package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
  11. package/dist/canvas/components/StageNode/StageNode.js +336 -391
  12. package/dist/canvas/components/StageNode/StageNode.stories.cjs +1910 -1416
  13. package/dist/canvas/components/StageNode/StageNode.stories.d.ts +1 -1
  14. package/dist/canvas/components/StageNode/StageNode.stories.d.ts.map +1 -1
  15. package/dist/canvas/components/StageNode/StageNode.stories.js +1906 -1412
  16. package/dist/canvas/components/StageNode/StageNode.styles.cjs +1 -1
  17. package/dist/canvas/components/StageNode/StageNode.styles.js +1 -1
  18. package/dist/canvas/components/StageNode/StageNode.types.d.ts +26 -10
  19. package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
  20. package/dist/canvas/components/StageNode/StageNodeTaskUtilities.cjs +10 -5
  21. package/dist/canvas/components/StageNode/StageNodeTaskUtilities.d.ts +2 -1
  22. package/dist/canvas/components/StageNode/StageNodeTaskUtilities.d.ts.map +1 -1
  23. package/dist/canvas/components/StageNode/StageNodeTaskUtilities.js +6 -4
  24. package/dist/canvas/components/StageNode/TaskMenu.cjs +11 -43
  25. package/dist/canvas/components/StageNode/TaskMenu.d.ts +1 -6
  26. package/dist/canvas/components/StageNode/TaskMenu.d.ts.map +1 -1
  27. package/dist/canvas/components/StageNode/TaskMenu.js +13 -35
  28. package/dist/canvas/components/StageNode/index.cjs +17 -3
  29. package/dist/canvas/components/StageNode/index.d.ts +4 -1
  30. package/dist/canvas/components/StageNode/index.d.ts.map +1 -1
  31. package/dist/canvas/components/StageNode/index.js +3 -1
  32. package/dist/canvas/components/TaskNode/PlaceholderTaskNode.cjs +51 -0
  33. package/dist/canvas/components/TaskNode/PlaceholderTaskNode.d.ts +8 -0
  34. package/dist/canvas/components/TaskNode/PlaceholderTaskNode.d.ts.map +1 -0
  35. package/dist/canvas/components/TaskNode/PlaceholderTaskNode.js +17 -0
  36. package/dist/canvas/components/TaskNode/TaskNode.cjs +235 -0
  37. package/dist/canvas/components/TaskNode/TaskNode.d.ts +11 -0
  38. package/dist/canvas/components/TaskNode/TaskNode.d.ts.map +1 -0
  39. package/dist/canvas/components/TaskNode/TaskNode.js +198 -0
  40. package/dist/canvas/components/TaskNode/TaskNode.stories.cjs +558 -0
  41. package/dist/canvas/components/TaskNode/TaskNode.stories.d.ts +8 -0
  42. package/dist/canvas/components/TaskNode/TaskNode.stories.d.ts.map +1 -0
  43. package/dist/canvas/components/TaskNode/TaskNode.stories.js +515 -0
  44. package/dist/canvas/components/TaskNode/TaskNode.types.d.ts +40 -0
  45. package/dist/canvas/components/TaskNode/TaskNode.types.d.ts.map +1 -0
  46. package/dist/canvas/components/TaskNode/TaskNodeContext.cjs +86 -0
  47. package/dist/canvas/components/TaskNode/TaskNodeContext.d.ts +24 -0
  48. package/dist/canvas/components/TaskNode/TaskNodeContext.d.ts.map +1 -0
  49. package/dist/canvas/components/TaskNode/TaskNodeContext.js +40 -0
  50. package/dist/canvas/components/TaskNode/index.cjs +82 -0
  51. package/dist/canvas/components/TaskNode/index.d.ts +8 -0
  52. package/dist/canvas/components/TaskNode/index.d.ts.map +1 -0
  53. package/dist/canvas/components/TaskNode/index.js +6 -0
  54. package/dist/canvas/components/TaskNode/taskReorderUtils.cjs +206 -0
  55. package/dist/canvas/components/TaskNode/taskReorderUtils.d.ts +23 -0
  56. package/dist/canvas/components/TaskNode/taskReorderUtils.d.ts.map +1 -0
  57. package/dist/canvas/components/TaskNode/taskReorderUtils.js +154 -0
  58. package/dist/canvas/components/TaskNode/useTaskPositions.cjs +153 -0
  59. package/dist/canvas/components/TaskNode/useTaskPositions.d.ts +29 -0
  60. package/dist/canvas/components/TaskNode/useTaskPositions.d.ts.map +1 -0
  61. package/dist/canvas/components/TaskNode/useTaskPositions.js +110 -0
  62. package/dist/canvas/core/TaskTypeRegistry.cjs +132 -0
  63. package/dist/canvas/core/TaskTypeRegistry.d.ts +18 -0
  64. package/dist/canvas/core/TaskTypeRegistry.d.ts.map +1 -0
  65. package/dist/canvas/core/TaskTypeRegistry.js +98 -0
  66. package/dist/canvas/core/index.cjs +21 -3
  67. package/dist/canvas/core/index.d.ts +2 -0
  68. package/dist/canvas/core/index.d.ts.map +1 -1
  69. package/dist/canvas/core/index.js +2 -0
  70. package/dist/canvas/core/useTaskTypeRegistry.cjs +82 -0
  71. package/dist/canvas/core/useTaskTypeRegistry.d.ts +13 -0
  72. package/dist/canvas/core/useTaskTypeRegistry.d.ts.map +1 -0
  73. package/dist/canvas/core/useTaskTypeRegistry.js +33 -0
  74. package/dist/canvas/hooks/CrossStageDragContext.cjs +45 -0
  75. package/dist/canvas/hooks/CrossStageDragContext.d.ts +8 -0
  76. package/dist/canvas/hooks/CrossStageDragContext.d.ts.map +1 -0
  77. package/dist/canvas/hooks/CrossStageDragContext.js +8 -0
  78. package/dist/canvas/hooks/calculateTaskDropPosition.cjs +253 -0
  79. package/dist/canvas/hooks/calculateTaskDropPosition.d.ts +11 -0
  80. package/dist/canvas/hooks/calculateTaskDropPosition.d.ts.map +1 -0
  81. package/dist/canvas/hooks/calculateTaskDropPosition.js +216 -0
  82. package/dist/canvas/hooks/index.cjs +57 -30
  83. package/dist/canvas/hooks/index.d.ts +3 -0
  84. package/dist/canvas/hooks/index.d.ts.map +1 -1
  85. package/dist/canvas/hooks/index.js +3 -0
  86. package/dist/canvas/hooks/useCrossStageTaskDrag.cjs +346 -0
  87. package/dist/canvas/hooks/useCrossStageTaskDrag.d.ts +44 -0
  88. package/dist/canvas/hooks/useCrossStageTaskDrag.d.ts.map +1 -0
  89. package/dist/canvas/hooks/useCrossStageTaskDrag.js +312 -0
  90. package/dist/canvas/hooks/useTaskCopyPaste.cjs +155 -0
  91. package/dist/canvas/hooks/useTaskCopyPaste.d.ts +34 -0
  92. package/dist/canvas/hooks/useTaskCopyPaste.d.ts.map +1 -0
  93. package/dist/canvas/hooks/useTaskCopyPaste.js +121 -0
  94. package/dist/canvas/schema/index.cjs +12 -3
  95. package/dist/canvas/schema/index.d.ts +1 -0
  96. package/dist/canvas/schema/index.d.ts.map +1 -1
  97. package/dist/canvas/schema/index.js +1 -0
  98. package/dist/canvas/schema/task-definition/index.cjs +60 -0
  99. package/dist/canvas/schema/task-definition/index.d.ts +2 -0
  100. package/dist/canvas/schema/task-definition/index.d.ts.map +1 -0
  101. package/dist/canvas/schema/task-definition/index.js +1 -0
  102. package/dist/canvas/schema/task-definition/task-manifest.cjs +78 -0
  103. package/dist/canvas/schema/task-definition/task-manifest.d.ts +43 -0
  104. package/dist/canvas/schema/task-definition/task-manifest.d.ts.map +1 -0
  105. package/dist/canvas/schema/task-definition/task-manifest.js +29 -0
  106. package/dist/material/components/ap-sankey-diagram/ApSankeyDiagram.cjs +44 -21
  107. package/dist/material/components/ap-sankey-diagram/ApSankeyDiagram.d.ts.map +1 -1
  108. package/dist/material/components/ap-sankey-diagram/ApSankeyDiagram.js +44 -21
  109. package/package.json +3 -3
  110. package/dist/canvas/components/StageNode/DraggableTask.cjs +0 -271
  111. package/dist/canvas/components/StageNode/DraggableTask.d.ts +0 -4
  112. package/dist/canvas/components/StageNode/DraggableTask.d.ts.map +0 -1
  113. package/dist/canvas/components/StageNode/DraggableTask.js +0 -234
  114. package/dist/canvas/components/StageNode/DraggableTask.types.d.ts +0 -20
  115. package/dist/canvas/components/StageNode/DraggableTask.types.d.ts.map +0 -1
  116. package/dist/canvas/components/StageNode/StageNode.utils.cjs +0 -164
  117. package/dist/canvas/components/StageNode/StageNode.utils.d.ts +0 -19
  118. package/dist/canvas/components/StageNode/StageNode.utils.d.ts.map +0 -1
  119. package/dist/canvas/components/StageNode/StageNode.utils.js +0 -121
  120. /package/dist/canvas/components/{StageNode/DraggableTask.types.cjs → TaskNode/TaskNode.types.cjs} +0 -0
  121. /package/dist/canvas/components/{StageNode/DraggableTask.types.js → TaskNode/TaskNode.types.js} +0 -0
@@ -27,110 +27,87 @@ __webpack_require__.d(__webpack_exports__, {
27
27
  StageNode: ()=>StageNode
28
28
  });
29
29
  const jsx_runtime_namespaceObject = require("react/jsx-runtime");
30
- const core_namespaceObject = require("@dnd-kit/core");
31
- const sortable_namespaceObject = require("@dnd-kit/sortable");
32
30
  const apollo_core_namespaceObject = require("@uipath/apollo-core");
33
31
  const index_cjs_namespaceObject = require("../../layouts/index.cjs");
34
32
  const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
35
33
  const external_material_index_cjs_namespaceObject = require("../../../material/index.cjs");
36
34
  const external_react_namespaceObject = require("react");
37
- const external_react_dom_namespaceObject = require("react-dom");
35
+ const CrossStageDragContext_cjs_namespaceObject = require("../../hooks/CrossStageDragContext.cjs");
38
36
  const ConnectedHandlesContext_cjs_namespaceObject = require("../BaseCanvas/ConnectedHandlesContext.cjs");
39
37
  const useButtonHandles_cjs_namespaceObject = require("../ButtonHandle/useButtonHandles.cjs");
40
38
  const external_ExecutionStatusIcon_index_cjs_namespaceObject = require("../ExecutionStatusIcon/index.cjs");
41
39
  const external_FloatingCanvasPanel_index_cjs_namespaceObject = require("../FloatingCanvasPanel/index.cjs");
42
40
  const external_NodeContextMenu_index_cjs_namespaceObject = require("../NodeContextMenu/index.cjs");
43
41
  const hooks_index_cjs_namespaceObject = require("../NodePropertiesPanel/hooks/index.cjs");
42
+ const TaskNodeContext_cjs_namespaceObject = require("../TaskNode/TaskNodeContext.cjs");
43
+ const useTaskPositions_cjs_namespaceObject = require("../TaskNode/useTaskPositions.cjs");
44
44
  const external_Toolbox_index_cjs_namespaceObject = require("../Toolbox/index.cjs");
45
- const external_DraggableTask_cjs_namespaceObject = require("./DraggableTask.cjs");
46
45
  const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.styles.cjs");
47
- const external_StageNode_utils_cjs_namespaceObject = require("./StageNode.utils.cjs");
48
- const external_StageNodeTaskUtilities_cjs_namespaceObject = require("./StageNodeTaskUtilities.cjs");
46
+ function calculateExecutionExtraHeight(execution) {
47
+ if (!execution) return 0;
48
+ if (execution.duration || execution.retryDuration || execution.badge) if (execution.retryDuration || execution.badge) return 26;
49
+ else return 18;
50
+ return 2;
51
+ }
52
+ function calculateParallelGroupY(groupIndex, taskIds, hasStageExecution, taskExecutionData, config = useTaskPositions_cjs_namespaceObject.DEFAULT_TASK_POSITION_CONFIG) {
53
+ const headerHeight = hasStageExecution ? config.headerHeight + config.headerExecutionDescriptionHeight : config.headerHeight;
54
+ let y = headerHeight + config.contentPaddingTop;
55
+ for(let i = 0; i < groupIndex; i++){
56
+ const group = taskIds[i];
57
+ if (group) {
58
+ for(let j = 0; j < group.length; j++){
59
+ const taskId = group[j];
60
+ const execution = taskId ? taskExecutionData[taskId]?.execution : void 0;
61
+ const taskHeight = config.taskHeight + calculateExecutionExtraHeight(execution);
62
+ y += taskHeight;
63
+ if (j < group.length - 1) y += config.taskGap;
64
+ }
65
+ y += config.taskGap;
66
+ }
67
+ }
68
+ return y;
69
+ }
70
+ function calculateParallelGroupHeight(group, taskExecutionData, config = useTaskPositions_cjs_namespaceObject.DEFAULT_TASK_POSITION_CONFIG) {
71
+ let height = 0;
72
+ for(let i = 0; i < group.length; i++){
73
+ const taskId = group[i];
74
+ const execution = taskId ? taskExecutionData[taskId]?.execution : void 0;
75
+ const taskHeight = config.taskHeight + calculateExecutionExtraHeight(execution);
76
+ height += taskHeight;
77
+ if (i < group.length - 1) height += config.taskGap;
78
+ }
79
+ return height;
80
+ }
49
81
  const StageNodeComponent = (props)=>{
50
- const { dragging, selected, id, width, execution, stageDetails, addTaskLabel = 'Add task', addTaskLoading = false, replaceTaskLabel = 'Replace task', taskOptions = [], menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onTaskClick, onTaskGroupModification, onStageTitleChange, onTaskReorder, onReplaceTaskFromToolbox } = props;
51
- const taskWidth = width ? width - external_StageNode_styles_cjs_namespaceObject.STAGE_CONTENT_INSET : void 0;
52
- const tasks = (0, external_react_namespaceObject.useMemo)(()=>stageDetails?.tasks || [], [
53
- stageDetails?.tasks
54
- ]);
55
- const flatTasks = (0, external_react_namespaceObject.useMemo)(()=>tasks.flat(), [
56
- tasks
57
- ]);
58
- const taskIds = (0, external_react_namespaceObject.useMemo)(()=>flatTasks.map((task)=>task.id), [
59
- flatTasks
82
+ const { dragging, selected, id, nodeType = 'stage', width, execution, stageDetails, addTaskLabel = 'Add task', addTaskLoading = false, replaceTaskLabel = 'Replace task', taskOptions = [], menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onReplaceTaskFromToolbox, replaceTaskTarget, onReplaceTaskTargetChange, onTaskClick, onTaskSelect, onStageTitleChange } = props;
83
+ const taskIds = (0, external_react_namespaceObject.useMemo)(()=>stageDetails?.taskIds || [], [
84
+ stageDetails?.taskIds
60
85
  ]);
61
86
  const isException = stageDetails?.isException;
62
87
  const isReadOnly = !!stageDetails?.isReadOnly;
63
88
  const icon = stageDetails?.icon;
64
- const selectedTasks = stageDetails?.selectedTasks;
65
89
  const defaultContent = stageDetails?.defaultContent || 'Add first task';
66
90
  const status = execution?.stageStatus?.status;
67
91
  const statusLabel = execution?.stageStatus?.label;
68
92
  const stageDuration = execution?.stageStatus?.duration;
69
- const reGroupTaskFunction = (0, external_react_namespaceObject.useMemo)(()=>onTaskGroupModification || (()=>{}), [
70
- onTaskGroupModification
71
- ]);
72
93
  const isStageTitleEditable = !!onStageTitleChange && !isReadOnly;
73
94
  const [isHovered, setIsHovered] = (0, external_react_namespaceObject.useState)(false);
74
95
  const [label, setLabel] = (0, external_react_namespaceObject.useState)(props.stageDetails.label);
96
+ const [toolboxMode, setToolboxMode] = (0, external_react_namespaceObject.useState)(null);
97
+ const replaceTaskRef = (0, external_react_namespaceObject.useRef)(null);
98
+ const [isStageTitleEditing, setIsStageTitleEditing] = (0, external_react_namespaceObject.useState)(false);
99
+ const stageTitleRef = (0, external_react_namespaceObject.useRef)(null);
75
100
  (0, external_react_namespaceObject.useEffect)(()=>{
76
101
  setLabel(props.stageDetails.label);
77
102
  }, [
78
103
  props.stageDetails.label
79
104
  ]);
80
- const [isStageTitleEditing, setIsStageTitleEditing] = (0, external_react_namespaceObject.useState)(false);
81
- const stageTitleRef = (0, external_react_namespaceObject.useRef)(null);
82
- const taskStateReference = (0, external_react_namespaceObject.useRef)({
83
- isParallel: false,
84
- groupIndex: -1,
85
- taskIndex: -1
86
- });
87
105
  const isConnecting = (0, react_cjs_namespaceObject.useStore)((state)=>!!state.connectionClickStartHandle);
88
106
  const connectedHandleIds = (0, ConnectedHandlesContext_cjs_namespaceObject.useConnectedHandles)(id);
89
- const [isAddingTask, setIsAddingTask] = (0, external_react_namespaceObject.useState)(false);
90
- const [isReplacingTask, setIsReplacingTask] = (0, external_react_namespaceObject.useState)(false);
91
- (0, external_react_namespaceObject.useEffect)(()=>{
92
- if (pendingReplaceTask?.groupIndex != null && pendingReplaceTask?.taskIndex != null) {
93
- const taskGroup = tasks[pendingReplaceTask.groupIndex];
94
- taskStateReference.current = {
95
- isParallel: (taskGroup?.length ?? 0) > 1,
96
- groupIndex: pendingReplaceTask.groupIndex,
97
- taskIndex: pendingReplaceTask.taskIndex
98
- };
99
- setIsReplacingTask(true);
100
- }
101
- }, [
102
- pendingReplaceTask,
103
- tasks
104
- ]);
105
- const [activeDragId, setActiveDragId] = (0, external_react_namespaceObject.useState)(null);
106
- const [offsetLeft, setOffsetLeft] = (0, external_react_namespaceObject.useState)(0);
107
- const [overId, setOverId] = (0, external_react_namespaceObject.useState)(null);
108
- const activeTask = (0, external_react_namespaceObject.useMemo)(()=>flatTasks.find((t)=>t.id === activeDragId), [
109
- flatTasks,
110
- activeDragId
111
- ]);
112
- const isActiveTaskParallel = (0, external_react_namespaceObject.useMemo)(()=>{
113
- if (!activeDragId) return false;
114
- const group = tasks.find((g)=>g.some((t)=>t.id === activeDragId));
115
- return group ? group.length > 1 : false;
116
- }, [
117
- tasks,
118
- activeDragId
119
- ]);
120
- const { zoom } = (0, react_cjs_namespaceObject.useViewport)();
121
- const projected = (0, external_react_namespaceObject.useMemo)(()=>{
122
- if (!activeDragId || !overId) return null;
123
- return (0, external_StageNode_utils_cjs_namespaceObject.getProjection)(tasks, activeDragId, overId, offsetLeft);
124
- }, [
125
- tasks,
126
- activeDragId,
127
- overId,
128
- offsetLeft
129
- ]);
130
107
  (0, external_react_namespaceObject.useEffect)(()=>{
131
108
  if (false === selected) {
132
- setIsAddingTask(false);
133
- setIsReplacingTask(false);
109
+ setToolboxMode(null);
110
+ replaceTaskRef.current = null;
134
111
  }
135
112
  }, [
136
113
  selected
@@ -155,19 +132,6 @@ const StageNodeComponent = (props)=>{
155
132
  setIsStageTitleEditing(true);
156
133
  setLabel(e.target.value);
157
134
  }, []);
158
- const handleStageTitleClickToSave = (0, external_react_namespaceObject.useCallback)((e)=>{
159
- if (isStageTitleEditing && !stageTitleRef.current?.contains(e.target)) {
160
- setIsStageTitleEditing(false);
161
- if (onStageTitleChange) {
162
- if ('' === label.trim()) setLabel('Untitled Stage');
163
- onStageTitleChange(label);
164
- }
165
- }
166
- }, [
167
- isStageTitleEditing,
168
- onStageTitleChange,
169
- label
170
- ]);
171
135
  const handleStageTitleBlurToSave = (0, external_react_namespaceObject.useCallback)(()=>{
172
136
  if (isStageTitleEditing) {
173
137
  setIsStageTitleEditing(false);
@@ -190,50 +154,17 @@ const StageNodeComponent = (props)=>{
190
154
  onStageTitleChange,
191
155
  label
192
156
  ]);
193
- (0, external_react_namespaceObject.useEffect)(()=>{
194
- if (isStageTitleEditing) document.addEventListener('click', handleStageTitleClickToSave);
195
- return ()=>{
196
- document.removeEventListener('click', handleStageTitleClickToSave);
197
- };
198
- }, [
199
- handleStageTitleClickToSave,
200
- isStageTitleEditing
201
- ]);
202
- const contextMenuItems = (0, external_react_namespaceObject.useCallback)((isParallel, groupIndex, taskIndex, tasksLength, taskGroupLength, isAboveParallel, isBelowParallel)=>{
203
- const items = [];
204
- if (onReplaceTaskFromToolbox) items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getMenuItem)('replace-task', 'Replace Task', ()=>setIsReplacingTask(true)));
205
- if (onTaskGroupModification) {
206
- const reGroupOptions = (0, external_StageNodeTaskUtilities_cjs_namespaceObject.getContextMenuItems)(isParallel, groupIndex, tasksLength, taskIndex, taskGroupLength, isAboveParallel, isBelowParallel, reGroupTaskFunction);
207
- return [
208
- ...items,
209
- ...reGroupOptions
210
- ];
211
- }
212
- return items;
213
- }, [
214
- onReplaceTaskFromToolbox,
215
- onTaskGroupModification,
216
- reGroupTaskFunction
217
- ]);
218
157
  const { setSelectedNodeId } = (0, hooks_index_cjs_namespaceObject.useNodeSelection)();
219
158
  const handleStageClick = (0, external_react_namespaceObject.useCallback)(()=>{
220
159
  onStageClick?.();
221
160
  }, [
222
161
  onStageClick
223
162
  ]);
224
- const handleTaskClick = (0, external_react_namespaceObject.useCallback)((e, taskElementId)=>{
225
- e.stopPropagation();
226
- onTaskClick?.(taskElementId);
227
- setSelectedNodeId(id);
228
- }, [
229
- onTaskClick,
230
- setSelectedNodeId,
231
- id
232
- ]);
233
163
  const handleTaskAddClick = (0, external_react_namespaceObject.useCallback)((event)=>{
234
164
  event.stopPropagation();
165
+ replaceTaskRef.current = null;
235
166
  if (onTaskAdd) onTaskAdd();
236
- else if (onAddTaskFromToolbox) setIsAddingTask(true);
167
+ else if (onAddTaskFromToolbox) setToolboxMode('add');
237
168
  setSelectedNodeId(id);
238
169
  }, [
239
170
  onTaskAdd,
@@ -241,25 +172,54 @@ const StageNodeComponent = (props)=>{
241
172
  setSelectedNodeId,
242
173
  id
243
174
  ]);
244
- const handleAddTaskToolboxItemSelected = (0, external_react_namespaceObject.useCallback)((item)=>{
245
- onAddTaskFromToolbox?.(item);
246
- setIsAddingTask(false);
247
- setSelectedNodeId(id);
175
+ (0, external_react_namespaceObject.useEffect)(()=>{
176
+ if (replaceTaskTarget) {
177
+ replaceTaskRef.current = replaceTaskTarget;
178
+ setToolboxMode('replace');
179
+ }
248
180
  }, [
249
- onAddTaskFromToolbox,
250
- setSelectedNodeId,
251
- id
181
+ replaceTaskTarget
182
+ ]);
183
+ (0, external_react_namespaceObject.useEffect)(()=>{
184
+ if (pendingReplaceTask?.groupIndex != null && pendingReplaceTask?.taskIndex != null) {
185
+ replaceTaskRef.current = {
186
+ groupIndex: pendingReplaceTask.groupIndex,
187
+ taskIndex: pendingReplaceTask.taskIndex
188
+ };
189
+ setToolboxMode('replace');
190
+ }
191
+ }, [
192
+ pendingReplaceTask
252
193
  ]);
253
- const handleReplaceTaskToolboxItemSelected = (0, external_react_namespaceObject.useCallback)((item)=>{
254
- setIsReplacingTask(true);
255
- onReplaceTaskFromToolbox?.(item, taskStateReference.current.groupIndex, taskStateReference.current.taskIndex);
256
- setIsReplacingTask(false);
194
+ const handleToolboxItemSelected = (0, external_react_namespaceObject.useCallback)((item)=>{
195
+ if ('replace' === toolboxMode && replaceTaskRef.current && onReplaceTaskFromToolbox) onReplaceTaskFromToolbox(item, replaceTaskRef.current.groupIndex, replaceTaskRef.current.taskIndex);
196
+ else if ('add' === toolboxMode) onAddTaskFromToolbox?.(item);
197
+ setToolboxMode(null);
198
+ replaceTaskRef.current = null;
199
+ onReplaceTaskTargetChange?.(null);
257
200
  setSelectedNodeId(id);
258
201
  }, [
202
+ toolboxMode,
259
203
  onReplaceTaskFromToolbox,
204
+ onAddTaskFromToolbox,
205
+ onReplaceTaskTargetChange,
260
206
  setSelectedNodeId,
261
207
  id
262
208
  ]);
209
+ const handleToolboxClose = (0, external_react_namespaceObject.useCallback)(()=>{
210
+ setToolboxMode(null);
211
+ replaceTaskRef.current = null;
212
+ onReplaceTaskTargetChange?.(null);
213
+ }, [
214
+ onReplaceTaskTargetChange
215
+ ]);
216
+ const taskWidth = width ? width - external_StageNode_styles_cjs_namespaceObject.STAGE_CONTENT_INSET : void 0;
217
+ const taskWidthStyle = (0, external_react_namespaceObject.useMemo)(()=>taskWidth ? {
218
+ '--stage-task-width': `${taskWidth}px`,
219
+ '--stage-task-width-parallel': `${taskWidth - external_StageNode_styles_cjs_namespaceObject.INDENTATION_WIDTH}px`
220
+ } : void 0, [
221
+ taskWidth
222
+ ]);
263
223
  const handleConfigurations = (0, external_react_namespaceObject.useMemo)(()=>isException ? [] : [
264
224
  {
265
225
  position: react_cjs_namespaceObject.Position.Left,
@@ -326,292 +286,277 @@ const StageNodeComponent = (props)=>{
326
286
  nodeId: id,
327
287
  selected
328
288
  });
329
- const sensors = (0, core_namespaceObject.useSensors)((0, core_namespaceObject.useSensor)(core_namespaceObject.PointerSensor, {
330
- activationConstraint: {
331
- distance: 3
332
- }
333
- }), (0, core_namespaceObject.useSensor)(core_namespaceObject.KeyboardSensor, {
334
- coordinateGetter: sortable_namespaceObject.sortableKeyboardCoordinates
335
- }));
336
- const resetState = (0, external_react_namespaceObject.useCallback)(()=>{
337
- setActiveDragId(null);
338
- setOffsetLeft(0);
339
- setOverId(null);
340
- }, []);
341
- const handleDragStart = (0, external_react_namespaceObject.useCallback)((event)=>{
342
- setActiveDragId(event.active.id);
343
- }, []);
344
- const handleDragMove = (0, external_react_namespaceObject.useCallback)((event)=>{
345
- setOffsetLeft(event.delta.x / zoom);
346
- }, [
347
- zoom
289
+ const taskNodeContextValue = (0, external_react_namespaceObject.useMemo)(()=>({
290
+ stageId: id,
291
+ stageNodeType: nodeType,
292
+ taskIds,
293
+ isReadOnly,
294
+ onTaskClick,
295
+ onTaskSelect
296
+ }), [
297
+ id,
298
+ nodeType,
299
+ taskIds,
300
+ isReadOnly,
301
+ onTaskClick,
302
+ onTaskSelect
348
303
  ]);
349
- const handleDragOver = (0, external_react_namespaceObject.useCallback)((event)=>{
350
- setOverId(event.over?.id ?? null);
351
- }, []);
352
- const handleDragEnd = (0, external_react_namespaceObject.useCallback)((event)=>{
353
- const { active, over } = event;
354
- const currentOffsetLeft = offsetLeft;
355
- resetState();
356
- if (!over || !onTaskReorder) return;
357
- const projection = (0, external_StageNode_utils_cjs_namespaceObject.getProjection)(tasks, active.id, over.id, currentOffsetLeft);
358
- if (!projection) return;
359
- if (active.id === over.id) {
360
- const flattened = (0, external_StageNode_utils_cjs_namespaceObject.flattenTasks)(tasks);
361
- const activeTask = flattened.find((t)=>t.id === active.id);
362
- if (activeTask && activeTask.depth === projection.depth) return;
304
+ const dragState = (0, CrossStageDragContext_cjs_namespaceObject.useCrossStageDragState)();
305
+ const displayTaskIds = (0, external_react_namespaceObject.useMemo)(()=>{
306
+ if (dragState?.isDragging && dragState.taskId) {
307
+ if (dragState.targetStageId === id && dragState.dropPosition) {
308
+ const { groupIndex, taskIndex, isParallel } = dragState.dropPosition;
309
+ const tempTaskIds = taskIds.map((g)=>[
310
+ ...g
311
+ ]);
312
+ for(let gi = 0; gi < tempTaskIds.length; gi++){
313
+ const group = tempTaskIds[gi];
314
+ if (!group) continue;
315
+ const idx = group.indexOf(dragState.taskId);
316
+ if (-1 !== idx) group.splice(idx, 1);
317
+ }
318
+ const filtered = tempTaskIds.filter((g)=>g && g.length > 0);
319
+ if (groupIndex >= filtered.length) filtered.push([
320
+ '__placeholder__'
321
+ ]);
322
+ else if (isParallel && filtered[groupIndex]) filtered[groupIndex].splice(taskIndex, 0, '__placeholder__');
323
+ else filtered.splice(groupIndex, 0, [
324
+ '__placeholder__'
325
+ ]);
326
+ return filtered;
327
+ }
328
+ if (dragState.sourceStageId === id && dragState.targetStageId !== id) {
329
+ const tempTaskIds = taskIds.map((g)=>[
330
+ ...g
331
+ ]);
332
+ for(let gi = 0; gi < tempTaskIds.length; gi++){
333
+ const group = tempTaskIds[gi];
334
+ if (!group) continue;
335
+ const idx = group.indexOf(dragState.taskId);
336
+ if (-1 !== idx) group.splice(idx, 1);
337
+ }
338
+ return tempTaskIds.filter((g)=>g && g.length > 0);
339
+ }
363
340
  }
364
- const newTasks = (0, external_StageNode_utils_cjs_namespaceObject.reorderTasks)(tasks, active.id, over.id, projection.depth);
365
- onTaskReorder(newTasks);
341
+ return taskIds;
366
342
  }, [
367
- tasks,
368
- onTaskReorder,
369
- offsetLeft,
370
- resetState
343
+ taskIds,
344
+ dragState,
345
+ id
371
346
  ]);
372
- const handleDragCancel = (0, external_react_namespaceObject.useCallback)(()=>{
373
- resetState();
347
+ const taskNodes = (0, react_cjs_namespaceObject.useStore)((state)=>state.nodes.filter((n)=>'task' === n.type && n.parentId === id));
348
+ const taskExecutionData = (0, external_react_namespaceObject.useMemo)(()=>{
349
+ const data = {};
350
+ for (const node of taskNodes)data[node.id] = {
351
+ execution: node.data?.execution
352
+ };
353
+ return data;
374
354
  }, [
375
- resetState
355
+ taskNodes
376
356
  ]);
377
- const taskWidthStyle = (0, external_react_namespaceObject.useMemo)(()=>taskWidth ? {
378
- '--stage-task-width': `${taskWidth}px`,
379
- '--stage-task-width-parallel': `${taskWidth - external_StageNode_styles_cjs_namespaceObject.INDENTATION_WIDTH}px`
380
- } : void 0, [
381
- taskWidth
357
+ const parallelGroups = (0, external_react_namespaceObject.useMemo)(()=>{
358
+ const hasStageExecution = !!stageDuration;
359
+ return displayTaskIds.map((group, index)=>{
360
+ const isParallel = group.length > 1;
361
+ if (!isParallel) return null;
362
+ const y = calculateParallelGroupY(index, displayTaskIds, hasStageExecution, taskExecutionData);
363
+ const height = calculateParallelGroupHeight(group, taskExecutionData);
364
+ return {
365
+ index,
366
+ y,
367
+ height
368
+ };
369
+ }).filter((g)=>null !== g);
370
+ }, [
371
+ displayTaskIds,
372
+ stageDuration,
373
+ taskExecutionData
382
374
  ]);
383
- const dragOverlayStyle = (0, external_react_namespaceObject.useMemo)(()=>({
384
- transform: `scale(${zoom})`,
385
- transformOrigin: 'top left'
386
- }), [
387
- zoom
375
+ const contentHeight = (0, external_react_namespaceObject.useMemo)(()=>{
376
+ if (0 === displayTaskIds.length) return 60;
377
+ return (0, useTaskPositions_cjs_namespaceObject.calculateStageContentHeight)(displayTaskIds, taskNodes);
378
+ }, [
379
+ displayTaskIds,
380
+ taskNodes,
381
+ execution
388
382
  ]);
389
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
390
- "data-testid": `stage-${id}`,
391
- style: {
392
- position: 'relative'
393
- },
394
- onClick: handleStageClick,
395
- onMouseEnter: handleMouseEnter,
396
- onMouseLeave: handleMouseLeave,
397
- children: [
398
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageContainer, {
399
- selected: selected,
400
- status: status,
401
- width: width,
402
- style: taskWidthStyle,
403
- children: [
404
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageHeader, {
405
- isException: isException,
383
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(TaskNodeContext_cjs_namespaceObject.TaskNodeProvider, {
384
+ value: taskNodeContextValue,
385
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
386
+ "data-testid": `stage-${id}`,
387
+ style: {
388
+ position: 'relative',
389
+ ...taskWidthStyle
390
+ },
391
+ onClick: handleStageClick,
392
+ onMouseEnter: handleMouseEnter,
393
+ onMouseLeave: handleMouseLeave,
394
+ children: [
395
+ parallelGroups.map(({ index, y, height })=>{
396
+ const absoluteY = y;
397
+ const absoluteX = useTaskPositions_cjs_namespaceObject.DEFAULT_TASK_POSITION_CONFIG.contentPaddingX + useTaskPositions_cjs_namespaceObject.DEFAULT_TASK_POSITION_CONFIG.parallelIndent;
398
+ const bracketX = absoluteX - 12 - 4 - 12;
399
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Row, {
400
+ gap: apollo_core_namespaceObject.Spacing.SpacingS,
401
+ style: {
402
+ position: 'absolute',
403
+ top: absoluteY,
404
+ left: bracketX,
405
+ height: height,
406
+ pointerEvents: 'none',
407
+ zIndex: 1
408
+ },
406
409
  children: [
407
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Row, {
408
- gap: apollo_core_namespaceObject.Spacing.SpacingMicro,
409
- align: "center",
410
- children: [
411
- icon,
412
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Column, {
413
- py: 2,
414
- children: [
415
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTypography, {
416
- variant: isStageTitleEditing ? apollo_core_namespaceObject.FontVariantToken.fontSizeM : apollo_core_namespaceObject.FontVariantToken.fontSizeMBold,
417
- color: "var(--uix-canvas-foreground)",
418
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTooltip, {
419
- content: label,
420
- placement: "top",
421
- delay: true,
422
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTitleContainer, {
423
- isEditing: isStageTitleEditing,
424
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTitleInput, {
425
- name: "Stage Title",
426
- isStageTitleEditable: isStageTitleEditable,
427
- value: label,
428
- ref: stageTitleRef,
410
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageParallelBracket, {}),
411
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
412
+ style: {
413
+ position: 'relative',
414
+ width: 0,
415
+ height: '100%'
416
+ },
417
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageParallelLabel, {
418
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTypography, {
419
+ variant: apollo_core_namespaceObject.FontVariantToken.fontSizeS,
420
+ children: "Parallel"
421
+ })
422
+ })
423
+ })
424
+ ]
425
+ }, `parallel-${index}`);
426
+ }),
427
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageContainer, {
428
+ selected: selected,
429
+ status: status,
430
+ width: width,
431
+ style: {
432
+ minHeight: contentHeight + (execution?.stageStatus?.duration ? useTaskPositions_cjs_namespaceObject.DEFAULT_TASK_POSITION_CONFIG.headerHeight + useTaskPositions_cjs_namespaceObject.DEFAULT_TASK_POSITION_CONFIG.headerExecutionDescriptionHeight : useTaskPositions_cjs_namespaceObject.DEFAULT_TASK_POSITION_CONFIG.headerHeight) + 2 * useTaskPositions_cjs_namespaceObject.DEFAULT_TASK_POSITION_CONFIG.stageBorderThickness
433
+ },
434
+ children: [
435
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageHeader, {
436
+ isException: isException,
437
+ children: [
438
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Row, {
439
+ gap: apollo_core_namespaceObject.Spacing.SpacingMicro,
440
+ align: "center",
441
+ children: [
442
+ icon,
443
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Column, {
444
+ py: 2,
445
+ children: [
446
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTypography, {
447
+ variant: isStageTitleEditing ? apollo_core_namespaceObject.FontVariantToken.fontSizeM : apollo_core_namespaceObject.FontVariantToken.fontSizeMBold,
448
+ color: "var(--uix-canvas-foreground)",
449
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTooltip, {
450
+ content: label,
451
+ placement: "top",
452
+ delay: true,
453
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTitleContainer, {
429
454
  isEditing: isStageTitleEditing,
430
- ...onStageTitleChange && {
431
- onFocus: ()=>setIsStageTitleEditing(true),
432
- onInput: handleStageTitleChange,
433
- onKeyDown: handleStageTitleKeyDown,
434
- onBlur: handleStageTitleBlurToSave
435
- },
436
- readOnly: !isStageTitleEditable
455
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTitleInput, {
456
+ name: "Stage Title",
457
+ isStageTitleEditable: isStageTitleEditable,
458
+ value: label,
459
+ ref: stageTitleRef,
460
+ isEditing: isStageTitleEditing,
461
+ ...onStageTitleChange && {
462
+ onFocus: ()=>setIsStageTitleEditing(true),
463
+ onInput: handleStageTitleChange,
464
+ onKeyDown: handleStageTitleKeyDown,
465
+ onBlur: handleStageTitleBlurToSave
466
+ },
467
+ readOnly: !isStageTitleEditable
468
+ })
437
469
  })
438
470
  })
471
+ }),
472
+ stageDuration && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTypography, {
473
+ variant: apollo_core_namespaceObject.FontVariantToken.fontSizeS,
474
+ color: "var(--uix-canvas-foreground-de-emp)",
475
+ children: stageDuration
439
476
  })
440
- }),
441
- stageDuration && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTypography, {
442
- variant: apollo_core_namespaceObject.FontVariantToken.fontSizeS,
443
- color: "var(--uix-canvas-foreground-de-emp)",
444
- children: stageDuration
445
- })
446
- ]
447
- })
448
- ]
449
- }),
450
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Row, {
451
- gap: apollo_core_namespaceObject.Spacing.SpacingMicro,
452
- align: isReadOnly ? 'start' : 'center',
453
- py: apollo_core_namespaceObject.Padding.PadS,
454
- children: [
455
- status && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTooltip, {
456
- content: statusLabel,
457
- placement: "top",
458
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApIconButton, {
459
- size: "small",
460
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_ExecutionStatusIcon_index_cjs_namespaceObject.ExecutionStatusIcon, {
461
- status: status,
462
- size: 20
463
- })
477
+ ]
464
478
  })
465
- }),
466
- (onTaskAdd || onAddTaskFromToolbox) && !isReadOnly && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTooltip, {
467
- content: addTaskLoading ? 'Loading...' : addTaskLabel,
468
- placement: "top",
469
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
479
+ ]
480
+ }),
481
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Row, {
482
+ gap: apollo_core_namespaceObject.Spacing.SpacingMicro,
483
+ align: isReadOnly ? 'start' : 'center',
484
+ py: apollo_core_namespaceObject.Padding.PadS,
485
+ children: [
486
+ status && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTooltip, {
487
+ content: statusLabel,
488
+ placement: "top",
470
489
  children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApIconButton, {
471
- onClick: handleTaskAddClick,
472
490
  size: "small",
473
- disabled: addTaskLoading,
474
- label: addTaskLabel,
475
- children: addTaskLoading ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApCircularProgress, {
491
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_ExecutionStatusIcon_index_cjs_namespaceObject.ExecutionStatusIcon, {
492
+ status: status,
476
493
  size: 20
477
- }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApIcon, {
478
- name: "add",
479
- size: "20px"
480
494
  })
481
495
  })
482
- })
483
- })
484
- ]
485
- })
486
- ]
487
- }),
488
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageContent, {
489
- children: tasks && 0 !== tasks.length ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(core_namespaceObject.DndContext, {
490
- collisionDetection: core_namespaceObject.closestCenter,
491
- sensors: sensors,
492
- onDragStart: handleDragStart,
493
- onDragMove: handleDragMove,
494
- onDragOver: handleDragOver,
495
- onDragEnd: handleDragEnd,
496
- onDragCancel: handleDragCancel,
497
- children: [
498
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(sortable_namespaceObject.SortableContext, {
499
- items: taskIds,
500
- strategy: sortable_namespaceObject.verticalListSortingStrategy,
501
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskList, {
502
- className: "nodrag nopan",
503
- children: tasks.map((taskGroup, groupIndex)=>{
504
- const isParallel = taskGroup.length > 1;
505
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(index_cjs_namespaceObject.Row, {
506
- gap: apollo_core_namespaceObject.Spacing.SpacingS,
507
- children: [
508
- isParallel && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageParallelBracket, {}),
509
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageTaskGroup, {
510
- isParallel: isParallel,
511
- children: [
512
- isParallel && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageParallelLabel, {
513
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTypography, {
514
- variant: apollo_core_namespaceObject.FontVariantToken.fontSizeS,
515
- children: "Parallel"
516
- })
517
- }),
518
- taskGroup.map((task, taskIndex)=>{
519
- const taskExecution = execution?.taskStatus?.[task.id];
520
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.DraggableTask, {
521
- task: task,
522
- taskExecution: taskExecution,
523
- isSelected: !!selectedTasks?.includes(task.id),
524
- isParallel: isParallel,
525
- contextMenuItems: contextMenuItems(isParallel, groupIndex, taskIndex, tasks.length, taskGroup.length, (tasks[groupIndex - 1]?.length ?? 0) > 1, (tasks[groupIndex + 1]?.length ?? 0) > 1),
526
- onTaskClick: handleTaskClick,
527
- projectedDepth: task.id === activeDragId && projected ? projected.depth : void 0,
528
- isDragDisabled: !onTaskReorder,
529
- zoom: zoom,
530
- ...(onTaskGroupModification || onReplaceTaskFromToolbox) && {
531
- onMenuOpen: ()=>{
532
- taskStateReference.current = {
533
- isParallel,
534
- groupIndex,
535
- taskIndex
536
- };
537
- }
538
- }
539
- }, task.id);
540
- })
541
- ]
496
+ }),
497
+ (onTaskAdd || onAddTaskFromToolbox) && !isReadOnly && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTooltip, {
498
+ content: addTaskLoading ? 'Loading...' : addTaskLabel,
499
+ placement: "top",
500
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
501
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApIconButton, {
502
+ onClick: handleTaskAddClick,
503
+ size: "small",
504
+ disabled: addTaskLoading,
505
+ label: addTaskLabel,
506
+ children: addTaskLoading ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApCircularProgress, {
507
+ size: 20
508
+ }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApIcon, {
509
+ name: "add",
510
+ size: "20px"
542
511
  })
543
- ]
544
- }, `group-${groupIndex}`);
545
- })
546
- })
547
- }),
548
- /*#__PURE__*/ (0, external_react_dom_namespaceObject.createPortal)(/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(core_namespaceObject.DragOverlay, {
549
- children: activeTask ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
550
- style: dragOverlayStyle,
551
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTask, {
552
- selected: true,
553
- isParallel: isActiveTaskParallel,
554
- style: {
555
- cursor: 'grabbing',
556
- ...taskWidthStyle
557
- },
558
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_DraggableTask_cjs_namespaceObject.TaskContent, {
559
- task: activeTask,
560
- isDragging: true
512
+ })
561
513
  })
562
514
  })
563
- }) : null
564
- }), document.body)
515
+ ]
516
+ })
565
517
  ]
566
- }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.Column, {
567
- py: 2,
568
- children: (onTaskAdd || onAddTaskFromToolbox) && !isReadOnly ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApLink, {
569
- onClick: addTaskLoading ? void 0 : handleTaskAddClick,
570
- variant: apollo_core_namespaceObject.FontVariantToken.fontSizeS,
571
- style: {
572
- maxWidth: 'fit-content',
573
- pointerEvents: addTaskLoading ? 'none' : void 0
574
- },
575
- children: defaultContent
576
- }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTypography, {
577
- variant: apollo_core_namespaceObject.FontVariantToken.fontSizeS,
578
- color: "var(--uix-canvas-foreground-de-emp)",
579
- children: defaultContent
518
+ }),
519
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageContent, {
520
+ children: displayTaskIds && 0 !== displayTaskIds.length ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskList, {
521
+ className: "nodrag nopan"
522
+ }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(index_cjs_namespaceObject.Column, {
523
+ py: 2,
524
+ children: (onTaskAdd || onAddTaskFromToolbox) && !isReadOnly ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApLink, {
525
+ onClick: addTaskLoading ? void 0 : handleTaskAddClick,
526
+ variant: apollo_core_namespaceObject.FontVariantToken.fontSizeS,
527
+ style: {
528
+ maxWidth: 'fit-content',
529
+ pointerEvents: addTaskLoading ? 'none' : void 0
530
+ },
531
+ children: defaultContent
532
+ }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_material_index_cjs_namespaceObject.ApTypography, {
533
+ variant: apollo_core_namespaceObject.FontVariantToken.fontSizeS,
534
+ color: "var(--uix-canvas-foreground-de-emp)",
535
+ children: defaultContent
536
+ })
580
537
  })
581
538
  })
539
+ ]
540
+ }),
541
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_FloatingCanvasPanel_index_cjs_namespaceObject.FloatingCanvasPanel, {
542
+ open: null !== toolboxMode,
543
+ nodeId: id,
544
+ offset: 15,
545
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_Toolbox_index_cjs_namespaceObject.Toolbox, {
546
+ title: 'replace' === toolboxMode ? replaceTaskLabel : addTaskLabel,
547
+ initialItems: taskOptions,
548
+ onClose: handleToolboxClose,
549
+ onItemSelect: handleToolboxItemSelected,
550
+ onSearch: onTaskToolboxSearch
582
551
  })
583
- ]
584
- }),
585
- onAddTaskFromToolbox && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_FloatingCanvasPanel_index_cjs_namespaceObject.FloatingCanvasPanel, {
586
- open: isAddingTask,
587
- nodeId: id,
588
- offset: 15,
589
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_Toolbox_index_cjs_namespaceObject.Toolbox, {
590
- title: addTaskLabel,
591
- initialItems: taskOptions,
592
- onClose: ()=>setIsAddingTask(false),
593
- onItemSelect: handleAddTaskToolboxItemSelected,
594
- onSearch: onTaskToolboxSearch
595
- })
596
- }),
597
- onReplaceTaskFromToolbox && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_FloatingCanvasPanel_index_cjs_namespaceObject.FloatingCanvasPanel, {
598
- open: isReplacingTask,
599
- nodeId: id,
600
- offset: 15,
601
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_Toolbox_index_cjs_namespaceObject.Toolbox, {
602
- title: replaceTaskLabel,
603
- initialItems: taskOptions,
604
- onClose: ()=>setIsReplacingTask(false),
605
- onItemSelect: handleReplaceTaskToolboxItemSelected,
606
- onSearch: onTaskToolboxSearch
607
- })
608
- }),
609
- menuItems && !dragging && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_NodeContextMenu_index_cjs_namespaceObject.NodeContextMenu, {
610
- menuItems: menuItems,
611
- isVisible: shouldShowMenu
612
- }),
613
- handleElements
614
- ]
552
+ }),
553
+ menuItems && !dragging && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_NodeContextMenu_index_cjs_namespaceObject.NodeContextMenu, {
554
+ menuItems: menuItems,
555
+ isVisible: shouldShowMenu
556
+ }),
557
+ handleElements
558
+ ]
559
+ })
615
560
  });
616
561
  };
617
562
  const StageNode = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(StageNodeComponent);