@uipath/apollo-react 6.26.0 → 6.28.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.
- package/dist/canvas/components/AgentCanvas/AgentFlow.cjs +4 -3
- package/dist/canvas/components/AgentCanvas/AgentFlow.d.ts.map +1 -1
- package/dist/canvas/components/AgentCanvas/AgentFlow.js +4 -3
- package/dist/canvas/components/AgentCanvas/nodes/AgentNode.cjs +13 -9
- package/dist/canvas/components/AgentCanvas/nodes/AgentNode.d.ts.map +1 -1
- package/dist/canvas/components/AgentCanvas/nodes/AgentNode.js +13 -9
- package/dist/canvas/components/AgentCanvas/nodes/AgentNode.styles.cjs +1 -1
- package/dist/canvas/components/AgentCanvas/nodes/AgentNode.styles.d.ts +2 -0
- package/dist/canvas/components/AgentCanvas/nodes/AgentNode.styles.d.ts.map +1 -1
- package/dist/canvas/components/AgentCanvas/nodes/AgentNode.styles.js +1 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.cjs +27 -3
- package/dist/canvas/components/BaseCanvas/BaseCanvas.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.cjs +21 -3
- package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.d.ts +1 -0
- package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.js +18 -3
- package/dist/canvas/components/BaseCanvas/BaseCanvas.js +28 -4
- package/dist/canvas/components/BaseCanvas/BaseCanvas.stories.fixtures.cjs +87 -0
- package/dist/canvas/components/BaseCanvas/BaseCanvas.stories.fixtures.d.ts +4 -0
- package/dist/canvas/components/BaseCanvas/BaseCanvas.stories.fixtures.d.ts.map +1 -0
- package/dist/canvas/components/BaseCanvas/BaseCanvas.stories.fixtures.js +53 -0
- package/dist/canvas/components/BaseCanvas/BaseCanvas.types.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/ReadOnlyNodesContext.cjs +30 -3
- package/dist/canvas/components/BaseCanvas/ReadOnlyNodesContext.d.ts +3 -0
- package/dist/canvas/components/BaseCanvas/ReadOnlyNodesContext.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/ReadOnlyNodesContext.js +21 -3
- package/dist/canvas/components/BaseCanvas/index.cjs +43 -32
- package/dist/canvas/components/BaseCanvas/index.d.ts +1 -1
- package/dist/canvas/components/BaseCanvas/index.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/index.js +2 -2
- package/dist/canvas/components/BaseCanvas/useReadOnlyConnectionCallbacks.cjs +87 -0
- package/dist/canvas/components/BaseCanvas/useReadOnlyConnectionCallbacks.d.ts +13 -0
- package/dist/canvas/components/BaseCanvas/useReadOnlyConnectionCallbacks.d.ts.map +1 -0
- package/dist/canvas/components/BaseCanvas/useReadOnlyConnectionCallbacks.js +53 -0
- package/dist/canvas/components/BaseNode/BaseNode.cjs +2 -14
- package/dist/canvas/components/BaseNode/BaseNode.d.ts.map +1 -1
- package/dist/canvas/components/BaseNode/BaseNode.js +2 -14
- package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.cjs +2 -1
- package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts +1 -0
- package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts.map +1 -1
- package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.js +2 -1
- package/dist/canvas/components/LoopNode/LoopNode.cjs +13 -5
- package/dist/canvas/components/LoopNode/LoopNode.d.ts.map +1 -1
- package/dist/canvas/components/LoopNode/LoopNode.js +13 -5
- package/dist/canvas/components/StageNode/StageNode.cjs +15 -11
- package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
- package/dist/canvas/components/StageNode/StageNode.js +15 -11
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.cjs +29 -6
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts.map +1 -1
- package/dist/canvas/components/StickyNoteNode/StickyNoteNode.js +29 -6
- package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.cjs +21 -3
- package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.d.ts.map +1 -1
- package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.js +21 -3
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.cjs +18 -2
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.d.ts +2 -0
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.d.ts.map +1 -1
- package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.js +14 -1
- package/dist/canvas/storybook-utils/components/StoryPage.d.ts +15 -1
- package/dist/canvas/storybook-utils/components/StoryPage.d.ts.map +1 -1
- package/dist/canvas/styles/tailwind.canvas.css +1 -1
- package/dist/canvas/types.d.ts +1 -0
- package/dist/canvas/types.d.ts.map +1 -1
- package/dist/canvas/utils/createPreviewGraph.cjs +13 -8
- package/dist/canvas/utils/createPreviewGraph.d.ts +5 -2
- package/dist/canvas/utils/createPreviewGraph.d.ts.map +1 -1
- package/dist/canvas/utils/createPreviewGraph.js +13 -8
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StickyNoteNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAM1E,OAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"StickyNoteNode.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/StickyNoteNode/StickyNoteNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAM1E,OAAsB,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAiDhE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EAEd,0BAA0B,EAE3B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,mBAAoB,SAAQ,SAAS;IACpD,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;IAC1D,kBAAkB,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;CAC5C;AAsvBD,eAAO,MAAM,cAAc,iUAztBxB,mBAAmB,6CAytBwE,CAAC"}
|
|
@@ -12,9 +12,11 @@ import { useSafeLingui } from "../../../i18n/index.js";
|
|
|
12
12
|
import { GRID_SPACING } from "../../constants.js";
|
|
13
13
|
import { useLatestRef } from "../../hooks/useLatestRef.js";
|
|
14
14
|
import { areNodePropsEqualIgnoringPosition } from "../../utils/nodePropsEqual.js";
|
|
15
|
+
import { useIsNodeReadOnly } from "../BaseCanvas/ReadOnlyNodesContext.js";
|
|
15
16
|
import { useSelectionState } from "../BaseCanvas/SelectionStateContext.js";
|
|
16
17
|
import { NodeViewportOverlay } from "../NodeViewportOverlay.js";
|
|
17
18
|
import { NodeToolbar } from "../Toolbar/index.js";
|
|
19
|
+
import { lockToolbarConfig } from "../Toolbar/NodeToolbar/NodeToolbar.utils.js";
|
|
18
20
|
import { FormattingToolbar } from "./FormattingToolbar.js";
|
|
19
21
|
import { activeFormatsEqual, continueListOnEnter, detectActiveFormats } from "./markdown-formatting/index.js";
|
|
20
22
|
import { useStickyNoteCanvasOptions } from "./StickyNoteCanvasOptionsContext.js";
|
|
@@ -31,7 +33,9 @@ const minHeight = 8 * GRID_SPACING;
|
|
|
31
33
|
const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = 'Add text', renderPlaceholderOnSelect = false, readOnly: readOnlyProp, onContentChange, onColorChange, onResize, onResizeStart, onResizeEnd, enableMediaEmbedding: enableMediaEmbeddingProp, formattingActions, markdownComponents: customMarkdownComponents })=>{
|
|
32
34
|
const { _ } = useSafeLingui();
|
|
33
35
|
const canvasOptions = useStickyNoteCanvasOptions();
|
|
34
|
-
const
|
|
36
|
+
const isNodeReadOnly = useIsNodeReadOnly(id);
|
|
37
|
+
const stickyNoteReadOnly = readOnlyProp ?? canvasOptions.readOnly;
|
|
38
|
+
const readOnly = isNodeReadOnly || stickyNoteReadOnly;
|
|
35
39
|
const enableMediaEmbedding = enableMediaEmbeddingProp ?? canvasOptions.enableMediaEmbedding;
|
|
36
40
|
const { updateNodeData, deleteElements } = useReactFlow();
|
|
37
41
|
const { multipleNodesSelected } = useSelectionState();
|
|
@@ -45,6 +49,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
45
49
|
const formattingToolbarRef = useRef(null);
|
|
46
50
|
const skipBlurRef = useRef(null);
|
|
47
51
|
const resizeActiveRef = useRef(false);
|
|
52
|
+
const readOnlyRef = useLatestRef(readOnly);
|
|
48
53
|
const resizeLifecycle = {
|
|
49
54
|
content: data.content,
|
|
50
55
|
id,
|
|
@@ -115,6 +120,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
115
120
|
useEffect(()=>{
|
|
116
121
|
if (readOnly) {
|
|
117
122
|
setIsEditing(false);
|
|
123
|
+
setIsColorPickerOpen(false);
|
|
118
124
|
updateLocalContent(data.content || '');
|
|
119
125
|
}
|
|
120
126
|
}, [
|
|
@@ -184,6 +190,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
184
190
|
skipBlurRef.current = selection.value;
|
|
185
191
|
let completed = false;
|
|
186
192
|
const restoreSelection = (next)=>{
|
|
193
|
+
if (readOnlyRef.current) return;
|
|
187
194
|
setIsEditing(true);
|
|
188
195
|
requestAnimationFrame(()=>{
|
|
189
196
|
const currentTextarea = textAreaRef.current;
|
|
@@ -197,6 +204,10 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
197
204
|
const complete = (next, shouldPersist)=>{
|
|
198
205
|
if (completed) return;
|
|
199
206
|
completed = true;
|
|
207
|
+
if (readOnlyRef.current) {
|
|
208
|
+
skipBlurRef.current = null;
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
200
211
|
skipBlurRef.current = shouldPersist ? next.value : null;
|
|
201
212
|
setActiveFormats(detectActiveFormats(next));
|
|
202
213
|
if (shouldPersist) {
|
|
@@ -233,6 +244,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
233
244
|
}, [
|
|
234
245
|
id,
|
|
235
246
|
onContentChange,
|
|
247
|
+
readOnlyRef,
|
|
236
248
|
updateLocalContent,
|
|
237
249
|
updateNodeData
|
|
238
250
|
]);
|
|
@@ -397,6 +409,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
397
409
|
resizeLifecycleRef
|
|
398
410
|
]);
|
|
399
411
|
const handleColorChange = useCallback((newColor)=>{
|
|
412
|
+
if (readOnly) return;
|
|
400
413
|
onColorChange?.(newColor);
|
|
401
414
|
updateNodeData(id, {
|
|
402
415
|
color: newColor
|
|
@@ -405,11 +418,15 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
405
418
|
}, [
|
|
406
419
|
id,
|
|
407
420
|
updateNodeData,
|
|
408
|
-
onColorChange
|
|
421
|
+
onColorChange,
|
|
422
|
+
readOnly
|
|
409
423
|
]);
|
|
410
424
|
const handleToggleColorPicker = useCallback(()=>{
|
|
425
|
+
if (readOnly) return;
|
|
411
426
|
setIsColorPickerOpen((prev)=>!prev);
|
|
412
|
-
}, [
|
|
427
|
+
}, [
|
|
428
|
+
readOnly
|
|
429
|
+
]);
|
|
413
430
|
const handleEditClick = useCallback(()=>{
|
|
414
431
|
if (readOnly) return;
|
|
415
432
|
setIsEditing(true);
|
|
@@ -423,6 +440,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
423
440
|
readOnly
|
|
424
441
|
]);
|
|
425
442
|
const handleDelete = useCallback(()=>{
|
|
443
|
+
if (readOnly) return;
|
|
426
444
|
deleteElements({
|
|
427
445
|
nodes: [
|
|
428
446
|
{
|
|
@@ -432,7 +450,8 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
432
450
|
});
|
|
433
451
|
}, [
|
|
434
452
|
id,
|
|
435
|
-
deleteElements
|
|
453
|
+
deleteElements,
|
|
454
|
+
readOnly
|
|
436
455
|
]);
|
|
437
456
|
const builtInMarkdownComponents = useMemo(()=>({
|
|
438
457
|
a: ({ node: _node, href, children, ...props })=>/*#__PURE__*/ jsx("a", {
|
|
@@ -540,7 +559,11 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
540
559
|
color,
|
|
541
560
|
handleDelete
|
|
542
561
|
]);
|
|
543
|
-
const
|
|
562
|
+
const effectiveToolbarConfig = useMemo(()=>isNodeReadOnly ? lockToolbarConfig(toolbarConfig) : toolbarConfig, [
|
|
563
|
+
isNodeReadOnly,
|
|
564
|
+
toolbarConfig
|
|
565
|
+
]);
|
|
566
|
+
const shouldRenderToolbarOverlay = !stickyNoteReadOnly && selected && !dragging && !isResizing && !multipleNodesSelected;
|
|
544
567
|
const shouldRenderResizeControls = !readOnly || isResizing;
|
|
545
568
|
return /*#__PURE__*/ jsxs(Fragment, {
|
|
546
569
|
children: [
|
|
@@ -687,7 +710,7 @@ const StickyNoteNodeComponent = ({ id, data, selected, dragging, placeholder = '
|
|
|
687
710
|
}),
|
|
688
711
|
shouldRenderToolbarOverlay && /*#__PURE__*/ jsx(NodeToolbar, {
|
|
689
712
|
nodeId: id,
|
|
690
|
-
config:
|
|
713
|
+
config: effectiveToolbarConfig,
|
|
691
714
|
expanded: true,
|
|
692
715
|
portalToNodeOverlay: true
|
|
693
716
|
}),
|
|
@@ -33,13 +33,20 @@ const useCanvasNodeLayout_cjs_namespaceObject = require("../../../hooks/useCanva
|
|
|
33
33
|
const createPreviewGraph_cjs_namespaceObject = require("../../../utils/createPreviewGraph.cjs");
|
|
34
34
|
const createPreviewNode_cjs_namespaceObject = require("../../../utils/createPreviewNode.cjs");
|
|
35
35
|
const BaseCanvasModeProvider_cjs_namespaceObject = require("../../BaseCanvas/BaseCanvasModeProvider.cjs");
|
|
36
|
+
const ReadOnlyNodesContext_cjs_namespaceObject = require("../../BaseCanvas/ReadOnlyNodesContext.cjs");
|
|
36
37
|
const LoopNode_helpers_cjs_namespaceObject = require("../../LoopNode/LoopNode.helpers.cjs");
|
|
37
38
|
const external_useEdgeToolbarPositioning_cjs_namespaceObject = require("./useEdgeToolbarPositioning.cjs");
|
|
39
|
+
function hasSameConnection(edge, expected) {
|
|
40
|
+
if (!edge) return false;
|
|
41
|
+
return edge.source === expected.source && edge.target === expected.target && (edge.sourceHandle ?? null) === (expected.sourceHandle ?? null) && (edge.targetHandle ?? null) === (expected.targetHandle ?? null);
|
|
42
|
+
}
|
|
38
43
|
function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target, sourceHandleId, targetHandleId, sourcePosition, targetPosition, ignoredNodeTypes }) {
|
|
39
44
|
const reactFlow = (0, react_cjs_namespaceObject.useReactFlow)();
|
|
40
45
|
const { getManifestForNode } = (0, useCanvasNodeLayout_cjs_namespaceObject.useCanvasNodeLayout)();
|
|
41
46
|
const { mode } = (0, BaseCanvasModeProvider_cjs_namespaceObject.useBaseCanvasMode)();
|
|
42
47
|
const isDesignMode = 'design' === mode;
|
|
48
|
+
const isFrozenConnection = (0, ReadOnlyNodesContext_cjs_namespaceObject.useIsConnectionReadOnly)(source, target);
|
|
49
|
+
const isConnectionReadOnlyNow = (0, ReadOnlyNodesContext_cjs_namespaceObject.useReadOnlyConnectionCheck)();
|
|
43
50
|
const previewEdge = (0, createPreviewNode_cjs_namespaceObject.isPreviewEdge)({
|
|
44
51
|
id: edgeId,
|
|
45
52
|
source,
|
|
@@ -52,7 +59,12 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
52
59
|
});
|
|
53
60
|
const handleAddNodeOnEdge = (0, external_react_namespaceObject.useCallback)((position)=>{
|
|
54
61
|
const originalEdge = reactFlow.getEdges().find((edge)=>edge.id === edgeId);
|
|
55
|
-
if (!originalEdge
|
|
62
|
+
if (!hasSameConnection(originalEdge, {
|
|
63
|
+
source,
|
|
64
|
+
sourceHandle: sourceHandleId,
|
|
65
|
+
target,
|
|
66
|
+
targetHandle: targetHandleId
|
|
67
|
+
}) || isConnectionReadOnlyNow(originalEdge.source, originalEdge.target)) return;
|
|
56
68
|
const sourceEndpoint = {
|
|
57
69
|
nodeId: source,
|
|
58
70
|
handleId: sourceHandleId ?? external_constants_cjs_namespaceObject.DEFAULT_SOURCE_HANDLE_ID
|
|
@@ -80,6 +92,11 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
80
92
|
handleId: targetHandleId
|
|
81
93
|
},
|
|
82
94
|
...containerOverrides ?? {}
|
|
95
|
+
}, {
|
|
96
|
+
canApply: (edges)=>{
|
|
97
|
+
const currentEdge = edges.find((edge)=>edge.id === edgeId);
|
|
98
|
+
return hasSameConnection(currentEdge, originalEdge) && !isConnectionReadOnlyNow(currentEdge.source, currentEdge.target);
|
|
99
|
+
}
|
|
83
100
|
});
|
|
84
101
|
}, [
|
|
85
102
|
sourcePosition,
|
|
@@ -90,7 +107,8 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
90
107
|
target,
|
|
91
108
|
targetHandleId,
|
|
92
109
|
edgeId,
|
|
93
|
-
ignoredNodeTypes
|
|
110
|
+
ignoredNodeTypes,
|
|
111
|
+
isConnectionReadOnlyNow
|
|
94
112
|
]);
|
|
95
113
|
const config = (0, external_react_namespaceObject.useMemo)(()=>({
|
|
96
114
|
actions: [
|
|
@@ -107,7 +125,7 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
107
125
|
}), [
|
|
108
126
|
handleAddNodeOnEdge
|
|
109
127
|
]);
|
|
110
|
-
const showToolbar = isHovered && isDesignMode && null !== positionData && !previewEdge;
|
|
128
|
+
const showToolbar = isHovered && isDesignMode && null !== positionData && !previewEdge && !isFrozenConnection;
|
|
111
129
|
return {
|
|
112
130
|
showToolbar,
|
|
113
131
|
toolbarPositioning: positionData,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEdgeToolbarState.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useEdgeToolbarState.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAgB,MAAM,0CAA0C,CAAC;AAYlG,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGtF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACnD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC3D;AAiBD,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,cAAc,EACd,SAAS,EACT,MAAM,EACN,MAAM,EACN,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,EAAE,wBAAwB,GAAG,gBAAgB,CAmH7C"}
|
|
@@ -5,13 +5,20 @@ import { useCanvasNodeLayout } from "../../../hooks/useCanvasNodeLayout.js";
|
|
|
5
5
|
import { showPreviewGraph } from "../../../utils/createPreviewGraph.js";
|
|
6
6
|
import { isPreviewEdge } from "../../../utils/createPreviewNode.js";
|
|
7
7
|
import { useBaseCanvasMode } from "../../BaseCanvas/BaseCanvasModeProvider.js";
|
|
8
|
+
import { useIsConnectionReadOnly, useReadOnlyConnectionCheck } from "../../BaseCanvas/ReadOnlyNodesContext.js";
|
|
8
9
|
import { resolveContainerAddNodePreview } from "../../LoopNode/LoopNode.helpers.js";
|
|
9
10
|
import { useEdgeToolbarPositioning } from "./useEdgeToolbarPositioning.js";
|
|
11
|
+
function hasSameConnection(edge, expected) {
|
|
12
|
+
if (!edge) return false;
|
|
13
|
+
return edge.source === expected.source && edge.target === expected.target && (edge.sourceHandle ?? null) === (expected.sourceHandle ?? null) && (edge.targetHandle ?? null) === (expected.targetHandle ?? null);
|
|
14
|
+
}
|
|
10
15
|
function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target, sourceHandleId, targetHandleId, sourcePosition, targetPosition, ignoredNodeTypes }) {
|
|
11
16
|
const reactFlow = useReactFlow();
|
|
12
17
|
const { getManifestForNode } = useCanvasNodeLayout();
|
|
13
18
|
const { mode } = useBaseCanvasMode();
|
|
14
19
|
const isDesignMode = 'design' === mode;
|
|
20
|
+
const isFrozenConnection = useIsConnectionReadOnly(source, target);
|
|
21
|
+
const isConnectionReadOnlyNow = useReadOnlyConnectionCheck();
|
|
15
22
|
const previewEdge = isPreviewEdge({
|
|
16
23
|
id: edgeId,
|
|
17
24
|
source,
|
|
@@ -24,7 +31,12 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
24
31
|
});
|
|
25
32
|
const handleAddNodeOnEdge = useCallback((position)=>{
|
|
26
33
|
const originalEdge = reactFlow.getEdges().find((edge)=>edge.id === edgeId);
|
|
27
|
-
if (!originalEdge
|
|
34
|
+
if (!hasSameConnection(originalEdge, {
|
|
35
|
+
source,
|
|
36
|
+
sourceHandle: sourceHandleId,
|
|
37
|
+
target,
|
|
38
|
+
targetHandle: targetHandleId
|
|
39
|
+
}) || isConnectionReadOnlyNow(originalEdge.source, originalEdge.target)) return;
|
|
28
40
|
const sourceEndpoint = {
|
|
29
41
|
nodeId: source,
|
|
30
42
|
handleId: sourceHandleId ?? DEFAULT_SOURCE_HANDLE_ID
|
|
@@ -52,6 +64,11 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
52
64
|
handleId: targetHandleId
|
|
53
65
|
},
|
|
54
66
|
...containerOverrides ?? {}
|
|
67
|
+
}, {
|
|
68
|
+
canApply: (edges)=>{
|
|
69
|
+
const currentEdge = edges.find((edge)=>edge.id === edgeId);
|
|
70
|
+
return hasSameConnection(currentEdge, originalEdge) && !isConnectionReadOnlyNow(currentEdge.source, currentEdge.target);
|
|
71
|
+
}
|
|
55
72
|
});
|
|
56
73
|
}, [
|
|
57
74
|
sourcePosition,
|
|
@@ -62,7 +79,8 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
62
79
|
target,
|
|
63
80
|
targetHandleId,
|
|
64
81
|
edgeId,
|
|
65
|
-
ignoredNodeTypes
|
|
82
|
+
ignoredNodeTypes,
|
|
83
|
+
isConnectionReadOnlyNow
|
|
66
84
|
]);
|
|
67
85
|
const config = useMemo(()=>({
|
|
68
86
|
actions: [
|
|
@@ -79,7 +97,7 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
79
97
|
}), [
|
|
80
98
|
handleAddNodeOnEdge
|
|
81
99
|
]);
|
|
82
|
-
const showToolbar = isHovered && isDesignMode && null !== positionData && !previewEdge;
|
|
100
|
+
const showToolbar = isHovered && isDesignMode && null !== positionData && !previewEdge && !isFrozenConnection;
|
|
83
101
|
return {
|
|
84
102
|
showToolbar,
|
|
85
103
|
toolbarPositioning: positionData,
|
|
@@ -24,14 +24,30 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
isSeparator: ()=>isSeparator
|
|
27
|
+
isSeparator: ()=>isSeparator,
|
|
28
|
+
lockToolbarConfig: ()=>lockToolbarConfig
|
|
28
29
|
});
|
|
29
30
|
function isSeparator(item) {
|
|
30
31
|
return 'separator' === item.id;
|
|
31
32
|
}
|
|
33
|
+
function lockToolbarConfig(config) {
|
|
34
|
+
return {
|
|
35
|
+
...config,
|
|
36
|
+
actions: disableActions(config.actions),
|
|
37
|
+
...config.overflowActions && {
|
|
38
|
+
overflowActions: disableActions(config.overflowActions)
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const disableActions = (actions)=>actions.map((action)=>'separator' === action.id ? action : {
|
|
43
|
+
...action,
|
|
44
|
+
disabled: true
|
|
45
|
+
});
|
|
32
46
|
exports.isSeparator = __webpack_exports__.isSeparator;
|
|
47
|
+
exports.lockToolbarConfig = __webpack_exports__.lockToolbarConfig;
|
|
33
48
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
34
|
-
"isSeparator"
|
|
49
|
+
"isSeparator",
|
|
50
|
+
"lockToolbarConfig"
|
|
35
51
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
36
52
|
Object.defineProperty(exports, '__esModule', {
|
|
37
53
|
value: true
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { ExtendedToolbarAction, ToolbarSeparator } from '../shared';
|
|
2
|
+
import type { NodeToolbarConfig } from './NodeToolbar.types';
|
|
2
3
|
export type ProcessedToolbarItem = ExtendedToolbarAction | ToolbarSeparator;
|
|
3
4
|
export declare function isSeparator(item: ProcessedToolbarItem): item is ToolbarSeparator;
|
|
5
|
+
export declare function lockToolbarConfig(config: NodeToolbarConfig): NodeToolbarConfig;
|
|
4
6
|
//# sourceMappingURL=NodeToolbar.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeToolbar.utils.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"NodeToolbar.utils.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAiB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAE5E,wBAAgB,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,IAAI,gBAAgB,CAEhF;AASD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAM9E"}
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
function isSeparator(item) {
|
|
2
2
|
return 'separator' === item.id;
|
|
3
3
|
}
|
|
4
|
-
|
|
4
|
+
function lockToolbarConfig(config) {
|
|
5
|
+
return {
|
|
6
|
+
...config,
|
|
7
|
+
actions: disableActions(config.actions),
|
|
8
|
+
...config.overflowActions && {
|
|
9
|
+
overflowActions: disableActions(config.overflowActions)
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
const disableActions = (actions)=>actions.map((action)=>'separator' === action.id ? action : {
|
|
14
|
+
...action,
|
|
15
|
+
disabled: true
|
|
16
|
+
});
|
|
17
|
+
export { isSeparator, lockToolbarConfig };
|
|
@@ -25,8 +25,22 @@ export interface StoryCardProps {
|
|
|
25
25
|
title: string;
|
|
26
26
|
code?: string;
|
|
27
27
|
description: ReactNode;
|
|
28
|
+
previewClassName?: string;
|
|
28
29
|
}
|
|
29
|
-
export declare function StoryCard({ preview, title, code, description }: StoryCardProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare function StoryCard({ preview, title, code, description, previewClassName }: StoryCardProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare function StoryWideContent({ children }: {
|
|
32
|
+
children?: ReactNode;
|
|
33
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
34
|
+
export interface StoryTab {
|
|
35
|
+
value: string;
|
|
36
|
+
label: string;
|
|
37
|
+
content: ReactNode;
|
|
38
|
+
}
|
|
39
|
+
export interface StoryTabsProps {
|
|
40
|
+
tabs: readonly StoryTab[];
|
|
41
|
+
label?: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function StoryTabs({ tabs, label }: StoryTabsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
30
44
|
export declare function StoryCode({ children }: {
|
|
31
45
|
children: ReactNode;
|
|
32
46
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryPage.d.ts","sourceRoot":"","sources":["../../../../src/canvas/storybook-utils/components/StoryPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAwBvC,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IAEd,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAWhF;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAGD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAc,EAAE,EAAE,iBAAiB,2CAS/F;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAOD,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,4BAA4B,2CAiB9B;AAED,MAAM,WAAW,cAAc;IAE7B,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"StoryPage.d.ts","sourceRoot":"","sources":["../../../../src/canvas/storybook-utils/components/StoryPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAwBvC,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IAEd,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,cAAc,2CAWhF;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAGD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAc,EAAE,EAAE,iBAAiB,2CAS/F;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAOD,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,GACT,EAAE,4BAA4B,2CAiB9B;AAED,MAAM,WAAW,cAAc;IAE7B,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,SAAS,CAAC;IAEvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAGD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,cAAc,2CAahG;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,2CAMtE;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,QAAQ,EAAE,CAAC;IAE1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,KAAqB,EAAE,EAAE,cAAc,kDA2BxE;AAGD,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAE9D;AAGD,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAMnE"}
|