@uipath/apollo-react 4.15.0-pr605.6ea14a7 → 4.15.0-pr605.6f11404
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/AddNodePanel/AddNodeManager.cjs +21 -7
- package/dist/canvas/components/AddNodePanel/AddNodeManager.d.ts.map +1 -1
- package/dist/canvas/components/AddNodePanel/AddNodeManager.js +24 -10
- package/dist/canvas/components/AddNodePanel/createAddNodePreview.cjs +3 -3
- package/dist/canvas/components/AddNodePanel/createAddNodePreview.d.ts +2 -1
- package/dist/canvas/components/AddNodePanel/createAddNodePreview.d.ts.map +1 -1
- package/dist/canvas/components/AddNodePanel/createAddNodePreview.js +4 -4
- package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.cjs +6 -2
- package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.d.ts.map +1 -1
- package/dist/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.js +7 -3
- package/dist/canvas/components/LoopNode/LoopNode.sequence.cjs +80 -33
- package/dist/canvas/components/LoopNode/LoopNode.sequence.d.ts +15 -5
- package/dist/canvas/components/LoopNode/LoopNode.sequence.d.ts.map +1 -1
- package/dist/canvas/components/LoopNode/LoopNode.sequence.js +79 -35
- package/dist/canvas/components/LoopNode/LoopNodePreview.cjs +4 -1
- package/dist/canvas/components/LoopNode/LoopNodePreview.d.ts.map +1 -1
- package/dist/canvas/components/LoopNode/LoopNodePreview.js +4 -1
- package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.cjs +9 -2
- package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.d.ts.map +1 -1
- package/dist/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.js +10 -3
- package/dist/canvas/core/NodeTypeRegistry.cjs +6 -1
- package/dist/canvas/core/NodeTypeRegistry.d.ts.map +1 -1
- package/dist/canvas/core/NodeTypeRegistry.js +7 -2
- package/dist/canvas/utils/container-sizing.cjs +5 -4
- package/dist/canvas/utils/container-sizing.d.ts.map +1 -1
- package/dist/canvas/utils/container-sizing.js +5 -4
- package/dist/canvas/utils/index.cjs +15 -8
- package/dist/canvas/utils/index.d.ts +1 -0
- package/dist/canvas/utils/index.d.ts.map +1 -1
- package/dist/canvas/utils/index.js +1 -0
- package/dist/canvas/utils/preview-connection-handles.cjs +55 -0
- package/dist/canvas/utils/preview-connection-handles.d.ts +14 -0
- package/dist/canvas/utils/preview-connection-handles.d.ts.map +1 -0
- package/dist/canvas/utils/preview-connection-handles.js +15 -0
- package/package.json +1 -1
|
@@ -45,8 +45,7 @@ function getManifestForNode(registry, node) {
|
|
|
45
45
|
}
|
|
46
46
|
function getManifestAwareNodeDimensions(registry, node) {
|
|
47
47
|
const manifest = getManifestForNode(registry, node);
|
|
48
|
-
const
|
|
49
|
-
const fallbackDimensions = (0, collapse_cjs_namespaceObject.getExpandedSize)(expandedShape, manifest);
|
|
48
|
+
const fallbackDimensions = (0, collapse_cjs_namespaceObject.getExpandedSize)(manifest?.display.shape, manifest);
|
|
50
49
|
return (0, container_sizing_cjs_namespaceObject.getNodeDimensions)(node, fallbackDimensions);
|
|
51
50
|
}
|
|
52
51
|
function getContainerFitGeometry(registry, node) {
|
|
@@ -79,7 +78,7 @@ function resolveSiblingCollisions(nodes, insertedNode, options) {
|
|
|
79
78
|
function resolveNodePlacement(nodes, insertedNode, registry, ignoredNodeTypes, edges, loopSequencePlacement) {
|
|
80
79
|
const getNodeSize = (node)=>getManifestAwareNodeDimensions(registry, node);
|
|
81
80
|
if (!insertedNode.parentId) {
|
|
82
|
-
const resolvedNodes = (
|
|
81
|
+
const resolvedNodes = resolveSiblingCollisions(nodes, insertedNode, {
|
|
83
82
|
ignoredNodeTypes,
|
|
84
83
|
getNodeSize
|
|
85
84
|
});
|
|
@@ -149,7 +148,13 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
|
|
|
149
148
|
const handleNodeSelect = (0, external_react_namespaceObject.useCallback)((nodeItem)=>{
|
|
150
149
|
const currentPreviewNode = reactFlowInstance.getNode(external_constants_cjs_namespaceObject.PREVIEW_NODE_ID);
|
|
151
150
|
if (!currentPreviewNode || !previewNodeConnectionInfo || 0 === previewNodeConnectionInfo.length) return;
|
|
152
|
-
const
|
|
151
|
+
const loopSequenceResolverOptions = (0, LoopNode_sequence_cjs_namespaceObject.createLoopSequenceResolverOptions)(registry);
|
|
152
|
+
const loopSequencePlacement = (0, LoopNode_sequence_cjs_namespaceObject.getLoopSequencePlacementFromPreviewGraph)(currentPreviewNode, previewNodeConnectionInfo, {
|
|
153
|
+
isLoopContainerId: (containerId)=>{
|
|
154
|
+
const containerNode = reactFlowInstance.getNode(containerId);
|
|
155
|
+
return containerNode ? loopSequenceResolverOptions.isLoopContainerNode?.(containerNode) ?? false : false;
|
|
156
|
+
}
|
|
157
|
+
});
|
|
153
158
|
const newNodeId = `${nodeItem.data.type}-${Date.now()}`;
|
|
154
159
|
const baseNodeData = createNodeData ? createNodeData(nodeItem) : {
|
|
155
160
|
label: nodeItem.name,
|
|
@@ -180,8 +185,12 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
|
|
|
180
185
|
const newEdges = [];
|
|
181
186
|
const previewEdgeIds = [];
|
|
182
187
|
for (const connectionInfoItem of previewNodeConnectionInfo){
|
|
183
|
-
const
|
|
184
|
-
|
|
188
|
+
const newNodeDefaultHandle = newNodeManifest ? (0, external_utils_index_cjs_namespaceObject.getNodeHandleForPreviewConnection)({
|
|
189
|
+
manifest: newNodeManifest,
|
|
190
|
+
connection: connectionInfoItem,
|
|
191
|
+
connections: previewNodeConnectionInfo,
|
|
192
|
+
getDefaultHandle: (handleType)=>registry?.getDefaultHandle(newNodeManifest.nodeType, handleType, nodeItem.data.version)
|
|
193
|
+
}) : void 0;
|
|
185
194
|
const newNodeHandleId = newNodeDefaultHandle?.id;
|
|
186
195
|
const edgeSourceTargetData = connectionInfoItem.addNewNodeAsSource ? {
|
|
187
196
|
source: newNode.id,
|
|
@@ -225,7 +234,12 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
|
|
|
225
234
|
]);
|
|
226
235
|
const [firstConnection] = previewNodeConnectionInfo;
|
|
227
236
|
if (firstConnection) {
|
|
228
|
-
const firstEdgeSourceHandle = firstConnection.addNewNodeAsSource ? newNodeManifest &&
|
|
237
|
+
const firstEdgeSourceHandle = firstConnection.addNewNodeAsSource ? newNodeManifest && (0, external_utils_index_cjs_namespaceObject.getNodeHandleForPreviewConnection)({
|
|
238
|
+
manifest: newNodeManifest,
|
|
239
|
+
connection: firstConnection,
|
|
240
|
+
connections: previewNodeConnectionInfo,
|
|
241
|
+
getDefaultHandle: (handleType)=>registry?.getDefaultHandle(newNodeManifest.nodeType, handleType, nodeItem.data.version)
|
|
242
|
+
})?.id : firstConnection.existingHandleId;
|
|
229
243
|
const firstEdgeData = firstConnection.addNewNodeAsSource ? {
|
|
230
244
|
source: finalNode.id,
|
|
231
245
|
sourceHandle: firstEdgeSourceHandle ?? 'output'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddNodeManager.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/AddNodeManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAE3E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"AddNodeManager.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/AddNodeManager.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAE3E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,mBAAmB;IAKlC,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC;IAI7E,YAAY,CAAC,EAAE,OAAO,CAAC;IAIvB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAK7F,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC;IAOtE,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;KAAE,CAAC;IAK7F,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;IAMpF,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAsHD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAwPxD,CAAC"}
|
|
@@ -4,21 +4,20 @@ import { useCallback, useEffect, useRef } from "react";
|
|
|
4
4
|
import { FLOATING_CANVAS_PANEL_OFFSET, PREVIEW_NODE_ID } from "../../constants.js";
|
|
5
5
|
import { useOptionalNodeTypeRegistry } from "../../core/index.js";
|
|
6
6
|
import { usePreviewNode } from "../../hooks/usePreviewNode.js";
|
|
7
|
-
import { resolveCollisions } from "../../utils/index.js";
|
|
8
|
-
import {
|
|
7
|
+
import { getNodeHandleForPreviewConnection, resolveCollisions } from "../../utils/index.js";
|
|
8
|
+
import { getExpandedSize } from "../../utils/collapse.js";
|
|
9
9
|
import { ensureContainersFitChildren, getNodeDimensions } from "../../utils/container-sizing.js";
|
|
10
10
|
import { getNodeTypeVersion } from "../../utils/manifest-resolver.js";
|
|
11
11
|
import { FloatingCanvasPanel } from "../FloatingCanvasPanel/index.js";
|
|
12
12
|
import { getLoopContainerFitGeometry, isLoopContainerManifest } from "../LoopNode/LoopNode.helpers.js";
|
|
13
|
-
import { getLoopSequencePlacementFromPreviewGraph, resolveLoopSequenceMaterializedNodes } from "../LoopNode/LoopNode.sequence.js";
|
|
13
|
+
import { createLoopSequenceResolverOptions, getLoopSequencePlacementFromPreviewGraph, resolveLoopSequenceMaterializedNodes } from "../LoopNode/LoopNode.sequence.js";
|
|
14
14
|
import { AddNodePanel } from "./AddNodePanel.js";
|
|
15
15
|
function getManifestForNode(registry, node) {
|
|
16
16
|
return node.type ? registry?.getManifest(node.type, getNodeTypeVersion(node.data)) : void 0;
|
|
17
17
|
}
|
|
18
18
|
function getManifestAwareNodeDimensions(registry, node) {
|
|
19
19
|
const manifest = getManifestForNode(registry, node);
|
|
20
|
-
const
|
|
21
|
-
const fallbackDimensions = getExpandedSize(expandedShape, manifest);
|
|
20
|
+
const fallbackDimensions = getExpandedSize(manifest?.display.shape, manifest);
|
|
22
21
|
return getNodeDimensions(node, fallbackDimensions);
|
|
23
22
|
}
|
|
24
23
|
function getContainerFitGeometry(registry, node) {
|
|
@@ -51,7 +50,7 @@ function resolveSiblingCollisions(nodes, insertedNode, options) {
|
|
|
51
50
|
function resolveNodePlacement(nodes, insertedNode, registry, ignoredNodeTypes, edges, loopSequencePlacement) {
|
|
52
51
|
const getNodeSize = (node)=>getManifestAwareNodeDimensions(registry, node);
|
|
53
52
|
if (!insertedNode.parentId) {
|
|
54
|
-
const resolvedNodes =
|
|
53
|
+
const resolvedNodes = resolveSiblingCollisions(nodes, insertedNode, {
|
|
55
54
|
ignoredNodeTypes,
|
|
56
55
|
getNodeSize
|
|
57
56
|
});
|
|
@@ -121,7 +120,13 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
|
|
|
121
120
|
const handleNodeSelect = useCallback((nodeItem)=>{
|
|
122
121
|
const currentPreviewNode = reactFlowInstance.getNode(PREVIEW_NODE_ID);
|
|
123
122
|
if (!currentPreviewNode || !previewNodeConnectionInfo || 0 === previewNodeConnectionInfo.length) return;
|
|
124
|
-
const
|
|
123
|
+
const loopSequenceResolverOptions = createLoopSequenceResolverOptions(registry);
|
|
124
|
+
const loopSequencePlacement = getLoopSequencePlacementFromPreviewGraph(currentPreviewNode, previewNodeConnectionInfo, {
|
|
125
|
+
isLoopContainerId: (containerId)=>{
|
|
126
|
+
const containerNode = reactFlowInstance.getNode(containerId);
|
|
127
|
+
return containerNode ? loopSequenceResolverOptions.isLoopContainerNode?.(containerNode) ?? false : false;
|
|
128
|
+
}
|
|
129
|
+
});
|
|
125
130
|
const newNodeId = `${nodeItem.data.type}-${Date.now()}`;
|
|
126
131
|
const baseNodeData = createNodeData ? createNodeData(nodeItem) : {
|
|
127
132
|
label: nodeItem.name,
|
|
@@ -152,8 +157,12 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
|
|
|
152
157
|
const newEdges = [];
|
|
153
158
|
const previewEdgeIds = [];
|
|
154
159
|
for (const connectionInfoItem of previewNodeConnectionInfo){
|
|
155
|
-
const
|
|
156
|
-
|
|
160
|
+
const newNodeDefaultHandle = newNodeManifest ? getNodeHandleForPreviewConnection({
|
|
161
|
+
manifest: newNodeManifest,
|
|
162
|
+
connection: connectionInfoItem,
|
|
163
|
+
connections: previewNodeConnectionInfo,
|
|
164
|
+
getDefaultHandle: (handleType)=>registry?.getDefaultHandle(newNodeManifest.nodeType, handleType, nodeItem.data.version)
|
|
165
|
+
}) : void 0;
|
|
157
166
|
const newNodeHandleId = newNodeDefaultHandle?.id;
|
|
158
167
|
const edgeSourceTargetData = connectionInfoItem.addNewNodeAsSource ? {
|
|
159
168
|
source: newNode.id,
|
|
@@ -197,7 +206,12 @@ const AddNodeManager = ({ initializing, customPanel: CustomPanel, createNodeData
|
|
|
197
206
|
]);
|
|
198
207
|
const [firstConnection] = previewNodeConnectionInfo;
|
|
199
208
|
if (firstConnection) {
|
|
200
|
-
const firstEdgeSourceHandle = firstConnection.addNewNodeAsSource ? newNodeManifest &&
|
|
209
|
+
const firstEdgeSourceHandle = firstConnection.addNewNodeAsSource ? newNodeManifest && getNodeHandleForPreviewConnection({
|
|
210
|
+
manifest: newNodeManifest,
|
|
211
|
+
connection: firstConnection,
|
|
212
|
+
connections: previewNodeConnectionInfo,
|
|
213
|
+
getDefaultHandle: (handleType)=>registry?.getDefaultHandle(newNodeManifest.nodeType, handleType, nodeItem.data.version)
|
|
214
|
+
})?.id : firstConnection.existingHandleId;
|
|
201
215
|
const firstEdgeData = firstConnection.addNewNodeAsSource ? {
|
|
202
216
|
source: finalNode.id,
|
|
203
217
|
sourceHandle: firstEdgeSourceHandle ?? 'output'
|
|
@@ -29,14 +29,14 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
29
|
const react_cjs_namespaceObject = require("../../xyflow/react.cjs");
|
|
30
30
|
const createPreviewGraph_cjs_namespaceObject = require("../../utils/createPreviewGraph.cjs");
|
|
31
31
|
const LoopNode_sequence_cjs_namespaceObject = require("../LoopNode/LoopNode.sequence.cjs");
|
|
32
|
-
function createAddNodePreview(sourceNodeId, sourceHandleId, reactFlowInstance, handlePosition = react_cjs_namespaceObject.Position.Right, sourceHandleType = 'source', ignoredNodeTypes = []) {
|
|
32
|
+
function createAddNodePreview(sourceNodeId, sourceHandleId, reactFlowInstance, handlePosition = react_cjs_namespaceObject.Position.Right, sourceHandleType = 'source', ignoredNodeTypes = [], resolverOptions = (0, LoopNode_sequence_cjs_namespaceObject.createLoopSequenceResolverOptions)(null)) {
|
|
33
33
|
if ('source' === sourceHandleType) {
|
|
34
34
|
const loopPreview = (0, LoopNode_sequence_cjs_namespaceObject.resolveLoopAddNodePreview)({
|
|
35
35
|
sourceNodeId,
|
|
36
36
|
sourceHandleId,
|
|
37
|
-
reactFlowInstance
|
|
37
|
+
reactFlowInstance,
|
|
38
|
+
resolverOptions
|
|
38
39
|
});
|
|
39
|
-
if ('skip' === loopPreview.action) return;
|
|
40
40
|
if ('create-preview' === loopPreview.action) return void (0, createPreviewGraph_cjs_namespaceObject.showPreviewGraph)({
|
|
41
41
|
sourceNodeId,
|
|
42
42
|
sourceHandleId,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { Position, type ReactFlowInstance } from '../../xyflow/react.ts';
|
|
2
|
-
|
|
2
|
+
import { type LoopSequenceResolverOptions } from '../LoopNode/LoopNode.sequence';
|
|
3
|
+
export declare function createAddNodePreview(sourceNodeId: string, sourceHandleId: string, reactFlowInstance: ReactFlowInstance, handlePosition?: Position, sourceHandleType?: 'source' | 'target', ignoredNodeTypes?: string[], resolverOptions?: LoopSequenceResolverOptions): void;
|
|
3
4
|
//# sourceMappingURL=createAddNodePreview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAddNodePreview.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/createAddNodePreview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"createAddNodePreview.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/AddNodePanel/createAddNodePreview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE5F,OAAO,EAEL,KAAK,2BAA2B,EAEjC,MAAM,+BAA+B,CAAC;AAcvC,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,GAAE,QAAyB,EACzC,gBAAgB,GAAE,QAAQ,GAAG,QAAmB,EAChD,gBAAgB,GAAE,MAAM,EAAO,EAC/B,eAAe,GAAE,2BAAqE,GACrF,IAAI,CA+BN"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Position } from "../../xyflow/react.js";
|
|
2
2
|
import { showPreviewGraph } from "../../utils/createPreviewGraph.js";
|
|
3
|
-
import { resolveLoopAddNodePreview } from "../LoopNode/LoopNode.sequence.js";
|
|
4
|
-
function createAddNodePreview(sourceNodeId, sourceHandleId, reactFlowInstance, handlePosition = Position.Right, sourceHandleType = 'source', ignoredNodeTypes = []) {
|
|
3
|
+
import { createLoopSequenceResolverOptions, resolveLoopAddNodePreview } from "../LoopNode/LoopNode.sequence.js";
|
|
4
|
+
function createAddNodePreview(sourceNodeId, sourceHandleId, reactFlowInstance, handlePosition = Position.Right, sourceHandleType = 'source', ignoredNodeTypes = [], resolverOptions = createLoopSequenceResolverOptions(null)) {
|
|
5
5
|
if ('source' === sourceHandleType) {
|
|
6
6
|
const loopPreview = resolveLoopAddNodePreview({
|
|
7
7
|
sourceNodeId,
|
|
8
8
|
sourceHandleId,
|
|
9
|
-
reactFlowInstance
|
|
9
|
+
reactFlowInstance,
|
|
10
|
+
resolverOptions
|
|
10
11
|
});
|
|
11
|
-
if ('skip' === loopPreview.action) return;
|
|
12
12
|
if ('create-preview' === loopPreview.action) return void showPreviewGraph({
|
|
13
13
|
sourceNodeId,
|
|
14
14
|
sourceHandleId,
|
|
@@ -35,6 +35,7 @@ const canvasStore_cjs_namespaceObject = require("../../stores/canvasStore.cjs");
|
|
|
35
35
|
const CanvasEventBus_cjs_namespaceObject = require("../../utils/CanvasEventBus.cjs");
|
|
36
36
|
const icon_registry_cjs_namespaceObject = require("../../utils/icon-registry.cjs");
|
|
37
37
|
const createAddNodePreview_cjs_namespaceObject = require("../AddNodePanel/createAddNodePreview.cjs");
|
|
38
|
+
const LoopNode_sequence_cjs_namespaceObject = require("../LoopNode/LoopNode.sequence.cjs");
|
|
38
39
|
const external_HierarchicalCanvas_cjs_namespaceObject = require("./HierarchicalCanvas.cjs");
|
|
39
40
|
const createDemoCanvases = ()=>{
|
|
40
41
|
const rootCanvas = {
|
|
@@ -325,6 +326,7 @@ const workflowManifest = {
|
|
|
325
326
|
};
|
|
326
327
|
const CanvasWithControlsContent = ({ initialCanvases, initialPath, onCanvasesChange, onPathChange })=>{
|
|
327
328
|
const reactFlowInstance = (0, react_cjs_namespaceObject.useReactFlow)();
|
|
329
|
+
const registry = (0, index_cjs_namespaceObject.useOptionalNodeTypeRegistry)();
|
|
328
330
|
const currentCanvas = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectCurrentCanvas);
|
|
329
331
|
const currentPathLength = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectCurrentPathLength);
|
|
330
332
|
const addNode = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectAddNode);
|
|
@@ -332,10 +334,11 @@ const CanvasWithControlsContent = ({ initialCanvases, initialPath, onCanvasesCha
|
|
|
332
334
|
const removeEdge = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectRemoveEdge);
|
|
333
335
|
const updateNodes = (0, canvasStore_cjs_namespaceObject.useCanvasStore)(canvasStore_cjs_namespaceObject.selectUpdateNodes);
|
|
334
336
|
(0, external_react_namespaceObject.useEffect)(()=>{
|
|
337
|
+
const resolverOptions = (0, LoopNode_sequence_cjs_namespaceObject.createLoopSequenceResolverOptions)(registry);
|
|
335
338
|
const handleAction = (event)=>{
|
|
336
339
|
if (reactFlowInstance) {
|
|
337
340
|
const sourceHandleType = 'input' === event.handleType ? 'target' : 'source';
|
|
338
|
-
(0, createAddNodePreview_cjs_namespaceObject.createAddNodePreview)(event.nodeId, event.handleId, reactFlowInstance, event.position, sourceHandleType);
|
|
341
|
+
(0, createAddNodePreview_cjs_namespaceObject.createAddNodePreview)(event.nodeId, event.handleId, reactFlowInstance, event.position, sourceHandleType, [], resolverOptions);
|
|
339
342
|
}
|
|
340
343
|
};
|
|
341
344
|
CanvasEventBus_cjs_namespaceObject.canvasEventBus.on('handle:action', handleAction);
|
|
@@ -343,7 +346,8 @@ const CanvasWithControlsContent = ({ initialCanvases, initialPath, onCanvasesCha
|
|
|
343
346
|
CanvasEventBus_cjs_namespaceObject.canvasEventBus.off('handle:action', handleAction);
|
|
344
347
|
};
|
|
345
348
|
}, [
|
|
346
|
-
reactFlowInstance
|
|
349
|
+
reactFlowInstance,
|
|
350
|
+
registry
|
|
347
351
|
]);
|
|
348
352
|
const handleAddNode = (0, external_react_namespaceObject.useCallback)((nodeType)=>{
|
|
349
353
|
const existingNodes = currentCanvas?.nodes.filter((n)=>'blank-canvas-node' !== n.id).length || 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HierarchicalCanvasWithControls.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"HierarchicalCanvasWithControls.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/HierarchicalCanvas/HierarchicalCanvasWithControls.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA0e/B,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EA8BlD,CAAC"}
|
|
@@ -2,11 +2,12 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { Panel, ReactFlowProvider, useReactFlow } from "../../xyflow/react.js";
|
|
3
3
|
import { Button } from "@uipath/apollo-wind";
|
|
4
4
|
import { useCallback, useEffect, useState } from "react";
|
|
5
|
-
import { NodeRegistryProvider } from "../../core/index.js";
|
|
5
|
+
import { NodeRegistryProvider, useOptionalNodeTypeRegistry } from "../../core/index.js";
|
|
6
6
|
import { selectAddNode, selectCurrentCanvas, selectCurrentPathLength, selectRemoveEdge, selectRemoveNode, selectUpdateNodes, useCanvasStore } from "../../stores/canvasStore.js";
|
|
7
7
|
import { canvasEventBus } from "../../utils/CanvasEventBus.js";
|
|
8
8
|
import { CanvasIcon } from "../../utils/icon-registry.js";
|
|
9
9
|
import { createAddNodePreview } from "../AddNodePanel/createAddNodePreview.js";
|
|
10
|
+
import { createLoopSequenceResolverOptions } from "../LoopNode/LoopNode.sequence.js";
|
|
10
11
|
import { HierarchicalCanvas } from "./HierarchicalCanvas.js";
|
|
11
12
|
const createDemoCanvases = ()=>{
|
|
12
13
|
const rootCanvas = {
|
|
@@ -297,6 +298,7 @@ const workflowManifest = {
|
|
|
297
298
|
};
|
|
298
299
|
const CanvasWithControlsContent = ({ initialCanvases, initialPath, onCanvasesChange, onPathChange })=>{
|
|
299
300
|
const reactFlowInstance = useReactFlow();
|
|
301
|
+
const registry = useOptionalNodeTypeRegistry();
|
|
300
302
|
const currentCanvas = useCanvasStore(selectCurrentCanvas);
|
|
301
303
|
const currentPathLength = useCanvasStore(selectCurrentPathLength);
|
|
302
304
|
const addNode = useCanvasStore(selectAddNode);
|
|
@@ -304,10 +306,11 @@ const CanvasWithControlsContent = ({ initialCanvases, initialPath, onCanvasesCha
|
|
|
304
306
|
const removeEdge = useCanvasStore(selectRemoveEdge);
|
|
305
307
|
const updateNodes = useCanvasStore(selectUpdateNodes);
|
|
306
308
|
useEffect(()=>{
|
|
309
|
+
const resolverOptions = createLoopSequenceResolverOptions(registry);
|
|
307
310
|
const handleAction = (event)=>{
|
|
308
311
|
if (reactFlowInstance) {
|
|
309
312
|
const sourceHandleType = 'input' === event.handleType ? 'target' : 'source';
|
|
310
|
-
createAddNodePreview(event.nodeId, event.handleId, reactFlowInstance, event.position, sourceHandleType);
|
|
313
|
+
createAddNodePreview(event.nodeId, event.handleId, reactFlowInstance, event.position, sourceHandleType, [], resolverOptions);
|
|
311
314
|
}
|
|
312
315
|
};
|
|
313
316
|
canvasEventBus.on('handle:action', handleAction);
|
|
@@ -315,7 +318,8 @@ const CanvasWithControlsContent = ({ initialCanvases, initialPath, onCanvasesCha
|
|
|
315
318
|
canvasEventBus.off('handle:action', handleAction);
|
|
316
319
|
};
|
|
317
320
|
}, [
|
|
318
|
-
reactFlowInstance
|
|
321
|
+
reactFlowInstance,
|
|
322
|
+
registry
|
|
319
323
|
]);
|
|
320
324
|
const handleAddNode = useCallback((nodeType)=>{
|
|
321
325
|
const existingNodes = currentCanvas?.nodes.filter((n)=>'blank-canvas-node' !== n.id).length || 0;
|
|
@@ -27,14 +27,46 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
27
27
|
resolveLoopAddNodePreview: ()=>resolveLoopAddNodePreview,
|
|
28
28
|
getLoopSequencePlacementFromPreviewGraph: ()=>getLoopSequencePlacementFromPreviewGraph,
|
|
29
29
|
createLoopSequencePreviewPlacement: ()=>createLoopSequencePreviewPlacement,
|
|
30
|
+
createLoopSequenceResolverOptions: ()=>createLoopSequenceResolverOptions,
|
|
30
31
|
resolveLoopSequenceMaterializedNodes: ()=>resolveLoopSequenceMaterializedNodes
|
|
31
32
|
});
|
|
32
33
|
const external_constants_cjs_namespaceObject = require("../../constants.cjs");
|
|
33
34
|
const container_sizing_cjs_namespaceObject = require("../../utils/container-sizing.cjs");
|
|
34
35
|
const createPreviewNode_cjs_namespaceObject = require("../../utils/createPreviewNode.cjs");
|
|
36
|
+
const manifest_resolver_cjs_namespaceObject = require("../../utils/manifest-resolver.cjs");
|
|
35
37
|
const NodeUtils_cjs_namespaceObject = require("../../utils/NodeUtils.cjs");
|
|
36
38
|
const external_LoopNode_helpers_cjs_namespaceObject = require("./LoopNode.helpers.cjs");
|
|
37
39
|
const LOOP_SEQUENCE_GAP_PX = 3 * external_constants_cjs_namespaceObject.GRID_SPACING;
|
|
40
|
+
function getManifestForNode(registry, node) {
|
|
41
|
+
return node.type ? registry?.getManifest(node.type, (0, manifest_resolver_cjs_namespaceObject.getNodeTypeVersion)(node.data)) : void 0;
|
|
42
|
+
}
|
|
43
|
+
function getDataHandleConfigurations(node) {
|
|
44
|
+
const data = node.data;
|
|
45
|
+
return Array.isArray(data?.handleConfigurations) ? data.handleConfigurations : null;
|
|
46
|
+
}
|
|
47
|
+
function createLoopSequenceResolverOptions(registry) {
|
|
48
|
+
return {
|
|
49
|
+
isLoopContainerNode: (node)=>{
|
|
50
|
+
const manifest = getManifestForNode(registry, node);
|
|
51
|
+
if (manifest) return (0, external_LoopNode_helpers_cjs_namespaceObject.isLoopContainerManifest)(manifest);
|
|
52
|
+
return getDataHandleConfigurations(node)?.some((group)=>'inner' === group.boundary) ?? false;
|
|
53
|
+
},
|
|
54
|
+
getLoopContinuationTargetHandle: (node)=>{
|
|
55
|
+
const manifest = getManifestForNode(registry, node);
|
|
56
|
+
if (!manifest || !(0, external_LoopNode_helpers_cjs_namespaceObject.isLoopContainerManifest)(manifest)) return null;
|
|
57
|
+
const previewHandles = (0, external_LoopNode_helpers_cjs_namespaceObject.resolveLoopPreviewConnectionHandles)(manifest, {
|
|
58
|
+
...node.data ?? {},
|
|
59
|
+
nodeId: node.id
|
|
60
|
+
});
|
|
61
|
+
return previewHandles ? {
|
|
62
|
+
targetHandleId: previewHandles.targetHandleId
|
|
63
|
+
} : null;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function isResolvedLoopContainer(node, options) {
|
|
68
|
+
return !!node && (options?.isLoopContainerNode?.(node) ?? false);
|
|
69
|
+
}
|
|
38
70
|
function LoopNode_sequence_getNodeSize(node, fallback) {
|
|
39
71
|
return node ? (0, container_sizing_cjs_namespaceObject.getNodeDimensions)(node, fallback) : fallback;
|
|
40
72
|
}
|
|
@@ -61,23 +93,20 @@ function getContainerNode({ sourceNode, targetNode }) {
|
|
|
61
93
|
function matchesSourceHandle(edge, sourceNodeId, sourceHandleId) {
|
|
62
94
|
return edge.source === sourceNodeId && (edge.sourceHandle ?? external_constants_cjs_namespaceObject.DEFAULT_SOURCE_HANDLE_ID) === sourceHandleId;
|
|
63
95
|
}
|
|
64
|
-
function
|
|
65
|
-
if (!targetNode) return false;
|
|
66
|
-
if (sourceNode.parentId) return targetNode.parentId === sourceNode.parentId || targetNode.id === sourceNode.parentId;
|
|
67
|
-
return targetNode.parentId === sourceNode.id;
|
|
68
|
-
}
|
|
69
|
-
function resolvePreferredLoopContinuationTargetHandle(containerId, reactFlowInstance) {
|
|
96
|
+
function resolvePreferredLoopContinuationTargetHandle(containerId, reactFlowInstance, options) {
|
|
70
97
|
const nodesById = new Map(reactFlowInstance.getNodes().map((node)=>[
|
|
71
98
|
node.id,
|
|
72
99
|
node
|
|
73
100
|
]));
|
|
74
101
|
const containerNode = nodesById.get(containerId);
|
|
75
102
|
if (!containerNode) return null;
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
103
|
+
const configuredHandleId = options?.getLoopContinuationTargetHandle?.(containerNode)?.targetHandleId ?? (()=>{
|
|
104
|
+
const handleConfiguration = getDataHandleConfigurations(containerNode);
|
|
105
|
+
return handleConfiguration ? (0, external_LoopNode_helpers_cjs_namespaceObject.pickPreferredInnerHandle)((0, external_LoopNode_helpers_cjs_namespaceObject.getVisibleInnerHandleGroups)(handleConfiguration, {
|
|
106
|
+
...containerNode.data ?? {},
|
|
107
|
+
nodeId: containerNode.id
|
|
108
|
+
}), 'target')?.handle.id : null;
|
|
109
|
+
})();
|
|
81
110
|
const returningEdges = reactFlowInstance.getEdges().filter((edge)=>!(0, createPreviewNode_cjs_namespaceObject.isPreviewEdge)(edge) && edge.target === containerId).filter((edge)=>nodesById.get(edge.source)?.parentId === containerId);
|
|
82
111
|
if (configuredHandleId && (0 === returningEdges.length || returningEdges.some((edge)=>edge.targetHandle === configuredHandleId))) return {
|
|
83
112
|
targetHandleId: configuredHandleId
|
|
@@ -89,11 +118,25 @@ function resolvePreferredLoopContinuationTargetHandle(containerId, reactFlowInst
|
|
|
89
118
|
targetHandleId
|
|
90
119
|
} : null;
|
|
91
120
|
}
|
|
92
|
-
function
|
|
121
|
+
function isLoopLocalTarget(sourceNode, targetNode, nodesById, options) {
|
|
122
|
+
if (!targetNode) return false;
|
|
123
|
+
const container = getContainerNode({
|
|
124
|
+
sourceNode,
|
|
125
|
+
targetNode
|
|
126
|
+
});
|
|
127
|
+
if (!container) return false;
|
|
128
|
+
return isResolvedLoopContainer(nodesById.get(container.containerId), options);
|
|
129
|
+
}
|
|
130
|
+
function resolveLoopContinuationTarget({ sourceNodeId, sourceHandleId, reactFlowInstance, resolverOptions }) {
|
|
93
131
|
const sourceNode = reactFlowInstance.getNode(sourceNodeId);
|
|
94
132
|
if (!sourceNode) return null;
|
|
133
|
+
const nodes = reactFlowInstance.getNodes();
|
|
134
|
+
const nodesById = new Map(nodes.map((node)=>[
|
|
135
|
+
node.id,
|
|
136
|
+
node
|
|
137
|
+
]));
|
|
95
138
|
const outgoingEdges = reactFlowInstance.getEdges().filter((edge)=>!(0, createPreviewNode_cjs_namespaceObject.isPreviewEdge)(edge) && matchesSourceHandle(edge, sourceNodeId, sourceHandleId));
|
|
96
|
-
const loopLocalOutgoingEdges = outgoingEdges.filter((edge)=>isLoopLocalTarget(sourceNode,
|
|
139
|
+
const loopLocalOutgoingEdges = outgoingEdges.filter((edge)=>isLoopLocalTarget(sourceNode, nodesById.get(edge.target), nodesById, resolverOptions));
|
|
97
140
|
if (1 === outgoingEdges.length && 1 === loopLocalOutgoingEdges.length) {
|
|
98
141
|
const edge = loopLocalOutgoingEdges[0];
|
|
99
142
|
return {
|
|
@@ -107,7 +150,8 @@ function resolveLoopContinuationTarget({ sourceNodeId, sourceHandleId, reactFlow
|
|
|
107
150
|
type: 'ambiguous'
|
|
108
151
|
};
|
|
109
152
|
if (!sourceNode.parentId || outgoingEdges.length > 0) return null;
|
|
110
|
-
|
|
153
|
+
if (!isResolvedLoopContainer(nodesById.get(sourceNode.parentId), resolverOptions)) return null;
|
|
154
|
+
const targetHandle = resolvePreferredLoopContinuationTargetHandle(sourceNode.parentId, reactFlowInstance, resolverOptions);
|
|
111
155
|
if (!targetHandle) return {
|
|
112
156
|
type: 'ambiguous'
|
|
113
157
|
};
|
|
@@ -195,7 +239,7 @@ function getSequencePreviewTopLeft({ containerNode, sourceNode, targetNode, node
|
|
|
195
239
|
function createLoopSequencePreviewPlacement({ sourceNodeId, targetNodeId, reactFlowInstance, previewNodeSize = {
|
|
196
240
|
width: external_constants_cjs_namespaceObject.DEFAULT_NODE_SIZE,
|
|
197
241
|
height: external_constants_cjs_namespaceObject.DEFAULT_NODE_SIZE
|
|
198
|
-
}, avoidSiblings = false }) {
|
|
242
|
+
}, avoidSiblings = false, resolverOptions }) {
|
|
199
243
|
const sourceNode = reactFlowInstance.getNode(sourceNodeId);
|
|
200
244
|
const targetNode = targetNodeId ? reactFlowInstance.getNode(targetNodeId) : void 0;
|
|
201
245
|
if (!sourceNode) return null;
|
|
@@ -205,7 +249,7 @@ function createLoopSequencePreviewPlacement({ sourceNodeId, targetNodeId, reactF
|
|
|
205
249
|
});
|
|
206
250
|
if (!container) return null;
|
|
207
251
|
const containerNode = reactFlowInstance.getNode(container.containerId);
|
|
208
|
-
if (!containerNode) return null;
|
|
252
|
+
if (!isResolvedLoopContainer(containerNode, resolverOptions)) return null;
|
|
209
253
|
const containerAbsolutePosition = (0, NodeUtils_cjs_namespaceObject.getAbsolutePosition)(containerNode, reactFlowInstance.getNodes());
|
|
210
254
|
const nodes = reactFlowInstance.getNodes();
|
|
211
255
|
const topLeft = getSequencePreviewTopLeft({
|
|
@@ -225,9 +269,10 @@ function createLoopSequencePreviewPlacement({ sourceNodeId, targetNodeId, reactF
|
|
|
225
269
|
}
|
|
226
270
|
};
|
|
227
271
|
}
|
|
228
|
-
function getLoopSequencePlacementFromPreviewGraph(previewNode, connections) {
|
|
272
|
+
function getLoopSequencePlacementFromPreviewGraph(previewNode, connections, options = {}) {
|
|
229
273
|
const containerId = previewNode.parentId;
|
|
230
274
|
if (!containerId) return null;
|
|
275
|
+
if (!(options.isLoopContainerId?.(containerId) ?? false)) return null;
|
|
231
276
|
const sourceConnections = connections.filter((connection)=>!connection.addNewNodeAsSource);
|
|
232
277
|
const targetConnections = connections.filter((connection)=>connection.addNewNodeAsSource);
|
|
233
278
|
if (1 !== sourceConnections.length || 1 !== targetConnections.length) return null;
|
|
@@ -240,36 +285,36 @@ function getLoopSequencePlacementFromPreviewGraph(previewNode, connections) {
|
|
|
240
285
|
mode: sourceNodeId === containerId && targetNodeId === containerId ? 'first-child' : 'sequence'
|
|
241
286
|
};
|
|
242
287
|
}
|
|
243
|
-
function resolveLoopAddNodePreview({ sourceNodeId, sourceHandleId, reactFlowInstance }) {
|
|
288
|
+
function resolveLoopAddNodePreview({ sourceNodeId, sourceHandleId, reactFlowInstance, resolverOptions }) {
|
|
244
289
|
const loopContinuation = resolveLoopContinuationTarget({
|
|
245
290
|
sourceNodeId,
|
|
246
291
|
sourceHandleId,
|
|
247
|
-
reactFlowInstance
|
|
292
|
+
reactFlowInstance,
|
|
293
|
+
resolverOptions
|
|
248
294
|
});
|
|
249
|
-
if (loopContinuation?.type === 'ambiguous') return {
|
|
250
|
-
action: 'skip'
|
|
251
|
-
};
|
|
252
|
-
if (loopContinuation?.type !== 'target') return {
|
|
295
|
+
if (loopContinuation?.type === 'ambiguous' || loopContinuation?.type !== 'target') return {
|
|
253
296
|
action: 'continue'
|
|
254
297
|
};
|
|
255
298
|
const loopSequencePlacement = createLoopSequencePreviewPlacement({
|
|
256
299
|
sourceNodeId,
|
|
257
300
|
targetNodeId: loopContinuation.targetNodeId,
|
|
258
301
|
reactFlowInstance,
|
|
259
|
-
avoidSiblings: !loopContinuation.removedEdge
|
|
302
|
+
avoidSiblings: !loopContinuation.removedEdge,
|
|
303
|
+
resolverOptions
|
|
260
304
|
});
|
|
305
|
+
if (!loopSequencePlacement) return {
|
|
306
|
+
action: 'continue'
|
|
307
|
+
};
|
|
261
308
|
return {
|
|
262
309
|
action: 'create-preview',
|
|
263
310
|
previewGraphOptions: {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
}
|
|
272
|
-
} : {}
|
|
311
|
+
position: loopSequencePlacement.centerPosition,
|
|
312
|
+
positionMode: 'center',
|
|
313
|
+
containerId: loopSequencePlacement.containerId,
|
|
314
|
+
...loopContinuation.removedEdge ? {
|
|
315
|
+
data: {
|
|
316
|
+
originalEdge: loopContinuation.removedEdge
|
|
317
|
+
}
|
|
273
318
|
} : {},
|
|
274
319
|
targetNodeId: loopContinuation.targetNodeId,
|
|
275
320
|
targetHandleId: loopContinuation.targetHandleId,
|
|
@@ -372,11 +417,13 @@ function resolveLoopSequenceMaterializedNodes({ nodes, edges, insertedNode, plac
|
|
|
372
417
|
});
|
|
373
418
|
}
|
|
374
419
|
exports.createLoopSequencePreviewPlacement = __webpack_exports__.createLoopSequencePreviewPlacement;
|
|
420
|
+
exports.createLoopSequenceResolverOptions = __webpack_exports__.createLoopSequenceResolverOptions;
|
|
375
421
|
exports.getLoopSequencePlacementFromPreviewGraph = __webpack_exports__.getLoopSequencePlacementFromPreviewGraph;
|
|
376
422
|
exports.resolveLoopAddNodePreview = __webpack_exports__.resolveLoopAddNodePreview;
|
|
377
423
|
exports.resolveLoopSequenceMaterializedNodes = __webpack_exports__.resolveLoopSequenceMaterializedNodes;
|
|
378
424
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
379
425
|
"createLoopSequencePreviewPlacement",
|
|
426
|
+
"createLoopSequenceResolverOptions",
|
|
380
427
|
"getLoopSequencePlacementFromPreviewGraph",
|
|
381
428
|
"resolveLoopAddNodePreview",
|
|
382
429
|
"resolveLoopSequenceMaterializedNodes"
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Edge, Node, ReactFlowInstance } from '../../xyflow/react.ts';
|
|
2
|
+
import type { NodeTypeRegistry } from '../../core';
|
|
2
3
|
import type { PreviewNodeConnectionInfo } from '../../hooks';
|
|
3
4
|
import type { NodeDimensions } from '../../utils/container-sizing';
|
|
4
5
|
import type { PreviewGraphOverrides } from '../../utils/createPreviewGraph';
|
|
@@ -21,21 +22,30 @@ export type LoopAddNodePreviewDecision = {
|
|
|
21
22
|
} | {
|
|
22
23
|
action: 'create-preview';
|
|
23
24
|
previewGraphOptions: LoopAddNodePreviewOptions;
|
|
24
|
-
} | {
|
|
25
|
-
action: 'skip';
|
|
26
25
|
};
|
|
27
|
-
export
|
|
26
|
+
export interface LoopSequenceResolverOptions {
|
|
27
|
+
isLoopContainerNode?: (node: Node) => boolean;
|
|
28
|
+
getLoopContinuationTargetHandle?: (containerNode: Node) => {
|
|
29
|
+
targetHandleId?: string | null;
|
|
30
|
+
} | null;
|
|
31
|
+
}
|
|
32
|
+
export declare function createLoopSequenceResolverOptions(registry: NodeTypeRegistry | null | undefined): LoopSequenceResolverOptions;
|
|
33
|
+
export declare function createLoopSequencePreviewPlacement({ sourceNodeId, targetNodeId, reactFlowInstance, previewNodeSize, avoidSiblings, resolverOptions, }: {
|
|
28
34
|
sourceNodeId: string;
|
|
29
35
|
targetNodeId?: string;
|
|
30
36
|
reactFlowInstance: ReactFlowInstance;
|
|
31
37
|
previewNodeSize?: NodeDimensions;
|
|
32
38
|
avoidSiblings?: boolean;
|
|
39
|
+
resolverOptions?: LoopSequenceResolverOptions;
|
|
33
40
|
}): LoopSequencePreviewPlacement | null;
|
|
34
|
-
export declare function getLoopSequencePlacementFromPreviewGraph(previewNode: Pick<Node, 'parentId'>, connections: PreviewNodeConnectionInfo[]
|
|
35
|
-
|
|
41
|
+
export declare function getLoopSequencePlacementFromPreviewGraph(previewNode: Pick<Node, 'parentId'>, connections: PreviewNodeConnectionInfo[], options?: {
|
|
42
|
+
isLoopContainerId?: (containerId: string) => boolean;
|
|
43
|
+
}): LoopSequencePlacementData | null;
|
|
44
|
+
export declare function resolveLoopAddNodePreview({ sourceNodeId, sourceHandleId, reactFlowInstance, resolverOptions, }: {
|
|
36
45
|
sourceNodeId: string;
|
|
37
46
|
sourceHandleId: string;
|
|
38
47
|
reactFlowInstance: ReactFlowInstance;
|
|
48
|
+
resolverOptions?: LoopSequenceResolverOptions;
|
|
39
49
|
}): LoopAddNodePreviewDecision;
|
|
40
50
|
export declare function resolveLoopSequenceMaterializedNodes({ nodes, edges, insertedNode, placement, getNodeSize, }: {
|
|
41
51
|
nodes: Node[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoopNode.sequence.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE9F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"LoopNode.sequence.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNode.sequence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAE9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAmB5E,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,aAAa,GAAG,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,MAAM,MAAM,yBAAyB,GAAG,qBAAqB,CAAC;AAQ9D,MAAM,MAAM,0BAA0B,GAClC;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GACtB;IAAE,MAAM,EAAE,gBAAgB,CAAC;IAAC,mBAAmB,EAAE,yBAAyB,CAAA;CAAE,CAAC;AAEjF,MAAM,WAAW,2BAA2B;IAC1C,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;IAC9C,+BAA+B,CAAC,EAAE,CAChC,aAAa,EAAE,IAAI,KAChB;QAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CAChD;AAuBD,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC5C,2BAA2B,CAsB7B;AAiUD,wBAAgB,kCAAkC,CAAC,EACjD,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAyE,EACzE,aAAqB,EACrB,eAAe,GAChB,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,2BAA2B,CAAC;CAC/C,GAAG,4BAA4B,GAAG,IAAI,CAiCtC;AAMD,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EACnC,WAAW,EAAE,yBAAyB,EAAE,EACxC,OAAO,GAAE;IAAE,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAA;CAAO,GACrE,yBAAyB,GAAG,IAAI,CAqBlC;AASD,wBAAgB,yBAAyB,CAAC,EACxC,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,EAAE;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,CAAC,EAAE,2BAA2B,CAAC;CAC/C,GAAG,0BAA0B,CA0C7B;AA2ED,wBAAgB,oCAAoC,CAAC,EACnD,KAAK,EACL,KAAK,EACL,YAAY,EACZ,SAAS,EACT,WAA+B,GAChC,EAAE;IACD,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,YAAY,EAAE,IAAI,CAAC;IACnB,SAAS,EAAE,yBAAyB,CAAC;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,cAAc,CAAC;CAC9C,GAAG,IAAI,EAAE,GAAG,IAAI,CAqFhB"}
|
|
@@ -1,9 +1,40 @@
|
|
|
1
1
|
import { DEFAULT_NODE_SIZE, DEFAULT_SOURCE_HANDLE_ID, GRID_SPACING } from "../../constants.js";
|
|
2
2
|
import { getNodeDimensions } from "../../utils/container-sizing.js";
|
|
3
3
|
import { isPreviewEdge } from "../../utils/createPreviewNode.js";
|
|
4
|
+
import { getNodeTypeVersion } from "../../utils/manifest-resolver.js";
|
|
4
5
|
import { clamp, getAbsolutePosition, snapToGrid, snapUpToGrid } from "../../utils/NodeUtils.js";
|
|
5
|
-
import { getLoopChildSafeArea, getVisibleInnerHandleGroups, pickPreferredInnerHandle } from "./LoopNode.helpers.js";
|
|
6
|
+
import { getLoopChildSafeArea, getVisibleInnerHandleGroups, isLoopContainerManifest, pickPreferredInnerHandle, resolveLoopPreviewConnectionHandles } from "./LoopNode.helpers.js";
|
|
6
7
|
const LOOP_SEQUENCE_GAP_PX = 3 * GRID_SPACING;
|
|
8
|
+
function getManifestForNode(registry, node) {
|
|
9
|
+
return node.type ? registry?.getManifest(node.type, getNodeTypeVersion(node.data)) : void 0;
|
|
10
|
+
}
|
|
11
|
+
function getDataHandleConfigurations(node) {
|
|
12
|
+
const data = node.data;
|
|
13
|
+
return Array.isArray(data?.handleConfigurations) ? data.handleConfigurations : null;
|
|
14
|
+
}
|
|
15
|
+
function createLoopSequenceResolverOptions(registry) {
|
|
16
|
+
return {
|
|
17
|
+
isLoopContainerNode: (node)=>{
|
|
18
|
+
const manifest = getManifestForNode(registry, node);
|
|
19
|
+
if (manifest) return isLoopContainerManifest(manifest);
|
|
20
|
+
return getDataHandleConfigurations(node)?.some((group)=>'inner' === group.boundary) ?? false;
|
|
21
|
+
},
|
|
22
|
+
getLoopContinuationTargetHandle: (node)=>{
|
|
23
|
+
const manifest = getManifestForNode(registry, node);
|
|
24
|
+
if (!manifest || !isLoopContainerManifest(manifest)) return null;
|
|
25
|
+
const previewHandles = resolveLoopPreviewConnectionHandles(manifest, {
|
|
26
|
+
...node.data ?? {},
|
|
27
|
+
nodeId: node.id
|
|
28
|
+
});
|
|
29
|
+
return previewHandles ? {
|
|
30
|
+
targetHandleId: previewHandles.targetHandleId
|
|
31
|
+
} : null;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function isResolvedLoopContainer(node, options) {
|
|
36
|
+
return !!node && (options?.isLoopContainerNode?.(node) ?? false);
|
|
37
|
+
}
|
|
7
38
|
function LoopNode_sequence_getNodeSize(node, fallback) {
|
|
8
39
|
return node ? getNodeDimensions(node, fallback) : fallback;
|
|
9
40
|
}
|
|
@@ -30,23 +61,20 @@ function getContainerNode({ sourceNode, targetNode }) {
|
|
|
30
61
|
function matchesSourceHandle(edge, sourceNodeId, sourceHandleId) {
|
|
31
62
|
return edge.source === sourceNodeId && (edge.sourceHandle ?? DEFAULT_SOURCE_HANDLE_ID) === sourceHandleId;
|
|
32
63
|
}
|
|
33
|
-
function
|
|
34
|
-
if (!targetNode) return false;
|
|
35
|
-
if (sourceNode.parentId) return targetNode.parentId === sourceNode.parentId || targetNode.id === sourceNode.parentId;
|
|
36
|
-
return targetNode.parentId === sourceNode.id;
|
|
37
|
-
}
|
|
38
|
-
function resolvePreferredLoopContinuationTargetHandle(containerId, reactFlowInstance) {
|
|
64
|
+
function resolvePreferredLoopContinuationTargetHandle(containerId, reactFlowInstance, options) {
|
|
39
65
|
const nodesById = new Map(reactFlowInstance.getNodes().map((node)=>[
|
|
40
66
|
node.id,
|
|
41
67
|
node
|
|
42
68
|
]));
|
|
43
69
|
const containerNode = nodesById.get(containerId);
|
|
44
70
|
if (!containerNode) return null;
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
71
|
+
const configuredHandleId = options?.getLoopContinuationTargetHandle?.(containerNode)?.targetHandleId ?? (()=>{
|
|
72
|
+
const handleConfiguration = getDataHandleConfigurations(containerNode);
|
|
73
|
+
return handleConfiguration ? pickPreferredInnerHandle(getVisibleInnerHandleGroups(handleConfiguration, {
|
|
74
|
+
...containerNode.data ?? {},
|
|
75
|
+
nodeId: containerNode.id
|
|
76
|
+
}), 'target')?.handle.id : null;
|
|
77
|
+
})();
|
|
50
78
|
const returningEdges = reactFlowInstance.getEdges().filter((edge)=>!isPreviewEdge(edge) && edge.target === containerId).filter((edge)=>nodesById.get(edge.source)?.parentId === containerId);
|
|
51
79
|
if (configuredHandleId && (0 === returningEdges.length || returningEdges.some((edge)=>edge.targetHandle === configuredHandleId))) return {
|
|
52
80
|
targetHandleId: configuredHandleId
|
|
@@ -58,11 +86,25 @@ function resolvePreferredLoopContinuationTargetHandle(containerId, reactFlowInst
|
|
|
58
86
|
targetHandleId
|
|
59
87
|
} : null;
|
|
60
88
|
}
|
|
61
|
-
function
|
|
89
|
+
function isLoopLocalTarget(sourceNode, targetNode, nodesById, options) {
|
|
90
|
+
if (!targetNode) return false;
|
|
91
|
+
const container = getContainerNode({
|
|
92
|
+
sourceNode,
|
|
93
|
+
targetNode
|
|
94
|
+
});
|
|
95
|
+
if (!container) return false;
|
|
96
|
+
return isResolvedLoopContainer(nodesById.get(container.containerId), options);
|
|
97
|
+
}
|
|
98
|
+
function resolveLoopContinuationTarget({ sourceNodeId, sourceHandleId, reactFlowInstance, resolverOptions }) {
|
|
62
99
|
const sourceNode = reactFlowInstance.getNode(sourceNodeId);
|
|
63
100
|
if (!sourceNode) return null;
|
|
101
|
+
const nodes = reactFlowInstance.getNodes();
|
|
102
|
+
const nodesById = new Map(nodes.map((node)=>[
|
|
103
|
+
node.id,
|
|
104
|
+
node
|
|
105
|
+
]));
|
|
64
106
|
const outgoingEdges = reactFlowInstance.getEdges().filter((edge)=>!isPreviewEdge(edge) && matchesSourceHandle(edge, sourceNodeId, sourceHandleId));
|
|
65
|
-
const loopLocalOutgoingEdges = outgoingEdges.filter((edge)=>isLoopLocalTarget(sourceNode,
|
|
107
|
+
const loopLocalOutgoingEdges = outgoingEdges.filter((edge)=>isLoopLocalTarget(sourceNode, nodesById.get(edge.target), nodesById, resolverOptions));
|
|
66
108
|
if (1 === outgoingEdges.length && 1 === loopLocalOutgoingEdges.length) {
|
|
67
109
|
const edge = loopLocalOutgoingEdges[0];
|
|
68
110
|
return {
|
|
@@ -76,7 +118,8 @@ function resolveLoopContinuationTarget({ sourceNodeId, sourceHandleId, reactFlow
|
|
|
76
118
|
type: 'ambiguous'
|
|
77
119
|
};
|
|
78
120
|
if (!sourceNode.parentId || outgoingEdges.length > 0) return null;
|
|
79
|
-
|
|
121
|
+
if (!isResolvedLoopContainer(nodesById.get(sourceNode.parentId), resolverOptions)) return null;
|
|
122
|
+
const targetHandle = resolvePreferredLoopContinuationTargetHandle(sourceNode.parentId, reactFlowInstance, resolverOptions);
|
|
80
123
|
if (!targetHandle) return {
|
|
81
124
|
type: 'ambiguous'
|
|
82
125
|
};
|
|
@@ -164,7 +207,7 @@ function getSequencePreviewTopLeft({ containerNode, sourceNode, targetNode, node
|
|
|
164
207
|
function createLoopSequencePreviewPlacement({ sourceNodeId, targetNodeId, reactFlowInstance, previewNodeSize = {
|
|
165
208
|
width: DEFAULT_NODE_SIZE,
|
|
166
209
|
height: DEFAULT_NODE_SIZE
|
|
167
|
-
}, avoidSiblings = false }) {
|
|
210
|
+
}, avoidSiblings = false, resolverOptions }) {
|
|
168
211
|
const sourceNode = reactFlowInstance.getNode(sourceNodeId);
|
|
169
212
|
const targetNode = targetNodeId ? reactFlowInstance.getNode(targetNodeId) : void 0;
|
|
170
213
|
if (!sourceNode) return null;
|
|
@@ -174,7 +217,7 @@ function createLoopSequencePreviewPlacement({ sourceNodeId, targetNodeId, reactF
|
|
|
174
217
|
});
|
|
175
218
|
if (!container) return null;
|
|
176
219
|
const containerNode = reactFlowInstance.getNode(container.containerId);
|
|
177
|
-
if (!containerNode) return null;
|
|
220
|
+
if (!isResolvedLoopContainer(containerNode, resolverOptions)) return null;
|
|
178
221
|
const containerAbsolutePosition = getAbsolutePosition(containerNode, reactFlowInstance.getNodes());
|
|
179
222
|
const nodes = reactFlowInstance.getNodes();
|
|
180
223
|
const topLeft = getSequencePreviewTopLeft({
|
|
@@ -194,9 +237,10 @@ function createLoopSequencePreviewPlacement({ sourceNodeId, targetNodeId, reactF
|
|
|
194
237
|
}
|
|
195
238
|
};
|
|
196
239
|
}
|
|
197
|
-
function getLoopSequencePlacementFromPreviewGraph(previewNode, connections) {
|
|
240
|
+
function getLoopSequencePlacementFromPreviewGraph(previewNode, connections, options = {}) {
|
|
198
241
|
const containerId = previewNode.parentId;
|
|
199
242
|
if (!containerId) return null;
|
|
243
|
+
if (!(options.isLoopContainerId?.(containerId) ?? false)) return null;
|
|
200
244
|
const sourceConnections = connections.filter((connection)=>!connection.addNewNodeAsSource);
|
|
201
245
|
const targetConnections = connections.filter((connection)=>connection.addNewNodeAsSource);
|
|
202
246
|
if (1 !== sourceConnections.length || 1 !== targetConnections.length) return null;
|
|
@@ -209,36 +253,36 @@ function getLoopSequencePlacementFromPreviewGraph(previewNode, connections) {
|
|
|
209
253
|
mode: sourceNodeId === containerId && targetNodeId === containerId ? 'first-child' : 'sequence'
|
|
210
254
|
};
|
|
211
255
|
}
|
|
212
|
-
function resolveLoopAddNodePreview({ sourceNodeId, sourceHandleId, reactFlowInstance }) {
|
|
256
|
+
function resolveLoopAddNodePreview({ sourceNodeId, sourceHandleId, reactFlowInstance, resolverOptions }) {
|
|
213
257
|
const loopContinuation = resolveLoopContinuationTarget({
|
|
214
258
|
sourceNodeId,
|
|
215
259
|
sourceHandleId,
|
|
216
|
-
reactFlowInstance
|
|
260
|
+
reactFlowInstance,
|
|
261
|
+
resolverOptions
|
|
217
262
|
});
|
|
218
|
-
if (loopContinuation?.type === 'ambiguous') return {
|
|
219
|
-
action: 'skip'
|
|
220
|
-
};
|
|
221
|
-
if (loopContinuation?.type !== 'target') return {
|
|
263
|
+
if (loopContinuation?.type === 'ambiguous' || loopContinuation?.type !== 'target') return {
|
|
222
264
|
action: 'continue'
|
|
223
265
|
};
|
|
224
266
|
const loopSequencePlacement = createLoopSequencePreviewPlacement({
|
|
225
267
|
sourceNodeId,
|
|
226
268
|
targetNodeId: loopContinuation.targetNodeId,
|
|
227
269
|
reactFlowInstance,
|
|
228
|
-
avoidSiblings: !loopContinuation.removedEdge
|
|
270
|
+
avoidSiblings: !loopContinuation.removedEdge,
|
|
271
|
+
resolverOptions
|
|
229
272
|
});
|
|
273
|
+
if (!loopSequencePlacement) return {
|
|
274
|
+
action: 'continue'
|
|
275
|
+
};
|
|
230
276
|
return {
|
|
231
277
|
action: 'create-preview',
|
|
232
278
|
previewGraphOptions: {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
} : {}
|
|
279
|
+
position: loopSequencePlacement.centerPosition,
|
|
280
|
+
positionMode: 'center',
|
|
281
|
+
containerId: loopSequencePlacement.containerId,
|
|
282
|
+
...loopContinuation.removedEdge ? {
|
|
283
|
+
data: {
|
|
284
|
+
originalEdge: loopContinuation.removedEdge
|
|
285
|
+
}
|
|
242
286
|
} : {},
|
|
243
287
|
targetNodeId: loopContinuation.targetNodeId,
|
|
244
288
|
targetHandleId: loopContinuation.targetHandleId,
|
|
@@ -340,4 +384,4 @@ function resolveLoopSequenceMaterializedNodes({ nodes, edges, insertedNode, plac
|
|
|
340
384
|
return node;
|
|
341
385
|
});
|
|
342
386
|
}
|
|
343
|
-
export { createLoopSequencePreviewPlacement, getLoopSequencePlacementFromPreviewGraph, resolveLoopAddNodePreview, resolveLoopSequenceMaterializedNodes };
|
|
387
|
+
export { createLoopSequencePreviewPlacement, createLoopSequenceResolverOptions, getLoopSequencePlacementFromPreviewGraph, resolveLoopAddNodePreview, resolveLoopSequenceMaterializedNodes };
|
|
@@ -32,7 +32,10 @@ function showCenteredContainerPreview({ containerId, reactFlowInstance, previewH
|
|
|
32
32
|
const placement = (0, external_LoopNode_sequence_cjs_namespaceObject.createLoopSequencePreviewPlacement)({
|
|
33
33
|
sourceNodeId: containerId,
|
|
34
34
|
targetNodeId: containerId,
|
|
35
|
-
reactFlowInstance
|
|
35
|
+
reactFlowInstance,
|
|
36
|
+
resolverOptions: {
|
|
37
|
+
isLoopContainerNode: (node)=>node.id === containerId
|
|
38
|
+
}
|
|
36
39
|
});
|
|
37
40
|
if (!placement) return;
|
|
38
41
|
(0, createPreviewGraph_cjs_namespaceObject.showPreviewGraph)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoopNodePreview.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNodePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAElF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAGvE,wBAAgB,4BAA4B,CAAC,EAC3C,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,4BAA4B,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,
|
|
1
|
+
{"version":3,"file":"LoopNodePreview.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/LoopNode/LoopNodePreview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAElF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAGvE,wBAAgB,4BAA4B,CAAC,EAC3C,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,EAAE;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,4BAA4B,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,QAuBA"}
|
|
@@ -4,7 +4,10 @@ function showCenteredContainerPreview({ containerId, reactFlowInstance, previewH
|
|
|
4
4
|
const placement = createLoopSequencePreviewPlacement({
|
|
5
5
|
sourceNodeId: containerId,
|
|
6
6
|
targetNodeId: containerId,
|
|
7
|
-
reactFlowInstance
|
|
7
|
+
reactFlowInstance,
|
|
8
|
+
resolverOptions: {
|
|
9
|
+
isLoopContainerNode: (node)=>node.id === containerId
|
|
10
|
+
}
|
|
8
11
|
});
|
|
9
12
|
if (!placement) return;
|
|
10
13
|
showPreviewGraph({
|
|
@@ -29,6 +29,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
29
|
const react_cjs_namespaceObject = require("../../../xyflow/react.cjs");
|
|
30
30
|
const external_react_namespaceObject = require("react");
|
|
31
31
|
const external_constants_cjs_namespaceObject = require("../../../constants.cjs");
|
|
32
|
+
const index_cjs_namespaceObject = require("../../../core/index.cjs");
|
|
32
33
|
const createPreviewGraph_cjs_namespaceObject = require("../../../utils/createPreviewGraph.cjs");
|
|
33
34
|
const createPreviewNode_cjs_namespaceObject = require("../../../utils/createPreviewNode.cjs");
|
|
34
35
|
const BaseCanvasModeProvider_cjs_namespaceObject = require("../../BaseCanvas/BaseCanvasModeProvider.cjs");
|
|
@@ -36,8 +37,12 @@ const LoopNode_sequence_cjs_namespaceObject = require("../../LoopNode/LoopNode.s
|
|
|
36
37
|
const external_useEdgeToolbarPositioning_cjs_namespaceObject = require("./useEdgeToolbarPositioning.cjs");
|
|
37
38
|
function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target, sourceHandleId, targetHandleId, sourcePosition, targetPosition, ignoredNodeTypes }) {
|
|
38
39
|
const reactFlow = (0, react_cjs_namespaceObject.useReactFlow)();
|
|
40
|
+
const registry = (0, index_cjs_namespaceObject.useOptionalNodeTypeRegistry)();
|
|
39
41
|
const { mode } = (0, BaseCanvasModeProvider_cjs_namespaceObject.useBaseCanvasMode)();
|
|
40
42
|
const isDesignMode = 'design' === mode;
|
|
43
|
+
const resolverOptions = (0, external_react_namespaceObject.useMemo)(()=>(0, LoopNode_sequence_cjs_namespaceObject.createLoopSequenceResolverOptions)(registry), [
|
|
44
|
+
registry
|
|
45
|
+
]);
|
|
41
46
|
const previewEdge = (0, createPreviewNode_cjs_namespaceObject.isPreviewEdge)({
|
|
42
47
|
id: edgeId,
|
|
43
48
|
source,
|
|
@@ -60,7 +65,8 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
60
65
|
const loopSequencePlacement = (0, LoopNode_sequence_cjs_namespaceObject.createLoopSequencePreviewPlacement)({
|
|
61
66
|
sourceNodeId: source,
|
|
62
67
|
targetNodeId: target,
|
|
63
|
-
reactFlowInstance: reactFlow
|
|
68
|
+
reactFlowInstance: reactFlow,
|
|
69
|
+
resolverOptions
|
|
64
70
|
});
|
|
65
71
|
(0, createPreviewGraph_cjs_namespaceObject.showPreviewGraph)({
|
|
66
72
|
sourceNodeId: source,
|
|
@@ -89,7 +95,8 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
89
95
|
target,
|
|
90
96
|
targetHandleId,
|
|
91
97
|
edgeId,
|
|
92
|
-
ignoredNodeTypes
|
|
98
|
+
ignoredNodeTypes,
|
|
99
|
+
resolverOptions
|
|
93
100
|
]);
|
|
94
101
|
const config = (0, external_react_namespaceObject.useMemo)(()=>({
|
|
95
102
|
actions: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEdgeToolbarState.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAgB,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"useEdgeToolbarState.d.ts","sourceRoot":"","sources":["../../../../../src/canvas/components/Toolbar/EdgeToolbar/useEdgeToolbarState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAgB,MAAM,0CAA0C,CAAC;AAWlG,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAGtF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9D,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACnD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;CAC3D;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,cAAc,EACd,SAAS,EACT,MAAM,EACN,MAAM,EACN,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,EAAE,wBAAwB,GAAG,gBAAgB,CA2F7C"}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { useReactFlow } from "../../../xyflow/react.js";
|
|
2
2
|
import { useCallback, useMemo } from "react";
|
|
3
3
|
import { DEFAULT_SOURCE_HANDLE_ID } from "../../../constants.js";
|
|
4
|
+
import { useOptionalNodeTypeRegistry } from "../../../core/index.js";
|
|
4
5
|
import { showPreviewGraph } from "../../../utils/createPreviewGraph.js";
|
|
5
6
|
import { isPreviewEdge } from "../../../utils/createPreviewNode.js";
|
|
6
7
|
import { useBaseCanvasMode } from "../../BaseCanvas/BaseCanvasModeProvider.js";
|
|
7
|
-
import { createLoopSequencePreviewPlacement } from "../../LoopNode/LoopNode.sequence.js";
|
|
8
|
+
import { createLoopSequencePreviewPlacement, createLoopSequenceResolverOptions } from "../../LoopNode/LoopNode.sequence.js";
|
|
8
9
|
import { useEdgeToolbarPositioning } from "./useEdgeToolbarPositioning.js";
|
|
9
10
|
function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target, sourceHandleId, targetHandleId, sourcePosition, targetPosition, ignoredNodeTypes }) {
|
|
10
11
|
const reactFlow = useReactFlow();
|
|
12
|
+
const registry = useOptionalNodeTypeRegistry();
|
|
11
13
|
const { mode } = useBaseCanvasMode();
|
|
12
14
|
const isDesignMode = 'design' === mode;
|
|
15
|
+
const resolverOptions = useMemo(()=>createLoopSequenceResolverOptions(registry), [
|
|
16
|
+
registry
|
|
17
|
+
]);
|
|
13
18
|
const previewEdge = isPreviewEdge({
|
|
14
19
|
id: edgeId,
|
|
15
20
|
source,
|
|
@@ -32,7 +37,8 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
32
37
|
const loopSequencePlacement = createLoopSequencePreviewPlacement({
|
|
33
38
|
sourceNodeId: source,
|
|
34
39
|
targetNodeId: target,
|
|
35
|
-
reactFlowInstance: reactFlow
|
|
40
|
+
reactFlowInstance: reactFlow,
|
|
41
|
+
resolverOptions
|
|
36
42
|
});
|
|
37
43
|
showPreviewGraph({
|
|
38
44
|
sourceNodeId: source,
|
|
@@ -61,7 +67,8 @@ function useEdgeToolbarState({ edgeId, pathElementRef, isHovered, source, target
|
|
|
61
67
|
target,
|
|
62
68
|
targetHandleId,
|
|
63
69
|
edgeId,
|
|
64
|
-
ignoredNodeTypes
|
|
70
|
+
ignoredNodeTypes,
|
|
71
|
+
resolverOptions
|
|
65
72
|
]);
|
|
66
73
|
const config = useMemo(()=>({
|
|
67
74
|
actions: [
|
|
@@ -225,7 +225,12 @@ class NodeTypeRegistry {
|
|
|
225
225
|
type: nodeItemManifest.nodeType,
|
|
226
226
|
category: nodeItemManifest.category
|
|
227
227
|
};
|
|
228
|
-
const defaultNodeItemHandle =
|
|
228
|
+
const defaultNodeItemHandle = (0, index_cjs_namespaceObject.getNodeHandleForPreviewConnection)({
|
|
229
|
+
manifest: nodeItemManifest,
|
|
230
|
+
connection,
|
|
231
|
+
connections: previewNodeConnectionInfo,
|
|
232
|
+
getDefaultHandle: (handleType)=>this.getDefaultHandle(nodeType, handleType)
|
|
233
|
+
});
|
|
229
234
|
if (!defaultNodeItemHandle) return false;
|
|
230
235
|
const connectionValidationData = connection.addNewNodeAsSource ? {
|
|
231
236
|
sourceNode: nodeToValidateData,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeTypeRegistry.d.ts","sourceRoot":"","sources":["../../../src/canvas/core/NodeTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeTypeRegistry.d.ts","sourceRoot":"","sources":["../../../src/canvas/core/NodeTypeRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAOhG,OAAO,EAAE,YAAY,EAA4B,MAAM,gBAAgB,CAAC;AAGxE,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;CAC3B;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,iBAAiB,CAAmC;IAC5D,OAAO,CAAC,wBAAwB,CAAkC;IAClE,OAAO,CAAC,kBAAkB,CAAqD;IAC/E,OAAO,CAAC,eAAe,CAAiD;IACxE,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,iBAAiB;IAYzB,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE;IA8B3C,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE;IAyErF,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAWzE,eAAe,IAAI,YAAY,EAAE;IAQjC,mBAAmB,IAAI,YAAY,EAAE;IAQrC,gBAAgB,IAAI,MAAM,EAAE;IAQ5B,eAAe,IAAI,MAAM,EAAE;IAO3B,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW;IAQrE,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAC/B,OAAO,CAAC,EAAE,MAAM,GACf,cAAc,GAAG,SAAS;IAW7B,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY;IAqCvF,eAAe,IAAI,YAAY,GAAG,IAAI;IAOtC,KAAK,IAAI,IAAI;IAyBb,4BAA4B,CAC1B,UAAU,EAAE,MAAM,EAClB,yBAAyB,EAAE,yBAAyB,EAAE,GAAG,IAAI,GAAG,SAAS,GACxE,OAAO;IA6CV,wBAAwB,CACtB,QAAQ,EAAE,MAAM,EAChB,yBAAyB,EAAE,yBAAyB,EAAE,GAAG,IAAI,GAAG,SAAS;IAkE3E,OAAO,CAAC,yBAAyB;IAqCjC,cAAc,CAAC,OAAO,EAAE;QACtB,WAAW,CAAC,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAAC;QACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,QAAQ,EAAE;CAyCf"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { checkCategoryConstraint, validateConnection } from "../utils/index.js";
|
|
1
|
+
import { checkCategoryConstraint, getNodeHandleForPreviewConnection, validateConnection } from "../utils/index.js";
|
|
2
2
|
import { CategoryTree } from "./CategoryTree.js";
|
|
3
3
|
import { CategoryTreeAdapter } from "./CategoryTreeAdapter.js";
|
|
4
4
|
class NodeTypeRegistry {
|
|
@@ -197,7 +197,12 @@ class NodeTypeRegistry {
|
|
|
197
197
|
type: nodeItemManifest.nodeType,
|
|
198
198
|
category: nodeItemManifest.category
|
|
199
199
|
};
|
|
200
|
-
const defaultNodeItemHandle =
|
|
200
|
+
const defaultNodeItemHandle = getNodeHandleForPreviewConnection({
|
|
201
|
+
manifest: nodeItemManifest,
|
|
202
|
+
connection,
|
|
203
|
+
connections: previewNodeConnectionInfo,
|
|
204
|
+
getDefaultHandle: (handleType)=>this.getDefaultHandle(nodeType, handleType)
|
|
205
|
+
});
|
|
201
206
|
if (!defaultNodeItemHandle) return false;
|
|
202
207
|
const connectionValidationData = connection.addNewNodeAsSource ? {
|
|
203
208
|
sourceNode: nodeToValidateData,
|
|
@@ -139,10 +139,11 @@ function ensureContainersFitChildren(nodes, { containerIds, getContainerFitGeome
|
|
|
139
139
|
right: 0,
|
|
140
140
|
bottom: 0
|
|
141
141
|
});
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
142
|
+
const resolvedContainerDimensions = resolveNodeDimensions(containerNode);
|
|
143
|
+
const currentDimensions = {
|
|
144
|
+
width: Math.max(geometry.minWidth, resolvedContainerDimensions.width),
|
|
145
|
+
height: Math.max(geometry.minHeight, resolvedContainerDimensions.height)
|
|
146
|
+
};
|
|
146
147
|
const requiredWidth = (0, external_NodeUtils_cjs_namespaceObject.snapUpToGrid)(Math.max(geometry.minWidth, requiredBounds.right + geometry.padding.right));
|
|
147
148
|
const requiredHeight = (0, external_NodeUtils_cjs_namespaceObject.snapUpToGrid)(Math.max(geometry.minHeight, requiredBounds.bottom + geometry.padding.bottom));
|
|
148
149
|
const nextDimensions = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-sizing.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/container-sizing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAIrE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,kCAAkC;IACjD,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACnD,uBAAuB,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,KAAK,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3F,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,cAAc,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAkBD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,EAC3D,QAAQ,GAAE,cAAwE,GACjF,cAAc,CAQhB;AAkFD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,IAAI,EAAE,EACb,EACE,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EAAE,qBAAyC,EAC5D,gBAAqB,EACrB,gBAAwB,GACzB,GAAE,kCAAuC,GACzC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"container-sizing.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/container-sizing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAIrE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,kCAAkC;IACjD,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,CAAC;IACnD,uBAAuB,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,KAAK,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3F,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,cAAc,CAAC;IACnD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAkBD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,EAC3D,QAAQ,GAAE,cAAwE,GACjF,cAAc,CAQhB;AAkFD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,IAAI,EAAE,EACb,EACE,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EAAE,qBAAyC,EAC5D,gBAAqB,EACrB,gBAAwB,GACzB,GAAE,kCAAuC,GACzC,IAAI,EAAE,CAsER"}
|
|
@@ -110,10 +110,11 @@ function ensureContainersFitChildren(nodes, { containerIds, getContainerFitGeome
|
|
|
110
110
|
right: 0,
|
|
111
111
|
bottom: 0
|
|
112
112
|
});
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
const resolvedContainerDimensions = resolveNodeDimensions(containerNode);
|
|
114
|
+
const currentDimensions = {
|
|
115
|
+
width: Math.max(geometry.minWidth, resolvedContainerDimensions.width),
|
|
116
|
+
height: Math.max(geometry.minHeight, resolvedContainerDimensions.height)
|
|
117
|
+
};
|
|
117
118
|
const requiredWidth = snapUpToGrid(Math.max(geometry.minWidth, requiredBounds.right + geometry.padding.right));
|
|
118
119
|
const requiredHeight = snapUpToGrid(Math.max(geometry.minHeight, requiredBounds.bottom + geometry.padding.bottom));
|
|
119
120
|
const nextDimensions = {};
|
|
@@ -54,6 +54,9 @@ var __webpack_modules__ = {
|
|
|
54
54
|
"./manifest-resolver" (module) {
|
|
55
55
|
module.exports = require("./manifest-resolver.cjs");
|
|
56
56
|
},
|
|
57
|
+
"./preview-connection-handles" (module) {
|
|
58
|
+
module.exports = require("./preview-connection-handles.cjs");
|
|
59
|
+
},
|
|
57
60
|
"./props-helpers" (module) {
|
|
58
61
|
module.exports = require("./props-helpers.cjs");
|
|
59
62
|
},
|
|
@@ -168,21 +171,25 @@ var __webpack_exports__ = {};
|
|
|
168
171
|
var __rspack_reexport = {};
|
|
169
172
|
for(const __rspack_import_key in _NodeUtils__rspack_import_15)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_NodeUtils__rspack_import_15[__rspack_import_key];
|
|
170
173
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
171
|
-
var
|
|
174
|
+
var _preview_connection_handles__rspack_import_16 = __webpack_require__("./preview-connection-handles");
|
|
175
|
+
var __rspack_reexport = {};
|
|
176
|
+
for(const __rspack_import_key in _preview_connection_handles__rspack_import_16)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_preview_connection_handles__rspack_import_16[__rspack_import_key];
|
|
177
|
+
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
178
|
+
var _props_helpers__rspack_import_17 = __webpack_require__("./props-helpers");
|
|
172
179
|
var __rspack_reexport = {};
|
|
173
|
-
for(const __rspack_import_key in
|
|
180
|
+
for(const __rspack_import_key in _props_helpers__rspack_import_17)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_props_helpers__rspack_import_17[__rspack_import_key];
|
|
174
181
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
175
|
-
var
|
|
182
|
+
var _resource_operations__rspack_import_18 = __webpack_require__("./resource-operations");
|
|
176
183
|
var __rspack_reexport = {};
|
|
177
|
-
for(const __rspack_import_key in
|
|
184
|
+
for(const __rspack_import_key in _resource_operations__rspack_import_18)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_resource_operations__rspack_import_18[__rspack_import_key];
|
|
178
185
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
179
|
-
var
|
|
186
|
+
var _Storage__rspack_import_19 = __webpack_require__("./Storage");
|
|
180
187
|
var __rspack_reexport = {};
|
|
181
|
-
for(const __rspack_import_key in
|
|
188
|
+
for(const __rspack_import_key in _Storage__rspack_import_19)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_Storage__rspack_import_19[__rspack_import_key];
|
|
182
189
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
183
|
-
var
|
|
190
|
+
var _StyleUtil__rspack_import_20 = __webpack_require__("./StyleUtil");
|
|
184
191
|
var __rspack_reexport = {};
|
|
185
|
-
for(const __rspack_import_key in
|
|
192
|
+
for(const __rspack_import_key in _StyleUtil__rspack_import_20)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_StyleUtil__rspack_import_20[__rspack_import_key];
|
|
186
193
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
187
194
|
})();
|
|
188
195
|
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
@@ -14,6 +14,7 @@ export * from './GroupModificationUtils';
|
|
|
14
14
|
export * from './icon-registry';
|
|
15
15
|
export * from './manifest-resolver';
|
|
16
16
|
export * from './NodeUtils';
|
|
17
|
+
export * from './preview-connection-handles';
|
|
17
18
|
export * from './props-helpers';
|
|
18
19
|
export * from './resource-operations';
|
|
19
20
|
export * from './Storage';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
|
|
@@ -14,6 +14,7 @@ export * from "./GroupModificationUtils.js";
|
|
|
14
14
|
export * from "./icon-registry.js";
|
|
15
15
|
export * from "./manifest-resolver.js";
|
|
16
16
|
export * from "./NodeUtils.js";
|
|
17
|
+
export * from "./preview-connection-handles.js";
|
|
17
18
|
export * from "./props-helpers.js";
|
|
18
19
|
export * from "./resource-operations.js";
|
|
19
20
|
export * from "./Storage.js";
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
getFirstOutputHandle: ()=>getFirstOutputHandle,
|
|
28
|
+
getNodeHandleForPreviewConnection: ()=>getNodeHandleForPreviewConnection,
|
|
29
|
+
shouldUseFirstOutputHandleForContinuation: ()=>shouldUseFirstOutputHandleForContinuation
|
|
30
|
+
});
|
|
31
|
+
function getFirstOutputHandle(manifest) {
|
|
32
|
+
for (const group of manifest.handleConfiguration){
|
|
33
|
+
const handle = group.handles.find((candidate)=>'source' === candidate.type && 'output' === candidate.handleType);
|
|
34
|
+
if (handle) return handle;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function shouldUseFirstOutputHandleForContinuation(connection, connections) {
|
|
38
|
+
return connection.addNewNodeAsSource && connections.some((item)=>!item.addNewNodeAsSource) && connection.existingHandleManifest?.handleType !== 'artifact';
|
|
39
|
+
}
|
|
40
|
+
function getNodeHandleForPreviewConnection({ manifest, connection, connections, getDefaultHandle }) {
|
|
41
|
+
const handleType = connection.addNewNodeAsSource ? 'source' : 'target';
|
|
42
|
+
if (shouldUseFirstOutputHandleForContinuation(connection, connections)) return getFirstOutputHandle(manifest) ?? getDefaultHandle(handleType);
|
|
43
|
+
return getDefaultHandle(handleType);
|
|
44
|
+
}
|
|
45
|
+
exports.getFirstOutputHandle = __webpack_exports__.getFirstOutputHandle;
|
|
46
|
+
exports.getNodeHandleForPreviewConnection = __webpack_exports__.getNodeHandleForPreviewConnection;
|
|
47
|
+
exports.shouldUseFirstOutputHandleForContinuation = __webpack_exports__.shouldUseFirstOutputHandleForContinuation;
|
|
48
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
49
|
+
"getFirstOutputHandle",
|
|
50
|
+
"getNodeHandleForPreviewConnection",
|
|
51
|
+
"shouldUseFirstOutputHandleForContinuation"
|
|
52
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
53
|
+
Object.defineProperty(exports, '__esModule', {
|
|
54
|
+
value: true
|
|
55
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PreviewNodeConnectionInfo } from '../hooks';
|
|
2
|
+
import type { HandleManifest, NodeManifest } from '../schema/node-definition';
|
|
3
|
+
type PreviewConnectionDirection = Pick<PreviewNodeConnectionInfo, 'addNewNodeAsSource'>;
|
|
4
|
+
type PreviewConnectionHandle = Pick<PreviewNodeConnectionInfo, 'addNewNodeAsSource' | 'existingHandleManifest'>;
|
|
5
|
+
export declare function getFirstOutputHandle(manifest: Pick<NodeManifest, 'handleConfiguration'>): HandleManifest | undefined;
|
|
6
|
+
export declare function shouldUseFirstOutputHandleForContinuation(connection: PreviewConnectionHandle, connections: PreviewConnectionDirection[]): boolean;
|
|
7
|
+
export declare function getNodeHandleForPreviewConnection({ manifest, connection, connections, getDefaultHandle, }: {
|
|
8
|
+
manifest: Pick<NodeManifest, 'handleConfiguration'>;
|
|
9
|
+
connection: PreviewConnectionHandle;
|
|
10
|
+
connections: PreviewConnectionDirection[];
|
|
11
|
+
getDefaultHandle: (handleType: 'source' | 'target') => HandleManifest | undefined;
|
|
12
|
+
}): HandleManifest | undefined;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=preview-connection-handles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-connection-handles.d.ts","sourceRoot":"","sources":["../../../src/canvas/utils/preview-connection-handles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE9E,KAAK,0BAA0B,GAAG,IAAI,CAAC,yBAAyB,EAAE,oBAAoB,CAAC,CAAC;AACxF,KAAK,uBAAuB,GAAG,IAAI,CACjC,yBAAyB,EACzB,oBAAoB,GAAG,wBAAwB,CAChD,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,qBAAqB,CAAC,GAClD,cAAc,GAAG,SAAS,CAS5B;AAED,wBAAgB,yCAAyC,CACvD,UAAU,EAAE,uBAAuB,EACnC,WAAW,EAAE,0BAA0B,EAAE,WAO1C;AAED,wBAAgB,iCAAiC,CAAC,EAChD,QAAQ,EACR,UAAU,EACV,WAAW,EACX,gBAAgB,GACjB,EAAE;IACD,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IACpD,UAAU,EAAE,uBAAuB,CAAC;IACpC,WAAW,EAAE,0BAA0B,EAAE,CAAC;IAC1C,gBAAgB,EAAE,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,KAAK,cAAc,GAAG,SAAS,CAAC;CACnF,GAAG,cAAc,GAAG,SAAS,CAQ7B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
function getFirstOutputHandle(manifest) {
|
|
2
|
+
for (const group of manifest.handleConfiguration){
|
|
3
|
+
const handle = group.handles.find((candidate)=>'source' === candidate.type && 'output' === candidate.handleType);
|
|
4
|
+
if (handle) return handle;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
function shouldUseFirstOutputHandleForContinuation(connection, connections) {
|
|
8
|
+
return connection.addNewNodeAsSource && connections.some((item)=>!item.addNewNodeAsSource) && connection.existingHandleManifest?.handleType !== 'artifact';
|
|
9
|
+
}
|
|
10
|
+
function getNodeHandleForPreviewConnection({ manifest, connection, connections, getDefaultHandle }) {
|
|
11
|
+
const handleType = connection.addNewNodeAsSource ? 'source' : 'target';
|
|
12
|
+
if (shouldUseFirstOutputHandleForContinuation(connection, connections)) return getFirstOutputHandle(manifest) ?? getDefaultHandle(handleType);
|
|
13
|
+
return getDefaultHandle(handleType);
|
|
14
|
+
}
|
|
15
|
+
export { getFirstOutputHandle, getNodeHandleForPreviewConnection, shouldUseFirstOutputHandleForContinuation };
|