@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.
Files changed (67) hide show
  1. package/dist/canvas/components/AgentCanvas/AgentFlow.cjs +4 -3
  2. package/dist/canvas/components/AgentCanvas/AgentFlow.d.ts.map +1 -1
  3. package/dist/canvas/components/AgentCanvas/AgentFlow.js +4 -3
  4. package/dist/canvas/components/AgentCanvas/nodes/AgentNode.cjs +13 -9
  5. package/dist/canvas/components/AgentCanvas/nodes/AgentNode.d.ts.map +1 -1
  6. package/dist/canvas/components/AgentCanvas/nodes/AgentNode.js +13 -9
  7. package/dist/canvas/components/AgentCanvas/nodes/AgentNode.styles.cjs +1 -1
  8. package/dist/canvas/components/AgentCanvas/nodes/AgentNode.styles.d.ts +2 -0
  9. package/dist/canvas/components/AgentCanvas/nodes/AgentNode.styles.d.ts.map +1 -1
  10. package/dist/canvas/components/AgentCanvas/nodes/AgentNode.styles.js +1 -1
  11. package/dist/canvas/components/BaseCanvas/BaseCanvas.cjs +27 -3
  12. package/dist/canvas/components/BaseCanvas/BaseCanvas.d.ts.map +1 -1
  13. package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.cjs +21 -3
  14. package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.d.ts +1 -0
  15. package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.d.ts.map +1 -1
  16. package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.js +18 -3
  17. package/dist/canvas/components/BaseCanvas/BaseCanvas.js +28 -4
  18. package/dist/canvas/components/BaseCanvas/BaseCanvas.stories.fixtures.cjs +87 -0
  19. package/dist/canvas/components/BaseCanvas/BaseCanvas.stories.fixtures.d.ts +4 -0
  20. package/dist/canvas/components/BaseCanvas/BaseCanvas.stories.fixtures.d.ts.map +1 -0
  21. package/dist/canvas/components/BaseCanvas/BaseCanvas.stories.fixtures.js +53 -0
  22. package/dist/canvas/components/BaseCanvas/BaseCanvas.types.d.ts.map +1 -1
  23. package/dist/canvas/components/BaseCanvas/ReadOnlyNodesContext.cjs +30 -3
  24. package/dist/canvas/components/BaseCanvas/ReadOnlyNodesContext.d.ts +3 -0
  25. package/dist/canvas/components/BaseCanvas/ReadOnlyNodesContext.d.ts.map +1 -1
  26. package/dist/canvas/components/BaseCanvas/ReadOnlyNodesContext.js +21 -3
  27. package/dist/canvas/components/BaseCanvas/index.cjs +43 -32
  28. package/dist/canvas/components/BaseCanvas/index.d.ts +1 -1
  29. package/dist/canvas/components/BaseCanvas/index.d.ts.map +1 -1
  30. package/dist/canvas/components/BaseCanvas/index.js +2 -2
  31. package/dist/canvas/components/BaseCanvas/useReadOnlyConnectionCallbacks.cjs +87 -0
  32. package/dist/canvas/components/BaseCanvas/useReadOnlyConnectionCallbacks.d.ts +13 -0
  33. package/dist/canvas/components/BaseCanvas/useReadOnlyConnectionCallbacks.d.ts.map +1 -0
  34. package/dist/canvas/components/BaseCanvas/useReadOnlyConnectionCallbacks.js +53 -0
  35. package/dist/canvas/components/BaseNode/BaseNode.cjs +2 -14
  36. package/dist/canvas/components/BaseNode/BaseNode.d.ts.map +1 -1
  37. package/dist/canvas/components/BaseNode/BaseNode.js +2 -14
  38. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.cjs +2 -1
  39. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts +1 -0
  40. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts.map +1 -1
  41. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.js +2 -1
  42. package/dist/canvas/components/LoopNode/LoopNode.cjs +13 -5
  43. package/dist/canvas/components/LoopNode/LoopNode.d.ts.map +1 -1
  44. package/dist/canvas/components/LoopNode/LoopNode.js +13 -5
  45. package/dist/canvas/components/StageNode/StageNode.cjs +15 -11
  46. package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
  47. package/dist/canvas/components/StageNode/StageNode.js +15 -11
  48. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.cjs +29 -6
  49. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts.map +1 -1
  50. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.js +29 -6
  51. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.cjs +21 -3
  52. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.d.ts.map +1 -1
  53. package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.js +21 -3
  54. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.cjs +18 -2
  55. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.d.ts +2 -0
  56. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.d.ts.map +1 -1
  57. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.js +14 -1
  58. package/dist/canvas/storybook-utils/components/StoryPage.d.ts +15 -1
  59. package/dist/canvas/storybook-utils/components/StoryPage.d.ts.map +1 -1
  60. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  61. package/dist/canvas/types.d.ts +1 -0
  62. package/dist/canvas/types.d.ts.map +1 -1
  63. package/dist/canvas/utils/createPreviewGraph.cjs +13 -8
  64. package/dist/canvas/utils/createPreviewGraph.d.ts +5 -2
  65. package/dist/canvas/utils/createPreviewGraph.d.ts.map +1 -1
  66. package/dist/canvas/utils/createPreviewGraph.js +13 -8
  67. 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;AA+ChE,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;AA4tBD,eAAO,MAAM,cAAc,iUA/rBxB,mBAAmB,6CA+rBwE,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 readOnly = readOnlyProp ?? canvasOptions.readOnly;
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 shouldRenderToolbarOverlay = !readOnly && selected && !dragging && !isResizing && !multipleNodesSelected;
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: toolbarConfig,
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) return;
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,EAAE,KAAK,QAAQ,EAAgB,MAAM,0CAA0C,CAAC;AAQvF,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;AAED,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,CAyF7C"}
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) return;
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,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,gBAAgB,CAAC;AAE5E,wBAAgB,WAAW,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,IAAI,gBAAgB,CAEhF"}
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
- export { isSeparator };
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;CACxB;AAGD,wBAAgB,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,cAAc,2CAa9E;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"}
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"}