@uipath/apollo-react 6.25.0 → 6.27.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 (55) 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 +15 -2
  12. package/dist/canvas/components/BaseCanvas/BaseCanvas.d.ts.map +1 -1
  13. package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.cjs +33 -1
  14. package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.d.ts +2 -1
  15. package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.d.ts.map +1 -1
  16. package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.js +31 -2
  17. package/dist/canvas/components/BaseCanvas/BaseCanvas.js +16 -3
  18. package/dist/canvas/components/BaseCanvas/BaseCanvas.types.d.ts.map +1 -1
  19. package/dist/canvas/components/BaseCanvas/index.cjs +54 -17
  20. package/dist/canvas/components/BaseCanvas/index.d.ts +1 -1
  21. package/dist/canvas/components/BaseCanvas/index.d.ts.map +1 -1
  22. package/dist/canvas/components/BaseCanvas/index.js +2 -2
  23. package/dist/canvas/components/BaseNode/BaseNode.cjs +20 -10
  24. package/dist/canvas/components/BaseNode/BaseNode.d.ts.map +1 -1
  25. package/dist/canvas/components/BaseNode/BaseNode.js +20 -10
  26. package/dist/canvas/components/BaseNode/NodeLabel.cjs +17 -11
  27. package/dist/canvas/components/BaseNode/NodeLabel.d.ts +2 -1
  28. package/dist/canvas/components/BaseNode/NodeLabel.d.ts.map +1 -1
  29. package/dist/canvas/components/BaseNode/NodeLabel.js +17 -11
  30. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.cjs +2 -1
  31. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts +1 -0
  32. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.d.ts.map +1 -1
  33. package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvas.js +2 -1
  34. package/dist/canvas/components/LoopNode/LoopNode.cjs +13 -5
  35. package/dist/canvas/components/LoopNode/LoopNode.d.ts.map +1 -1
  36. package/dist/canvas/components/LoopNode/LoopNode.js +13 -5
  37. package/dist/canvas/components/StageNode/StageNode.cjs +15 -11
  38. package/dist/canvas/components/StageNode/StageNode.d.ts.map +1 -1
  39. package/dist/canvas/components/StageNode/StageNode.js +15 -11
  40. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.cjs +29 -6
  41. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.d.ts.map +1 -1
  42. package/dist/canvas/components/StickyNoteNode/StickyNoteNode.js +29 -6
  43. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.cjs +18 -2
  44. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.d.ts +2 -0
  45. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.d.ts.map +1 -1
  46. package/dist/canvas/components/Toolbar/NodeToolbar/NodeToolbar.utils.js +14 -1
  47. package/dist/canvas/components/Toolbar/shared/ToolbarButton.cjs +28 -23
  48. package/dist/canvas/components/Toolbar/shared/ToolbarButton.d.ts.map +1 -1
  49. package/dist/canvas/components/Toolbar/shared/ToolbarButton.js +28 -23
  50. package/dist/canvas/storybook-utils/components/StoryPage.d.ts +15 -1
  51. package/dist/canvas/storybook-utils/components/StoryPage.d.ts.map +1 -1
  52. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  53. package/dist/canvas/types.d.ts +1 -0
  54. package/dist/canvas/types.d.ts.map +1 -1
  55. package/package.json +1 -1
@@ -43,10 +43,12 @@ const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
43
43
  const external_lucide_react_namespaceObject = require("lucide-react");
44
44
  const external_react_namespaceObject = require("react");
45
45
  const external_BaseCanvas_index_cjs_namespaceObject = require("../BaseCanvas/index.cjs");
46
+ const NodeRegistryProvider_cjs_namespaceObject = require("../../core/NodeRegistryProvider.cjs");
46
47
  const external_types_cjs_namespaceObject = require("../../types.cjs");
47
48
  const props_helpers_cjs_namespaceObject = require("../../utils/props-helpers.cjs");
48
49
  const external_CanvasPositionControls_cjs_namespaceObject = require("../CanvasPositionControls.cjs");
49
50
  const external_StickyNoteNode_index_cjs_namespaceObject = require("../StickyNoteNode/index.cjs");
51
+ const external_agent_flow_manifest_cjs_namespaceObject = require("./agent-flow.manifest.cjs");
50
52
  const PaneContextMenu_cjs_namespaceObject = require("./components/PaneContextMenu.cjs");
51
53
  const SuggestionGroupPanel_cjs_namespaceObject = require("./components/SuggestionGroupPanel.cjs");
52
54
  const TimelinePlayer_cjs_namespaceObject = require("./components/TimelinePlayer.cjs");
@@ -55,8 +57,6 @@ const Edge_cjs_namespaceObject = require("./edges/Edge.cjs");
55
57
  const AgentNode_cjs_namespaceObject = require("./nodes/AgentNode.cjs");
56
58
  const ResourceNode_cjs_namespaceObject = require("./nodes/ResourceNode.cjs");
57
59
  const agent_flow_store_cjs_namespaceObject = require("./store/agent-flow-store.cjs");
58
- const NodeRegistryProvider_cjs_namespaceObject = require("../../core/NodeRegistryProvider.cjs");
59
- const external_agent_flow_manifest_cjs_namespaceObject = require("./agent-flow.manifest.cjs");
60
60
  const ToolbarContainer = styled_default().div`
61
61
  display: flex;
62
62
  align-items: center;
@@ -166,7 +166,7 @@ const createResourceNodeWrapper = (opts)=>(props)=>{
166
166
  suggestionGroupVersion: opts.suggestionGroupVersion
167
167
  });
168
168
  };
169
- const AgentFlowInner = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(({ children, mode, spans, onEnable, onDisable, onAddBreakpoint, onRemoveBreakpoint, onAddGuardrail, onGoToSource, onErrorAction, onAddResource: _onAddResource, onSelectResource, setSpanForSelectedNode, getNodeFromSelectedSpan, onExpandResource, onCollapseResource, agentNodeTranslations, resourceNodeTranslations, stickyNoteNodeTranslations, canvasTranslations, enableTimelinePlayer, canvasRef, enableMcpTools, enableMemory, enableA2a, enableStickyNotes, enableInstructions, healthScore, onHealthScoreClick, suggestionTranslations, suggestionGroup, onAgentNodePositionChange, onResourceNodePositionChange, onOrganize, onUpdateStickyNote, zoomLevel, onZoomLevelChange })=>{
169
+ const AgentFlowInner = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(({ children, mode, readOnlyNodeIds, spans, onEnable, onDisable, onAddBreakpoint, onRemoveBreakpoint, onAddGuardrail, onGoToSource, onErrorAction, onAddResource: _onAddResource, onSelectResource, setSpanForSelectedNode, getNodeFromSelectedSpan, onExpandResource, onCollapseResource, agentNodeTranslations, resourceNodeTranslations, stickyNoteNodeTranslations, canvasTranslations, enableTimelinePlayer, canvasRef, enableMcpTools, enableMemory, enableA2a, enableStickyNotes, enableInstructions, healthScore, onHealthScoreClick, suggestionTranslations, suggestionGroup, onAgentNodePositionChange, onResourceNodePositionChange, onOrganize, onUpdateStickyNote, zoomLevel, onZoomLevelChange })=>{
170
170
  const { nodes, edges, onNodesChange, onEdgesChange, onConnect, autoArrange, setSelectedNodeId, selectedNodeId, setDragging, expandAgent, collapseAgent, createResourcePlaceholder, actOnSuggestionGroup, currentSuggestionIndex, navigateToNextSuggestion, navigateToPreviousSuggestion, addStickyNote, paneContextMenu, openPaneContextMenu, closePaneContextMenu } = (0, agent_flow_store_cjs_namespaceObject.useAgentFlowStore)();
171
171
  const nodeTypesBase = (0, external_react_namespaceObject.useMemo)(()=>({
172
172
  stickyNote: (props)=>/*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_StickyNoteNode_index_cjs_namespaceObject.StickyNoteNode, {
@@ -449,6 +449,7 @@ const AgentFlowInner = /*#__PURE__*/ (0, external_react_namespaceObject.memo)(({
449
449
  nodeTypes: nodeTypes,
450
450
  edgeTypes: edgeTypes,
451
451
  mode: mode,
452
+ readOnlyNodeIds: readOnlyNodeIds,
452
453
  initialAutoLayout: autoArrange,
453
454
  fitViewOptions: adjustedFitViewOptions,
454
455
  defaultViewport: defaultViewport,
@@ -1 +1 @@
1
- {"version":3,"file":"AgentFlow.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AgentCanvas/AgentFlow.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAI/C,OAAO,EAIL,KAAK,cAAc,EAcpB,MAAM,aAAa,CAAC;AAqsBrB,eAAO,MAAM,SAAS,GAAI,OAAO,iBAAiB,CAAC,cAAc,CAAC,4CAQjE,CAAC"}
1
+ {"version":3,"file":"AgentFlow.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AgentCanvas/AgentFlow.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAI/C,OAAO,EAIL,KAAK,cAAc,EAcpB,MAAM,aAAa,CAAC;AAssBrB,eAAO,MAAM,SAAS,GAAI,OAAO,iBAAiB,CAAC,cAAc,CAAC,4CAQjE,CAAC"}
@@ -5,10 +5,12 @@ import { Panel, useReactFlow } from "../../xyflow/react.js";
5
5
  import { StickyNote } from "lucide-react";
6
6
  import { memo, useCallback, useEffect, useMemo, useRef } from "react";
7
7
  import { BaseCanvas } from "../BaseCanvas/index.js";
8
+ import { NodeRegistryProvider } from "../../core/NodeRegistryProvider.js";
8
9
  import { DefaultAgentNodeTranslations, DefaultCanvasTranslations, DefaultResourceNodeTranslations, DefaultStickyNoteNodeTranslations, DefaultSuggestionTranslations, isAgentFlowAgentNode, isAgentFlowResourceNode, isStickyNoteNode } from "../../types.js";
9
10
  import { hasAgentRunning } from "../../utils/props-helpers.js";
10
11
  import { CanvasPositionControls } from "../CanvasPositionControls.js";
11
12
  import { StickyNoteNode } from "../StickyNoteNode/index.js";
13
+ import { agentFlowManifest } from "./agent-flow.manifest.js";
12
14
  import { PaneContextMenu } from "./components/PaneContextMenu.js";
13
15
  import { SuggestionGroupPanel } from "./components/SuggestionGroupPanel.js";
14
16
  import { TimelinePlayer } from "./components/TimelinePlayer.js";
@@ -17,8 +19,6 @@ import { Edge } from "./edges/Edge.js";
17
19
  import { AgentNodeElement } from "./nodes/AgentNode.js";
18
20
  import { ResourceNode } from "./nodes/ResourceNode.js";
19
21
  import { AgentFlowProvider, useAgentFlowStore } from "./store/agent-flow-store.js";
20
- import { NodeRegistryProvider } from "../../core/NodeRegistryProvider.js";
21
- import { agentFlowManifest } from "./agent-flow.manifest.js";
22
22
  const ToolbarContainer = styled.div`
23
23
  display: flex;
24
24
  align-items: center;
@@ -128,7 +128,7 @@ const createResourceNodeWrapper = (opts)=>(props)=>{
128
128
  suggestionGroupVersion: opts.suggestionGroupVersion
129
129
  });
130
130
  };
131
- const AgentFlowInner = /*#__PURE__*/ memo(({ children, mode, spans, onEnable, onDisable, onAddBreakpoint, onRemoveBreakpoint, onAddGuardrail, onGoToSource, onErrorAction, onAddResource: _onAddResource, onSelectResource, setSpanForSelectedNode, getNodeFromSelectedSpan, onExpandResource, onCollapseResource, agentNodeTranslations, resourceNodeTranslations, stickyNoteNodeTranslations, canvasTranslations, enableTimelinePlayer, canvasRef, enableMcpTools, enableMemory, enableA2a, enableStickyNotes, enableInstructions, healthScore, onHealthScoreClick, suggestionTranslations, suggestionGroup, onAgentNodePositionChange, onResourceNodePositionChange, onOrganize, onUpdateStickyNote, zoomLevel, onZoomLevelChange })=>{
131
+ const AgentFlowInner = /*#__PURE__*/ memo(({ children, mode, readOnlyNodeIds, spans, onEnable, onDisable, onAddBreakpoint, onRemoveBreakpoint, onAddGuardrail, onGoToSource, onErrorAction, onAddResource: _onAddResource, onSelectResource, setSpanForSelectedNode, getNodeFromSelectedSpan, onExpandResource, onCollapseResource, agentNodeTranslations, resourceNodeTranslations, stickyNoteNodeTranslations, canvasTranslations, enableTimelinePlayer, canvasRef, enableMcpTools, enableMemory, enableA2a, enableStickyNotes, enableInstructions, healthScore, onHealthScoreClick, suggestionTranslations, suggestionGroup, onAgentNodePositionChange, onResourceNodePositionChange, onOrganize, onUpdateStickyNote, zoomLevel, onZoomLevelChange })=>{
132
132
  const { nodes, edges, onNodesChange, onEdgesChange, onConnect, autoArrange, setSelectedNodeId, selectedNodeId, setDragging, expandAgent, collapseAgent, createResourcePlaceholder, actOnSuggestionGroup, currentSuggestionIndex, navigateToNextSuggestion, navigateToPreviousSuggestion, addStickyNote, paneContextMenu, openPaneContextMenu, closePaneContextMenu } = useAgentFlowStore();
133
133
  const nodeTypesBase = useMemo(()=>({
134
134
  stickyNote: (props)=>/*#__PURE__*/ jsx(StickyNoteNode, {
@@ -411,6 +411,7 @@ const AgentFlowInner = /*#__PURE__*/ memo(({ children, mode, spans, onEnable, on
411
411
  nodeTypes: nodeTypes,
412
412
  edgeTypes: edgeTypes,
413
413
  mode: mode,
414
+ readOnlyNodeIds: readOnlyNodeIds,
414
415
  initialAutoLayout: autoArrange,
415
416
  fitViewOptions: adjustedFitViewOptions,
416
417
  defaultViewport: defaultViewport,
@@ -32,6 +32,7 @@ const react_cjs_namespaceObject = require("../../../xyflow/react.cjs");
32
32
  const external_react_namespaceObject = require("react");
33
33
  const external_types_cjs_namespaceObject = require("../../../types.cjs");
34
34
  const icon_registry_cjs_namespaceObject = require("../../../utils/icon-registry.cjs");
35
+ const ReadOnlyNodesContext_cjs_namespaceObject = require("../../BaseCanvas/ReadOnlyNodesContext.cjs");
35
36
  const BaseNode_cjs_namespaceObject = require("../../BaseNode/BaseNode.cjs");
36
37
  const BaseNodeConfigContext_cjs_namespaceObject = require("../../BaseNode/BaseNodeConfigContext.cjs");
37
38
  const external_FloatingCanvasPanel_index_cjs_namespaceObject = require("../../FloatingCanvasPanel/index.cjs");
@@ -118,6 +119,8 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
118
119
  hasSuccess,
119
120
  hasRunning
120
121
  ]);
122
+ const isNodeReadOnly = (0, ReadOnlyNodesContext_cjs_namespaceObject.useIsNodeReadOnly)(id);
123
+ const canEditNode = 'design' === mode && !isNodeReadOnly;
121
124
  const displayMemory = true === enableMemory && ('design' === mode || 'view' === mode && hasMemory);
122
125
  const displayContext = 'design' === mode || 'view' === mode && hasContext;
123
126
  const displayEscalation = 'design' === mode || 'view' === mode && hasEscalation;
@@ -135,7 +138,7 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
135
138
  type: 'source',
136
139
  handleType: 'artifact',
137
140
  label: translations.memory,
138
- showButton: 'design' === mode && !hasMemory,
141
+ showButton: canEditNode && !hasMemory,
139
142
  labelBackgroundColor: 'var(--canvas-background-secondary)',
140
143
  visible: displayMemory,
141
144
  onAction: (_e)=>{
@@ -147,7 +150,7 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
147
150
  type: 'source',
148
151
  handleType: 'artifact',
149
152
  label: translations.escalations,
150
- showButton: 'design' === mode,
153
+ showButton: canEditNode,
151
154
  labelBackgroundColor: 'var(--canvas-background-secondary)',
152
155
  visible: displayEscalation,
153
156
  onAction: (_e)=>{
@@ -165,7 +168,7 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
165
168
  type: 'source',
166
169
  handleType: 'artifact',
167
170
  label: translations.context,
168
- showButton: 'design' === mode,
171
+ showButton: canEditNode,
169
172
  labelBackgroundColor: 'var(--canvas-background-secondary)',
170
173
  visible: displayContext,
171
174
  onAction: (_e)=>{
@@ -176,7 +179,7 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
176
179
  type: 'source',
177
180
  handleType: 'artifact',
178
181
  label: translations.tools,
179
- showButton: 'design' === mode,
182
+ showButton: canEditNode,
180
183
  labelBackgroundColor: 'var(--canvas-background-secondary)',
181
184
  visible: displayTool || displayMcp || displayA2a,
182
185
  onAction: (_e)=>{
@@ -193,7 +196,7 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
193
196
  }
194
197
  return configs;
195
198
  }, [
196
- mode,
199
+ canEditNode,
197
200
  displayContext,
198
201
  displayMemory,
199
202
  displayMcp,
@@ -253,10 +256,11 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
253
256
  const hasContent = hasSystem || hasUser;
254
257
  if (hasContent) return {
255
258
  instructionsFooter: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_AgentNode_styles_cjs_namespaceObject.InstructionsPreview, {
256
- onClick: (e)=>{
259
+ $isInteractive: canEditNode,
260
+ onClick: canEditNode ? (e)=>{
257
261
  e.stopPropagation();
258
262
  onAddInstructions?.();
259
- },
263
+ } : void 0,
260
264
  children: [
261
265
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_AgentNode_styles_cjs_namespaceObject.InstructionsLabel, {
262
266
  children: translations.instructions
@@ -291,7 +295,7 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
291
295
  }),
292
296
  footerVariant: hasSystem && hasUser ? 'double' : 'single'
293
297
  };
294
- if ('design' !== mode || !onAddInstructions) return {
298
+ if (!canEditNode || !onAddInstructions) return {
295
299
  instructionsFooter: null,
296
300
  footerVariant: 'none'
297
301
  };
@@ -315,7 +319,7 @@ const AgentNodeComponent = /*#__PURE__*/ (0, external_react_namespaceObject.memo
315
319
  }, [
316
320
  enableInstructions,
317
321
  data.instructions,
318
- mode,
322
+ canEditNode,
319
323
  onAddInstructions,
320
324
  translations
321
325
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"AgentNode.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/AgentCanvas/nodes/AgentNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAIhF,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA8BlE,UAAU,aAAc,SAAQ,YAAY;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,aAAa,GAAG,KAAK,KAAK,IAAI,CAAC;IAClG,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,qBAAqB,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAEhD,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAujBD,eAAO,MAAM,gBAAgB,8CAxDI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,cAAc,6CAwD1B,CAAC;AAEvD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"AgentNode.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/AgentCanvas/nodes/AgentNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAIhF,OAAO,EACL,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACpB,MAAM,gBAAgB,CAAC;AAIxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA8BlE,UAAU,aAAc,SAAQ,YAAY;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,aAAa,GAAG,KAAK,KAAK,IAAI,CAAC;IAClG,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,YAAY,EAAE,qBAAqB,CAAC;IACpC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAEhD,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAikBD,eAAO,MAAM,gBAAgB,8CAxDI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,cAAc,6CAwD1B,CAAC;AAEvD,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC"}
@@ -4,6 +4,7 @@ import { Position } from "../../../xyflow/react.js";
4
4
  import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
5
5
  import { DefaultSuggestionTranslations } from "../../../types.js";
6
6
  import { CanvasIcon } from "../../../utils/icon-registry.js";
7
+ import { useIsNodeReadOnly } from "../../BaseCanvas/ReadOnlyNodesContext.js";
7
8
  import { BaseNode } from "../../BaseNode/BaseNode.js";
8
9
  import { BaseNodeOverrideConfigProvider } from "../../BaseNode/BaseNodeConfigContext.js";
9
10
  import { FloatingCanvasPanel } from "../../FloatingCanvasPanel/index.js";
@@ -90,6 +91,8 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
90
91
  hasSuccess,
91
92
  hasRunning
92
93
  ]);
94
+ const isNodeReadOnly = useIsNodeReadOnly(id);
95
+ const canEditNode = 'design' === mode && !isNodeReadOnly;
93
96
  const displayMemory = true === enableMemory && ('design' === mode || 'view' === mode && hasMemory);
94
97
  const displayContext = 'design' === mode || 'view' === mode && hasContext;
95
98
  const displayEscalation = 'design' === mode || 'view' === mode && hasEscalation;
@@ -107,7 +110,7 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
107
110
  type: 'source',
108
111
  handleType: 'artifact',
109
112
  label: translations.memory,
110
- showButton: 'design' === mode && !hasMemory,
113
+ showButton: canEditNode && !hasMemory,
111
114
  labelBackgroundColor: 'var(--canvas-background-secondary)',
112
115
  visible: displayMemory,
113
116
  onAction: (_e)=>{
@@ -119,7 +122,7 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
119
122
  type: 'source',
120
123
  handleType: 'artifact',
121
124
  label: translations.escalations,
122
- showButton: 'design' === mode,
125
+ showButton: canEditNode,
123
126
  labelBackgroundColor: 'var(--canvas-background-secondary)',
124
127
  visible: displayEscalation,
125
128
  onAction: (_e)=>{
@@ -137,7 +140,7 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
137
140
  type: 'source',
138
141
  handleType: 'artifact',
139
142
  label: translations.context,
140
- showButton: 'design' === mode,
143
+ showButton: canEditNode,
141
144
  labelBackgroundColor: 'var(--canvas-background-secondary)',
142
145
  visible: displayContext,
143
146
  onAction: (_e)=>{
@@ -148,7 +151,7 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
148
151
  type: 'source',
149
152
  handleType: 'artifact',
150
153
  label: translations.tools,
151
- showButton: 'design' === mode,
154
+ showButton: canEditNode,
152
155
  labelBackgroundColor: 'var(--canvas-background-secondary)',
153
156
  visible: displayTool || displayMcp || displayA2a,
154
157
  onAction: (_e)=>{
@@ -165,7 +168,7 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
165
168
  }
166
169
  return configs;
167
170
  }, [
168
- mode,
171
+ canEditNode,
169
172
  displayContext,
170
173
  displayMemory,
171
174
  displayMcp,
@@ -225,10 +228,11 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
225
228
  const hasContent = hasSystem || hasUser;
226
229
  if (hasContent) return {
227
230
  instructionsFooter: /*#__PURE__*/ jsxs(InstructionsPreview, {
228
- onClick: (e)=>{
231
+ $isInteractive: canEditNode,
232
+ onClick: canEditNode ? (e)=>{
229
233
  e.stopPropagation();
230
234
  onAddInstructions?.();
231
- },
235
+ } : void 0,
232
236
  children: [
233
237
  /*#__PURE__*/ jsx(InstructionsLabel, {
234
238
  children: translations.instructions
@@ -263,7 +267,7 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
263
267
  }),
264
268
  footerVariant: hasSystem && hasUser ? 'double' : 'single'
265
269
  };
266
- if ('design' !== mode || !onAddInstructions) return {
270
+ if (!canEditNode || !onAddInstructions) return {
267
271
  instructionsFooter: null,
268
272
  footerVariant: 'none'
269
273
  };
@@ -287,7 +291,7 @@ const AgentNodeComponent = /*#__PURE__*/ memo((props)=>{
287
291
  }, [
288
292
  enableInstructions,
289
293
  data.instructions,
290
- mode,
294
+ canEditNode,
291
295
  onAddInstructions,
292
296
  translations
293
297
  ]);
@@ -91,7 +91,7 @@ const InstructionsPreview = styled_default().div`
91
91
  font-size: 9px;
92
92
  line-height: 13px;
93
93
  color: var(--canvas-foreground-de-emp);
94
- cursor: pointer;
94
+ cursor: ${({ $isInteractive })=>$isInteractive ? 'pointer' : 'default'};
95
95
  `;
96
96
  const InstructionsLine = styled_default().div`
97
97
  white-space: nowrap;
@@ -9,6 +9,8 @@ export declare const InstructionsLabel: import("@emotion/styled").StyledComponen
9
9
  export declare const InstructionsPreview: import("@emotion/styled").StyledComponent<{
10
10
  theme?: import("@emotion/react").Theme;
11
11
  as?: React.ElementType;
12
+ } & {
13
+ $isInteractive: boolean;
12
14
  }, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
13
15
  export declare const InstructionsLine: import("@emotion/styled").StyledComponent<{
14
16
  theme?: import("@emotion/react").Theme;
@@ -1 +1 @@
1
- {"version":3,"file":"AgentNode.styles.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/AgentCanvas/nodes/AgentNode.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB;;;qHAuBjC,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;yGAK7B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;yGAS/B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;yGAQ5B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;yGAOpC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;yGAMjC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;yGAIhC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;yGAGnC,CAAC;AAEF,eAAO,MAAM,eAAe;;;yGAI3B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;yGAIhC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;yGAGhC,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;cAA0B,OAAO;yGA0B9D,CAAC;AAEF,eAAO,MAAM,WAAW;;;yGAKvB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;2GAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;2GAG5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;2GAI7B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;2GAY5B,CAAC"}
1
+ {"version":3,"file":"AgentNode.styles.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/AgentCanvas/nodes/AgentNode.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qBAAqB;;;qHAuBjC,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;yGAK7B,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;;oBAAgC,OAAO;yGAStE,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;yGAQ5B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;;yGAOpC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;yGAMjC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;yGAIhC,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;yGAGnC,CAAC;AAEF,eAAO,MAAM,eAAe;;;yGAI3B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;yGAIhC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;yGAGhC,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;;cAA0B,OAAO;yGA0B9D,CAAC;AAEF,eAAO,MAAM,WAAW;;;yGAKvB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;2GAE5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;2GAG5B,CAAC;AAEF,eAAO,MAAM,iBAAiB;;;2GAI7B,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;2GAY5B,CAAC"}
@@ -37,7 +37,7 @@ const InstructionsPreview = styled.div`
37
37
  font-size: 9px;
38
38
  line-height: 13px;
39
39
  color: var(--canvas-foreground-de-emp);
40
- cursor: pointer;
40
+ cursor: ${({ $isInteractive })=>$isInteractive ? 'pointer' : 'default'};
41
41
  `;
42
42
  const InstructionsLine = styled.div`
43
43
  white-space: nowrap;
@@ -39,10 +39,22 @@ const external_ReadOnlyNodesContext_cjs_namespaceObject = require("./ReadOnlyNod
39
39
  const BaseCanvasInnerComponent = (props)=>{
40
40
  const { innerRef, fitViewOptions: fitViewOptionsProps, ...canvasProps } = props;
41
41
  const fitViewOptions = fitViewOptionsProps ?? external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.fitViewOptions;
42
- const { nodes = [], edges = [], nodeTypes, edgeTypes, children, mode = 'view', readOnlyNodeIds, showBackground = true, backgroundColor = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.color, backgroundSecondaryColor = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.bgColor, backgroundVariant = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.variant, backgroundGap = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.gap, backgroundSize = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.size, isDarkMode, locale, minZoom = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.zoom.min, maxZoom = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.zoom.max, defaultViewport = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.defaultViewport, defaultEdgeOptions = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.edge, stickyNoteOptions, onNodesChange, onEdgesChange, onConnect, onConnectStart, onConnectEnd, onNodeClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onPaneClick, onInit, onSelectionChange, proOptions = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.pro, connectionMode = react_cjs_namespaceObject.ConnectionMode.Loose, connectionLineComponent, connectionLineStyle, deleteKeyCode = null, selectNodesOnDrag = true, nodesDraggable = true, nodesConnectable = true, elementsSelectable = true, onlyRenderVisibleElements = true, zoomOnDoubleClick = true, snapToGrid = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.snapToGrid, snapGrid = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.snapGrid, initialAutoLayout, maintainNodesInView, onToolbarAction, breakpoints, panShortcutTeachingUIMessage = 'Hold Space and drag to pan around the canvas!', ...reactFlowProps } = canvasProps;
42
+ const { nodes = [], edges = [], nodeTypes, edgeTypes, children, mode = 'view', readOnlyNodeIds, showBackground = true, backgroundColor = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.color, backgroundSecondaryColor = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.bgColor, backgroundVariant = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.variant, backgroundGap = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.gap, backgroundSize = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.background.size, isDarkMode, locale, minZoom = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.zoom.min, maxZoom = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.zoom.max, defaultViewport = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.defaultViewport, defaultEdgeOptions = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.edge, stickyNoteOptions, onNodesChange, onEdgesChange, onConnect, onConnectStart, onConnectEnd, onNodeClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onPaneClick, onInit, onSelectionChange, onBeforeDelete, proOptions = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.pro, connectionMode = react_cjs_namespaceObject.ConnectionMode.Loose, connectionLineComponent, connectionLineStyle, deleteKeyCode = null, selectNodesOnDrag = true, nodesDraggable = true, nodesConnectable = true, elementsSelectable = true, onlyRenderVisibleElements = true, zoomOnDoubleClick = true, snapToGrid = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.snapToGrid, snapGrid = external_BaseCanvas_constants_cjs_namespaceObject.BASE_CANVAS_DEFAULTS.snapGrid, initialAutoLayout, maintainNodesInView, onToolbarAction, breakpoints, panShortcutTeachingUIMessage = 'Hold Space and drag to pan around the canvas!', ...reactFlowProps } = canvasProps;
43
43
  const isInteractive = 'readonly' !== mode;
44
44
  const isDesignMode = 'design' === mode;
45
45
  const stableReadOnlyNodeIds = (0, external_ReadOnlyNodesContext_cjs_namespaceObject.useStableNodeIdSet)(readOnlyNodeIds);
46
+ const guardedBeforeDelete = (0, external_BaseCanvas_hooks_cjs_namespaceObject.useReadOnlyBeforeDelete)(stableReadOnlyNodeIds, onBeforeDelete);
47
+ const handleNodesChange = (0, external_react_namespaceObject.useMemo)(()=>{
48
+ if (!onNodesChange || 0 === stableReadOnlyNodeIds.size) return onNodesChange;
49
+ const guarded = (changes)=>{
50
+ const allowed = changes.filter((change)=>!('remove' === change.type && stableReadOnlyNodeIds.has(change.id)));
51
+ if (allowed.length > 0) onNodesChange(allowed);
52
+ };
53
+ return guarded;
54
+ }, [
55
+ onNodesChange,
56
+ stableReadOnlyNodeIds
57
+ ]);
46
58
  const [reactFlowInstance, setReactFlowInstance] = (0, external_react_namespaceObject.useState)();
47
59
  const { isReady } = (0, external_BaseCanvas_hooks_cjs_namespaceObject.useAutoLayout)(nodes, initialAutoLayout, fitViewOptions);
48
60
  const { ensureNodesInView, ensureAllNodesInView, centerNode } = (0, external_BaseCanvas_hooks_cjs_namespaceObject.useEnsureNodesInView)();
@@ -108,8 +120,9 @@ const BaseCanvasInnerComponent = (props)=>{
108
120
  zoomOnDoubleClick: isInteractive && zoomOnDoubleClick,
109
121
  panOnDrag: isInteractive ? external_BaseCanvas_constants_cjs_namespaceObject.PAN_ON_DRAG : false,
110
122
  onInit: handleInit,
111
- onNodesChange: isInteractive ? onNodesChange : void 0,
123
+ onNodesChange: isInteractive ? handleNodesChange : void 0,
112
124
  onEdgesChange: isInteractive ? onEdgesChange : void 0,
125
+ onBeforeDelete: guardedBeforeDelete,
113
126
  onConnect: isDesignMode ? onConnect : void 0,
114
127
  onConnectStart: isDesignMode ? onConnectStart : void 0,
115
128
  onConnectEnd: isDesignMode ? onConnectEnd : void 0,
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCanvas.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/BaseCanvas/BaseCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EACJ,IAAI,EAEL,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAIL,KAAK,YAAY,EAKlB,MAAM,OAAO,CAAC;AAIf,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAoNzE,eAAO,MAAM,UAAU,EAKjB,CAAC,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI,EAC/D,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG;IAC3C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;CACpD,KACE,YAAY,CAAC"}
1
+ {"version":3,"file":"BaseCanvas.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/BaseCanvas/BaseCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,IAAI,EACJ,IAAI,EAEL,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAIL,KAAK,YAAY,EAKlB,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAqOzE,eAAO,MAAM,UAAU,EAKjB,CAAC,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI,EAC/D,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG;IAC3C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;CACpD,KACE,YAAY,CAAC"}
@@ -27,6 +27,7 @@ __webpack_require__.d(__webpack_exports__, {
27
27
  useAutoLayout: ()=>useAutoLayout,
28
28
  useMaintainNodesInView: ()=>useMaintainNodesInView,
29
29
  useEnsureNodesInView: ()=>useEnsureNodesInView,
30
+ useReadOnlyBeforeDelete: ()=>useReadOnlyBeforeDelete,
30
31
  useFitView: ()=>useFitView
31
32
  });
32
33
  const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
@@ -237,15 +238,46 @@ const useMaintainNodesInView = (nodeIds, fitViewOptions)=>{
237
238
  fitViewOptions
238
239
  ]);
239
240
  };
241
+ function useReadOnlyBeforeDelete(readOnlyNodeIds, onBeforeDelete) {
242
+ return (0, external_react_namespaceObject.useMemo)(()=>{
243
+ if (0 === readOnlyNodeIds.size) return onBeforeDelete;
244
+ return async ({ nodes, edges })=>{
245
+ const upstream = onBeforeDelete ? await onBeforeDelete({
246
+ nodes,
247
+ edges
248
+ }) : true;
249
+ if (false === upstream) return false;
250
+ const candidate = true === upstream ? {
251
+ nodes,
252
+ edges
253
+ } : upstream;
254
+ const vetoedNodeIds = new Set();
255
+ const deletedNodeIds = new Set();
256
+ for (const node of candidate.nodes)(readOnlyNodeIds.has(node.id) ? vetoedNodeIds : deletedNodeIds).add(node.id);
257
+ if (0 === vetoedNodeIds.size) return candidate;
258
+ const touchesVetoedNode = (edge)=>vetoedNodeIds.has(edge.source) || vetoedNodeIds.has(edge.target);
259
+ const touchesDeletedNode = (edge)=>deletedNodeIds.has(edge.source) || deletedNodeIds.has(edge.target);
260
+ return {
261
+ nodes: candidate.nodes.filter((node)=>!vetoedNodeIds.has(node.id)),
262
+ edges: candidate.edges.filter((edge)=>!touchesVetoedNode(edge) || touchesDeletedNode(edge))
263
+ };
264
+ };
265
+ }, [
266
+ readOnlyNodeIds,
267
+ onBeforeDelete
268
+ ]);
269
+ }
240
270
  exports.useAutoLayout = __webpack_exports__.useAutoLayout;
241
271
  exports.useEnsureNodesInView = __webpack_exports__.useEnsureNodesInView;
242
272
  exports.useFitView = __webpack_exports__.useFitView;
243
273
  exports.useMaintainNodesInView = __webpack_exports__.useMaintainNodesInView;
274
+ exports.useReadOnlyBeforeDelete = __webpack_exports__.useReadOnlyBeforeDelete;
244
275
  for(var __rspack_i in __webpack_exports__)if (-1 === [
245
276
  "useAutoLayout",
246
277
  "useEnsureNodesInView",
247
278
  "useFitView",
248
- "useMaintainNodesInView"
279
+ "useMaintainNodesInView",
280
+ "useReadOnlyBeforeDelete"
249
281
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
250
282
  Object.defineProperty(exports, '__esModule', {
251
283
  value: true
@@ -1,4 +1,4 @@
1
- import type { Node } from '../../xyflow/react.ts';
1
+ import type { Edge, Node, OnBeforeDelete } from '../../xyflow/react.ts';
2
2
  import type { BaseCanvasFitViewOptions, EnsureNodesInViewOptions } from './BaseCanvas.types';
3
3
  export declare const useAutoLayout: (nodes: Node[] | undefined, initialAutoLayout?: () => Promise<void> | void, fitViewOptions?: BaseCanvasFitViewOptions) => {
4
4
  isReady: boolean;
@@ -12,4 +12,5 @@ export declare const useEnsureNodesInView: () => {
12
12
  centerNode: (nodeId: string, options?: EnsureNodesInViewOptions) => void;
13
13
  };
14
14
  export declare const useMaintainNodesInView: (nodeIds?: string[], fitViewOptions?: BaseCanvasFitViewOptions) => void;
15
+ export declare function useReadOnlyBeforeDelete<NodeType extends Node, EdgeType extends Edge>(readOnlyNodeIds: ReadonlySet<string>, onBeforeDelete: OnBeforeDelete<NodeType, EdgeType> | undefined): OnBeforeDelete<NodeType, EdgeType> | undefined;
15
16
  //# sourceMappingURL=BaseCanvas.hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCanvas.hooks.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/BaseCanvas/BaseCanvas.hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAIrE,OAAO,KAAK,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAqB7F,eAAO,MAAM,aAAa,GACxB,OAAO,IAAI,EAAE,GAAG,SAAS,EACzB,oBAAoB,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,iBAAiB,wBAAwB;;CA+E1C,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,QAAQ,IAAI,EAAE,EACd,QAAQ,MAAM,EACd,iBAAiB,wBAAwB;;CAgC1C,CAAC;AAEF,eAAO,MAAM,oBAAoB;iCAInB,MAAM,EAAE,YAAY,wBAAwB;qCA4B3C,wBAAwB;yBAqB1B,MAAM,YAAY,wBAAwB;CAgCtD,CAAC;AAqCF,eAAO,MAAM,sBAAsB,GACjC,UAAU,MAAM,EAAE,EAClB,iBAAiB,wBAAwB,SAuE1C,CAAC"}
1
+ {"version":3,"file":"BaseCanvas.hooks.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/BaseCanvas/BaseCanvas.hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAI3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAqB7F,eAAO,MAAM,aAAa,GACxB,OAAO,IAAI,EAAE,GAAG,SAAS,EACzB,oBAAoB,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,iBAAiB,wBAAwB;;CA+E1C,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,QAAQ,IAAI,EAAE,EACd,QAAQ,MAAM,EACd,iBAAiB,wBAAwB;;CAgC1C,CAAC;AAEF,eAAO,MAAM,oBAAoB;iCAInB,MAAM,EAAE,YAAY,wBAAwB;qCA4B3C,wBAAwB;yBAqB1B,MAAM,YAAY,wBAAwB;CAgCtD,CAAC;AAqCF,eAAO,MAAM,sBAAsB,GACjC,UAAU,MAAM,EAAE,EAClB,iBAAiB,wBAAwB,SAuE1C,CAAC;AAiBF,wBAAgB,uBAAuB,CAAC,QAAQ,SAAS,IAAI,EAAE,QAAQ,SAAS,IAAI,EAClF,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,EACpC,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,SAAS,GAC7D,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,SAAS,CA+BhD"}
@@ -1,5 +1,5 @@
1
1
  import { useReactFlow, useStoreApi } from "../../xyflow/react.js";
2
- import { useCallback, useEffect, useRef, useState } from "react";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
3
  import { BASE_CANVAS_DEFAULTS, FIT_VIEW_DELAY_MS } from "./BaseCanvas.constants.js";
4
4
  const waitForNodeMeasurements = (getNodes)=>new Promise((resolve)=>{
5
5
  const startTime = Date.now();
@@ -206,4 +206,33 @@ const useMaintainNodesInView = (nodeIds, fitViewOptions)=>{
206
206
  fitViewOptions
207
207
  ]);
208
208
  };
209
- export { useAutoLayout, useEnsureNodesInView, useFitView, useMaintainNodesInView };
209
+ function useReadOnlyBeforeDelete(readOnlyNodeIds, onBeforeDelete) {
210
+ return useMemo(()=>{
211
+ if (0 === readOnlyNodeIds.size) return onBeforeDelete;
212
+ return async ({ nodes, edges })=>{
213
+ const upstream = onBeforeDelete ? await onBeforeDelete({
214
+ nodes,
215
+ edges
216
+ }) : true;
217
+ if (false === upstream) return false;
218
+ const candidate = true === upstream ? {
219
+ nodes,
220
+ edges
221
+ } : upstream;
222
+ const vetoedNodeIds = new Set();
223
+ const deletedNodeIds = new Set();
224
+ for (const node of candidate.nodes)(readOnlyNodeIds.has(node.id) ? vetoedNodeIds : deletedNodeIds).add(node.id);
225
+ if (0 === vetoedNodeIds.size) return candidate;
226
+ const touchesVetoedNode = (edge)=>vetoedNodeIds.has(edge.source) || vetoedNodeIds.has(edge.target);
227
+ const touchesDeletedNode = (edge)=>deletedNodeIds.has(edge.source) || deletedNodeIds.has(edge.target);
228
+ return {
229
+ nodes: candidate.nodes.filter((node)=>!vetoedNodeIds.has(node.id)),
230
+ edges: candidate.edges.filter((edge)=>!touchesVetoedNode(edge) || touchesDeletedNode(edge))
231
+ };
232
+ };
233
+ }, [
234
+ readOnlyNodeIds,
235
+ onBeforeDelete
236
+ ]);
237
+ }
238
+ export { useAutoLayout, useEnsureNodesInView, useFitView, useMaintainNodesInView, useReadOnlyBeforeDelete };
@@ -3,7 +3,7 @@ import { ConnectionMode, ReactFlow } from "../../xyflow/react.js";
3
3
  import { forwardRef, memo, useCallback, useImperativeHandle, useMemo, useState } from "react";
4
4
  import { useToolbarActionStore } from "../../hooks/ToolbarActionContext.js";
5
5
  import { BASE_CANVAS_DEFAULTS, PAN_ON_DRAG } from "./BaseCanvas.constants.js";
6
- import { useAutoLayout, useEnsureNodesInView, useMaintainNodesInView } from "./BaseCanvas.hooks.js";
6
+ import { useAutoLayout, useEnsureNodesInView, useMaintainNodesInView, useReadOnlyBeforeDelete } from "./BaseCanvas.hooks.js";
7
7
  import { CanvasBackground } from "./CanvasBackground.js";
8
8
  import { CanvasProviders } from "./CanvasProviders.js";
9
9
  import { PanShortcutTeachingUI } from "./PanShortcutTeachingUI.js";
@@ -11,10 +11,22 @@ import { useStableNodeIdSet } from "./ReadOnlyNodesContext.js";
11
11
  const BaseCanvasInnerComponent = (props)=>{
12
12
  const { innerRef, fitViewOptions: fitViewOptionsProps, ...canvasProps } = props;
13
13
  const fitViewOptions = fitViewOptionsProps ?? BASE_CANVAS_DEFAULTS.fitViewOptions;
14
- const { nodes = [], edges = [], nodeTypes, edgeTypes, children, mode = 'view', readOnlyNodeIds, showBackground = true, backgroundColor = BASE_CANVAS_DEFAULTS.background.color, backgroundSecondaryColor = BASE_CANVAS_DEFAULTS.background.bgColor, backgroundVariant = BASE_CANVAS_DEFAULTS.background.variant, backgroundGap = BASE_CANVAS_DEFAULTS.background.gap, backgroundSize = BASE_CANVAS_DEFAULTS.background.size, isDarkMode, locale, minZoom = BASE_CANVAS_DEFAULTS.zoom.min, maxZoom = BASE_CANVAS_DEFAULTS.zoom.max, defaultViewport = BASE_CANVAS_DEFAULTS.defaultViewport, defaultEdgeOptions = BASE_CANVAS_DEFAULTS.edge, stickyNoteOptions, onNodesChange, onEdgesChange, onConnect, onConnectStart, onConnectEnd, onNodeClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onPaneClick, onInit, onSelectionChange, proOptions = BASE_CANVAS_DEFAULTS.pro, connectionMode = ConnectionMode.Loose, connectionLineComponent, connectionLineStyle, deleteKeyCode = null, selectNodesOnDrag = true, nodesDraggable = true, nodesConnectable = true, elementsSelectable = true, onlyRenderVisibleElements = true, zoomOnDoubleClick = true, snapToGrid = BASE_CANVAS_DEFAULTS.snapToGrid, snapGrid = BASE_CANVAS_DEFAULTS.snapGrid, initialAutoLayout, maintainNodesInView, onToolbarAction, breakpoints, panShortcutTeachingUIMessage = 'Hold Space and drag to pan around the canvas!', ...reactFlowProps } = canvasProps;
14
+ const { nodes = [], edges = [], nodeTypes, edgeTypes, children, mode = 'view', readOnlyNodeIds, showBackground = true, backgroundColor = BASE_CANVAS_DEFAULTS.background.color, backgroundSecondaryColor = BASE_CANVAS_DEFAULTS.background.bgColor, backgroundVariant = BASE_CANVAS_DEFAULTS.background.variant, backgroundGap = BASE_CANVAS_DEFAULTS.background.gap, backgroundSize = BASE_CANVAS_DEFAULTS.background.size, isDarkMode, locale, minZoom = BASE_CANVAS_DEFAULTS.zoom.min, maxZoom = BASE_CANVAS_DEFAULTS.zoom.max, defaultViewport = BASE_CANVAS_DEFAULTS.defaultViewport, defaultEdgeOptions = BASE_CANVAS_DEFAULTS.edge, stickyNoteOptions, onNodesChange, onEdgesChange, onConnect, onConnectStart, onConnectEnd, onNodeClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onPaneClick, onInit, onSelectionChange, onBeforeDelete, proOptions = BASE_CANVAS_DEFAULTS.pro, connectionMode = ConnectionMode.Loose, connectionLineComponent, connectionLineStyle, deleteKeyCode = null, selectNodesOnDrag = true, nodesDraggable = true, nodesConnectable = true, elementsSelectable = true, onlyRenderVisibleElements = true, zoomOnDoubleClick = true, snapToGrid = BASE_CANVAS_DEFAULTS.snapToGrid, snapGrid = BASE_CANVAS_DEFAULTS.snapGrid, initialAutoLayout, maintainNodesInView, onToolbarAction, breakpoints, panShortcutTeachingUIMessage = 'Hold Space and drag to pan around the canvas!', ...reactFlowProps } = canvasProps;
15
15
  const isInteractive = 'readonly' !== mode;
16
16
  const isDesignMode = 'design' === mode;
17
17
  const stableReadOnlyNodeIds = useStableNodeIdSet(readOnlyNodeIds);
18
+ const guardedBeforeDelete = useReadOnlyBeforeDelete(stableReadOnlyNodeIds, onBeforeDelete);
19
+ const handleNodesChange = useMemo(()=>{
20
+ if (!onNodesChange || 0 === stableReadOnlyNodeIds.size) return onNodesChange;
21
+ const guarded = (changes)=>{
22
+ const allowed = changes.filter((change)=>!('remove' === change.type && stableReadOnlyNodeIds.has(change.id)));
23
+ if (allowed.length > 0) onNodesChange(allowed);
24
+ };
25
+ return guarded;
26
+ }, [
27
+ onNodesChange,
28
+ stableReadOnlyNodeIds
29
+ ]);
18
30
  const [reactFlowInstance, setReactFlowInstance] = useState();
19
31
  const { isReady } = useAutoLayout(nodes, initialAutoLayout, fitViewOptions);
20
32
  const { ensureNodesInView, ensureAllNodesInView, centerNode } = useEnsureNodesInView();
@@ -80,8 +92,9 @@ const BaseCanvasInnerComponent = (props)=>{
80
92
  zoomOnDoubleClick: isInteractive && zoomOnDoubleClick,
81
93
  panOnDrag: isInteractive ? PAN_ON_DRAG : false,
82
94
  onInit: handleInit,
83
- onNodesChange: isInteractive ? onNodesChange : void 0,
95
+ onNodesChange: isInteractive ? handleNodesChange : void 0,
84
96
  onEdgesChange: isInteractive ? onEdgesChange : void 0,
97
+ onBeforeDelete: guardedBeforeDelete,
85
98
  onConnect: isDesignMode ? onConnect : void 0,
86
99
  onConnectStart: isDesignMode ? onConnectStart : void 0,
87
100
  onConnectEnd: isDesignMode ? onConnectEnd : void 0,
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCanvas.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/BaseCanvas/BaseCanvas.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,IAAI,EACJ,IAAI,EACJ,iBAAiB,EACjB,cAAc,EACf,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAMtF,MAAM,WAAW,wBAAwB;IAOvC,OAAO,CAAC,EACJ,MAAM,GACN;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAON,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI,CACzF,SAAQ,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAe1C,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IAgBtC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAM1D,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAO5C,QAAQ,CAAC,EAAE,SAAS,CAAC;IAOrB,cAAc,CAAC,EAAE,OAAO,CAAC;IAKzB,eAAe,CAAC,EAAE,MAAM,CAAC;IAKzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAOlC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAOtC,aAAa,CAAC,EAAE,MAAM,CAAC;IAOvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAcxB,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAkB/C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAM/B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IAUtC,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAK1C,eAAe,CAAC,EAAE,oBAAoB,CAAC;IAMvC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAW1B,UAAU,CAAC,EAAE,OAAO,CAAC;IAOrB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAMD,MAAM,WAAW,wBAAwB;IAKvC,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AASD,MAAM,WAAW,aAAa,CAAC,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI;IAgBvF,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAa/E,oBAAoB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAiB/D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAyBrE,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC;CAC9D"}
1
+ {"version":3,"file":"BaseCanvas.types.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/BaseCanvas/BaseCanvas.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,IAAI,EACJ,IAAI,EACJ,iBAAiB,EACjB,cAAc,EACf,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AAMtF,MAAM,WAAW,wBAAwB;IAOvC,OAAO,CAAC,EACJ,MAAM,GACN;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAON,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AASD,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI,CACzF,SAAQ,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAe1C,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IAuBtC,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAM1D,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAO5C,QAAQ,CAAC,EAAE,SAAS,CAAC;IAOrB,cAAc,CAAC,EAAE,OAAO,CAAC;IAKzB,eAAe,CAAC,EAAE,MAAM,CAAC;IAKzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAOlC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAOtC,aAAa,CAAC,EAAE,MAAM,CAAC;IAOvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAcxB,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAkB/C,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAM/B,4BAA4B,CAAC,EAAE,MAAM,CAAC;IAUtC,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAK1C,eAAe,CAAC,EAAE,oBAAoB,CAAC;IAMvC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAW1B,UAAU,CAAC,EAAE,OAAO,CAAC;IAOrB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAMD,MAAM,WAAW,wBAAwB;IAKvC,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,OAAO,CAAC,EAAE,MAAM,CAAC;IAOjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AASD,MAAM,WAAW,aAAa,CAAC,QAAQ,SAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,SAAS,IAAI,GAAG,IAAI;IAgBvF,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAa/E,oBAAoB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAiB/D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAyBrE,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC;CAC9D"}