@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.
- 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 +15 -2
- package/dist/canvas/components/BaseCanvas/BaseCanvas.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.cjs +33 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.d.ts +2 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/BaseCanvas.hooks.js +31 -2
- package/dist/canvas/components/BaseCanvas/BaseCanvas.js +16 -3
- package/dist/canvas/components/BaseCanvas/BaseCanvas.types.d.ts.map +1 -1
- package/dist/canvas/components/BaseCanvas/index.cjs +54 -17
- 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/BaseNode/BaseNode.cjs +20 -10
- package/dist/canvas/components/BaseNode/BaseNode.d.ts.map +1 -1
- package/dist/canvas/components/BaseNode/BaseNode.js +20 -10
- package/dist/canvas/components/BaseNode/NodeLabel.cjs +17 -11
- package/dist/canvas/components/BaseNode/NodeLabel.d.ts +2 -1
- package/dist/canvas/components/BaseNode/NodeLabel.d.ts.map +1 -1
- package/dist/canvas/components/BaseNode/NodeLabel.js +17 -11
- 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/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/components/Toolbar/shared/ToolbarButton.cjs +28 -23
- package/dist/canvas/components/Toolbar/shared/ToolbarButton.d.ts.map +1 -1
- package/dist/canvas/components/Toolbar/shared/ToolbarButton.js +28 -23
- 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/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":"
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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;
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
|
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 ?
|
|
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;
|
|
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;
|
|
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
|
-
|
|
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 ?
|
|
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;
|
|
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"}
|