@uipath/apollo-react 4.24.4 → 4.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/canvas/components/BaseCanvas/BaseCanvas.cjs +2 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.js +2 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.types.d.ts +2 -0
- package/dist/canvas/components/BaseCanvas/BaseCanvas.types.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/CanvasProviders.cjs +19 -14
- package/dist/canvas/components/BaseCanvas/CanvasProviders.d.ts +2 -1
- package/dist/canvas/components/BaseCanvas/CanvasProviders.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/CanvasProviders.js +19 -14
- package/dist/canvas/components/BaseNode/BaseNodeContainer.cjs +5 -1
- package/dist/canvas/components/BaseNode/BaseNodeContainer.d.ts.map +1 -1
- package/dist/canvas/components/BaseNode/BaseNodeContainer.js +5 -1
- package/dist/canvas/components/ButtonHandle/ButtonHandle.cjs +1 -1
- package/dist/canvas/components/ButtonHandle/ButtonHandle.js +1 -1
- package/dist/canvas/components/CanvasTooltip.cjs +2 -3
- package/dist/canvas/components/CanvasTooltip.d.ts +2 -2
- package/dist/canvas/components/CanvasTooltip.d.ts.map +1 -1
- package/dist/canvas/components/CanvasTooltip.js +2 -3
- package/dist/canvas/components/ExecutionStatusIcon/ExecutionStatusIcon.cjs +1 -0
- package/dist/canvas/components/ExecutionStatusIcon/ExecutionStatusIcon.d.ts +1 -1
- package/dist/canvas/components/ExecutionStatusIcon/ExecutionStatusIcon.d.ts.map +1 -1
- package/dist/canvas/components/ExecutionStatusIcon/ExecutionStatusIcon.js +1 -0
- package/dist/canvas/components/LoopNode/IterationNavigator.cjs +143 -0
- package/dist/canvas/components/LoopNode/IterationNavigator.d.ts +7 -0
- package/dist/canvas/components/LoopNode/IterationNavigator.d.ts.map +1 -0
- package/dist/canvas/components/LoopNode/IterationNavigator.js +109 -0
- package/dist/canvas/components/LoopNode/LoopNode.cjs +45 -18
- package/dist/canvas/components/LoopNode/LoopNode.d.ts.map +1 -1
- package/dist/canvas/components/LoopNode/LoopNode.js +45 -18
- package/dist/canvas/components/LoopNode/LoopNode.types.d.ts +8 -0
- package/dist/canvas/components/LoopNode/LoopNode.types.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/AdhocTask.cjs +1 -0
- package/dist/canvas/components/StageNode/AdhocTask.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/AdhocTask.js +1 -0
- package/dist/canvas/components/StageNode/DraggableTask.cjs +1 -0
- package/dist/canvas/components/StageNode/DraggableTask.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/DraggableTask.js +1 -0
- package/dist/canvas/components/StageNode/EventDrivenTask.cjs +1 -0
- package/dist/canvas/components/StageNode/EventDrivenTask.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/EventDrivenTask.js +1 -0
- package/dist/canvas/components/StageNode/StageNode.cjs +5 -3
- package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNode.js +5 -3
- package/dist/canvas/components/StageNode/StageNode.styles.cjs +4 -39
- package/dist/canvas/components/StageNode/StageNode.styles.d.ts +1 -14
- package/dist/canvas/components/StageNode/StageNode.styles.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNode.styles.js +4 -33
- package/dist/canvas/components/StageNode/StageNode.types.d.ts +4 -2
- package/dist/canvas/components/StageNode/StageNode.types.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.cjs +3 -1
- package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNodeAdhocTaskGroups.js +3 -1
- package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.cjs +9 -5
- package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNodeAllTaskGroups.js +9 -5
- package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.cjs +3 -1
- package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNodeEventDrivenTaskGroups.js +3 -1
- package/dist/canvas/components/StageNode/StageNodeHeader.cjs +107 -151
- package/dist/canvas/components/StageNode/StageNodeHeader.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNodeHeader.js +111 -155
- package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.cjs +7 -3
- package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNodeSequentialTaskGroups.js +7 -3
- package/dist/canvas/components/StageNode/StageNodeTaskUtilities.cjs +11 -11
- package/dist/canvas/components/StageNode/StageNodeTaskUtilities.d.ts +14 -1
- package/dist/canvas/components/StageNode/StageNodeTaskUtilities.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNodeTaskUtilities.js +11 -11
- package/dist/canvas/components/StageNode/StageTitleInput.cjs +122 -0
- package/dist/canvas/components/StageNode/StageTitleInput.d.ts +9 -0
- package/dist/canvas/components/StageNode/StageTitleInput.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/StageTitleInput.js +88 -0
- package/dist/canvas/components/StageNode/useStageNodeLabels.cjs +122 -0
- package/dist/canvas/components/StageNode/useStageNodeLabels.d.ts +15 -0
- package/dist/canvas/components/StageNode/useStageNodeLabels.d.ts.map +1 -0
- package/dist/canvas/components/StageNode/useStageNodeLabels.js +88 -0
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.cjs +51 -38
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts.map +1 -1
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.js +49 -36
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.styles.cjs +2 -5
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.styles.d.ts.map +1 -1
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.styles.js +2 -5
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.cjs +5 -5
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.js +5 -5
- package/dist/canvas/components/Toolbox/Toolbox.cjs +7 -1
- package/dist/canvas/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/canvas/components/Toolbox/Toolbox.js +7 -1
- package/dist/canvas/index.cjs +65 -47
- package/dist/canvas/index.d.ts +2 -0
- package/dist/canvas/index.d.ts.map +1 -1
- package/dist/canvas/index.js +2 -1
- package/dist/canvas/locales/en.cjs +1 -1
- package/dist/canvas/locales/en.d.ts.map +1 -1
- package/dist/canvas/locales/en.js +1 -1
- package/dist/canvas/storybook-utils/decorators.d.ts.map +1 -1
- package/dist/canvas/styles/reactflow-reset.css +5 -1
- package/dist/canvas/styles/tailwind.canvas.css +1 -1
- package/dist/canvas/utils/adornment-resolver.cjs +4 -8
- package/dist/canvas/utils/adornment-resolver.d.ts +4 -1
- package/dist/canvas/utils/adornment-resolver.d.ts.map +1 -1
- package/dist/canvas/utils/adornment-resolver.js +4 -8
- package/dist/canvas/utils/testing.cjs +10 -1
- package/dist/canvas/utils/testing.d.ts +1 -1
- package/dist/canvas/utils/testing.d.ts.map +1 -1
- package/dist/canvas/utils/testing.js +10 -1
- package/dist/i18n/ApI18nProvider.cjs +3 -1
- package/dist/i18n/ApI18nProvider.d.ts.map +1 -1
- package/dist/i18n/ApI18nProvider.js +3 -1
- package/package.json +5 -6
|
@@ -31,6 +31,7 @@ const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
|
|
|
31
31
|
const apollo_wind_namespaceObject = require("@uipath/apollo-wind");
|
|
32
32
|
const external_react_namespaceObject = require("react");
|
|
33
33
|
const shallow_namespaceObject = require("zustand/shallow");
|
|
34
|
+
const external_constants_cjs_namespaceObject = require("../../constants.cjs");
|
|
34
35
|
const index_cjs_namespaceObject = require("../../core/index.cjs");
|
|
35
36
|
const external_hooks_index_cjs_namespaceObject = require("../../hooks/index.cjs");
|
|
36
37
|
const adornment_resolver_cjs_namespaceObject = require("../../utils/adornment-resolver.cjs");
|
|
@@ -47,10 +48,13 @@ const BaseNodeContainer_cjs_namespaceObject = require("../BaseNode/BaseNodeConta
|
|
|
47
48
|
const BaseNodeMissingManifest_cjs_namespaceObject = require("../BaseNode/BaseNodeMissingManifest.cjs");
|
|
48
49
|
const external_ButtonHandle_index_cjs_namespaceObject = require("../ButtonHandle/index.cjs");
|
|
49
50
|
const external_Toolbar_index_cjs_namespaceObject = require("../Toolbar/index.cjs");
|
|
51
|
+
const external_IterationNavigator_cjs_namespaceObject = require("./IterationNavigator.cjs");
|
|
50
52
|
const external_LoopNode_helpers_cjs_namespaceObject = require("./LoopNode.helpers.cjs");
|
|
51
53
|
const DEFAULT_LOOP_ICON = 'repeat';
|
|
52
54
|
const DEFAULT_LOOP_TITLE = 'Loop';
|
|
53
55
|
const EMPTY_DATA = {};
|
|
56
|
+
const LOOP_HEADER_ADORNMENT_GAP = 8;
|
|
57
|
+
const LOOP_HEADER_ADORNMENT_PADDING = external_constants_cjs_namespaceObject.NODE_BADGE_INSET_SQUARE + external_constants_cjs_namespaceObject.NODE_BADGE_SIZE + LOOP_HEADER_ADORNMENT_GAP;
|
|
54
58
|
const RESIZE_CONTROLS = [
|
|
55
59
|
{
|
|
56
60
|
position: 'top-left',
|
|
@@ -153,7 +157,7 @@ function resolveLoopHandleConfigurations(manifestHandleConfigurations, data) {
|
|
|
153
157
|
return manifestHandleConfigurations ?? [];
|
|
154
158
|
}
|
|
155
159
|
function LoopNodeComponent(props) {
|
|
156
|
-
const { id, type, data, selected = false, dragging = false, width = 0, height = 0, onAddFirstChild, onResize, toolbarConfig: toolbarConfigProp, adornments: adornmentsProp, executionStatusOverride, suggestionType: suggestionTypeProp } = props;
|
|
160
|
+
const { id, type, data, selected = false, dragging = false, width = 0, height = 0, onAddFirstChild, onResize, toolbarConfig: toolbarConfigProp, adornments: adornmentsProp, executionStatusOverride, suggestionType: suggestionTypeProp, iterationState: iterationStateProp } = props;
|
|
157
161
|
const nodeTypeRegistry = (0, index_cjs_namespaceObject.useOptionalNodeTypeRegistry)();
|
|
158
162
|
const [isHovered, setIsHovered] = (0, external_react_namespaceObject.useState)(false);
|
|
159
163
|
const resolvedData = data ?? EMPTY_DATA;
|
|
@@ -222,12 +226,16 @@ function LoopNodeComponent(props) {
|
|
|
222
226
|
toolbarConfigProp
|
|
223
227
|
]);
|
|
224
228
|
const adornments = (0, external_react_namespaceObject.useMemo)(()=>({
|
|
225
|
-
...(0, adornment_resolver_cjs_namespaceObject.resolveAdornments)(statusContext
|
|
229
|
+
...(0, adornment_resolver_cjs_namespaceObject.resolveAdornments)(statusContext, {
|
|
230
|
+
hideExecutionStatusAdornment: true
|
|
231
|
+
}),
|
|
226
232
|
...adornmentsProp ?? {}
|
|
227
233
|
}), [
|
|
228
234
|
adornmentsProp,
|
|
229
235
|
statusContext
|
|
230
236
|
]);
|
|
237
|
+
const hasTopLeftAdornment = !!adornments.topLeft;
|
|
238
|
+
const hasTopRightAdornment = !!adornments.topRight;
|
|
231
239
|
const resolvedHandleGroups = (0, external_react_namespaceObject.useMemo)(()=>{
|
|
232
240
|
const handleConfigurations = resolveLoopHandleConfigurations(manifest?.handleConfiguration, resolvedData);
|
|
233
241
|
return (0, manifest_resolver_cjs_namespaceObject.resolveHandles)(handleConfigurations, {
|
|
@@ -265,6 +273,9 @@ function LoopNodeComponent(props) {
|
|
|
265
273
|
const showHandleAddButtons = isDesignMode && !multipleNodesSelected && !isConnecting && !dragging;
|
|
266
274
|
const showEmptyStateButton = isDesignMode && !hasChildNodes && !!onAddFirstChild;
|
|
267
275
|
const interactionState = resolveInteractionState(dragging, selected, isHovered);
|
|
276
|
+
const activeStatus = suggestionType ?? validationState?.validationStatus ?? executionStatus;
|
|
277
|
+
const statusBorder = (0, BaseNodeContainer_cjs_namespaceObject.getStatusBorder)(activeStatus);
|
|
278
|
+
const hasStatusBorder = statusBorder.length > 0;
|
|
268
279
|
if (!manifest) return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
269
280
|
className: "relative",
|
|
270
281
|
style: nodeSizeStyle,
|
|
@@ -285,7 +296,7 @@ function LoopNodeComponent(props) {
|
|
|
285
296
|
"data-suggestion-type": suggestionType,
|
|
286
297
|
"data-validation-status": validationState?.validationStatus,
|
|
287
298
|
"aria-busy": resolvedData.loading || void 0,
|
|
288
|
-
className: (0, apollo_wind_namespaceObject.cn)('group/loop-shell relative box-border flex h-full w-full flex-col overflow-visible rounded-[20px] border bg-transparent', 'transition-[border-color,box-shadow,opacity] shadow-(--canvas-node-shadow-rest)', 'border-border
|
|
299
|
+
className: (0, apollo_wind_namespaceObject.cn)('group/loop-shell relative box-border flex h-full w-full flex-col overflow-visible rounded-[20px] border bg-transparent', 'transition-[border-color,box-shadow,opacity] shadow-(--canvas-node-shadow-rest)', 'border-border', statusBorder, isHovered && 'shadow-(--canvas-node-shadow-hover)', isHovered && !hasStatusBorder && 'border-border-hover', selected && 'outline outline-2 outline-foreground-accent-muted', isDropTarget && 'bg-surface-hover outline outline-2 outline-brand', 'drag' === interactionState && 'cursor-grabbing shadow-(--canvas-node-shadow-lifted)'),
|
|
289
300
|
style: {
|
|
290
301
|
...nodeSizeStyle,
|
|
291
302
|
...display.background ? {
|
|
@@ -311,7 +322,10 @@ function LoopNodeComponent(props) {
|
|
|
311
322
|
title: displayTitle,
|
|
312
323
|
icon: displayIcon,
|
|
313
324
|
loading: isLoading,
|
|
314
|
-
isParallel: isParallel
|
|
325
|
+
isParallel: isParallel,
|
|
326
|
+
iterationState: iterationStateProp,
|
|
327
|
+
hasTopLeftAdornment: hasTopLeftAdornment,
|
|
328
|
+
hasTopRightAdornment: hasTopRightAdornment
|
|
315
329
|
}),
|
|
316
330
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(BodyFrame, {
|
|
317
331
|
isEmpty: showEmptyStateButton,
|
|
@@ -347,7 +361,7 @@ function LoopNodeComponent(props) {
|
|
|
347
361
|
});
|
|
348
362
|
}
|
|
349
363
|
const LoopNode = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(LoopNodeComponent);
|
|
350
|
-
function Header({ title, icon, loading, isParallel }) {
|
|
364
|
+
function Header({ title, icon, loading, isParallel, iterationState, hasTopLeftAdornment, hasTopRightAdornment }) {
|
|
351
365
|
const titleContent = loading ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
352
366
|
className: "h-5 w-28 animate-pulse rounded bg-(--canvas-background-overlay)"
|
|
353
367
|
}) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
|
|
@@ -364,8 +378,13 @@ function Header({ title, icon, loading, isParallel }) {
|
|
|
364
378
|
size: 16
|
|
365
379
|
})
|
|
366
380
|
}) : null;
|
|
381
|
+
const headerStyle = hasTopLeftAdornment || hasTopRightAdornment ? {
|
|
382
|
+
paddingLeft: hasTopLeftAdornment ? LOOP_HEADER_ADORNMENT_PADDING : void 0,
|
|
383
|
+
paddingRight: hasTopRightAdornment ? LOOP_HEADER_ADORNMENT_PADDING : void 0
|
|
384
|
+
} : void 0;
|
|
367
385
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
|
|
368
|
-
className:
|
|
386
|
+
className: (0, apollo_wind_namespaceObject.cn)('flex shrink-0 cursor-grab items-center justify-between gap-2.5 rounded-t-[18px]', '-mb-2.5 bg-surface-overlay px-3.5 pb-2.5 pt-2.5 text-foreground', 'active:cursor-grabbing'),
|
|
387
|
+
style: headerStyle,
|
|
369
388
|
"data-testid": "loop-node-header",
|
|
370
389
|
children: [
|
|
371
390
|
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
|
|
@@ -375,18 +394,26 @@ function Header({ title, icon, loading, isParallel }) {
|
|
|
375
394
|
titleContent
|
|
376
395
|
]
|
|
377
396
|
}),
|
|
378
|
-
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("
|
|
379
|
-
className: "flex shrink-0 items-center gap-
|
|
397
|
+
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
|
|
398
|
+
className: "flex shrink-0 items-center gap-2",
|
|
380
399
|
children: [
|
|
381
|
-
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
400
|
+
iterationState ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_IterationNavigator_cjs_namespaceObject.IterationNavigator, {
|
|
401
|
+
iterationState: iterationState
|
|
402
|
+
}) : null,
|
|
403
|
+
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("span", {
|
|
404
|
+
className: "flex h-6 shrink-0 items-center gap-1 rounded-full border border-border bg-surface px-2.5 text-[11px] font-semibold leading-4 text-foreground shadow-sm",
|
|
405
|
+
children: [
|
|
406
|
+
/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
|
|
407
|
+
className: (0, apollo_wind_namespaceObject.cn)('flex shrink-0', isParallel && 'rotate-90'),
|
|
408
|
+
"aria-hidden": true,
|
|
409
|
+
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(icon_registry_cjs_namespaceObject.CanvasIcon, {
|
|
410
|
+
icon: "align-justify",
|
|
411
|
+
size: 11
|
|
412
|
+
})
|
|
413
|
+
}),
|
|
414
|
+
isParallel ? 'Parallel' : 'Sequential'
|
|
415
|
+
]
|
|
416
|
+
})
|
|
390
417
|
]
|
|
391
418
|
})
|
|
392
419
|
]
|
|
@@ -408,7 +435,7 @@ function BodyFrame({ isEmpty, isLoading }) {
|
|
|
408
435
|
return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
409
436
|
"data-testid": "loop-body-frame",
|
|
410
437
|
"data-empty": isEmpty ? 'true' : 'false',
|
|
411
|
-
className: (0, apollo_wind_namespaceObject.cn)('relative m-2.5 flex flex-1 rounded-xl border-[1.5px] border-dashed border-border
|
|
438
|
+
className: (0, apollo_wind_namespaceObject.cn)('relative m-2.5 flex flex-1 rounded-xl border-[1.5px] border-dashed border-border bg-transparent', 'shadow-[0_0_0_10px_var(--surface-overlay)]', 'pointer-events-none'),
|
|
412
439
|
children: isLoading ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
|
|
413
440
|
className: "m-6 h-14 w-full animate-pulse rounded-[18px] bg-(--canvas-background-overlay)"
|
|
414
441
|
}) : null
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoopNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LoopNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.tsx"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAsB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAsI1E,iBAAS,iBAAiB,CAAC,KAAK,EAAE,aAAa,2CA0P9C;AAED,eAAO,MAAM,QAAQ,+DAA0B,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { NodeResizeControl, useStore, useUpdateNodeInternals } from "../../xyflo
|
|
|
3
3
|
import { cn } from "@uipath/apollo-wind";
|
|
4
4
|
import { memo, useCallback, useEffect, useMemo, useState } from "react";
|
|
5
5
|
import { shallow } from "zustand/shallow";
|
|
6
|
+
import { NODE_BADGE_INSET_SQUARE, NODE_BADGE_SIZE } from "../../constants.js";
|
|
6
7
|
import { useOptionalNodeTypeRegistry } from "../../core/index.js";
|
|
7
8
|
import { useElementValidationStatus, useNodeExecutionState } from "../../hooks/index.js";
|
|
8
9
|
import { resolveAdornments } from "../../utils/adornment-resolver.js";
|
|
@@ -19,10 +20,13 @@ import { getStatusBorder } from "../BaseNode/BaseNodeContainer.js";
|
|
|
19
20
|
import { MissingManifestNode } from "../BaseNode/BaseNodeMissingManifest.js";
|
|
20
21
|
import { ButtonHandles } from "../ButtonHandle/index.js";
|
|
21
22
|
import { NodeToolbar } from "../Toolbar/index.js";
|
|
23
|
+
import { IterationNavigator } from "./IterationNavigator.js";
|
|
22
24
|
import { resolveContainerHandleGroups } from "./LoopNode.helpers.js";
|
|
23
25
|
const DEFAULT_LOOP_ICON = 'repeat';
|
|
24
26
|
const DEFAULT_LOOP_TITLE = 'Loop';
|
|
25
27
|
const EMPTY_DATA = {};
|
|
28
|
+
const LOOP_HEADER_ADORNMENT_GAP = 8;
|
|
29
|
+
const LOOP_HEADER_ADORNMENT_PADDING = NODE_BADGE_INSET_SQUARE + NODE_BADGE_SIZE + LOOP_HEADER_ADORNMENT_GAP;
|
|
26
30
|
const RESIZE_CONTROLS = [
|
|
27
31
|
{
|
|
28
32
|
position: 'top-left',
|
|
@@ -125,7 +129,7 @@ function resolveLoopHandleConfigurations(manifestHandleConfigurations, data) {
|
|
|
125
129
|
return manifestHandleConfigurations ?? [];
|
|
126
130
|
}
|
|
127
131
|
function LoopNodeComponent(props) {
|
|
128
|
-
const { id, type, data, selected = false, dragging = false, width = 0, height = 0, onAddFirstChild, onResize, toolbarConfig: toolbarConfigProp, adornments: adornmentsProp, executionStatusOverride, suggestionType: suggestionTypeProp } = props;
|
|
132
|
+
const { id, type, data, selected = false, dragging = false, width = 0, height = 0, onAddFirstChild, onResize, toolbarConfig: toolbarConfigProp, adornments: adornmentsProp, executionStatusOverride, suggestionType: suggestionTypeProp, iterationState: iterationStateProp } = props;
|
|
129
133
|
const nodeTypeRegistry = useOptionalNodeTypeRegistry();
|
|
130
134
|
const [isHovered, setIsHovered] = useState(false);
|
|
131
135
|
const resolvedData = data ?? EMPTY_DATA;
|
|
@@ -194,12 +198,16 @@ function LoopNodeComponent(props) {
|
|
|
194
198
|
toolbarConfigProp
|
|
195
199
|
]);
|
|
196
200
|
const adornments = useMemo(()=>({
|
|
197
|
-
...resolveAdornments(statusContext
|
|
201
|
+
...resolveAdornments(statusContext, {
|
|
202
|
+
hideExecutionStatusAdornment: true
|
|
203
|
+
}),
|
|
198
204
|
...adornmentsProp ?? {}
|
|
199
205
|
}), [
|
|
200
206
|
adornmentsProp,
|
|
201
207
|
statusContext
|
|
202
208
|
]);
|
|
209
|
+
const hasTopLeftAdornment = !!adornments.topLeft;
|
|
210
|
+
const hasTopRightAdornment = !!adornments.topRight;
|
|
203
211
|
const resolvedHandleGroups = useMemo(()=>{
|
|
204
212
|
const handleConfigurations = resolveLoopHandleConfigurations(manifest?.handleConfiguration, resolvedData);
|
|
205
213
|
return resolveHandles(handleConfigurations, {
|
|
@@ -237,6 +245,9 @@ function LoopNodeComponent(props) {
|
|
|
237
245
|
const showHandleAddButtons = isDesignMode && !multipleNodesSelected && !isConnecting && !dragging;
|
|
238
246
|
const showEmptyStateButton = isDesignMode && !hasChildNodes && !!onAddFirstChild;
|
|
239
247
|
const interactionState = resolveInteractionState(dragging, selected, isHovered);
|
|
248
|
+
const activeStatus = suggestionType ?? validationState?.validationStatus ?? executionStatus;
|
|
249
|
+
const statusBorder = getStatusBorder(activeStatus);
|
|
250
|
+
const hasStatusBorder = statusBorder.length > 0;
|
|
240
251
|
if (!manifest) return /*#__PURE__*/ jsx("div", {
|
|
241
252
|
className: "relative",
|
|
242
253
|
style: nodeSizeStyle,
|
|
@@ -257,7 +268,7 @@ function LoopNodeComponent(props) {
|
|
|
257
268
|
"data-suggestion-type": suggestionType,
|
|
258
269
|
"data-validation-status": validationState?.validationStatus,
|
|
259
270
|
"aria-busy": resolvedData.loading || void 0,
|
|
260
|
-
className: cn('group/loop-shell relative box-border flex h-full w-full flex-col overflow-visible rounded-[20px] border bg-transparent', 'transition-[border-color,box-shadow,opacity] shadow-(--canvas-node-shadow-rest)', 'border-border
|
|
271
|
+
className: cn('group/loop-shell relative box-border flex h-full w-full flex-col overflow-visible rounded-[20px] border bg-transparent', 'transition-[border-color,box-shadow,opacity] shadow-(--canvas-node-shadow-rest)', 'border-border', statusBorder, isHovered && 'shadow-(--canvas-node-shadow-hover)', isHovered && !hasStatusBorder && 'border-border-hover', selected && 'outline outline-2 outline-foreground-accent-muted', isDropTarget && 'bg-surface-hover outline outline-2 outline-brand', 'drag' === interactionState && 'cursor-grabbing shadow-(--canvas-node-shadow-lifted)'),
|
|
261
272
|
style: {
|
|
262
273
|
...nodeSizeStyle,
|
|
263
274
|
...display.background ? {
|
|
@@ -283,7 +294,10 @@ function LoopNodeComponent(props) {
|
|
|
283
294
|
title: displayTitle,
|
|
284
295
|
icon: displayIcon,
|
|
285
296
|
loading: isLoading,
|
|
286
|
-
isParallel: isParallel
|
|
297
|
+
isParallel: isParallel,
|
|
298
|
+
iterationState: iterationStateProp,
|
|
299
|
+
hasTopLeftAdornment: hasTopLeftAdornment,
|
|
300
|
+
hasTopRightAdornment: hasTopRightAdornment
|
|
287
301
|
}),
|
|
288
302
|
/*#__PURE__*/ jsx(BodyFrame, {
|
|
289
303
|
isEmpty: showEmptyStateButton,
|
|
@@ -319,7 +333,7 @@ function LoopNodeComponent(props) {
|
|
|
319
333
|
});
|
|
320
334
|
}
|
|
321
335
|
const LoopNode = /*#__PURE__*/ memo(LoopNodeComponent);
|
|
322
|
-
function Header({ title, icon, loading, isParallel }) {
|
|
336
|
+
function Header({ title, icon, loading, isParallel, iterationState, hasTopLeftAdornment, hasTopRightAdornment }) {
|
|
323
337
|
const titleContent = loading ? /*#__PURE__*/ jsx("div", {
|
|
324
338
|
className: "h-5 w-28 animate-pulse rounded bg-(--canvas-background-overlay)"
|
|
325
339
|
}) : /*#__PURE__*/ jsx("span", {
|
|
@@ -336,8 +350,13 @@ function Header({ title, icon, loading, isParallel }) {
|
|
|
336
350
|
size: 16
|
|
337
351
|
})
|
|
338
352
|
}) : null;
|
|
353
|
+
const headerStyle = hasTopLeftAdornment || hasTopRightAdornment ? {
|
|
354
|
+
paddingLeft: hasTopLeftAdornment ? LOOP_HEADER_ADORNMENT_PADDING : void 0,
|
|
355
|
+
paddingRight: hasTopRightAdornment ? LOOP_HEADER_ADORNMENT_PADDING : void 0
|
|
356
|
+
} : void 0;
|
|
339
357
|
return /*#__PURE__*/ jsxs("div", {
|
|
340
|
-
className:
|
|
358
|
+
className: cn('flex shrink-0 cursor-grab items-center justify-between gap-2.5 rounded-t-[18px]', '-mb-2.5 bg-surface-overlay px-3.5 pb-2.5 pt-2.5 text-foreground', 'active:cursor-grabbing'),
|
|
359
|
+
style: headerStyle,
|
|
341
360
|
"data-testid": "loop-node-header",
|
|
342
361
|
children: [
|
|
343
362
|
/*#__PURE__*/ jsxs("div", {
|
|
@@ -347,18 +366,26 @@ function Header({ title, icon, loading, isParallel }) {
|
|
|
347
366
|
titleContent
|
|
348
367
|
]
|
|
349
368
|
}),
|
|
350
|
-
/*#__PURE__*/ jsxs("
|
|
351
|
-
className: "flex shrink-0 items-center gap-
|
|
369
|
+
/*#__PURE__*/ jsxs("div", {
|
|
370
|
+
className: "flex shrink-0 items-center gap-2",
|
|
352
371
|
children: [
|
|
353
|
-
/*#__PURE__*/ jsx(
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
372
|
+
iterationState ? /*#__PURE__*/ jsx(IterationNavigator, {
|
|
373
|
+
iterationState: iterationState
|
|
374
|
+
}) : null,
|
|
375
|
+
/*#__PURE__*/ jsxs("span", {
|
|
376
|
+
className: "flex h-6 shrink-0 items-center gap-1 rounded-full border border-border bg-surface px-2.5 text-[11px] font-semibold leading-4 text-foreground shadow-sm",
|
|
377
|
+
children: [
|
|
378
|
+
/*#__PURE__*/ jsx("span", {
|
|
379
|
+
className: cn('flex shrink-0', isParallel && 'rotate-90'),
|
|
380
|
+
"aria-hidden": true,
|
|
381
|
+
children: /*#__PURE__*/ jsx(CanvasIcon, {
|
|
382
|
+
icon: "align-justify",
|
|
383
|
+
size: 11
|
|
384
|
+
})
|
|
385
|
+
}),
|
|
386
|
+
isParallel ? 'Parallel' : 'Sequential'
|
|
387
|
+
]
|
|
388
|
+
})
|
|
362
389
|
]
|
|
363
390
|
})
|
|
364
391
|
]
|
|
@@ -380,7 +407,7 @@ function BodyFrame({ isEmpty, isLoading }) {
|
|
|
380
407
|
return /*#__PURE__*/ jsx("div", {
|
|
381
408
|
"data-testid": "loop-body-frame",
|
|
382
409
|
"data-empty": isEmpty ? 'true' : 'false',
|
|
383
|
-
className: cn('relative m-2.5 flex flex-1 rounded-xl border-[1.5px] border-dashed border-border
|
|
410
|
+
className: cn('relative m-2.5 flex flex-1 rounded-xl border-[1.5px] border-dashed border-border bg-transparent', 'shadow-[0_0_0_10px_var(--surface-overlay)]', 'pointer-events-none'),
|
|
384
411
|
children: isLoading ? /*#__PURE__*/ jsx("div", {
|
|
385
412
|
className: "m-6 h-14 w-full animate-pulse rounded-[18px] bg-(--canvas-background-overlay)"
|
|
386
413
|
}) : null
|
|
@@ -9,11 +9,19 @@ export interface LoopNodeResizeSize {
|
|
|
9
9
|
width: number;
|
|
10
10
|
height: number;
|
|
11
11
|
}
|
|
12
|
+
export interface LoopIterationState {
|
|
13
|
+
activeIndex: number;
|
|
14
|
+
total: number;
|
|
15
|
+
onActiveIndexChange?: (nextIndex: number) => void;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
ariaLabel?: string;
|
|
18
|
+
}
|
|
12
19
|
export interface LoopNodeConfig {
|
|
13
20
|
toolbarConfig?: NodeToolbarConfig | null;
|
|
14
21
|
adornments?: NodeAdornments;
|
|
15
22
|
executionStatusOverride?: ElementStatusValues;
|
|
16
23
|
suggestionType?: SuggestionType;
|
|
24
|
+
iterationState?: LoopIterationState;
|
|
17
25
|
}
|
|
18
26
|
export interface LoopNodeProps extends NodeProps<Node<LoopNodeData>>, LoopNodeConfig {
|
|
19
27
|
onAddFirstChild?: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoopNode.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC;AAExC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,uBAAuB,CAAC,EAAE,mBAAmB,CAAC;IAC9C,cAAc,CAAC,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"LoopNode.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC;AAExC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,uBAAuB,CAAC,EAAE,mBAAmB,CAAC;IAC9C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,kBAAkB,CAAC;CACrC;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,cAAc;IAClF,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC/C"}
|
|
@@ -48,6 +48,7 @@ const AdhocTaskItemComponent = ({ task, taskExecution, isSelected, getContextMen
|
|
|
48
48
|
"data-testid": `stage-task-${task.id}`,
|
|
49
49
|
selected: isSelected,
|
|
50
50
|
status: taskExecution?.status,
|
|
51
|
+
isPlaceholder: task.isPlaceholder,
|
|
51
52
|
onClick: handleClick,
|
|
52
53
|
...getContextMenuItems && !isTaskLoading && {
|
|
53
54
|
onContextMenu: handleContextMenu
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdhocTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/AdhocTask.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI3E,UAAU,kBAAkB;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC;IAC3C,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,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"AdhocTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/AdhocTask.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI3E,UAAU,kBAAkB;IAC1B,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC;IAC3C,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,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAgDD,eAAO,MAAM,aAAa,0IAtCvB,kBAAkB,6CAsCoC,CAAC"}
|
|
@@ -20,6 +20,7 @@ const AdhocTaskItemComponent = ({ task, taskExecution, isSelected, getContextMen
|
|
|
20
20
|
"data-testid": `stage-task-${task.id}`,
|
|
21
21
|
selected: isSelected,
|
|
22
22
|
status: taskExecution?.status,
|
|
23
|
+
isPlaceholder: task.isPlaceholder,
|
|
23
24
|
onClick: handleClick,
|
|
24
25
|
...getContextMenuItems && !isTaskLoading && {
|
|
25
26
|
onContextMenu: handleContextMenu
|
|
@@ -100,6 +100,7 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, g
|
|
|
100
100
|
status: taskExecution?.status,
|
|
101
101
|
isParallel: isParallel,
|
|
102
102
|
isDragEnabled: !isDragDisabled,
|
|
103
|
+
isPlaceholder: task.isPlaceholder,
|
|
103
104
|
onClick: handleClick,
|
|
104
105
|
...getContextMenuItems && !isTaskLoading && {
|
|
105
106
|
onContextMenu: handleContextMenu
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/DraggableTask.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"DraggableTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/DraggableTask.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA4HhE,eAAO,MAAM,aAAa,iMArGvB,kBAAkB,6CAqGoC,CAAC"}
|
|
@@ -72,6 +72,7 @@ const DraggableTaskComponent = ({ task, taskExecution, isSelected, isParallel, g
|
|
|
72
72
|
status: taskExecution?.status,
|
|
73
73
|
isParallel: isParallel,
|
|
74
74
|
isDragEnabled: !isDragDisabled,
|
|
75
|
+
isPlaceholder: task.isPlaceholder,
|
|
75
76
|
onClick: handleClick,
|
|
76
77
|
...getContextMenuItems && !isTaskLoading && {
|
|
77
78
|
onContextMenu: handleContextMenu
|
|
@@ -48,6 +48,7 @@ const EventDrivenTaskItemComponent = ({ task, taskExecution, isSelected, getCont
|
|
|
48
48
|
"data-testid": `stage-task-${task.id}`,
|
|
49
49
|
selected: isSelected,
|
|
50
50
|
status: taskExecution?.status,
|
|
51
|
+
isPlaceholder: task.isPlaceholder,
|
|
51
52
|
onClick: handleClick,
|
|
52
53
|
...getContextMenuItems && !isTaskLoading && {
|
|
53
54
|
onContextMenu: handleContextMenu
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventDrivenTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/EventDrivenTask.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI3E,UAAU,wBAAwB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC;IAC3C,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"EventDrivenTask.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/EventDrivenTask.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI3E,UAAU,wBAAwB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,YAAY,EAAE,CAAC;IAC3C,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAgDD,eAAO,MAAM,mBAAmB,8HAvC7B,wBAAwB,6CAuC0C,CAAC"}
|
|
@@ -20,6 +20,7 @@ const EventDrivenTaskItemComponent = ({ task, taskExecution, isSelected, getCont
|
|
|
20
20
|
"data-testid": `stage-task-${task.id}`,
|
|
21
21
|
selected: isSelected,
|
|
22
22
|
status: taskExecution?.status,
|
|
23
|
+
isPlaceholder: task.isPlaceholder,
|
|
23
24
|
onClick: handleClick,
|
|
24
25
|
...getContextMenuItems && !isTaskLoading && {
|
|
25
26
|
onContextMenu: handleContextMenu
|
|
@@ -36,8 +36,10 @@ const external_StageNode_styles_cjs_namespaceObject = require("./StageNode.style
|
|
|
36
36
|
const external_StageNodeAllTaskGroups_cjs_namespaceObject = require("./StageNodeAllTaskGroups.cjs");
|
|
37
37
|
const external_StageNodeHandles_cjs_namespaceObject = require("./StageNodeHandles.cjs");
|
|
38
38
|
const external_StageNodeHeader_cjs_namespaceObject = require("./StageNodeHeader.cjs");
|
|
39
|
+
const external_useStageNodeLabels_cjs_namespaceObject = require("./useStageNodeLabels.cjs");
|
|
39
40
|
const StageNodeInner = (props)=>{
|
|
40
|
-
const
|
|
41
|
+
const labels = (0, external_useStageNodeLabels_cjs_namespaceObject.useStageNodeLabels)();
|
|
42
|
+
const { dragging, selected, id, width, execution, stageDetails, taskOptions = [], menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onReplaceTaskFromToolbox } = props;
|
|
41
43
|
const taskWidth = width ? width - external_StageNode_styles_cjs_namespaceObject.STAGE_CONTENT_INSET : void 0;
|
|
42
44
|
const allTasks = (0, external_react_namespaceObject.useMemo)(()=>stageDetails?.tasks || [], [
|
|
43
45
|
stageDetails?.tasks
|
|
@@ -167,7 +169,7 @@ const StageNodeInner = (props)=>{
|
|
|
167
169
|
nodeId: id,
|
|
168
170
|
offset: 15,
|
|
169
171
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_Toolbox_index_cjs_namespaceObject.Toolbox, {
|
|
170
|
-
title:
|
|
172
|
+
title: labels.addTask,
|
|
171
173
|
initialItems: taskOptions,
|
|
172
174
|
onClose: ()=>setIsAddingTask(false),
|
|
173
175
|
onItemSelect: handleAddTaskToolboxItemSelected,
|
|
@@ -179,7 +181,7 @@ const StageNodeInner = (props)=>{
|
|
|
179
181
|
nodeId: id,
|
|
180
182
|
offset: 15,
|
|
181
183
|
children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_Toolbox_index_cjs_namespaceObject.Toolbox, {
|
|
182
|
-
title:
|
|
184
|
+
title: labels.replaceTask,
|
|
183
185
|
initialItems: taskOptions,
|
|
184
186
|
onClose: ()=>setIsReplacingTask(false),
|
|
185
187
|
onItemSelect: handleReplaceTaskToolboxItemSelected,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,mBAAmB,CAAC;AAgM5E,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"StageNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAsB,MAAM,mBAAmB,CAAC;AAgM5E,eAAO,MAAM,SAAS,8CA1LS,cAAc,6CA0LA,CAAC"}
|
|
@@ -8,8 +8,10 @@ import { INDENTATION_WIDTH, STAGE_CONTENT_INSET, StageContainer } from "./StageN
|
|
|
8
8
|
import { StageNodeAllTaskGroups } from "./StageNodeAllTaskGroups.js";
|
|
9
9
|
import { StageNodeHandles } from "./StageNodeHandles.js";
|
|
10
10
|
import { StageNodeHeader } from "./StageNodeHeader.js";
|
|
11
|
+
import { useStageNodeLabels } from "./useStageNodeLabels.js";
|
|
11
12
|
const StageNodeInner = (props)=>{
|
|
12
|
-
const
|
|
13
|
+
const labels = useStageNodeLabels();
|
|
14
|
+
const { dragging, selected, id, width, execution, stageDetails, taskOptions = [], menuItems, pendingReplaceTask, onStageClick, onTaskAdd, onAddTaskFromToolbox, onTaskToolboxSearch, onReplaceTaskFromToolbox } = props;
|
|
13
15
|
const taskWidth = width ? width - STAGE_CONTENT_INSET : void 0;
|
|
14
16
|
const allTasks = useMemo(()=>stageDetails?.tasks || [], [
|
|
15
17
|
stageDetails?.tasks
|
|
@@ -139,7 +141,7 @@ const StageNodeInner = (props)=>{
|
|
|
139
141
|
nodeId: id,
|
|
140
142
|
offset: 15,
|
|
141
143
|
children: /*#__PURE__*/ jsx(Toolbox, {
|
|
142
|
-
title:
|
|
144
|
+
title: labels.addTask,
|
|
143
145
|
initialItems: taskOptions,
|
|
144
146
|
onClose: ()=>setIsAddingTask(false),
|
|
145
147
|
onItemSelect: handleAddTaskToolboxItemSelected,
|
|
@@ -151,7 +153,7 @@ const StageNodeInner = (props)=>{
|
|
|
151
153
|
nodeId: id,
|
|
152
154
|
offset: 15,
|
|
153
155
|
children: /*#__PURE__*/ jsx(Toolbox, {
|
|
154
|
-
title:
|
|
156
|
+
title: labels.replaceTask,
|
|
155
157
|
initialItems: taskOptions,
|
|
156
158
|
onClose: ()=>setIsReplacingTask(false),
|
|
157
159
|
onItemSelect: handleReplaceTaskToolboxItemSelected,
|
|
@@ -44,11 +44,9 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
44
44
|
StageParallelLabel: ()=>StageParallelLabel,
|
|
45
45
|
StageTaskIcon: ()=>StageTaskIcon,
|
|
46
46
|
StageParallelBracket: ()=>StageParallelBracket,
|
|
47
|
-
StageTitleInput: ()=>StageTitleInput,
|
|
48
47
|
STAGE_BORDER_WIDTH: ()=>STAGE_BORDER_WIDTH,
|
|
49
48
|
StageTaskDragPlaceholder: ()=>StageTaskDragPlaceholder,
|
|
50
49
|
StageTaskGroupContainer: ()=>StageTaskGroupContainer,
|
|
51
|
-
StageTitleContainer: ()=>StageTitleContainer,
|
|
52
50
|
INDENTATION_WIDTH: ()=>INDENTATION_WIDTH,
|
|
53
51
|
StageTaskList: ()=>StageTaskList,
|
|
54
52
|
StageHeader: ()=>StageHeader,
|
|
@@ -108,43 +106,13 @@ const StageContainer = styled_default().div`
|
|
|
108
106
|
const StageHeader = styled_default().div`
|
|
109
107
|
position: relative;
|
|
110
108
|
display: flex;
|
|
111
|
-
|
|
109
|
+
flex-direction: column;
|
|
112
110
|
padding: ${apollo_core_namespaceObject.Spacing.SpacingS} ${apollo_core_namespaceObject.Spacing.SpacingBase};
|
|
113
111
|
border-bottom: solid 1px var(--canvas-border-de-emp);
|
|
114
112
|
background: ${(props)=>props.isException ? 'var(--color-background-secondary)' : 'var(--canvas-background)'};
|
|
115
113
|
border-radius: ${apollo_core_namespaceObject.Spacing.SpacingBase} ${apollo_core_namespaceObject.Spacing.SpacingBase} 0 0;
|
|
116
114
|
overflow: hidden;
|
|
117
115
|
`;
|
|
118
|
-
const StageTitleContainer = styled_default().div`
|
|
119
|
-
display: block;
|
|
120
|
-
border-radius: 4px;
|
|
121
|
-
height: 100%;
|
|
122
|
-
width: 100%;
|
|
123
|
-
box-sizing: border-box;
|
|
124
|
-
border: ${(props)=>props.isEditing ? '1px solid var(--canvas-border-de-emp)' : 'none'};
|
|
125
|
-
`;
|
|
126
|
-
const StageTitleInput = styled_default().input`
|
|
127
|
-
font-family: inherit;
|
|
128
|
-
font-size: inherit;
|
|
129
|
-
font-weight: inherit;
|
|
130
|
-
cursor: text;
|
|
131
|
-
border: none;
|
|
132
|
-
background: transparent;
|
|
133
|
-
text-overflow: ellipsis;
|
|
134
|
-
border-radius: 2px;
|
|
135
|
-
width: 100%;
|
|
136
|
-
min-width: 100px;
|
|
137
|
-
padding: ${apollo_core_namespaceObject.Padding.PadS} 0px;
|
|
138
|
-
|
|
139
|
-
&:focus {
|
|
140
|
-
outline: none;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
&:hover {
|
|
144
|
-
cursor: ${(props)=>props.isStageTitleEditable ? 'text' : 'pointer'};
|
|
145
|
-
background: ${(props)=>props.isEditing || props.isStageTitleEditable ? 'var(--canvas-background-secondary)' : 'transparent'};
|
|
146
|
-
}
|
|
147
|
-
`;
|
|
148
116
|
const StageContent = styled_default().div`
|
|
149
117
|
padding: 15px ${STAGE_CONTENT_PADDING_X}px ${apollo_core_namespaceObject.Spacing.SpacingBase} ${STAGE_CONTENT_PADDING_X}px;
|
|
150
118
|
border-radius: 0 0 ${apollo_core_namespaceObject.Spacing.SpacingBase} ${apollo_core_namespaceObject.Spacing.SpacingBase};
|
|
@@ -200,7 +168,8 @@ const StageTask = styled_default().div`
|
|
|
200
168
|
gap: ${apollo_core_namespaceObject.Spacing.SpacingXs};
|
|
201
169
|
padding: ${apollo_core_namespaceObject.Padding.PadS} ${apollo_core_namespaceObject.Padding.PadM};
|
|
202
170
|
background: var(--canvas-background);
|
|
203
|
-
border: 1px
|
|
171
|
+
border: 1px ${({ isPlaceholder })=>isPlaceholder ? 'dashed' : 'solid'}
|
|
172
|
+
var(--canvas-border-de-emp);
|
|
204
173
|
border-radius: ${apollo_core_namespaceObject.Spacing.SpacingXs};
|
|
205
174
|
color: var(--canvas-foreground);
|
|
206
175
|
transition: all 0.2s ease;
|
|
@@ -340,8 +309,6 @@ exports.StageTaskIcon = __webpack_exports__.StageTaskIcon;
|
|
|
340
309
|
exports.StageTaskList = __webpack_exports__.StageTaskList;
|
|
341
310
|
exports.StageTaskRetryDuration = __webpack_exports__.StageTaskRetryDuration;
|
|
342
311
|
exports.StageTaskWrapper = __webpack_exports__.StageTaskWrapper;
|
|
343
|
-
exports.StageTitleContainer = __webpack_exports__.StageTitleContainer;
|
|
344
|
-
exports.StageTitleInput = __webpack_exports__.StageTitleInput;
|
|
345
312
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
346
313
|
"INDENTATION_WIDTH",
|
|
347
314
|
"STAGE_BORDER_WIDTH",
|
|
@@ -363,9 +330,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
363
330
|
"StageTaskIcon",
|
|
364
331
|
"StageTaskList",
|
|
365
332
|
"StageTaskRetryDuration",
|
|
366
|
-
"StageTaskWrapper"
|
|
367
|
-
"StageTitleContainer",
|
|
368
|
-
"StageTitleInput"
|
|
333
|
+
"StageTaskWrapper"
|
|
369
334
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
370
335
|
Object.defineProperty(exports, '__esModule', {
|
|
371
336
|
value: true
|
|
@@ -17,20 +17,6 @@ export declare const StageHeader: import("@emotion/styled").StyledComponent<{
|
|
|
17
17
|
} & {
|
|
18
18
|
isException?: boolean;
|
|
19
19
|
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
20
|
-
export declare const StageTitleContainer: import("@emotion/styled").StyledComponent<{
|
|
21
|
-
theme?: import("@emotion/react").Theme;
|
|
22
|
-
as?: React.ElementType;
|
|
23
|
-
} & {
|
|
24
|
-
isEditing?: boolean;
|
|
25
|
-
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
26
|
-
export declare const StageTitleInput: import("@emotion/styled").StyledComponent<{
|
|
27
|
-
theme?: import("@emotion/react").Theme;
|
|
28
|
-
as?: React.ElementType;
|
|
29
|
-
} & {
|
|
30
|
-
isEditing?: boolean;
|
|
31
|
-
isStageTitleEditable?: boolean;
|
|
32
|
-
value?: string;
|
|
33
|
-
}, import("react").DetailedHTMLProps<import("react").InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, {}>;
|
|
34
20
|
export declare const StageContent: import("@emotion/styled").StyledComponent<{
|
|
35
21
|
theme?: import("@emotion/react").Theme;
|
|
36
22
|
as?: React.ElementType;
|
|
@@ -67,6 +53,7 @@ export declare const StageTask: import("@emotion/styled").StyledComponent<{
|
|
|
67
53
|
selected?: boolean;
|
|
68
54
|
isParallel?: boolean;
|
|
69
55
|
isDragEnabled?: boolean;
|
|
56
|
+
isPlaceholder?: boolean;
|
|
70
57
|
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
71
58
|
export declare const StageTaskIcon: import("@emotion/styled").StyledComponent<{
|
|
72
59
|
theme?: import("@emotion/react").Theme;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StageNode.styles.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.styles.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,mBAAmB,QAAuD,CAAC;AAExF,eAAO,MAAM,cAAc;;;;eACd,OAAO;aACT,WAAW;YACZ,MAAM;yGAqDf,CAAC;AAEF,eAAO,MAAM,WAAW;;;;kBAA8B,OAAO;yGAS5D,CAAC;AAEF,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"StageNode.styles.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StageNode/StageNode.styles.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,mBAAmB,QAAuD,CAAC;AAExF,eAAO,MAAM,cAAc;;;;eACd,OAAO;aACT,WAAW;YACZ,MAAM;yGAqDf,CAAC;AAEF,eAAO,MAAM,WAAW;;;;kBAA8B,OAAO;yGAS5D,CAAC;AAEF,eAAO,MAAM,YAAY;;;yGAQxB,CAAC;AAEF,eAAO,MAAM,aAAa;;;yGAKzB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;iBAA6B,OAAO;yGAMvE,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;yGAa9B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;yGAMhC,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;iBAA6B,OAAO;yGAKhE,CAAC;AAEF,eAAO,MAAM,SAAS;;;;aACX,WAAW;eACT,OAAO;iBACL,OAAO;oBACJ,OAAO;oBACP,OAAO;yGA8DxB,CAAC;AAEF,eAAO,MAAM,aAAa;;;yGAYzB,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;aAAyB,SAAS,GAAG,MAAM,GAAG,OAAO;yGAoBvF,CAAC;AAEF,eAAO,MAAM,+BAA+B;;;yGAG3C,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;yGAK/B,CAAC;AAEF,eAAO,MAAM,SAAS;;;qHAoBrB,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;yGAIvC,CAAC;AAEF,eAAO,MAAM,iCAAiC;;;yGAI7C,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;;uBAAmC,OAAO;yGAW9E,CAAC"}
|