@particle-academy/fancy-flow 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/{chunk-DDHKYIH2.js → chunk-2BZ6OE5H.js} +229 -435
  2. package/dist/chunk-2BZ6OE5H.js.map +1 -0
  3. package/dist/{chunk-FGUJNX65.js → chunk-35OXF6W3.js} +3 -3
  4. package/dist/{chunk-FGUJNX65.js.map → chunk-35OXF6W3.js.map} +1 -1
  5. package/dist/chunk-4PZQRN5Y.js +114 -0
  6. package/dist/chunk-4PZQRN5Y.js.map +1 -0
  7. package/dist/chunk-DW66NGU5.js +138 -0
  8. package/dist/chunk-DW66NGU5.js.map +1 -0
  9. package/dist/{chunk-YPINKH2D.js → engine.cjs} +4 -111
  10. package/dist/engine.cjs.map +1 -0
  11. package/dist/engine.d.cts +35 -0
  12. package/dist/engine.d.ts +35 -0
  13. package/dist/engine.js +3 -0
  14. package/dist/engine.js.map +1 -0
  15. package/dist/index.cjs +227 -464
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.css +1 -0
  18. package/dist/index.css.map +1 -1
  19. package/dist/index.d.cts +19 -19
  20. package/dist/index.d.ts +19 -19
  21. package/dist/index.js +6 -6
  22. package/dist/registry/index.d.cts +2 -3
  23. package/dist/registry/index.d.ts +2 -3
  24. package/dist/registry.cjs +225 -462
  25. package/dist/registry.cjs.map +1 -1
  26. package/dist/registry.js +2 -3
  27. package/dist/runtime/index.d.cts +4 -32
  28. package/dist/runtime/index.d.ts +4 -32
  29. package/dist/runtime.cjs +226 -463
  30. package/dist/runtime.cjs.map +1 -1
  31. package/dist/runtime.js +3 -3
  32. package/dist/schema/index.d.cts +1 -1
  33. package/dist/schema/index.d.ts +1 -1
  34. package/dist/schema.js +0 -1
  35. package/dist/{types-Ch4sAvum.d.cts → types-TemTtb04.d.cts} +1 -1
  36. package/dist/{types-Ch4sAvum.d.ts → types-TemTtb04.d.ts} +1 -1
  37. package/package.json +46 -9
  38. package/dist/chunk-7D4SUZUM.js +0 -35
  39. package/dist/chunk-7D4SUZUM.js.map +0 -1
  40. package/dist/chunk-DDHKYIH2.js.map +0 -1
  41. package/dist/chunk-YPINKH2D.js.map +0 -1
package/dist/runtime.cjs CHANGED
@@ -8,309 +8,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
8
 
9
9
  var ReactExports__default = /*#__PURE__*/_interopDefault(ReactExports);
10
10
 
11
- var __create = Object.create;
12
- var __defProp = Object.defineProperty;
13
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
14
- var __getOwnPropNames = Object.getOwnPropertyNames;
15
- var __getProtoOf = Object.getPrototypeOf;
16
- var __hasOwnProp = Object.prototype.hasOwnProperty;
17
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
18
- get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
19
- }) : x)(function(x) {
20
- if (typeof require !== "undefined") return require.apply(this, arguments);
21
- throw Error('Dynamic require of "' + x + '" is not supported');
22
- });
23
- var __commonJS = (cb, mod) => function __require2() {
24
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
25
- };
26
- var __copyProps = (to, from, except, desc) => {
27
- if (from && typeof from === "object" || typeof from === "function") {
28
- for (let key of __getOwnPropNames(from))
29
- if (!__hasOwnProp.call(to, key) && key !== except)
30
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
31
- }
32
- return to;
33
- };
34
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
35
- // If the importer is in node compatibility mode or this is not an ESM
36
- // file that has been converted to a CommonJS file using a Babel-
37
- // compatible transform (i.e. "__esModule" has not been set), then set
38
- // "default" to the CommonJS "module.exports" for node compatibility.
39
- __defProp(target, "default", { value: mod, enumerable: true }) ,
40
- mod
41
- ));
42
-
43
- // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js
44
- var require_use_sync_external_store_shim_production = __commonJS({
45
- "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js"(exports) {
46
- var React = __require("react");
47
- function is(x, y) {
48
- return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
49
- }
50
- var objectIs = "function" === typeof Object.is ? Object.is : is;
51
- var useState4 = React.useState;
52
- var useEffect2 = React.useEffect;
53
- var useLayoutEffect2 = React.useLayoutEffect;
54
- var useDebugValue2 = React.useDebugValue;
55
- function useSyncExternalStore$2(subscribe, getSnapshot) {
56
- var value = getSnapshot(), _useState = useState4({ inst: { value, getSnapshot } }), inst = _useState[0].inst, forceUpdate = _useState[1];
57
- useLayoutEffect2(
58
- function() {
59
- inst.value = value;
60
- inst.getSnapshot = getSnapshot;
61
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
62
- },
63
- [subscribe, value, getSnapshot]
64
- );
65
- useEffect2(
66
- function() {
67
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
68
- return subscribe(function() {
69
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
70
- });
71
- },
72
- [subscribe]
73
- );
74
- useDebugValue2(value);
75
- return value;
76
- }
77
- function checkIfSnapshotChanged(inst) {
78
- var latestGetSnapshot = inst.getSnapshot;
79
- inst = inst.value;
80
- try {
81
- var nextValue = latestGetSnapshot();
82
- return !objectIs(inst, nextValue);
83
- } catch (error) {
84
- return true;
85
- }
86
- }
87
- function useSyncExternalStore$1(subscribe, getSnapshot) {
88
- return getSnapshot();
89
- }
90
- var shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
91
- exports.useSyncExternalStore = void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;
92
- }
93
- });
94
-
95
- // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js
96
- var require_use_sync_external_store_shim_development = __commonJS({
97
- "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js"(exports) {
98
- "production" !== process.env.NODE_ENV && (function() {
99
- function is(x, y) {
100
- return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
101
- }
102
- function useSyncExternalStore$2(subscribe, getSnapshot) {
103
- didWarnOld18Alpha || void 0 === React.startTransition || (didWarnOld18Alpha = true, console.error(
104
- "You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release."
105
- ));
106
- var value = getSnapshot();
107
- if (!didWarnUncachedGetSnapshot) {
108
- var cachedValue = getSnapshot();
109
- objectIs(value, cachedValue) || (console.error(
110
- "The result of getSnapshot should be cached to avoid an infinite loop"
111
- ), didWarnUncachedGetSnapshot = true);
112
- }
113
- cachedValue = useState4({
114
- inst: { value, getSnapshot }
115
- });
116
- var inst = cachedValue[0].inst, forceUpdate = cachedValue[1];
117
- useLayoutEffect2(
118
- function() {
119
- inst.value = value;
120
- inst.getSnapshot = getSnapshot;
121
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
122
- },
123
- [subscribe, value, getSnapshot]
124
- );
125
- useEffect2(
126
- function() {
127
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
128
- return subscribe(function() {
129
- checkIfSnapshotChanged(inst) && forceUpdate({ inst });
130
- });
131
- },
132
- [subscribe]
133
- );
134
- useDebugValue2(value);
135
- return value;
136
- }
137
- function checkIfSnapshotChanged(inst) {
138
- var latestGetSnapshot = inst.getSnapshot;
139
- inst = inst.value;
140
- try {
141
- var nextValue = latestGetSnapshot();
142
- return !objectIs(inst, nextValue);
143
- } catch (error) {
144
- return true;
145
- }
146
- }
147
- function useSyncExternalStore$1(subscribe, getSnapshot) {
148
- return getSnapshot();
149
- }
150
- "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
151
- var React = __require("react"), objectIs = "function" === typeof Object.is ? Object.is : is, useState4 = React.useState, useEffect2 = React.useEffect, useLayoutEffect2 = React.useLayoutEffect, useDebugValue2 = React.useDebugValue, didWarnOld18Alpha = false, didWarnUncachedGetSnapshot = false, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2;
152
- exports.useSyncExternalStore = void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;
153
- "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
154
- })();
155
- }
156
- });
157
-
158
- // node_modules/use-sync-external-store/shim/index.js
159
- var require_shim = __commonJS({
160
- "node_modules/use-sync-external-store/shim/index.js"(exports, module) {
161
- if (process.env.NODE_ENV === "production") {
162
- module.exports = require_use_sync_external_store_shim_production();
163
- } else {
164
- module.exports = require_use_sync_external_store_shim_development();
165
- }
166
- }
167
- });
168
-
169
- // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js
170
- var require_with_selector_production = __commonJS({
171
- "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js"(exports) {
172
- var React = __require("react");
173
- var shim = require_shim();
174
- function is(x, y) {
175
- return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
176
- }
177
- var objectIs = "function" === typeof Object.is ? Object.is : is;
178
- var useSyncExternalStore = shim.useSyncExternalStore;
179
- var useRef3 = React.useRef;
180
- var useEffect2 = React.useEffect;
181
- var useMemo2 = React.useMemo;
182
- var useDebugValue2 = React.useDebugValue;
183
- exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
184
- var instRef = useRef3(null);
185
- if (null === instRef.current) {
186
- var inst = { hasValue: false, value: null };
187
- instRef.current = inst;
188
- } else inst = instRef.current;
189
- instRef = useMemo2(
190
- function() {
191
- function memoizedSelector(nextSnapshot) {
192
- if (!hasMemo) {
193
- hasMemo = true;
194
- memoizedSnapshot = nextSnapshot;
195
- nextSnapshot = selector(nextSnapshot);
196
- if (void 0 !== isEqual && inst.hasValue) {
197
- var currentSelection = inst.value;
198
- if (isEqual(currentSelection, nextSnapshot))
199
- return memoizedSelection = currentSelection;
200
- }
201
- return memoizedSelection = nextSnapshot;
202
- }
203
- currentSelection = memoizedSelection;
204
- if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;
205
- var nextSelection = selector(nextSnapshot);
206
- if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
207
- return memoizedSnapshot = nextSnapshot, currentSelection;
208
- memoizedSnapshot = nextSnapshot;
209
- return memoizedSelection = nextSelection;
210
- }
211
- var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot;
212
- return [
213
- function() {
214
- return memoizedSelector(getSnapshot());
215
- },
216
- null === maybeGetServerSnapshot ? void 0 : function() {
217
- return memoizedSelector(maybeGetServerSnapshot());
218
- }
219
- ];
220
- },
221
- [getSnapshot, getServerSnapshot, selector, isEqual]
222
- );
223
- var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);
224
- useEffect2(
225
- function() {
226
- inst.hasValue = true;
227
- inst.value = value;
228
- },
229
- [value]
230
- );
231
- useDebugValue2(value);
232
- return value;
233
- };
234
- }
235
- });
236
-
237
- // node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js
238
- var require_with_selector_development = __commonJS({
239
- "node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js"(exports) {
240
- "production" !== process.env.NODE_ENV && (function() {
241
- function is(x, y) {
242
- return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y;
243
- }
244
- "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
245
- var React = __require("react"), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore = shim.useSyncExternalStore, useRef3 = React.useRef, useEffect2 = React.useEffect, useMemo2 = React.useMemo, useDebugValue2 = React.useDebugValue;
246
- exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
247
- var instRef = useRef3(null);
248
- if (null === instRef.current) {
249
- var inst = { hasValue: false, value: null };
250
- instRef.current = inst;
251
- } else inst = instRef.current;
252
- instRef = useMemo2(
253
- function() {
254
- function memoizedSelector(nextSnapshot) {
255
- if (!hasMemo) {
256
- hasMemo = true;
257
- memoizedSnapshot = nextSnapshot;
258
- nextSnapshot = selector(nextSnapshot);
259
- if (void 0 !== isEqual && inst.hasValue) {
260
- var currentSelection = inst.value;
261
- if (isEqual(currentSelection, nextSnapshot))
262
- return memoizedSelection = currentSelection;
263
- }
264
- return memoizedSelection = nextSnapshot;
265
- }
266
- currentSelection = memoizedSelection;
267
- if (objectIs(memoizedSnapshot, nextSnapshot))
268
- return currentSelection;
269
- var nextSelection = selector(nextSnapshot);
270
- if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))
271
- return memoizedSnapshot = nextSnapshot, currentSelection;
272
- memoizedSnapshot = nextSnapshot;
273
- return memoizedSelection = nextSelection;
274
- }
275
- var hasMemo = false, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot;
276
- return [
277
- function() {
278
- return memoizedSelector(getSnapshot());
279
- },
280
- null === maybeGetServerSnapshot ? void 0 : function() {
281
- return memoizedSelector(maybeGetServerSnapshot());
282
- }
283
- ];
284
- },
285
- [getSnapshot, getServerSnapshot, selector, isEqual]
286
- );
287
- var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);
288
- useEffect2(
289
- function() {
290
- inst.hasValue = true;
291
- inst.value = value;
292
- },
293
- [value]
294
- );
295
- useDebugValue2(value);
296
- return value;
297
- };
298
- "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
299
- })();
300
- }
301
- });
302
-
303
- // node_modules/use-sync-external-store/shim/with-selector.js
304
- var require_with_selector = __commonJS({
305
- "node_modules/use-sync-external-store/shim/with-selector.js"(exports, module) {
306
- if (process.env.NODE_ENV === "production") {
307
- module.exports = require_with_selector_production();
308
- } else {
309
- module.exports = require_with_selector_development();
310
- }
311
- }
312
- });
313
-
314
11
  // src/runtime/run-flow.ts
315
12
  async function runFlow(graph, executors, onEvent = () => {
316
13
  }, options = {}) {
@@ -3486,10 +3183,10 @@ function zoom_default2() {
3486
3183
 
3487
3184
  // node_modules/@xyflow/system/dist/esm/index.js
3488
3185
  var errorMessages = {
3489
- error001: () => "[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001",
3186
+ error001: (lib = "react") => `Seems like you have not used zustand provider as an ancestor. Help: https://${lib}flow.dev/error#001`,
3490
3187
  error002: () => "It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.",
3491
3188
  error003: (nodeType) => `Node type "${nodeType}" not found. Using fallback type "default".`,
3492
- error004: () => "The React Flow parent container needs a width and a height to render the graph.",
3189
+ error004: () => "The parent container needs a width and a height to render the graph.",
3493
3190
  error005: () => "Only child nodes can use a parent extent.",
3494
3191
  error006: () => "Can't create edge. An edge needs a source and a target.",
3495
3192
  error007: (id2) => `The old edge with id=${id2} does not exist.`,
@@ -3500,7 +3197,8 @@ var errorMessages = {
3500
3197
  error012: (id2) => `Node with id "${id2}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,
3501
3198
  error013: (lib = "react") => `It seems that you haven't loaded the styles. Please import '@xyflow/${lib}/dist/style.css' or base.css to make sure everything is working properly.`,
3502
3199
  error014: () => "useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.",
3503
- error015: () => "It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs."
3200
+ error015: () => "It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs.",
3201
+ error016: (id2) => `Edge with id "${id2}" does not exist, it may have been removed. This can happen when an edge is deleted before the "onEdgeClick" handler is called.`
3504
3202
  };
3505
3203
  var infiniteExtent = [
3506
3204
  [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY],
@@ -3668,7 +3366,7 @@ function getFitViewNodes(nodeLookup, options) {
3668
3366
  }
3669
3367
  async function fitViewport({ nodes, width, height, panZoom, minZoom, maxZoom }, options) {
3670
3368
  if (nodes.size === 0) {
3671
- return Promise.resolve(true);
3369
+ return true;
3672
3370
  }
3673
3371
  const nodesToFit = getFitViewNodes(nodes, options);
3674
3372
  const bounds = getInternalNodesBounds(nodesToFit);
@@ -3678,7 +3376,7 @@ async function fitViewport({ nodes, width, height, panZoom, minZoom, maxZoom },
3678
3376
  ease: options?.ease,
3679
3377
  interpolate: options?.interpolate
3680
3378
  });
3681
- return Promise.resolve(true);
3379
+ return true;
3682
3380
  }
3683
3381
  function calculateNodePosition({ nodeId, nextPosition, nodeLookup, nodeOrigin = [0, 0], nodeExtent, onError }) {
3684
3382
  const node = nodeLookup.get(nodeId);
@@ -3825,9 +3523,9 @@ var getOverlappingArea = (rectA, rectB) => {
3825
3523
  };
3826
3524
  var isRectObject = (obj) => isNumeric(obj.width) && isNumeric(obj.height) && isNumeric(obj.x) && isNumeric(obj.y);
3827
3525
  var isNumeric = (n) => !isNaN(n) && isFinite(n);
3828
- var devWarn = (id2, message) => {
3526
+ var createDevWarn = (lib, helpUrl) => (id2, message) => {
3829
3527
  if (process.env.NODE_ENV === "development") {
3830
- console.warn(`[React Flow]: ${message} Help: https://reactflow.dev/error#${id2}`);
3528
+ console.warn(`[${lib}]: ${message} Help: ${helpUrl}error#${id2}`);
3831
3529
  }
3832
3530
  };
3833
3531
  var snapPosition = (position, snapGrid = [1, 1]) => {
@@ -3865,7 +3563,7 @@ function parsePadding(padding, viewport) {
3865
3563
  return Math.floor(viewport * paddingValue * 0.01);
3866
3564
  }
3867
3565
  }
3868
- console.error(`[React Flow] The padding value "${padding}" is invalid. Please provide a number or a string with a valid unit (px or %).`);
3566
+ console.error(`The padding value "${padding}" is invalid. Please provide a number or a string with a valid unit (px or %).`);
3869
3567
  return 0;
3870
3568
  }
3871
3569
  function parsePaddings(padding, width, height) {
@@ -4119,7 +3817,7 @@ var connectionExists = (edge, edges) => {
4119
3817
  };
4120
3818
  var addEdge = (edgeParams, edges, options = {}) => {
4121
3819
  if (!edgeParams.source || !edgeParams.target) {
4122
- devWarn("006", errorMessages["error006"]());
3820
+ options.onError?.("006", errorMessages["error006"]());
4123
3821
  return edges;
4124
3822
  }
4125
3823
  const edgeIdGenerator = options.getEdgeId || getEdgeId;
@@ -4715,7 +4413,7 @@ function updateNodeInternals(updates, nodeLookup, parentLookup, domNode, nodeOri
4715
4413
  }
4716
4414
  async function panBy({ delta, panZoom, transform: transform2, translateExtent, width, height }) {
4717
4415
  if (!panZoom || !delta.x && !delta.y) {
4718
- return Promise.resolve(false);
4416
+ return false;
4719
4417
  }
4720
4418
  const nextViewport = await panZoom.setViewportConstrained({
4721
4419
  x: transform2[0] + delta.x,
@@ -4726,7 +4424,7 @@ async function panBy({ delta, panZoom, transform: transform2, translateExtent, w
4726
4424
  [width, height]
4727
4425
  ], translateExtent);
4728
4426
  const transformChanged = !!nextViewport && (nextViewport.x !== transform2[0] || nextViewport.y !== transform2[1] || nextViewport.k !== transform2[2]);
4729
- return Promise.resolve(transformChanged);
4427
+ return transformChanged;
4730
4428
  }
4731
4429
  function addConnectionToLookup(type, connection, connectionKey, connectionLookup, nodeId, handleId) {
4732
4430
  let key = nodeId;
@@ -5016,6 +4714,9 @@ function XYDrag({ onNodeMouseDown, getStoreItems, onDragStart, onDrag, onDragSto
5016
4714
  }
5017
4715
  }).on("end", (event) => {
5018
4716
  if (!dragStarted || abortDrag) {
4717
+ if (abortDrag && dragItems.size > 0) {
4718
+ getStoreItems().updateNodePositions(dragItems, false);
4719
+ }
5019
4720
  return;
5020
4721
  }
5021
4722
  autoPanStarted = false;
@@ -5557,7 +5258,7 @@ function XYPanZoom({ domNode, minZoom, maxZoom, translateExtent, viewport, onPan
5557
5258
  const zoomPanValues = {
5558
5259
  isZoomingOrPanning: false,
5559
5260
  usedRightMouseButton: false,
5560
- prevViewport: { },
5261
+ prevViewport: {},
5561
5262
  mouseButton: 0,
5562
5263
  timerId: void 0,
5563
5264
  panScrollTimeout: void 0,
@@ -5577,13 +5278,13 @@ function XYPanZoom({ domNode, minZoom, maxZoom, translateExtent, viewport, onPan
5577
5278
  const d3ZoomHandler = d3Selection.on("wheel.zoom");
5578
5279
  const d3DblClickZoomHandler = d3Selection.on("dblclick.zoom");
5579
5280
  d3ZoomInstance.wheelDelta(wheelDelta);
5580
- function setTransform(transform2, options) {
5281
+ async function setTransform(transform2, options) {
5581
5282
  if (d3Selection) {
5582
5283
  return new Promise((resolve) => {
5583
5284
  d3ZoomInstance?.interpolate(options?.interpolate === "linear" ? value_default : zoom_default).transform(getD3Transition(d3Selection, options?.duration, options?.ease, () => resolve(true)), transform2);
5584
5285
  });
5585
5286
  }
5586
- return Promise.resolve(false);
5287
+ return false;
5587
5288
  }
5588
5289
  function update({ noWheelClassName, noPanClassName, onPaneContextMenu, userSelectionActive, panOnScroll, panOnDrag, panOnScrollMode, panOnScrollSpeed, preventScrolling, zoomOnPinch, zoomOnScroll, zoomOnDoubleClick, zoomActivationKeyPressed, lib, onTransformChange, connectionInProgress, paneClickDistance, selectionOnDrag }) {
5589
5290
  if (userSelectionActive && !zoomPanValues.isZoomingOrPanning) {
@@ -5608,31 +5309,29 @@ function XYPanZoom({ domNode, minZoom, maxZoom, translateExtent, viewport, onPan
5608
5309
  d3ZoomHandler
5609
5310
  });
5610
5311
  d3Selection.on("wheel.zoom", wheelHandler, { passive: false });
5611
- if (!userSelectionActive) {
5612
- const startHandler = createPanZoomStartHandler({
5613
- zoomPanValues,
5614
- onDraggingChange,
5615
- onPanZoomStart
5616
- });
5617
- d3ZoomInstance.on("start", startHandler);
5618
- const panZoomHandler = createPanZoomHandler({
5619
- zoomPanValues,
5620
- panOnDrag,
5621
- onPaneContextMenu: !!onPaneContextMenu,
5622
- onPanZoom,
5623
- onTransformChange
5624
- });
5625
- d3ZoomInstance.on("zoom", panZoomHandler);
5626
- const panZoomEndHandler = createPanZoomEndHandler({
5627
- zoomPanValues,
5628
- panOnDrag,
5629
- panOnScroll,
5630
- onPaneContextMenu,
5631
- onPanZoomEnd,
5632
- onDraggingChange
5633
- });
5634
- d3ZoomInstance.on("end", panZoomEndHandler);
5635
- }
5312
+ const startHandler = createPanZoomStartHandler({
5313
+ zoomPanValues,
5314
+ onDraggingChange,
5315
+ onPanZoomStart
5316
+ });
5317
+ d3ZoomInstance.on("start", startHandler);
5318
+ const panZoomHandler = createPanZoomHandler({
5319
+ zoomPanValues,
5320
+ panOnDrag,
5321
+ onPaneContextMenu: !!onPaneContextMenu,
5322
+ onPanZoom,
5323
+ onTransformChange
5324
+ });
5325
+ d3ZoomInstance.on("zoom", panZoomHandler);
5326
+ const panZoomEndHandler = createPanZoomEndHandler({
5327
+ zoomPanValues,
5328
+ panOnDrag,
5329
+ panOnScroll,
5330
+ onPaneContextMenu,
5331
+ onPanZoomEnd,
5332
+ onDraggingChange
5333
+ });
5334
+ d3ZoomInstance.on("end", panZoomEndHandler);
5636
5335
  const filter2 = createFilter({
5637
5336
  zoomActivationKeyPressed,
5638
5337
  panOnDrag,
@@ -5662,12 +5361,12 @@ function XYPanZoom({ domNode, minZoom, maxZoom, translateExtent, viewport, onPan
5662
5361
  if (contrainedTransform) {
5663
5362
  await setTransform(contrainedTransform);
5664
5363
  }
5665
- return new Promise((resolve) => resolve(contrainedTransform));
5364
+ return contrainedTransform;
5666
5365
  }
5667
5366
  async function setViewport(viewport2, options) {
5668
5367
  const nextTransform = viewportToTransform(viewport2);
5669
5368
  await setTransform(nextTransform, options);
5670
- return new Promise((resolve) => resolve(nextTransform));
5369
+ return nextTransform;
5671
5370
  }
5672
5371
  function syncViewport(viewport2) {
5673
5372
  if (d3Selection) {
@@ -5682,21 +5381,21 @@ function XYPanZoom({ domNode, minZoom, maxZoom, translateExtent, viewport, onPan
5682
5381
  const transform2 = d3Selection ? transform(d3Selection.node()) : { x: 0, y: 0, k: 1 };
5683
5382
  return { x: transform2.x, y: transform2.y, zoom: transform2.k };
5684
5383
  }
5685
- function scaleTo(zoom, options) {
5384
+ async function scaleTo(zoom, options) {
5686
5385
  if (d3Selection) {
5687
5386
  return new Promise((resolve) => {
5688
5387
  d3ZoomInstance?.interpolate(options?.interpolate === "linear" ? value_default : zoom_default).scaleTo(getD3Transition(d3Selection, options?.duration, options?.ease, () => resolve(true)), zoom);
5689
5388
  });
5690
5389
  }
5691
- return Promise.resolve(false);
5390
+ return false;
5692
5391
  }
5693
- function scaleBy(factor, options) {
5392
+ async function scaleBy(factor, options) {
5694
5393
  if (d3Selection) {
5695
5394
  return new Promise((resolve) => {
5696
5395
  d3ZoomInstance?.interpolate(options?.interpolate === "linear" ? value_default : zoom_default).scaleBy(getD3Transition(d3Selection, options?.duration, options?.ease, () => resolve(true)), factor);
5697
5396
  });
5698
5397
  }
5699
- return Promise.resolve(false);
5398
+ return false;
5700
5399
  }
5701
5400
  function setScaleExtent(scaleExtent) {
5702
5401
  d3ZoomInstance?.scaleExtent(scaleExtent);
@@ -5891,12 +5590,6 @@ var initStartValues = {
5891
5590
  pointerY: 0,
5892
5591
  aspectRatio: 1
5893
5592
  };
5894
- function nodeToParentExtent(node) {
5895
- return [
5896
- [0, 0],
5897
- [node.measured.width, node.measured.height]
5898
- ];
5899
- }
5900
5593
  function nodeToChildExtent(child, parent, nodeOrigin) {
5901
5594
  const x = parent.position.x + child.position.x;
5902
5595
  const y = parent.position.y + child.position.y;
@@ -5935,7 +5628,7 @@ function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }) {
5935
5628
  let containerBounds = null;
5936
5629
  let childNodes = [];
5937
5630
  let parentNode = void 0;
5938
- let parentExtent = void 0;
5631
+ let nodeExtent = void 0;
5939
5632
  let childExtent = void 0;
5940
5633
  let resizeDetected = false;
5941
5634
  const dragHandler = drag_default().on("start", (event) => {
@@ -5964,9 +5657,15 @@ function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }) {
5964
5657
  aspectRatio: prevValues.width / prevValues.height
5965
5658
  };
5966
5659
  parentNode = void 0;
5660
+ nodeExtent = isCoordinateExtent(node.extent) ? node.extent : void 0;
5967
5661
  if (node.parentId && (node.extent === "parent" || node.expandParent)) {
5968
5662
  parentNode = nodeLookup.get(node.parentId);
5969
- parentExtent = parentNode && node.extent === "parent" ? nodeToParentExtent(parentNode) : void 0;
5663
+ }
5664
+ if (parentNode && node.extent === "parent") {
5665
+ nodeExtent = [
5666
+ [0, 0],
5667
+ [parentNode.measured.width, parentNode.measured.height]
5668
+ ];
5970
5669
  }
5971
5670
  childNodes = [];
5972
5671
  childExtent = void 0;
@@ -6006,7 +5705,7 @@ function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }) {
6006
5705
  const { x: prevX, y: prevY, width: prevWidth, height: prevHeight } = prevValues;
6007
5706
  const change = {};
6008
5707
  const nodeOrigin = node.origin ?? storeNodeOrigin;
6009
- const { width, height, x, y } = getDimensionsAfterResize(startValues, params.controlDirection, pointerPosition, params.boundaries, params.keepAspectRatio, nodeOrigin, parentExtent, childExtent);
5708
+ const { width, height, x, y } = getDimensionsAfterResize(startValues, params.controlDirection, pointerPosition, params.boundaries, params.keepAspectRatio, nodeOrigin, nodeExtent, childExtent);
6010
5709
  const isWidthChange = width !== prevWidth;
6011
5710
  const isHeightChange = height !== prevHeight;
6012
5711
  const isXPosChange = x !== prevX && isWidthChange;
@@ -6083,9 +5782,62 @@ function XYResizer({ domNode, nodeId, getStoreItems, onChange, onEnd }) {
6083
5782
  destroy
6084
5783
  };
6085
5784
  }
6086
-
6087
- // node_modules/zustand/esm/traditional.mjs
6088
- var import_with_selector = __toESM(require_with_selector());
5785
+ function useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
5786
+ const instRef = ReactExports.useRef(null);
5787
+ let inst;
5788
+ if (instRef.current === null) {
5789
+ inst = { hasValue: false, value: null };
5790
+ instRef.current = inst;
5791
+ } else {
5792
+ inst = instRef.current;
5793
+ }
5794
+ const [getSelection, getServerSelection] = ReactExports.useMemo(() => {
5795
+ let hasMemo = false;
5796
+ let memoizedSnapshot;
5797
+ let memoizedSelection;
5798
+ const memoizedSelector = (nextSnapshot) => {
5799
+ if (!hasMemo) {
5800
+ hasMemo = true;
5801
+ memoizedSnapshot = nextSnapshot;
5802
+ const nextSelection2 = selector(nextSnapshot);
5803
+ if (isEqual !== void 0 && inst.hasValue) {
5804
+ const currentSelection = inst.value;
5805
+ if (isEqual(currentSelection, nextSelection2)) {
5806
+ memoizedSelection = currentSelection;
5807
+ return currentSelection;
5808
+ }
5809
+ }
5810
+ memoizedSelection = nextSelection2;
5811
+ return nextSelection2;
5812
+ }
5813
+ const prevSnapshot = memoizedSnapshot;
5814
+ const prevSelection = memoizedSelection;
5815
+ if (Object.is(prevSnapshot, nextSnapshot)) {
5816
+ return prevSelection;
5817
+ }
5818
+ const nextSelection = selector(nextSnapshot);
5819
+ if (isEqual !== void 0 && isEqual(prevSelection, nextSelection)) {
5820
+ memoizedSnapshot = nextSnapshot;
5821
+ return prevSelection;
5822
+ }
5823
+ memoizedSnapshot = nextSnapshot;
5824
+ memoizedSelection = nextSelection;
5825
+ return nextSelection;
5826
+ };
5827
+ const maybeGetServerSnapshot = getServerSnapshot === void 0 || getServerSnapshot === null ? null : getServerSnapshot;
5828
+ const getSnapshotWithSelector = () => memoizedSelector(getSnapshot());
5829
+ const getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? void 0 : () => memoizedSelector(maybeGetServerSnapshot());
5830
+ return [getSnapshotWithSelector, getServerSnapshotWithSelector];
5831
+ }, [getSnapshot, getServerSnapshot, selector, isEqual]);
5832
+ const value = ReactExports.useSyncExternalStore(subscribe, getSelection, getServerSelection);
5833
+ ReactExports.useEffect(() => {
5834
+ inst.hasValue = true;
5835
+ inst.value = value;
5836
+ }, [value]);
5837
+ ReactExports.useDebugValue(value);
5838
+ return value;
5839
+ }
5840
+ var use_sync_external_store_with_selector_default = { useSyncExternalStoreWithSelector };
6089
5841
 
6090
5842
  // node_modules/zustand/esm/vanilla.mjs
6091
5843
  var createStoreImpl = (createState) => {
@@ -6120,18 +5872,18 @@ var createStoreImpl = (createState) => {
6120
5872
  var createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;
6121
5873
 
6122
5874
  // node_modules/zustand/esm/traditional.mjs
6123
- var { useDebugValue } = ReactExports__default.default;
6124
- var { useSyncExternalStoreWithSelector } = import_with_selector.default;
5875
+ var { useDebugValue: useDebugValue2 } = ReactExports__default.default;
5876
+ var { useSyncExternalStoreWithSelector: useSyncExternalStoreWithSelector2 } = use_sync_external_store_with_selector_default;
6125
5877
  var identity3 = (arg) => arg;
6126
5878
  function useStoreWithEqualityFn(api, selector = identity3, equalityFn) {
6127
- const slice = useSyncExternalStoreWithSelector(
5879
+ const slice = useSyncExternalStoreWithSelector2(
6128
5880
  api.subscribe,
6129
5881
  api.getState,
6130
5882
  api.getServerState || api.getInitialState,
6131
5883
  selector,
6132
5884
  equalityFn
6133
5885
  );
6134
- useDebugValue(slice);
5886
+ useDebugValue2(slice);
6135
5887
  return slice;
6136
5888
  }
6137
5889
  var createWithEqualityFnImpl = (createState, defaultEqualityFn) => {
@@ -6181,7 +5933,7 @@ function shallow$1(objA, objB) {
6181
5933
  }
6182
5934
  var StoreContext = ReactExports.createContext(null);
6183
5935
  var Provider$1 = StoreContext.Provider;
6184
- var zustandErrorMessage = errorMessages["error001"]();
5936
+ var zustandErrorMessage = errorMessages["error001"]("react");
6185
5937
  function useStore(selector, equalityFn) {
6186
5938
  const store = ReactExports.useContext(StoreContext);
6187
5939
  if (store === null) {
@@ -6273,7 +6025,6 @@ function SelectionListener({ onSelectionChange }) {
6273
6025
  }
6274
6026
  return null;
6275
6027
  }
6276
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? ReactExports.useLayoutEffect : ReactExports.useEffect;
6277
6028
  var defaultNodeOrigin = [0, 0];
6278
6029
  var defaultViewport = { x: 0, y: 0, zoom: 1 };
6279
6030
  var reactFlowFieldsToTrack = [
@@ -6364,7 +6115,7 @@ var initPrevValues2 = {
6364
6115
  function StoreUpdater(props) {
6365
6116
  const { setNodes, setEdges, setMinZoom, setMaxZoom, setTranslateExtent, setNodeExtent, reset, setDefaultNodesAndEdges } = useStore(selector$l, shallow$1);
6366
6117
  const store = useStoreApi();
6367
- useIsomorphicLayoutEffect(() => {
6118
+ ReactExports.useEffect(() => {
6368
6119
  setDefaultNodesAndEdges(props.defaultNodes, props.defaultEdges);
6369
6120
  return () => {
6370
6121
  previousFields.current = initPrevValues2;
@@ -6372,7 +6123,7 @@ function StoreUpdater(props) {
6372
6123
  };
6373
6124
  }, []);
6374
6125
  const previousFields = ReactExports.useRef(initPrevValues2);
6375
- useIsomorphicLayoutEffect(
6126
+ ReactExports.useEffect(
6376
6127
  () => {
6377
6128
  for (const fieldName of fieldsToTrack) {
6378
6129
  const fieldValue = props[fieldName];
@@ -6508,30 +6259,30 @@ var useViewportHelper = () => {
6508
6259
  const store = useStoreApi();
6509
6260
  return ReactExports.useMemo(() => {
6510
6261
  return {
6511
- zoomIn: (options) => {
6262
+ zoomIn: async (options) => {
6512
6263
  const { panZoom } = store.getState();
6513
- return panZoom ? panZoom.scaleBy(1.2, options) : Promise.resolve(false);
6264
+ return panZoom ? panZoom.scaleBy(1.2, options) : false;
6514
6265
  },
6515
- zoomOut: (options) => {
6266
+ zoomOut: async (options) => {
6516
6267
  const { panZoom } = store.getState();
6517
- return panZoom ? panZoom.scaleBy(1 / 1.2, options) : Promise.resolve(false);
6268
+ return panZoom ? panZoom.scaleBy(1 / 1.2, options) : false;
6518
6269
  },
6519
- zoomTo: (zoomLevel, options) => {
6270
+ zoomTo: async (zoomLevel, options) => {
6520
6271
  const { panZoom } = store.getState();
6521
- return panZoom ? panZoom.scaleTo(zoomLevel, options) : Promise.resolve(false);
6272
+ return panZoom ? panZoom.scaleTo(zoomLevel, options) : false;
6522
6273
  },
6523
6274
  getZoom: () => store.getState().transform[2],
6524
6275
  setViewport: async (viewport, options) => {
6525
6276
  const { transform: [tX, tY, tZoom], panZoom } = store.getState();
6526
6277
  if (!panZoom) {
6527
- return Promise.resolve(false);
6278
+ return false;
6528
6279
  }
6529
6280
  await panZoom.setViewport({
6530
6281
  x: viewport.x ?? tX,
6531
6282
  y: viewport.y ?? tY,
6532
6283
  zoom: viewport.zoom ?? tZoom
6533
6284
  }, options);
6534
- return Promise.resolve(true);
6285
+ return true;
6535
6286
  },
6536
6287
  getViewport: () => {
6537
6288
  const [x, y, zoom] = store.getState().transform;
@@ -6544,14 +6295,14 @@ var useViewportHelper = () => {
6544
6295
  const { width, height, minZoom, maxZoom, panZoom } = store.getState();
6545
6296
  const viewport = getViewportForBounds(bounds, width, height, minZoom, maxZoom, options?.padding ?? 0.1);
6546
6297
  if (!panZoom) {
6547
- return Promise.resolve(false);
6298
+ return false;
6548
6299
  }
6549
6300
  await panZoom.setViewport(viewport, {
6550
6301
  duration: options?.duration,
6551
6302
  ease: options?.ease,
6552
6303
  interpolate: options?.interpolate
6553
6304
  });
6554
- return Promise.resolve(true);
6305
+ return true;
6555
6306
  },
6556
6307
  screenToFlowPosition: (clientPosition, options = {}) => {
6557
6308
  const { transform: transform2, snapGrid, snapToGrid, domNode } = store.getState();
@@ -6720,11 +6471,19 @@ function elementToRemoveChange(item) {
6720
6471
  type: "remove"
6721
6472
  };
6722
6473
  }
6474
+ var defaultOnError = createDevWarn("React Flow", "https://reactflow.dev/");
6475
+ function addEdge2(edgeParams, edges, options = {}) {
6476
+ return addEdge(edgeParams, edges, {
6477
+ ...options,
6478
+ onError: options.onError ?? defaultOnError
6479
+ });
6480
+ }
6723
6481
  var isNode = (element) => isNodeBase(element);
6724
6482
  var isEdge = (element) => isEdgeBase(element);
6725
6483
  function fixedForwardRef(render) {
6726
6484
  return ReactExports.forwardRef(render);
6727
6485
  }
6486
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? ReactExports.useLayoutEffect : ReactExports.useEffect;
6728
6487
  function useQueue(runQueue) {
6729
6488
  const [serial, setSerial] = ReactExports.useState(BigInt(0));
6730
6489
  const [queue] = ReactExports.useState(() => createQueue(() => setSerial((n) => n + BigInt(1))));
@@ -7155,17 +6914,22 @@ var selector$h = (s) => ({
7155
6914
  userSelectionActive: s.userSelectionActive,
7156
6915
  elementsSelectable: s.elementsSelectable,
7157
6916
  connectionInProgress: s.connection.inProgress,
7158
- dragging: s.paneDragging
6917
+ dragging: s.paneDragging,
6918
+ panBy: s.panBy,
6919
+ autoPanSpeed: s.autoPanSpeed
7159
6920
  });
7160
- function Pane({ isSelecting, selectionKeyPressed, selectionMode = SelectionMode.Full, panOnDrag, paneClickDistance, selectionOnDrag, onSelectionStart, onSelectionEnd, onPaneClick, onPaneContextMenu, onPaneScroll, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, children: children2 }) {
6921
+ function Pane({ isSelecting, selectionKeyPressed, selectionMode = SelectionMode.Full, panOnDrag, autoPanOnSelection, paneClickDistance, selectionOnDrag, onSelectionStart, onSelectionEnd, onPaneClick, onPaneContextMenu, onPaneScroll, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, children: children2 }) {
6922
+ const autoPanId = ReactExports.useRef(0);
7161
6923
  const store = useStoreApi();
7162
- const { userSelectionActive, elementsSelectable, dragging, connectionInProgress } = useStore(selector$h, shallow$1);
6924
+ const { userSelectionActive, elementsSelectable, dragging, connectionInProgress, panBy: panBy2, autoPanSpeed } = useStore(selector$h, shallow$1);
7163
6925
  const isSelectionEnabled = elementsSelectable && (isSelecting || userSelectionActive);
7164
6926
  const container = ReactExports.useRef(null);
7165
6927
  const containerBounds = ReactExports.useRef();
7166
6928
  const selectedNodeIds = ReactExports.useRef(/* @__PURE__ */ new Set());
7167
6929
  const selectedEdgeIds = ReactExports.useRef(/* @__PURE__ */ new Set());
7168
6930
  const selectionInProgress = ReactExports.useRef(false);
6931
+ const position = ReactExports.useRef({ x: 0, y: 0 });
6932
+ const autoPanStarted = ReactExports.useRef(false);
7169
6933
  const onClick = (event) => {
7170
6934
  if (selectionInProgress.current || connectionInProgress) {
7171
6935
  selectionInProgress.current = false;
@@ -7190,7 +6954,7 @@ function Pane({ isSelecting, selectionKeyPressed, selectionMode = SelectionMode.
7190
6954
  }
7191
6955
  };
7192
6956
  const onPointerDownCapture = (event) => {
7193
- const { domNode } = store.getState();
6957
+ const { domNode, transform: transform2 } = store.getState();
7194
6958
  containerBounds.current = domNode?.getBoundingClientRect();
7195
6959
  if (!containerBounds.current)
7196
6960
  return;
@@ -7203,12 +6967,13 @@ function Pane({ isSelecting, selectionKeyPressed, selectionMode = SelectionMode.
7203
6967
  event.target?.setPointerCapture?.(event.pointerId);
7204
6968
  selectionInProgress.current = false;
7205
6969
  const { x, y } = getEventPosition(event.nativeEvent, containerBounds.current);
6970
+ const userSelectionStartPosition = pointToRendererPoint({ x, y }, transform2);
7206
6971
  store.setState({
7207
6972
  userSelectionRect: {
7208
6973
  width: 0,
7209
6974
  height: 0,
7210
- startX: x,
7211
- startY: y,
6975
+ startX: userSelectionStartPosition.x,
6976
+ startY: userSelectionStartPosition.y,
7212
6977
  x,
7213
6978
  y
7214
6979
  }
@@ -7218,30 +6983,21 @@ function Pane({ isSelecting, selectionKeyPressed, selectionMode = SelectionMode.
7218
6983
  event.preventDefault();
7219
6984
  }
7220
6985
  };
7221
- const onPointerMove = (event) => {
7222
- const { userSelectionRect, transform: transform2, nodeLookup, edgeLookup, connectionLookup, triggerNodeChanges, triggerEdgeChanges, defaultEdgeOptions, resetSelectedElements } = store.getState();
7223
- if (!containerBounds.current || !userSelectionRect) {
6986
+ function commitUserSelectionRect(mouseX, mouseY) {
6987
+ const { userSelectionRect } = store.getState();
6988
+ if (!userSelectionRect) {
7224
6989
  return;
7225
6990
  }
7226
- const { x: mouseX, y: mouseY } = getEventPosition(event.nativeEvent, containerBounds.current);
7227
- const { startX, startY } = userSelectionRect;
7228
- if (!selectionInProgress.current) {
7229
- const requiredDistance = selectionKeyPressed ? 0 : paneClickDistance;
7230
- const distance2 = Math.hypot(mouseX - startX, mouseY - startY);
7231
- if (distance2 <= requiredDistance) {
7232
- return;
7233
- }
7234
- resetSelectedElements();
7235
- onSelectionStart?.(event);
7236
- }
7237
- selectionInProgress.current = true;
6991
+ const { transform: transform2, nodeLookup, edgeLookup, connectionLookup, triggerNodeChanges, triggerEdgeChanges, defaultEdgeOptions } = store.getState();
6992
+ const userStartPosition = { x: userSelectionRect.startX, y: userSelectionRect.startY };
6993
+ const { x: screenStartX, y: screenStartY } = rendererPointToPoint(userStartPosition, transform2);
7238
6994
  const nextUserSelectRect = {
7239
- startX,
7240
- startY,
7241
- x: mouseX < startX ? mouseX : startX,
7242
- y: mouseY < startY ? mouseY : startY,
7243
- width: Math.abs(mouseX - startX),
7244
- height: Math.abs(mouseY - startY)
6995
+ startX: userStartPosition.x,
6996
+ startY: userStartPosition.y,
6997
+ x: mouseX < screenStartX ? mouseX : screenStartX,
6998
+ y: mouseY < screenStartY ? mouseY : screenStartY,
6999
+ width: Math.abs(mouseX - screenStartX),
7000
+ height: Math.abs(mouseY - screenStartY)
7245
7001
  };
7246
7002
  const prevSelectedNodeIds = selectedNodeIds.current;
7247
7003
  const prevSelectedEdgeIds = selectedEdgeIds.current;
@@ -7272,6 +7028,53 @@ function Pane({ isSelecting, selectionKeyPressed, selectionMode = SelectionMode.
7272
7028
  userSelectionActive: true,
7273
7029
  nodesSelectionActive: false
7274
7030
  });
7031
+ }
7032
+ function autoPan() {
7033
+ if (!autoPanOnSelection || !containerBounds.current) {
7034
+ return;
7035
+ }
7036
+ const [x, y] = calcAutoPan(position.current, containerBounds.current, autoPanSpeed);
7037
+ panBy2({ x, y }).then((panned) => {
7038
+ if (!selectionInProgress.current || !panned) {
7039
+ autoPanId.current = requestAnimationFrame(autoPan);
7040
+ return;
7041
+ }
7042
+ const { x: mx, y: my } = position.current;
7043
+ commitUserSelectionRect(mx, my);
7044
+ autoPanId.current = requestAnimationFrame(autoPan);
7045
+ });
7046
+ }
7047
+ const cleanupAutoPan = () => {
7048
+ cancelAnimationFrame(autoPanId.current);
7049
+ autoPanId.current = 0;
7050
+ autoPanStarted.current = false;
7051
+ };
7052
+ ReactExports.useEffect(() => {
7053
+ return () => cleanupAutoPan();
7054
+ }, []);
7055
+ const onPointerMove = (event) => {
7056
+ const { userSelectionRect, transform: transform2, resetSelectedElements } = store.getState();
7057
+ if (!containerBounds.current || !userSelectionRect) {
7058
+ return;
7059
+ }
7060
+ const { x: mouseX, y: mouseY } = getEventPosition(event.nativeEvent, containerBounds.current);
7061
+ position.current = { x: mouseX, y: mouseY };
7062
+ const screenStart = rendererPointToPoint({ x: userSelectionRect.startX, y: userSelectionRect.startY }, transform2);
7063
+ if (!selectionInProgress.current) {
7064
+ const requiredDistance = selectionKeyPressed ? 0 : paneClickDistance;
7065
+ const distance2 = Math.hypot(mouseX - screenStart.x, mouseY - screenStart.y);
7066
+ if (distance2 <= requiredDistance) {
7067
+ return;
7068
+ }
7069
+ resetSelectedElements();
7070
+ onSelectionStart?.(event);
7071
+ }
7072
+ selectionInProgress.current = true;
7073
+ if (!autoPanStarted.current) {
7074
+ autoPan();
7075
+ autoPanStarted.current = true;
7076
+ }
7077
+ commitUserSelectionRect(mouseX, mouseY);
7275
7078
  };
7276
7079
  const onPointerUp = (event) => {
7277
7080
  if (event.button !== 0) {
@@ -7291,9 +7094,14 @@ function Pane({ isSelecting, selectionKeyPressed, selectionMode = SelectionMode.
7291
7094
  nodesSelectionActive: selectedNodeIds.current.size > 0
7292
7095
  });
7293
7096
  }
7097
+ cleanupAutoPan();
7098
+ };
7099
+ const onPointerCancel = (event) => {
7100
+ event.target?.releasePointerCapture?.(event.pointerId);
7101
+ cleanupAutoPan();
7294
7102
  };
7295
7103
  const draggable = panOnDrag === true || Array.isArray(panOnDrag) && panOnDrag.includes(0);
7296
- return jsxRuntime.jsxs("div", { className: cc(["react-flow__pane", { draggable, dragging, selection: isSelecting }]), onClick: isSelectionEnabled ? void 0 : wrapHandler(onClick, container), onContextMenu: wrapHandler(onContextMenu, container), onWheel: wrapHandler(onWheel, container), onPointerEnter: isSelectionEnabled ? void 0 : onPaneMouseEnter, onPointerMove: isSelectionEnabled ? onPointerMove : onPaneMouseMove, onPointerUp: isSelectionEnabled ? onPointerUp : void 0, onPointerDownCapture: isSelectionEnabled ? onPointerDownCapture : void 0, onClickCapture: isSelectionEnabled ? onClickCapture : void 0, onPointerLeave: onPaneMouseLeave, ref: container, style: containerStyle, children: [children2, jsxRuntime.jsx(UserSelection, {})] });
7104
+ return jsxRuntime.jsxs("div", { className: cc(["react-flow__pane", { draggable, dragging, selection: isSelecting }]), onClick: isSelectionEnabled ? void 0 : wrapHandler(onClick, container), onContextMenu: wrapHandler(onContextMenu, container), onWheel: wrapHandler(onWheel, container), onPointerEnter: isSelectionEnabled ? void 0 : onPaneMouseEnter, onPointerMove: isSelectionEnabled ? onPointerMove : onPaneMouseMove, onPointerUp: isSelectionEnabled ? onPointerUp : void 0, onPointerCancel: isSelectionEnabled ? onPointerCancel : void 0, onPointerDownCapture: isSelectionEnabled ? onPointerDownCapture : void 0, onClickCapture: isSelectionEnabled ? onClickCapture : void 0, onPointerLeave: onPaneMouseLeave, ref: container, style: containerStyle, children: [children2, jsxRuntime.jsx(UserSelection, {})] });
7297
7105
  }
7298
7106
  function handleNodeClick({ id: id2, store, unselect = false, nodeRef }) {
7299
7107
  const { addSelectedNodes, unselectNodesAndEdges, multiSelectionActive, nodeLookup, onError } = store.getState();
@@ -7431,8 +7239,8 @@ function HandleComponent({ type = "source", position = Position.Top, isValidConn
7431
7239
  ...params
7432
7240
  };
7433
7241
  if (hasDefaultEdges) {
7434
- const { edges, setEdges } = store.getState();
7435
- setEdges(addEdge(edgeParams, edges));
7242
+ const { edges, setEdges, onError } = store.getState();
7243
+ setEdges(addEdge2(edgeParams, edges, { onError }));
7436
7244
  }
7437
7245
  onConnectAction?.(edgeParams);
7438
7246
  onConnect?.(edgeParams);
@@ -7628,7 +7436,7 @@ var win = typeof window !== "undefined" ? window : void 0;
7628
7436
  var selector$e = (s) => {
7629
7437
  return { nodesSelectionActive: s.nodesSelectionActive, userSelectionActive: s.userSelectionActive };
7630
7438
  };
7631
- function FlowRendererComponent({ children: children2, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, paneClickDistance, deleteKeyCode, selectionKeyCode, selectionOnDrag, selectionMode, onSelectionStart, onSelectionEnd, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, elementsSelectable, zoomOnScroll, zoomOnPinch, panOnScroll: _panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag: _panOnDrag, defaultViewport: defaultViewport2, translateExtent, minZoom, maxZoom, preventScrolling, onSelectionContextMenu, noWheelClassName, noPanClassName, disableKeyboardA11y, onViewportChange, isControlledViewport }) {
7439
+ function FlowRendererComponent({ children: children2, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, paneClickDistance, deleteKeyCode, selectionKeyCode, selectionOnDrag, selectionMode, onSelectionStart, onSelectionEnd, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, elementsSelectable, zoomOnScroll, zoomOnPinch, panOnScroll: _panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag: _panOnDrag, autoPanOnSelection, defaultViewport: defaultViewport2, translateExtent, minZoom, maxZoom, preventScrolling, onSelectionContextMenu, noWheelClassName, noPanClassName, disableKeyboardA11y, onViewportChange, isControlledViewport }) {
7632
7440
  const { nodesSelectionActive, userSelectionActive } = useStore(selector$e, shallow$1);
7633
7441
  const selectionKeyPressed = useKeyPress(selectionKeyCode, { target: win });
7634
7442
  const panActivationKeyPressed = useKeyPress(panActivationKeyCode, { target: win });
@@ -7637,7 +7445,7 @@ function FlowRendererComponent({ children: children2, onPaneClick, onPaneMouseEn
7637
7445
  const _selectionOnDrag = selectionOnDrag && panOnDrag !== true;
7638
7446
  const isSelecting = selectionKeyPressed || userSelectionActive || _selectionOnDrag;
7639
7447
  useGlobalKeyHandler({ deleteKeyCode, multiSelectionKeyCode });
7640
- return jsxRuntime.jsx(ZoomPane, { onPaneContextMenu, elementsSelectable, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag: !selectionKeyPressed && panOnDrag, defaultViewport: defaultViewport2, translateExtent, minZoom, maxZoom, zoomActivationKeyCode, preventScrolling, noWheelClassName, noPanClassName, onViewportChange, isControlledViewport, paneClickDistance, selectionOnDrag: _selectionOnDrag, children: jsxRuntime.jsxs(Pane, { onSelectionStart, onSelectionEnd, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, panOnDrag, isSelecting: !!isSelecting, selectionMode, selectionKeyPressed, paneClickDistance, selectionOnDrag: _selectionOnDrag, children: [children2, nodesSelectionActive && jsxRuntime.jsx(NodesSelection, { onSelectionContextMenu, noPanClassName, disableKeyboardA11y })] }) });
7448
+ return jsxRuntime.jsx(ZoomPane, { onPaneContextMenu, elementsSelectable, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag: !selectionKeyPressed && panOnDrag, defaultViewport: defaultViewport2, translateExtent, minZoom, maxZoom, zoomActivationKeyCode, preventScrolling, noWheelClassName, noPanClassName, onViewportChange, isControlledViewport, paneClickDistance, selectionOnDrag: _selectionOnDrag, children: jsxRuntime.jsxs(Pane, { onSelectionStart, onSelectionEnd, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, panOnDrag, autoPanOnSelection, isSelecting: !!isSelecting, selectionMode, selectionKeyPressed, paneClickDistance, selectionOnDrag: _selectionOnDrag, children: [children2, nodesSelectionActive && jsxRuntime.jsx(NodesSelection, { onSelectionContextMenu, noPanClassName, disableKeyboardA11y })] }) });
7641
7449
  }
7642
7450
  FlowRendererComponent.displayName = "FlowRenderer";
7643
7451
  var FlowRenderer = ReactExports.memo(FlowRendererComponent);
@@ -8442,16 +8250,17 @@ function useStylesLoadedWarning() {
8442
8250
  }
8443
8251
  }, []);
8444
8252
  }
8445
- function GraphViewComponent({ nodeTypes, edgeTypes, onInit, onNodeClick, onEdgeClick, onNodeDoubleClick, onEdgeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, deleteKeyCode, onlyRenderVisibleElements, elementsSelectable, defaultViewport: defaultViewport2, translateExtent, minZoom, maxZoom, preventScrolling, defaultMarkerColor, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, paneClickDistance, nodeClickDistance, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, reconnectRadius, onReconnect, onReconnectStart, onReconnectEnd, noDragClassName, noWheelClassName, noPanClassName, disableKeyboardA11y, nodeExtent, rfId, viewport, onViewportChange }) {
8253
+ function GraphViewComponent({ nodeTypes, edgeTypes, onInit, onNodeClick, onEdgeClick, onNodeDoubleClick, onEdgeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, deleteKeyCode, onlyRenderVisibleElements, elementsSelectable, defaultViewport: defaultViewport2, translateExtent, minZoom, maxZoom, preventScrolling, defaultMarkerColor, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag, autoPanOnSelection, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, paneClickDistance, nodeClickDistance, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, reconnectRadius, onReconnect, onReconnectStart, onReconnectEnd, noDragClassName, noWheelClassName, noPanClassName, disableKeyboardA11y, nodeExtent, rfId, viewport, onViewportChange }) {
8446
8254
  useNodeOrEdgeTypesWarning(nodeTypes);
8447
8255
  useNodeOrEdgeTypesWarning(edgeTypes);
8448
8256
  useStylesLoadedWarning();
8449
8257
  useOnInitHandler(onInit);
8450
8258
  useViewportSync(viewport);
8451
- return jsxRuntime.jsx(FlowRenderer, { onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, paneClickDistance, deleteKeyCode, selectionKeyCode, selectionOnDrag, selectionMode, onSelectionStart, onSelectionEnd, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, elementsSelectable, zoomOnScroll, zoomOnPinch, zoomOnDoubleClick, panOnScroll, panOnScrollSpeed, panOnScrollMode, panOnDrag, defaultViewport: defaultViewport2, translateExtent, minZoom, maxZoom, onSelectionContextMenu, preventScrolling, noDragClassName, noWheelClassName, noPanClassName, disableKeyboardA11y, onViewportChange, isControlledViewport: !!viewport, children: jsxRuntime.jsxs(Viewport, { children: [jsxRuntime.jsx(EdgeRenderer, { edgeTypes, onEdgeClick, onEdgeDoubleClick, onReconnect, onReconnectStart, onReconnectEnd, onlyRenderVisibleElements, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, reconnectRadius, defaultMarkerColor, noPanClassName, disableKeyboardA11y, rfId }), jsxRuntime.jsx(ConnectionLineWrapper, { style: connectionLineStyle, type: connectionLineType, component: connectionLineComponent, containerStyle: connectionLineContainerStyle }), jsxRuntime.jsx("div", { className: "react-flow__edgelabel-renderer" }), jsxRuntime.jsx(NodeRenderer, { nodeTypes, onNodeClick, onNodeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, nodeClickDistance, onlyRenderVisibleElements, noPanClassName, noDragClassName, disableKeyboardA11y, nodeExtent, rfId }), jsxRuntime.jsx("div", { className: "react-flow__viewport-portal" })] }) });
8259
+ return jsxRuntime.jsx(FlowRenderer, { onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, paneClickDistance, deleteKeyCode, selectionKeyCode, selectionOnDrag, selectionMode, onSelectionStart, onSelectionEnd, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, elementsSelectable, zoomOnScroll, zoomOnPinch, zoomOnDoubleClick, panOnScroll, panOnScrollSpeed, panOnScrollMode, panOnDrag, autoPanOnSelection, defaultViewport: defaultViewport2, translateExtent, minZoom, maxZoom, onSelectionContextMenu, preventScrolling, noDragClassName, noWheelClassName, noPanClassName, disableKeyboardA11y, onViewportChange, isControlledViewport: !!viewport, children: jsxRuntime.jsxs(Viewport, { children: [jsxRuntime.jsx(EdgeRenderer, { edgeTypes, onEdgeClick, onEdgeDoubleClick, onReconnect, onReconnectStart, onReconnectEnd, onlyRenderVisibleElements, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, reconnectRadius, defaultMarkerColor, noPanClassName, disableKeyboardA11y, rfId }), jsxRuntime.jsx(ConnectionLineWrapper, { style: connectionLineStyle, type: connectionLineType, component: connectionLineComponent, containerStyle: connectionLineContainerStyle }), jsxRuntime.jsx("div", { className: "react-flow__edgelabel-renderer" }), jsxRuntime.jsx(NodeRenderer, { nodeTypes, onNodeClick, onNodeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, nodeClickDistance, onlyRenderVisibleElements, noPanClassName, noDragClassName, disableKeyboardA11y, nodeExtent, rfId }), jsxRuntime.jsx("div", { className: "react-flow__viewport-portal" })] }) });
8452
8260
  }
8453
8261
  GraphViewComponent.displayName = "GraphView";
8454
8262
  var GraphView = ReactExports.memo(GraphViewComponent);
8263
+ var devWarn = createDevWarn("React Flow", "https://reactflow.dev/");
8455
8264
  var getInitialState = ({ nodes, edges, defaultNodes, defaultEdges, width, height, fitView, fitViewOptions, minZoom = 0.5, maxZoom = 2, nodeOrigin, nodeExtent, zIndexMode = "basic" } = {}) => {
8456
8265
  const nodeLookup = /* @__PURE__ */ new Map();
8457
8266
  const parentLookup = /* @__PURE__ */ new Map();
@@ -8798,7 +8607,7 @@ var createStore2 = ({ nodes, edges, defaultNodes, defaultEdges, width, height, f
8798
8607
  setCenter: async (x, y, options) => {
8799
8608
  const { width: width2, height: height2, maxZoom: maxZoom2, panZoom } = get3();
8800
8609
  if (!panZoom) {
8801
- return Promise.resolve(false);
8610
+ return false;
8802
8611
  }
8803
8612
  const nextZoom = typeof options?.zoom !== "undefined" ? options.zoom : maxZoom2;
8804
8613
  await panZoom.setViewport({
@@ -8806,7 +8615,7 @@ var createStore2 = ({ nodes, edges, defaultNodes, defaultEdges, width, height, f
8806
8615
  y: height2 / 2 - y * nextZoom,
8807
8616
  zoom: nextZoom
8808
8617
  }, { duration: options?.duration, ease: options?.ease, interpolate: options?.interpolate });
8809
- return Promise.resolve(true);
8618
+ return true;
8810
8619
  },
8811
8620
  cancelConnection: () => {
8812
8621
  set3({
@@ -8851,14 +8660,14 @@ var wrapperStyle = {
8851
8660
  position: "relative",
8852
8661
  zIndex: 0
8853
8662
  };
8854
- function ReactFlow({ nodes, edges, defaultNodes, defaultEdges, className, nodeTypes, edgeTypes, onNodeClick, onEdgeClick, onInit, onMove, onMoveStart, onMoveEnd, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onNodesDelete, onEdgesDelete, onDelete, onSelectionChange, onSelectionDragStart, onSelectionDrag, onSelectionDragStop, onSelectionContextMenu, onSelectionStart, onSelectionEnd, onBeforeDelete, connectionMode, connectionLineType = ConnectionLineType.Bezier, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, deleteKeyCode = "Backspace", selectionKeyCode = "Shift", selectionOnDrag = false, selectionMode = SelectionMode.Full, panActivationKeyCode = "Space", multiSelectionKeyCode = isMacOs() ? "Meta" : "Control", zoomActivationKeyCode = isMacOs() ? "Meta" : "Control", snapToGrid, snapGrid, onlyRenderVisibleElements = false, selectNodesOnDrag, nodesDraggable, autoPanOnNodeFocus, nodesConnectable, nodesFocusable, nodeOrigin = defaultNodeOrigin, edgesFocusable, edgesReconnectable, elementsSelectable = true, defaultViewport: defaultViewport$1 = defaultViewport, minZoom = 0.5, maxZoom = 2, translateExtent = infiniteExtent, preventScrolling = true, nodeExtent, defaultMarkerColor = "#b1b1b7", zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, panOnDrag = true, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, paneClickDistance = 1, nodeClickDistance = 0, children: children2, onReconnect, onReconnectStart, onReconnectEnd, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, reconnectRadius = 10, onNodesChange, onEdgesChange, noDragClassName = "nodrag", noWheelClassName = "nowheel", noPanClassName = "nopan", fitView, fitViewOptions, connectOnClick, attributionPosition, proOptions, defaultEdgeOptions, elevateNodesOnSelect = true, elevateEdgesOnSelect = false, disableKeyboardA11y = false, autoPanOnConnect, autoPanOnNodeDrag, autoPanSpeed, connectionRadius, isValidConnection, onError, style: style2, id: id2, nodeDragThreshold, connectionDragThreshold, viewport, onViewportChange, width, height, colorMode = "light", debug, onScroll, ariaLabelConfig, zIndexMode = "basic", ...rest }, ref) {
8663
+ function ReactFlow({ nodes, edges, defaultNodes, defaultEdges, className, nodeTypes, edgeTypes, onNodeClick, onEdgeClick, onInit, onMove, onMoveStart, onMoveEnd, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onNodesDelete, onEdgesDelete, onDelete, onSelectionChange, onSelectionDragStart, onSelectionDrag, onSelectionDragStop, onSelectionContextMenu, onSelectionStart, onSelectionEnd, onBeforeDelete, connectionMode, connectionLineType = ConnectionLineType.Bezier, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, deleteKeyCode = "Backspace", selectionKeyCode = "Shift", selectionOnDrag = false, selectionMode = SelectionMode.Full, panActivationKeyCode = "Space", multiSelectionKeyCode = isMacOs() ? "Meta" : "Control", zoomActivationKeyCode = isMacOs() ? "Meta" : "Control", snapToGrid, snapGrid, onlyRenderVisibleElements = false, selectNodesOnDrag, nodesDraggable, autoPanOnNodeFocus, nodesConnectable, nodesFocusable, nodeOrigin = defaultNodeOrigin, edgesFocusable, edgesReconnectable, elementsSelectable = true, defaultViewport: defaultViewport$1 = defaultViewport, minZoom = 0.5, maxZoom = 2, translateExtent = infiniteExtent, preventScrolling = true, nodeExtent, defaultMarkerColor = "#b1b1b7", zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, panOnDrag = true, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, paneClickDistance = 1, nodeClickDistance = 0, children: children2, onReconnect, onReconnectStart, onReconnectEnd, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, reconnectRadius = 10, onNodesChange, onEdgesChange, noDragClassName = "nodrag", noWheelClassName = "nowheel", noPanClassName = "nopan", fitView, fitViewOptions, connectOnClick, attributionPosition, proOptions, defaultEdgeOptions, elevateNodesOnSelect = true, elevateEdgesOnSelect = false, disableKeyboardA11y = false, autoPanOnConnect, autoPanOnNodeDrag, autoPanOnSelection = true, autoPanSpeed, connectionRadius, isValidConnection, onError, style: style2, id: id2, nodeDragThreshold, connectionDragThreshold, viewport, onViewportChange, width, height, colorMode = "light", debug, onScroll, ariaLabelConfig, zIndexMode = "basic", ...rest }, ref) {
8855
8664
  const rfId = id2 || "1";
8856
8665
  const colorModeClassName = useColorModeClass(colorMode);
8857
8666
  const wrapperOnScroll = ReactExports.useCallback((e) => {
8858
8667
  e.currentTarget.scrollTo({ top: 0, left: 0, behavior: "instant" });
8859
8668
  onScroll?.(e);
8860
8669
  }, [onScroll]);
8861
- return jsxRuntime.jsx("div", { "data-testid": "rf__wrapper", ...rest, onScroll: wrapperOnScroll, style: { ...style2, ...wrapperStyle }, ref, className: cc(["react-flow", className, colorModeClassName]), id: id2, role: "application", children: jsxRuntime.jsxs(Wrapper, { nodes, edges, width, height, fitView, fitViewOptions, minZoom, maxZoom, nodeOrigin, nodeExtent, zIndexMode, children: [jsxRuntime.jsx(StoreUpdater, { nodes, edges, defaultNodes, defaultEdges, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, nodesDraggable, autoPanOnNodeFocus, nodesConnectable, nodesFocusable, edgesFocusable, edgesReconnectable, elementsSelectable, elevateNodesOnSelect, elevateEdgesOnSelect, minZoom, maxZoom, nodeExtent, onNodesChange, onEdgesChange, snapToGrid, snapGrid, connectionMode, translateExtent, connectOnClick, defaultEdgeOptions, fitView, fitViewOptions, onNodesDelete, onEdgesDelete, onDelete, onNodeDragStart, onNodeDrag, onNodeDragStop, onSelectionDrag, onSelectionDragStart, onSelectionDragStop, onMove, onMoveStart, onMoveEnd, noPanClassName, nodeOrigin, rfId, autoPanOnConnect, autoPanOnNodeDrag, autoPanSpeed, onError, connectionRadius, isValidConnection, selectNodesOnDrag, nodeDragThreshold, connectionDragThreshold, onBeforeDelete, debug, ariaLabelConfig, zIndexMode }), jsxRuntime.jsx(GraphView, { onInit, onNodeClick, onEdgeClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, nodeTypes, edgeTypes, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, deleteKeyCode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, onlyRenderVisibleElements, defaultViewport: defaultViewport$1, translateExtent, minZoom, maxZoom, preventScrolling, zoomOnScroll, zoomOnPinch, zoomOnDoubleClick, panOnScroll, panOnScrollSpeed, panOnScrollMode, panOnDrag, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, paneClickDistance, nodeClickDistance, onSelectionContextMenu, onSelectionStart, onSelectionEnd, onReconnect, onReconnectStart, onReconnectEnd, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, reconnectRadius, defaultMarkerColor, noDragClassName, noWheelClassName, noPanClassName, rfId, disableKeyboardA11y, nodeExtent, viewport, onViewportChange }), jsxRuntime.jsx(SelectionListener, { onSelectionChange }), children2, jsxRuntime.jsx(Attribution, { proOptions, position: attributionPosition }), jsxRuntime.jsx(A11yDescriptions, { rfId, disableKeyboardA11y })] }) });
8670
+ return jsxRuntime.jsx("div", { "data-testid": "rf__wrapper", ...rest, onScroll: wrapperOnScroll, style: { ...style2, ...wrapperStyle }, ref, className: cc(["react-flow", className, colorModeClassName]), id: id2, role: "application", children: jsxRuntime.jsxs(Wrapper, { nodes, edges, width, height, fitView, fitViewOptions, minZoom, maxZoom, nodeOrigin, nodeExtent, zIndexMode, children: [jsxRuntime.jsx(StoreUpdater, { nodes, edges, defaultNodes, defaultEdges, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, nodesDraggable, autoPanOnNodeFocus, nodesConnectable, nodesFocusable, edgesFocusable, edgesReconnectable, elementsSelectable, elevateNodesOnSelect, elevateEdgesOnSelect, minZoom, maxZoom, nodeExtent, onNodesChange, onEdgesChange, snapToGrid, snapGrid, connectionMode, translateExtent, connectOnClick, defaultEdgeOptions, fitView, fitViewOptions, onNodesDelete, onEdgesDelete, onDelete, onNodeDragStart, onNodeDrag, onNodeDragStop, onSelectionDrag, onSelectionDragStart, onSelectionDragStop, onMove, onMoveStart, onMoveEnd, noPanClassName, nodeOrigin, rfId, autoPanOnConnect, autoPanOnNodeDrag, autoPanSpeed, onError, connectionRadius, isValidConnection, selectNodesOnDrag, nodeDragThreshold, connectionDragThreshold, onBeforeDelete, debug, ariaLabelConfig, zIndexMode }), jsxRuntime.jsx(GraphView, { onInit, onNodeClick, onEdgeClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, nodeTypes, edgeTypes, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, deleteKeyCode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, onlyRenderVisibleElements, defaultViewport: defaultViewport$1, translateExtent, minZoom, maxZoom, preventScrolling, zoomOnScroll, zoomOnPinch, zoomOnDoubleClick, panOnScroll, panOnScrollSpeed, panOnScrollMode, panOnDrag, autoPanOnSelection, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, paneClickDistance, nodeClickDistance, onSelectionContextMenu, onSelectionStart, onSelectionEnd, onReconnect, onReconnectStart, onReconnectEnd, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, reconnectRadius, defaultMarkerColor, noDragClassName, noWheelClassName, noPanClassName, rfId, disableKeyboardA11y, nodeExtent, viewport, onViewportChange }), jsxRuntime.jsx(SelectionListener, { onSelectionChange }), children2, jsxRuntime.jsx(Attribution, { proOptions, position: attributionPosition }), jsxRuntime.jsx(A11yDescriptions, { rfId, disableKeyboardA11y })] }) });
8862
8671
  }
8863
8672
  fixedForwardRef(ReactFlow);
8864
8673
  function LinePattern({ dimensions, lineWidth, variant, className }) {
@@ -9305,57 +9114,11 @@ function useFlowState(initial) {
9305
9114
  setEdges((es) => applyEdgeChanges(changes, es));
9306
9115
  }, []);
9307
9116
  const onConnect = ReactExports.useCallback((connection) => {
9308
- setEdges((es) => addEdge(connection, es));
9117
+ setEdges((es) => addEdge2(connection, es));
9309
9118
  }, []);
9310
9119
  const toGraph = ReactExports.useCallback(() => ({ nodes, edges }), [nodes, edges]);
9311
9120
  return { nodes, edges, setNodes, setEdges, onNodesChange, onEdgesChange, onConnect, toGraph };
9312
9121
  }
9313
- /*! Bundled license information:
9314
-
9315
- use-sync-external-store/cjs/use-sync-external-store-shim.production.js:
9316
- (**
9317
- * @license React
9318
- * use-sync-external-store-shim.production.js
9319
- *
9320
- * Copyright (c) Meta Platforms, Inc. and affiliates.
9321
- *
9322
- * This source code is licensed under the MIT license found in the
9323
- * LICENSE file in the root directory of this source tree.
9324
- *)
9325
-
9326
- use-sync-external-store/cjs/use-sync-external-store-shim.development.js:
9327
- (**
9328
- * @license React
9329
- * use-sync-external-store-shim.development.js
9330
- *
9331
- * Copyright (c) Meta Platforms, Inc. and affiliates.
9332
- *
9333
- * This source code is licensed under the MIT license found in the
9334
- * LICENSE file in the root directory of this source tree.
9335
- *)
9336
-
9337
- use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js:
9338
- (**
9339
- * @license React
9340
- * use-sync-external-store-shim/with-selector.production.js
9341
- *
9342
- * Copyright (c) Meta Platforms, Inc. and affiliates.
9343
- *
9344
- * This source code is licensed under the MIT license found in the
9345
- * LICENSE file in the root directory of this source tree.
9346
- *)
9347
-
9348
- use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js:
9349
- (**
9350
- * @license React
9351
- * use-sync-external-store-shim/with-selector.development.js
9352
- *
9353
- * Copyright (c) Meta Platforms, Inc. and affiliates.
9354
- *
9355
- * This source code is licensed under the MIT license found in the
9356
- * LICENSE file in the root directory of this source tree.
9357
- *)
9358
- */
9359
9122
 
9360
9123
  exports.applyStatusesToNodes = applyStatusesToNodes;
9361
9124
  exports.runFlow = runFlow;