@octaviaflow/core 3.0.18-beta.11 → 3.0.18-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/chunk-3DWB2PUF.js +2991 -0
  2. package/dist/chunk-3DWB2PUF.js.map +1 -0
  3. package/dist/chunk-6QCJK7H7.js +2991 -0
  4. package/dist/chunk-6QCJK7H7.js.map +1 -0
  5. package/dist/chunk-76TP67ED.js +2984 -0
  6. package/dist/chunk-76TP67ED.js.map +1 -0
  7. package/dist/chunk-DBNSBJO7.js +2993 -0
  8. package/dist/chunk-DBNSBJO7.js.map +1 -0
  9. package/dist/chunk-ECIHUVU7.js +2986 -0
  10. package/dist/chunk-ECIHUVU7.js.map +1 -0
  11. package/dist/chunk-MXJL3EPE.js +2986 -0
  12. package/dist/chunk-MXJL3EPE.js.map +1 -0
  13. package/dist/chunk-MYZ25B2R.js +2995 -0
  14. package/dist/chunk-MYZ25B2R.js.map +1 -0
  15. package/dist/chunk-Q6ERDPQR.js +2981 -0
  16. package/dist/chunk-Q6ERDPQR.js.map +1 -0
  17. package/dist/chunk-UQBPYONV.js +2991 -0
  18. package/dist/chunk-UQBPYONV.js.map +1 -0
  19. package/dist/chunk-WEGED7TA.js +2991 -0
  20. package/dist/chunk-WEGED7TA.js.map +1 -0
  21. package/dist/chunk-ZAMJEU42.js +2992 -0
  22. package/dist/chunk-ZAMJEU42.js.map +1 -0
  23. package/dist/index.cjs +57 -43
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.js +1 -1
  26. package/dist/workflow/components/FlowCanvas/FlowCanvas.d.ts.map +1 -1
  27. package/dist/workflow/components/FlowEdge/FlowEdge.d.ts.map +1 -1
  28. package/dist/workflow/components/Handle/Handle.d.ts +9 -1
  29. package/dist/workflow/components/Handle/Handle.d.ts.map +1 -1
  30. package/dist/workflow/components/Handle/handleRegistry.d.ts +19 -0
  31. package/dist/workflow/components/Handle/handleRegistry.d.ts.map +1 -1
  32. package/dist/workflow.cjs +57 -43
  33. package/dist/workflow.cjs.map +1 -1
  34. package/dist/workflow.js +1 -1
  35. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  applyNodeChanges,
7
7
  buildEdgePath,
8
8
  useViewportOrNull
9
- } from "./chunk-5OSGSJMM.js";
9
+ } from "./chunk-MYZ25B2R.js";
10
10
  import {
11
11
  __export,
12
12
  cn
@@ -1 +1 @@
1
- {"version":3,"file":"FlowCanvas.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/FlowCanvas/FlowCanvas.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FlowCanvas.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/FlowCanvas/FlowCanvas.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FlowEdge.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/FlowEdge/FlowEdge.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAY,YAAY,IAAI,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK7F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kEAAkE;IAClE,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,iBAAS,YAAY,CAAC,EACpB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,UAAiB,EACjB,SAAgB,EAChB,YAAgB,GACjB,EAAE,aAAa,2CA6Nf;AA6BD,eAAO,MAAM,QAAQ,0DAiBnB,CAAC"}
1
+ {"version":3,"file":"FlowEdge.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/FlowEdge/FlowEdge.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAY,YAAY,IAAI,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK7F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kEAAkE;IAClE,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,iBAAS,YAAY,CAAC,EACpB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,UAAiB,EACjB,SAAgB,EAChB,YAAgB,GACjB,EAAE,aAAa,2CAmOf;AA6BD,eAAO,MAAM,QAAQ,0DAiBnB,CAAC"}
@@ -5,6 +5,14 @@ export interface HandleProps {
5
5
  type: HandleType;
6
6
  /** Which side of the node the handle sits on. */
7
7
  position: HandlePosition;
8
+ /**
9
+ * Direction the edge should route from this handle. Defaults to
10
+ * `position`. Override it when the handle dot sits on one edge but the
11
+ * wire must leave/enter from another — e.g. a subflow's inner-facing
12
+ * port lives on the frame's `top` edge yet its wire curves `down` into
13
+ * the frame: `position="top" routeSide="bottom"`.
14
+ */
15
+ routeSide?: HandlePosition;
8
16
  /** Stable id within the node. Default `"default"`; required when >1 handle of same type. */
9
17
  id?: string;
10
18
  /** Defaults to true. Setting false disables both starting and ending here. */
@@ -22,5 +30,5 @@ export interface HandleProps {
22
30
  className?: string;
23
31
  style?: CSSProperties;
24
32
  }
25
- export declare function Handle({ type, position, id, isConnectable, isConnectableStart, isConnectableEnd, index, total, label, className, style, }: HandleProps): import("react/jsx-runtime").JSX.Element;
33
+ export declare function Handle({ type, position, routeSide, id, isConnectable, isConnectableStart, isConnectableEnd, index, total, label, className, style, }: HandleProps): import("react/jsx-runtime").JSX.Element;
26
34
  //# sourceMappingURL=Handle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Handle.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/Handle/Handle.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/D,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,IAAI,EAAE,UAAU,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,cAAc,CAAC;IACzB,4FAA4F;IAC5F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,QAAQ,EACR,EAAsB,EACtB,aAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,KAAS,EACT,KAAS,EACT,KAAK,EACL,SAAS,EACT,KAAK,GACN,EAAE,WAAW,2CAkEb"}
1
+ {"version":3,"file":"Handle.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/Handle/Handle.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/D,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,IAAI,EAAE,UAAU,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,cAAc,CAAC;IACzB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,4FAA4F;IAC5F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,EAAsB,EACtB,aAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,KAAS,EACT,KAAS,EACT,KAAK,EACL,SAAS,EACT,KAAK,GACN,EAAE,WAAW,2CAqEb"}
@@ -3,15 +3,34 @@ export interface HandleDescriptor {
3
3
  nodeId: string;
4
4
  handleId: string;
5
5
  type: HandleType;
6
+ /** Physical edge the handle dot sits on — drives placement + the
7
+ * handle's flow-space centre. */
6
8
  side: HandlePosition;
9
+ /**
10
+ * Edge-routing direction. The bezier leaves/enters along THIS side,
11
+ * which is normally the same as `side`. A subflow's inner-facing port
12
+ * sits on the frame's outer edge (`side`) but must route INWARD — e.g.
13
+ * a port physically on `top` whose wire should curve `down` into the
14
+ * frame sets `routeSide: "bottom"`. Defaults to `side`.
15
+ */
16
+ routeSide: HandlePosition;
7
17
  /** 0-based position among same-(node, side, type) handles. */
8
18
  index: number;
9
19
  /** Total handles on the same (node, side, type). */
10
20
  total: number;
21
+ /** May this handle START a connection? Defaults true. */
22
+ canStart: boolean;
23
+ /** May this handle END a connection? Defaults true. */
24
+ canEnd: boolean;
11
25
  }
12
26
  export interface HandleRegistry {
13
27
  register(d: HandleDescriptor): () => void;
14
28
  resolve(nodeId: string, type: HandleType, handleId: string): HandleDescriptor | undefined;
29
+ /** Every currently-registered handle. Used by the connection drag to
30
+ * resolve a drop target geometrically (nearest handle within snap
31
+ * radius) rather than relying on DOM hit-testing, which is fragile
32
+ * against z-index / pointer-events / overlapping subflow frames. */
33
+ all(): HandleDescriptor[];
15
34
  /**
16
35
  * Subscribe to registry mutations. Fires after every register /
17
36
  * unregister so listeners (typically the EdgesLayer) can re-render
@@ -1 +1 @@
1
- {"version":3,"file":"handleRegistry.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/Handle/handleRegistry.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,cAAc,CAAC;IACrB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAC;IAC1C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;IAC1F;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,qBAAqB,yCAA6C,CAAC;AAEhF,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAgCrD"}
1
+ {"version":3,"file":"handleRegistry.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/Handle/handleRegistry.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB;sCACkC;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,EAAE,cAAc,CAAC;IAC1B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,QAAQ,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAC;IAC1C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;IAC1F;;;yEAGqE;IACrE,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC1B;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,qBAAqB,yCAA6C,CAAC;AAEhF,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAmCrD"}
package/dist/workflow.cjs CHANGED
@@ -1354,6 +1354,9 @@ function createHandleRegistry() {
1354
1354
  resolve(nodeId, type, handleId) {
1355
1355
  return map.get(key(nodeId, type, handleId));
1356
1356
  },
1357
+ all() {
1358
+ return Array.from(map.values());
1359
+ },
1357
1360
  subscribe(listener) {
1358
1361
  listeners.add(listener);
1359
1362
  return () => {
@@ -1394,6 +1397,8 @@ function FlowEdgeImpl({
1394
1397
  const targetDesc = registry.resolve(targetNode.id, "target", targetHandleId);
1395
1398
  const sourceSide = sourceDesc?.side ?? sourceNode.sourcePosition ?? "bottom";
1396
1399
  const targetSide = targetDesc?.side ?? targetNode.targetPosition ?? "top";
1400
+ const sourceRoute = sourceDesc?.routeSide ?? sourceSide;
1401
+ const targetRoute = targetDesc?.routeSide ?? targetSide;
1397
1402
  const sourceIndex = sourceDesc?.index ?? 0;
1398
1403
  const sourceTotal = sourceDesc?.total ?? 1;
1399
1404
  const targetIndex = targetDesc?.index ?? 0;
@@ -1401,14 +1406,14 @@ function FlowEdgeImpl({
1401
1406
  const rawStart = handleCentre(sourceNode, sourceSide, sourceIndex, sourceTotal);
1402
1407
  const rawEnd = handleCentre(targetNode, targetSide, targetIndex, targetTotal);
1403
1408
  const HANDLE_GAP = 8;
1404
- const start = offsetAlongSide2(rawStart, sourceSide, HANDLE_GAP);
1405
- const end = offsetAlongSide2(rawEnd, targetSide, HANDLE_GAP);
1409
+ const start = offsetAlongSide2(rawStart, sourceRoute, HANDLE_GAP);
1410
+ const end = offsetAlongSide2(rawEnd, targetRoute, HANDLE_GAP);
1406
1411
  const routing = edge.routing ?? "bezier";
1407
- const { d, midX, midY } = buildEdgePath(routing, start, sourceSide, end, targetSide, {
1412
+ const { d, midX, midY } = buildEdgePath(routing, start, sourceRoute, end, targetRoute, {
1408
1413
  curvature,
1409
1414
  borderRadius
1410
1415
  });
1411
- const { d: hitD } = buildEdgePath(routing, rawStart, sourceSide, rawEnd, targetSide, {
1416
+ const { d: hitD } = buildEdgePath(routing, rawStart, sourceRoute, rawEnd, targetRoute, {
1412
1417
  curvature,
1413
1418
  borderRadius
1414
1419
  });
@@ -1726,6 +1731,7 @@ var DEFAULT_HANDLE_ID = "default";
1726
1731
  function Handle({
1727
1732
  type,
1728
1733
  position,
1734
+ routeSide,
1729
1735
  id = DEFAULT_HANDLE_ID,
1730
1736
  isConnectable = true,
1731
1737
  isConnectableStart,
@@ -1748,11 +1754,14 @@ function Handle({
1748
1754
  handleId: id,
1749
1755
  type,
1750
1756
  side: position,
1757
+ routeSide: routeSide ?? position,
1751
1758
  index,
1752
- total
1759
+ total,
1760
+ canStart,
1761
+ canEnd
1753
1762
  });
1754
1763
  return dispose;
1755
- }, [registry, node.id, id, type, position, index, total]);
1764
+ }, [registry, node.id, id, type, position, routeSide, index, total, canStart, canEnd]);
1756
1765
  const handlePointerDown = (e) => {
1757
1766
  if (!canStart) return;
1758
1767
  e.stopPropagation();
@@ -2888,49 +2897,54 @@ function FlowCanvas(props) {
2888
2897
  }
2889
2898
  const c = connRef.current;
2890
2899
  if (c && c.pointerId === e.pointerId) {
2891
- let handleEl = null;
2892
- if (typeof document !== "undefined") {
2893
- const stack = document.elementsFromPoint(e.clientX, e.clientY);
2894
- for (const el of stack) {
2895
- const candidate = el.closest(
2896
- "[data-handle-id]"
2897
- );
2898
- if (!candidate) continue;
2899
- if (candidate.dataset.handleNodeId === c.from.nodeId) continue;
2900
- handleEl = candidate;
2901
- break;
2900
+ const rect = containerRef.current?.getBoundingClientRect();
2901
+ const flowPos = rect ? screenToFlow({ x: e.clientX - rect.left, y: e.clientY - rect.top }, vp) : { x: 0, y: 0 };
2902
+ const snapRadius = 26 / Math.max(0.1, vp.zoom);
2903
+ let bestDesc = null;
2904
+ let bestDist = snapRadius;
2905
+ for (const desc of handleRegistry.all()) {
2906
+ if (desc.nodeId === c.from.nodeId) continue;
2907
+ if (desc.type === c.from.handleType) continue;
2908
+ if (!desc.canEnd) continue;
2909
+ const targetNode = nodesRef.current.find((n) => n.id === desc.nodeId);
2910
+ if (!targetNode || targetNode.hidden) continue;
2911
+ const centre = handleCentre(targetNode, desc.side, desc.index, desc.total);
2912
+ const dist = Math.hypot(centre.x - flowPos.x, centre.y - flowPos.y);
2913
+ if (dist < bestDist) {
2914
+ bestDist = dist;
2915
+ bestDesc = desc;
2902
2916
  }
2903
2917
  }
2904
2918
  let connection = null;
2905
2919
  let connectedTo;
2906
- if (handleEl) {
2907
- const targetNodeId = handleEl.dataset.handleNodeId;
2908
- const targetHandleId = handleEl.dataset.handleId;
2909
- const targetType = handleEl.dataset.handleType;
2910
- const connectableEnd = handleEl.dataset.handleConnectableEnd === "true";
2911
- if (connectableEnd && (targetNodeId !== c.from.nodeId || targetHandleId !== c.from.handleId) && targetType !== c.from.handleType) {
2912
- const source = c.from.handleType === "source" ? c.from : { nodeId: targetNodeId, handleId: targetHandleId, handleType: "source" };
2913
- const target2 = c.from.handleType === "target" ? c.from : { nodeId: targetNodeId, handleId: targetHandleId, handleType: "target" };
2914
- connection = {
2915
- source: source.nodeId,
2916
- sourceHandle: source.handleId,
2917
- target: target2.nodeId,
2918
- targetHandle: target2.handleId
2919
- };
2920
- connectedTo = {
2921
- nodeId: targetNodeId,
2922
- handleId: targetHandleId,
2923
- handleType: targetType
2924
- };
2925
- const validator = isValidConnectionRef.current;
2926
- if (validator && !validator(connection)) {
2927
- connection = null;
2928
- connectedTo = void 0;
2929
- }
2920
+ if (bestDesc) {
2921
+ const source = c.from.handleType === "source" ? c.from : {
2922
+ nodeId: bestDesc.nodeId,
2923
+ handleId: bestDesc.handleId,
2924
+ handleType: "source"
2925
+ };
2926
+ const target2 = c.from.handleType === "target" ? c.from : {
2927
+ nodeId: bestDesc.nodeId,
2928
+ handleId: bestDesc.handleId,
2929
+ handleType: "target"
2930
+ };
2931
+ connection = {
2932
+ source: source.nodeId,
2933
+ sourceHandle: source.handleId,
2934
+ target: target2.nodeId,
2935
+ targetHandle: target2.handleId
2936
+ };
2937
+ connectedTo = {
2938
+ nodeId: bestDesc.nodeId,
2939
+ handleId: bestDesc.handleId,
2940
+ handleType: bestDesc.type
2941
+ };
2942
+ const validator = isValidConnectionRef.current;
2943
+ if (validator && !validator(connection)) {
2944
+ connection = null;
2945
+ connectedTo = void 0;
2930
2946
  }
2931
2947
  }
2932
- const rect = containerRef.current?.getBoundingClientRect();
2933
- const flowPos = rect ? screenToFlow({ x: e.clientX - rect.left, y: e.clientY - rect.top }, vp) : { x: 0, y: 0 };
2934
2948
  const endState = {
2935
2949
  cancelled: !connection,
2936
2950
  position: { x: e.clientX, y: e.clientY },