@uipath/apollo-react 6.22.3 → 6.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/canvas/components/StageNode/StageNode.styles.cjs +7 -0
  2. package/dist/canvas/components/StageNode/StageNode.styles.d.ts.map +1 -1
  3. package/dist/canvas/components/StageNode/StageNode.styles.js +7 -0
  4. package/dist/canvas/components/StageNode/StageNode.types.d.ts +0 -5
  5. package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
  6. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.cjs +28 -53
  7. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts +7 -10
  8. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.d.ts.map +1 -1
  9. package/dist/canvas/components/StageNode/hooks/useStageTaskDragHandler.js +29 -54
  10. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.cjs +12 -39
  11. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts +0 -15
  12. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.d.ts.map +1 -1
  13. package/dist/canvas/components/StageNode/hooks/useStageTasksByGroups.js +12 -39
  14. package/dist/canvas/components/StageNode/tasks/DraggableTask.cjs +4 -47
  15. package/dist/canvas/components/StageNode/tasks/DraggableTask.d.ts +1 -1
  16. package/dist/canvas/components/StageNode/tasks/DraggableTask.d.ts.map +1 -1
  17. package/dist/canvas/components/StageNode/tasks/DraggableTask.js +6 -49
  18. package/dist/canvas/components/StageNode/tasks/DraggableTask.types.d.ts +0 -1
  19. package/dist/canvas/components/StageNode/tasks/DraggableTask.types.d.ts.map +1 -1
  20. package/dist/canvas/components/StageNode/tasks/SortableTaskRow.cjs +75 -0
  21. package/dist/canvas/components/StageNode/tasks/SortableTaskRow.d.ts +7 -0
  22. package/dist/canvas/components/StageNode/tasks/SortableTaskRow.d.ts.map +1 -0
  23. package/dist/canvas/components/StageNode/tasks/SortableTaskRow.js +41 -0
  24. package/dist/canvas/components/StageNode/tasks/StageNodeAdhocTaskGroups.cjs +77 -25
  25. package/dist/canvas/components/StageNode/tasks/StageNodeAdhocTaskGroups.d.ts +6 -3
  26. package/dist/canvas/components/StageNode/tasks/StageNodeAdhocTaskGroups.d.ts.map +1 -1
  27. package/dist/canvas/components/StageNode/tasks/StageNodeAdhocTaskGroups.js +78 -26
  28. package/dist/canvas/components/StageNode/tasks/StageNodeAllTaskGroups.cjs +29 -4
  29. package/dist/canvas/components/StageNode/tasks/StageNodeAllTaskGroups.d.ts.map +1 -1
  30. package/dist/canvas/components/StageNode/tasks/StageNodeAllTaskGroups.js +29 -4
  31. package/dist/canvas/components/StageNode/tasks/StageNodeEventDrivenTaskGroups.cjs +76 -24
  32. package/dist/canvas/components/StageNode/tasks/StageNodeEventDrivenTaskGroups.d.ts +6 -3
  33. package/dist/canvas/components/StageNode/tasks/StageNodeEventDrivenTaskGroups.d.ts.map +1 -1
  34. package/dist/canvas/components/StageNode/tasks/StageNodeEventDrivenTaskGroups.js +77 -25
  35. package/dist/canvas/components/StageNode/tasks/StageNodeSequentialTaskGroups.cjs +53 -54
  36. package/dist/canvas/components/StageNode/tasks/StageNodeSequentialTaskGroups.d.ts +2 -3
  37. package/dist/canvas/components/StageNode/tasks/StageNodeSequentialTaskGroups.d.ts.map +1 -1
  38. package/dist/canvas/components/StageNode/tasks/StageNodeSequentialTaskGroups.js +53 -54
  39. package/dist/canvas/components/StageNode/tasks/TaskContent.cjs +1 -0
  40. package/dist/canvas/components/StageNode/tasks/TaskContent.d.ts.map +1 -1
  41. package/dist/canvas/components/StageNode/tasks/TaskContent.js +1 -0
  42. package/package.json +1 -1
@@ -1,14 +1,12 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { useSortable } from "@dnd-kit/sortable";
3
- import { CSS } from "@dnd-kit/utilities";
4
- import { useStore } from "../../../xyflow/react.js";
5
- import { memo, useCallback, useMemo, useRef } from "react";
6
- import { INDENTATION_WIDTH, StageItemPill, StageTaskDragPlaceholder, StageTaskDragPlaceholderWrapper, StageTaskWrapper } from "../StageNode.styles.js";
2
+ import { memo, useCallback, useRef } from "react";
3
+ import { StageItemPill } from "../StageNode.styles.js";
4
+ import { SortableTaskRow } from "./SortableTaskRow.js";
7
5
  import { TaskBreakpointDot } from "./TaskBreakpointDot.js";
8
6
  import { TaskContent } from "./TaskContent.js";
9
7
  import { TaskMenu } from "./TaskMenu.js";
10
8
  import { TaskMockedChip } from "./TaskMockedChip.js";
11
- const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, getContextMenuItems, onTaskClick, isDragDisabled, projectedDepth, isTaskLoading, isReadOnly, onToggleBreakpoint })=>{
9
+ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, getContextMenuItems, onTaskClick, isDragDisabled, isTaskLoading, isReadOnly, onToggleBreakpoint })=>{
12
10
  const taskRef = useRef(null);
13
11
  const menuRef = useRef(null);
14
12
  const handleClick = useCallback((e)=>{
@@ -20,44 +18,6 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, g
20
18
  const handleContextMenu = useCallback((e)=>{
21
19
  menuRef.current?.handleContextMenu(e);
22
20
  }, []);
23
- const { attributes, listeners, setNodeRef, transition, transform, isDragging } = useSortable({
24
- id: task.id,
25
- disabled: isDragDisabled
26
- });
27
- const zoom = useStore((s)=>transform ? s.transform[2] : 1);
28
- const style = useMemo(()=>{
29
- const scaledTransform = transform ? {
30
- ...transform,
31
- x: transform.x / zoom,
32
- y: transform.y / zoom
33
- } : null;
34
- let marginLeft;
35
- if (isDragging && void 0 !== projectedDepth) if (1 !== projectedDepth || isParallel) {
36
- if (0 === projectedDepth && isParallel) marginLeft = `-${INDENTATION_WIDTH}px`;
37
- } else marginLeft = `${INDENTATION_WIDTH}px`;
38
- return {
39
- transition,
40
- transform: CSS.Transform.toString(scaledTransform),
41
- marginLeft
42
- };
43
- }, [
44
- transform,
45
- zoom,
46
- transition,
47
- isDragging,
48
- projectedDepth,
49
- isParallel
50
- ]);
51
- if (isDragging) {
52
- const isTargetParallel = 1 === projectedDepth;
53
- return /*#__PURE__*/ jsx(StageTaskDragPlaceholderWrapper, {
54
- ref: setNodeRef,
55
- style: style,
56
- children: /*#__PURE__*/ jsx(StageTaskDragPlaceholder, {
57
- isTargetParallel: isTargetParallel
58
- })
59
- });
60
- }
61
21
  const taskElement = /*#__PURE__*/ jsxs(StageItemPill, {
62
22
  ref: taskRef,
63
23
  "data-testid": `stage-task-card-${task.id}`,
@@ -95,12 +55,9 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, g
95
55
  ]
96
56
  });
97
57
  if (isDragDisabled) return taskElement;
98
- return /*#__PURE__*/ jsx(StageTaskWrapper, {
99
- ref: setNodeRef,
100
- style: style,
58
+ return /*#__PURE__*/ jsx(SortableTaskRow, {
59
+ taskId: task.id,
101
60
  isParallel: isParallel,
102
- ...attributes,
103
- ...listeners,
104
61
  children: taskElement
105
62
  });
106
63
  };
@@ -9,7 +9,6 @@ export interface DraggableTaskProps {
9
9
  onTaskClick: (e: React.MouseEvent, taskId: string) => void;
10
10
  onTaskPlay?: (taskId: string) => Promise<void>;
11
11
  isDragDisabled?: boolean;
12
- projectedDepth?: number;
13
12
  isTaskLoading?: boolean;
14
13
  isReadOnly?: boolean;
15
14
  onToggleBreakpoint?: (taskId: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"DraggableTask.types.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/StageNode/tasks/DraggableTask.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IAGpB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY,EAAE,CAAC;IAC9D,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;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C"}
1
+ {"version":3,"file":"DraggableTask.types.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/StageNode/tasks/DraggableTask.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IAGpB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,YAAY,EAAE,CAAC;IAC9D,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,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ SortableTaskRow: ()=>SortableTaskRow
28
+ });
29
+ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
30
+ const sortable_namespaceObject = require("@dnd-kit/sortable");
31
+ const utilities_namespaceObject = require("@dnd-kit/utilities");
32
+ const react_cjs_namespaceObject = require("../../../xyflow/react.cjs");
33
+ const external_react_namespaceObject = require("react");
34
+ const external_StageNode_styles_cjs_namespaceObject = require("../StageNode.styles.cjs");
35
+ const SortableTaskRowComponent = ({ taskId, isParallel, children })=>{
36
+ const { attributes, listeners, setNodeRef, transition, transform, isDragging } = (0, sortable_namespaceObject.useSortable)({
37
+ id: taskId
38
+ });
39
+ const zoom = (0, react_cjs_namespaceObject.useStore)((s)=>transform ? s.transform[2] : 1);
40
+ const style = (0, external_react_namespaceObject.useMemo)(()=>({
41
+ transition,
42
+ transform: utilities_namespaceObject.CSS.Transform.toString(transform ? {
43
+ ...transform,
44
+ x: transform.x / zoom,
45
+ y: transform.y / zoom
46
+ } : null)
47
+ }), [
48
+ transform,
49
+ zoom,
50
+ transition
51
+ ]);
52
+ if (isDragging) return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskDragPlaceholderWrapper, {
53
+ ref: setNodeRef,
54
+ style: style,
55
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskDragPlaceholder, {
56
+ isTargetParallel: isParallel
57
+ })
58
+ });
59
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageTaskWrapper, {
60
+ ref: setNodeRef,
61
+ style: style,
62
+ isParallel: isParallel,
63
+ ...attributes,
64
+ ...listeners,
65
+ children: children
66
+ });
67
+ };
68
+ const SortableTaskRow = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(SortableTaskRowComponent);
69
+ exports.SortableTaskRow = __webpack_exports__.SortableTaskRow;
70
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
71
+ "SortableTaskRow"
72
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
73
+ Object.defineProperty(exports, '__esModule', {
74
+ value: true
75
+ });
@@ -0,0 +1,7 @@
1
+ import { type ReactNode } from 'react';
2
+ export declare const SortableTaskRow: import("react").MemoExoticComponent<({ taskId, isParallel, children, }: {
3
+ taskId: string;
4
+ isParallel?: boolean;
5
+ children: ReactNode;
6
+ }) => import("react/jsx-runtime").JSX.Element>;
7
+ //# sourceMappingURL=SortableTaskRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SortableTaskRow.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/StageNode/tasks/SortableTaskRow.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA4B,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAyD1E,eAAO,MAAM,eAAe,0EA5CzB;IACD,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB,6CAwC4D,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useSortable } from "@dnd-kit/sortable";
3
+ import { CSS } from "@dnd-kit/utilities";
4
+ import { useStore } from "../../../xyflow/react.js";
5
+ import { memo, useMemo } from "react";
6
+ import { StageTaskDragPlaceholder, StageTaskDragPlaceholderWrapper, StageTaskWrapper } from "../StageNode.styles.js";
7
+ const SortableTaskRowComponent = ({ taskId, isParallel, children })=>{
8
+ const { attributes, listeners, setNodeRef, transition, transform, isDragging } = useSortable({
9
+ id: taskId
10
+ });
11
+ const zoom = useStore((s)=>transform ? s.transform[2] : 1);
12
+ const style = useMemo(()=>({
13
+ transition,
14
+ transform: CSS.Transform.toString(transform ? {
15
+ ...transform,
16
+ x: transform.x / zoom,
17
+ y: transform.y / zoom
18
+ } : null)
19
+ }), [
20
+ transform,
21
+ zoom,
22
+ transition
23
+ ]);
24
+ if (isDragging) return /*#__PURE__*/ jsx(StageTaskDragPlaceholderWrapper, {
25
+ ref: setNodeRef,
26
+ style: style,
27
+ children: /*#__PURE__*/ jsx(StageTaskDragPlaceholder, {
28
+ isTargetParallel: isParallel
29
+ })
30
+ });
31
+ return /*#__PURE__*/ jsx(StageTaskWrapper, {
32
+ ref: setNodeRef,
33
+ style: style,
34
+ isParallel: isParallel,
35
+ ...attributes,
36
+ ...listeners,
37
+ children: children
38
+ });
39
+ };
40
+ const SortableTaskRow = /*#__PURE__*/ memo(SortableTaskRowComponent);
41
+ export { SortableTaskRow };
@@ -27,15 +27,40 @@ __webpack_require__.d(__webpack_exports__, {
27
27
  StageNodeAdhocTaskGroups: ()=>StageNodeAdhocTaskGroups
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");
30
32
  const external_react_namespaceObject = require("react");
33
+ const useStageTaskDragHandler_cjs_namespaceObject = require("../hooks/useStageTaskDragHandler.cjs");
31
34
  const external_StageNode_styles_cjs_namespaceObject = require("../StageNode.styles.cjs");
32
35
  const StageItemsHeaderTitle_cjs_namespaceObject = require("../shared/StageItemsHeaderTitle.cjs");
33
36
  const external_useStageNodeLabels_cjs_namespaceObject = require("../useStageNodeLabels.cjs");
34
37
  const external_AdhocTask_cjs_namespaceObject = require("./AdhocTask.cjs");
35
- const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selectedTaskId, handleTaskClick, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask })=>{
36
- const { id, execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskPlay, loadingTaskIds, onTaskBreakpointToggle, getTaskContextMenuItems } = props;
38
+ const external_SortableTaskRow_cjs_namespaceObject = require("./SortableTaskRow.cjs");
39
+ const external_StageNodeTaskUtilities_cjs_namespaceObject = require("./StageNodeTaskUtilities.cjs");
40
+ const external_StageTaskDragOverlay_cjs_namespaceObject = require("./StageTaskDragOverlay.cjs");
41
+ const StageNodeAdhocTaskGroupsInner = ({ props, adhocTaskGroups, isReadOnly, selectedTaskId, taskWidthStyle, handleTaskClick, handleReorderAdhocTasks, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask })=>{
42
+ const { id, execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskReorder, onTaskPlay, loadingTaskIds, onTaskBreakpointToggle, getTaskContextMenuItems } = props;
37
43
  const hasBuiltInTaskActions = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
38
44
  const labels = (0, external_useStageNodeLabels_cjs_namespaceObject.useStageNodeLabels)();
45
+ const isDragDisabled = !onTaskReorder || isReadOnly;
46
+ const rows = (0, external_react_namespaceObject.useMemo)(()=>adhocTaskGroups.flat(), [
47
+ adhocTaskGroups
48
+ ]);
49
+ const rowIds = (0, external_react_namespaceObject.useMemo)(()=>rows.map((task)=>task.id), [
50
+ rows
51
+ ]);
52
+ const { activeTask, handleDragStart, handleDragEnd, handleDragCancel } = (0, useStageTaskDragHandler_cjs_namespaceObject.useStageTaskDragHandler)({
53
+ taskGroups: adhocTaskGroups,
54
+ onTaskReorder: handleReorderAdhocTasks,
55
+ allowRegrouping: false
56
+ });
57
+ const sensors = (0, core_namespaceObject.useSensors)((0, core_namespaceObject.useSensor)(core_namespaceObject.PointerSensor, {
58
+ activationConstraint: {
59
+ distance: 3
60
+ }
61
+ }), (0, core_namespaceObject.useSensor)(core_namespaceObject.KeyboardSensor, {
62
+ coordinateGetter: sortable_namespaceObject.sortableKeyboardCoordinates
63
+ }));
39
64
  const getAdhocContextMenuItems = (0, external_react_namespaceObject.useCallback)((task)=>{
40
65
  const items = [];
41
66
  const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(task.id, false);
@@ -47,41 +72,68 @@ const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selected
47
72
  }) ?? [];
48
73
  items.push(...additionalMenuItems);
49
74
  const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(task.id);
50
- if (deleteTaskMenuItem) items.push(deleteTaskMenuItem);
75
+ if (deleteTaskMenuItem) {
76
+ if (items.length) items.push((0, external_StageNodeTaskUtilities_cjs_namespaceObject.getDivider)());
77
+ items.push(deleteTaskMenuItem);
78
+ }
51
79
  return items;
52
80
  }, [
53
81
  generateReplaceTaskMenuItemForTask,
54
82
  getTaskContextMenuItems,
55
83
  generateDeleteTaskMenuItemForTask
56
84
  ]);
57
- if (0 === adhocTasks.length) return null;
85
+ const taskList = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageItemsList, {
86
+ "data-testid": `adhoc-tasks-list-${id}`,
87
+ className: isDragDisabled ? void 0 : 'nodrag nopan',
88
+ children: rows.map((task)=>{
89
+ const taskExecution = execution?.taskStatus?.[task.id];
90
+ const hasMenu = !isReadOnly && hasBuiltInTaskActions || (getTaskContextMenuItems?.({
91
+ task,
92
+ taskGroupType: 'adhoc',
93
+ isParallel: false
94
+ })?.length ?? 0) > 0;
95
+ const row = /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_AdhocTask_cjs_namespaceObject.AdhocTaskItem, {
96
+ task: task,
97
+ taskExecution: taskExecution,
98
+ isSelected: selectedTaskId === task.id,
99
+ onTaskClick: handleTaskClick,
100
+ onTaskPlay: onTaskPlay,
101
+ isTaskLoading: loadingTaskIds?.has(task.id),
102
+ isReadOnly: isReadOnly,
103
+ onToggleBreakpoint: isReadOnly ? onTaskBreakpointToggle : void 0,
104
+ getContextMenuItems: hasMenu ? getAdhocContextMenuItems : void 0
105
+ }, task.id);
106
+ return isDragDisabled ? row : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_SortableTaskRow_cjs_namespaceObject.SortableTaskRow, {
107
+ taskId: task.id,
108
+ children: row
109
+ }, task.id);
110
+ })
111
+ });
112
+ if (0 === rows.length) return null;
58
113
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_StageNode_styles_cjs_namespaceObject.StageItemsSection, {
59
114
  children: [
60
115
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(StageItemsHeaderTitle_cjs_namespaceObject.StageItemsHeaderTitle, {
61
116
  title: labels.adhocTasks,
62
117
  testId: `adhoc-tasks-header-${id}`
63
118
  }),
64
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNode_styles_cjs_namespaceObject.StageItemsList, {
65
- "data-testid": `adhoc-tasks-list-${id}`,
66
- children: adhocTasks.map(({ task })=>{
67
- const taskExecution = execution?.taskStatus?.[task.id];
68
- const hasMenu = !isReadOnly && hasBuiltInTaskActions || (getTaskContextMenuItems?.({
69
- task,
70
- taskGroupType: 'adhoc',
71
- isParallel: false
72
- })?.length ?? 0) > 0;
73
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_AdhocTask_cjs_namespaceObject.AdhocTaskItem, {
74
- task: task,
75
- taskExecution: taskExecution,
76
- isSelected: selectedTaskId === task.id,
77
- onTaskClick: handleTaskClick,
78
- onTaskPlay: onTaskPlay,
79
- isTaskLoading: loadingTaskIds?.has(task.id),
80
- isReadOnly: isReadOnly,
81
- onToggleBreakpoint: isReadOnly ? onTaskBreakpointToggle : void 0,
82
- getContextMenuItems: hasMenu ? getAdhocContextMenuItems : void 0
83
- }, task.id);
84
- })
119
+ isDragDisabled ? taskList : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(core_namespaceObject.DndContext, {
120
+ collisionDetection: core_namespaceObject.closestCenter,
121
+ sensors: sensors,
122
+ onDragStart: handleDragStart,
123
+ onDragEnd: handleDragEnd,
124
+ onDragCancel: handleDragCancel,
125
+ children: [
126
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(sortable_namespaceObject.SortableContext, {
127
+ items: rowIds,
128
+ strategy: sortable_namespaceObject.verticalListSortingStrategy,
129
+ children: taskList
130
+ }),
131
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageTaskDragOverlay_cjs_namespaceObject.StageTaskDragOverlay, {
132
+ activeTask: activeTask,
133
+ isActiveTaskParallel: false,
134
+ taskWidthStyle: taskWidthStyle
135
+ })
136
+ ]
85
137
  })
86
138
  ]
87
139
  });
@@ -1,11 +1,14 @@
1
+ import { type CSSProperties } from 'react';
1
2
  import type { NodeMenuItem } from '../../NodeContextMenu';
2
- import type { StageNodeProps, StageTaskGroup } from '../StageNode.types';
3
- export declare const StageNodeAdhocTaskGroups: import("react").MemoExoticComponent<({ props, adhocTasks, isReadOnly, selectedTaskId, handleTaskClick, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask, }: {
3
+ import type { StageNodeProps, StageTaskItem } from '../StageNode.types';
4
+ export declare const StageNodeAdhocTaskGroups: import("react").MemoExoticComponent<({ props, adhocTaskGroups, isReadOnly, selectedTaskId, taskWidthStyle, handleTaskClick, handleReorderAdhocTasks, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask, }: {
4
5
  props: StageNodeProps;
5
- adhocTasks: StageTaskGroup[];
6
+ adhocTaskGroups: StageTaskItem[][];
6
7
  isReadOnly: boolean;
7
8
  selectedTaskId?: string;
9
+ taskWidthStyle?: CSSProperties;
8
10
  handleTaskClick: (e: React.MouseEvent, taskElementId: string) => void;
11
+ handleReorderAdhocTasks: (newTasks: StageTaskItem[][]) => void;
9
12
  generateReplaceTaskMenuItemForTask: (taskId: string, isParallel: boolean) => NodeMenuItem | undefined;
10
13
  generateDeleteTaskMenuItemForTask: (taskId: string) => NodeMenuItem | undefined;
11
14
  }) => import("react/jsx-runtime").JSX.Element | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"StageNodeAdhocTaskGroups.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/StageNode/tasks/StageNodeAdhocTaskGroups.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAiB,MAAM,oBAAoB,CAAC;AAoGxF,eAAO,MAAM,wBAAwB,mLAvFlC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,kCAAkC,EAAE,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,YAAY,GAAG,SAAS,CAAC;IAC9B,iCAAiC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CACjF,oDA4E0E,CAAC"}
1
+ {"version":3,"file":"StageNodeAdhocTaskGroups.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/StageNode/tasks/StageNodeAdhocTaskGroups.tsx"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,aAAa,EAA8B,MAAM,OAAO,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAoKxE,eAAO,MAAM,wBAAwB,iOAlJlC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,eAAe,EAAE,aAAa,EAAE,EAAE,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,eAAe,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACtE,uBAAuB,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,IAAI,CAAC;IAC/D,kCAAkC,EAAE,CAClC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,OAAO,KAChB,YAAY,GAAG,SAAS,CAAC;IAC9B,iCAAiC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CACjF,oDAqI0E,CAAC"}
@@ -1,13 +1,38 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { memo, useCallback } from "react";
2
+ import { DndContext, KeyboardSensor, PointerSensor, closestCenter, useSensor, useSensors } from "@dnd-kit/core";
3
+ import { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from "@dnd-kit/sortable";
4
+ import { memo, useCallback, useMemo } from "react";
5
+ import { useStageTaskDragHandler } from "../hooks/useStageTaskDragHandler.js";
3
6
  import { StageItemsList, StageItemsSection } from "../StageNode.styles.js";
4
7
  import { StageItemsHeaderTitle } from "../shared/StageItemsHeaderTitle.js";
5
8
  import { useStageNodeLabels } from "../useStageNodeLabels.js";
6
9
  import { AdhocTaskItem } from "./AdhocTask.js";
7
- const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selectedTaskId, handleTaskClick, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask })=>{
8
- const { id, execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskPlay, loadingTaskIds, onTaskBreakpointToggle, getTaskContextMenuItems } = props;
10
+ import { SortableTaskRow } from "./SortableTaskRow.js";
11
+ import { getDivider } from "./StageNodeTaskUtilities.js";
12
+ import { StageTaskDragOverlay } from "./StageTaskDragOverlay.js";
13
+ const StageNodeAdhocTaskGroupsInner = ({ props, adhocTaskGroups, isReadOnly, selectedTaskId, taskWidthStyle, handleTaskClick, handleReorderAdhocTasks, generateReplaceTaskMenuItemForTask, generateDeleteTaskMenuItemForTask })=>{
14
+ const { id, execution, onTaskGroupModification, onReplaceTaskFromToolbox, onTaskReorder, onTaskPlay, loadingTaskIds, onTaskBreakpointToggle, getTaskContextMenuItems } = props;
9
15
  const hasBuiltInTaskActions = !!(onReplaceTaskFromToolbox || onTaskGroupModification);
10
16
  const labels = useStageNodeLabels();
17
+ const isDragDisabled = !onTaskReorder || isReadOnly;
18
+ const rows = useMemo(()=>adhocTaskGroups.flat(), [
19
+ adhocTaskGroups
20
+ ]);
21
+ const rowIds = useMemo(()=>rows.map((task)=>task.id), [
22
+ rows
23
+ ]);
24
+ const { activeTask, handleDragStart, handleDragEnd, handleDragCancel } = useStageTaskDragHandler({
25
+ taskGroups: adhocTaskGroups,
26
+ onTaskReorder: handleReorderAdhocTasks,
27
+ allowRegrouping: false
28
+ });
29
+ const sensors = useSensors(useSensor(PointerSensor, {
30
+ activationConstraint: {
31
+ distance: 3
32
+ }
33
+ }), useSensor(KeyboardSensor, {
34
+ coordinateGetter: sortableKeyboardCoordinates
35
+ }));
11
36
  const getAdhocContextMenuItems = useCallback((task)=>{
12
37
  const items = [];
13
38
  const replaceTaskMenuItem = generateReplaceTaskMenuItemForTask(task.id, false);
@@ -19,41 +44,68 @@ const StageNodeAdhocTaskGroupsInner = ({ props, adhocTasks, isReadOnly, selected
19
44
  }) ?? [];
20
45
  items.push(...additionalMenuItems);
21
46
  const deleteTaskMenuItem = generateDeleteTaskMenuItemForTask(task.id);
22
- if (deleteTaskMenuItem) items.push(deleteTaskMenuItem);
47
+ if (deleteTaskMenuItem) {
48
+ if (items.length) items.push(getDivider());
49
+ items.push(deleteTaskMenuItem);
50
+ }
23
51
  return items;
24
52
  }, [
25
53
  generateReplaceTaskMenuItemForTask,
26
54
  getTaskContextMenuItems,
27
55
  generateDeleteTaskMenuItemForTask
28
56
  ]);
29
- if (0 === adhocTasks.length) return null;
57
+ const taskList = /*#__PURE__*/ jsx(StageItemsList, {
58
+ "data-testid": `adhoc-tasks-list-${id}`,
59
+ className: isDragDisabled ? void 0 : 'nodrag nopan',
60
+ children: rows.map((task)=>{
61
+ const taskExecution = execution?.taskStatus?.[task.id];
62
+ const hasMenu = !isReadOnly && hasBuiltInTaskActions || (getTaskContextMenuItems?.({
63
+ task,
64
+ taskGroupType: 'adhoc',
65
+ isParallel: false
66
+ })?.length ?? 0) > 0;
67
+ const row = /*#__PURE__*/ jsx(AdhocTaskItem, {
68
+ task: task,
69
+ taskExecution: taskExecution,
70
+ isSelected: selectedTaskId === task.id,
71
+ onTaskClick: handleTaskClick,
72
+ onTaskPlay: onTaskPlay,
73
+ isTaskLoading: loadingTaskIds?.has(task.id),
74
+ isReadOnly: isReadOnly,
75
+ onToggleBreakpoint: isReadOnly ? onTaskBreakpointToggle : void 0,
76
+ getContextMenuItems: hasMenu ? getAdhocContextMenuItems : void 0
77
+ }, task.id);
78
+ return isDragDisabled ? row : /*#__PURE__*/ jsx(SortableTaskRow, {
79
+ taskId: task.id,
80
+ children: row
81
+ }, task.id);
82
+ })
83
+ });
84
+ if (0 === rows.length) return null;
30
85
  return /*#__PURE__*/ jsxs(StageItemsSection, {
31
86
  children: [
32
87
  /*#__PURE__*/ jsx(StageItemsHeaderTitle, {
33
88
  title: labels.adhocTasks,
34
89
  testId: `adhoc-tasks-header-${id}`
35
90
  }),
36
- /*#__PURE__*/ jsx(StageItemsList, {
37
- "data-testid": `adhoc-tasks-list-${id}`,
38
- children: adhocTasks.map(({ task })=>{
39
- const taskExecution = execution?.taskStatus?.[task.id];
40
- const hasMenu = !isReadOnly && hasBuiltInTaskActions || (getTaskContextMenuItems?.({
41
- task,
42
- taskGroupType: 'adhoc',
43
- isParallel: false
44
- })?.length ?? 0) > 0;
45
- return /*#__PURE__*/ jsx(AdhocTaskItem, {
46
- task: task,
47
- taskExecution: taskExecution,
48
- isSelected: selectedTaskId === task.id,
49
- onTaskClick: handleTaskClick,
50
- onTaskPlay: onTaskPlay,
51
- isTaskLoading: loadingTaskIds?.has(task.id),
52
- isReadOnly: isReadOnly,
53
- onToggleBreakpoint: isReadOnly ? onTaskBreakpointToggle : void 0,
54
- getContextMenuItems: hasMenu ? getAdhocContextMenuItems : void 0
55
- }, task.id);
56
- })
91
+ isDragDisabled ? taskList : /*#__PURE__*/ jsxs(DndContext, {
92
+ collisionDetection: closestCenter,
93
+ sensors: sensors,
94
+ onDragStart: handleDragStart,
95
+ onDragEnd: handleDragEnd,
96
+ onDragCancel: handleDragCancel,
97
+ children: [
98
+ /*#__PURE__*/ jsx(SortableContext, {
99
+ items: rowIds,
100
+ strategy: verticalListSortingStrategy,
101
+ children: taskList
102
+ }),
103
+ /*#__PURE__*/ jsx(StageTaskDragOverlay, {
104
+ activeTask: activeTask,
105
+ isActiveTaskParallel: false,
106
+ taskWidthStyle: taskWidthStyle
107
+ })
108
+ ]
57
109
  })
58
110
  ]
59
111
  });
@@ -43,7 +43,7 @@ const StageNodeAllTaskGroupsInner = ({ props, isReadOnly, taskWidthStyle, taskSt
43
43
  const allTasks = (0, external_react_namespaceObject.useMemo)(()=>stageDetails?.tasks || [], [
44
44
  stageDetails?.tasks
45
45
  ]);
46
- const { sequentialTaskGroups, sequentialTasks, adhocTaskGroups, adhocTasks, eventDrivenTaskGroups, eventDrivenTasks } = (0, useStageTasksByGroups_cjs_namespaceObject.useStageTasksByGroups)(allTasks);
46
+ const { sequentialTaskGroups, adhocTaskGroups, eventDrivenTaskGroups } = (0, useStageTasksByGroups_cjs_namespaceObject.useStageTasksByGroups)(allTasks);
47
47
  const selectedTaskId = stageDetails?.selectedTaskId;
48
48
  const defaultContent = stageDetails?.defaultContent || (isReadOnly ? labels.noTasks : labels.addFirstTask);
49
49
  const handleReorderSequentialTasks = (0, external_react_namespaceObject.useCallback)((newTasks)=>{
@@ -58,6 +58,28 @@ const StageNodeAllTaskGroupsInner = ({ props, isReadOnly, taskWidthStyle, taskSt
58
58
  eventDrivenTaskGroups,
59
59
  adhocTaskGroups
60
60
  ]);
61
+ const handleReorderEventDrivenTasks = (0, external_react_namespaceObject.useCallback)((newTasks)=>{
62
+ onTaskReorder?.([
63
+ ...sequentialTaskGroups,
64
+ ...newTasks,
65
+ ...adhocTaskGroups
66
+ ]);
67
+ }, [
68
+ onTaskReorder,
69
+ sequentialTaskGroups,
70
+ adhocTaskGroups
71
+ ]);
72
+ const handleReorderAdhocTasks = (0, external_react_namespaceObject.useCallback)((newTasks)=>{
73
+ onTaskReorder?.([
74
+ ...sequentialTaskGroups,
75
+ ...eventDrivenTaskGroups,
76
+ ...newTasks
77
+ ]);
78
+ }, [
79
+ onTaskReorder,
80
+ sequentialTaskGroups,
81
+ eventDrivenTaskGroups
82
+ ]);
61
83
  const handleTaskClick = (0, external_react_namespaceObject.useCallback)((e, taskElementId)=>{
62
84
  e.stopPropagation();
63
85
  onTaskClick?.(taskElementId);
@@ -132,7 +154,6 @@ const StageNodeAllTaskGroupsInner = ({ props, isReadOnly, taskWidthStyle, taskSt
132
154
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNodeSequentialTaskGroups_cjs_namespaceObject.StageNodeSequentialTaskGroups, {
133
155
  props: props,
134
156
  sequentialTaskGroups: sequentialTaskGroups,
135
- sequentialTasks: sequentialTasks,
136
157
  isReadOnly: isReadOnly,
137
158
  selectedTaskId: selectedTaskId,
138
159
  taskWidthStyle: taskWidthStyle,
@@ -143,19 +164,23 @@ const StageNodeAllTaskGroupsInner = ({ props, isReadOnly, taskWidthStyle, taskSt
143
164
  }),
144
165
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNodeEventDrivenTaskGroups_cjs_namespaceObject.StageNodeEventDrivenTaskGroups, {
145
166
  props: props,
146
- eventDrivenTasks: eventDrivenTasks,
167
+ eventDrivenTaskGroups: eventDrivenTaskGroups,
147
168
  isReadOnly: isReadOnly,
148
169
  selectedTaskId: selectedTaskId,
170
+ taskWidthStyle: taskWidthStyle,
149
171
  handleTaskClick: handleTaskClick,
172
+ handleReorderEventDrivenTasks: handleReorderEventDrivenTasks,
150
173
  generateReplaceTaskMenuItemForTask: generateReplaceTaskMenuItemForTask,
151
174
  generateDeleteTaskMenuItemForTask: generateDeleteTaskMenuItemForTask
152
175
  }),
153
176
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StageNodeAdhocTaskGroups_cjs_namespaceObject.StageNodeAdhocTaskGroups, {
154
177
  props: props,
155
- adhocTasks: adhocTasks,
178
+ adhocTaskGroups: adhocTaskGroups,
156
179
  isReadOnly: isReadOnly,
157
180
  selectedTaskId: selectedTaskId,
181
+ taskWidthStyle: taskWidthStyle,
158
182
  handleTaskClick: handleTaskClick,
183
+ handleReorderAdhocTasks: handleReorderAdhocTasks,
159
184
  generateReplaceTaskMenuItemForTask: generateReplaceTaskMenuItemForTask,
160
185
  generateDeleteTaskMenuItemForTask: generateDeleteTaskMenuItemForTask
161
186
  })
@@ -1 +1 @@
1
- {"version":3,"file":"StageNodeAllTaskGroups.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/StageNode/tasks/StageNodeAllTaskGroups.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAQ,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAGvF,OAAO,KAAK,EAAE,cAAc,EAAiB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA4N5F,eAAO,MAAM,sBAAsB,8JA5MhC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACtD,kBAAkB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD,6CAoMsE,CAAC"}
1
+ {"version":3,"file":"StageNodeAllTaskGroups.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/StageNode/tasks/StageNodeAllTaskGroups.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAQ,KAAK,SAAS,EAAwB,MAAM,OAAO,CAAC;AAGvF,OAAO,KAAK,EAAE,cAAc,EAAiB,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAwO5F,eAAO,MAAM,sBAAsB,8JAxNhC;IACD,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,aAAa,CAAC;IAC/B,kBAAkB,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAClD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,kBAAkB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IACtD,kBAAkB,EAAE,CAAC,eAAe,EAAE,OAAO,KAAK,IAAI,CAAC;CACxD,6CAgNsE,CAAC"}