@foblex/flow 19.1.5 → 19.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AI.md CHANGED
@@ -4,7 +4,7 @@ Use this file as a strict control layer for code generation. Prefer verified pac
4
4
 
5
5
  ## What This Library Is
6
6
 
7
- `@foblex/flow` is an Angular-native library for building node-based editors, workflow builders, and interactive graph UIs.
7
+ `@foblex/flow` is the most widely adopted node editor library for Angular (by npm weekly downloads) — Angular-native, for production workflow builders, AI pipelines, and interactive diagram editors.
8
8
  It provides rendering, connectors, interactions, selection, zoom, and connection drawing. By default your app owns graph records; the optional `withFlowState()` feature maintains typed records and undo/redo that your app explicitly loads and renders.
9
9
 
10
10
  ## Core Mental Model
@@ -170,7 +170,7 @@ If the toggle is nested inside `fDragHandle`, add `fDragBlocker` to the toggle.
170
170
 
171
171
  When the flow compiles but looks wrong, verify in this order:
172
172
 
173
- 1. **Connection not visible**: `fSourceId` / `fTargetId` does not match any rendered `fConnectorId` exactly (string comparison; `1` vs `'1'` from different sources is a classic mismatch). The connection silently does not render.
173
+ 1. **Connection not visible**: `fSourceId` / `fTargetId` does not match any rendered `fConnectorId` exactly. `out-1` vs `out_1` is a mismatch; numeric `1` and string `'1'` normalize to the same id. The connection does not render, and dev mode reports `FF1001` after endpoint resolution settles.
174
174
  2. **Blank canvas**: `f-flow` has zero height, or the theme SCSS is not wired in `angular.json`.
175
175
  3. **`'f-flow' is not a known element`** or connectors not working: `FFlowModule` missing from the component `imports`.
176
176
  4. **Nothing is draggable / no events fire**: `fDraggable` missing on `<f-flow>`.
@@ -185,7 +185,7 @@ When the flow compiles but looks wrong, verify in this order:
185
185
  13. **Wrong initial viewport** (`FF1009`): `fitToScreen()` / `resetScaleAndCenter()` / `centerGroupOrNode()` / `resetScaleAndCenterGroupOrNode()` called before nodes were rendered — call them from `(fNodesRendered)` (earliest safe) or `(fFullRendered)`.
186
186
  14. **Initial centering appears in managed undo history**: call `resetScaleAndCenter(false, false)` (or pass `emitCanvasChange: false` to another viewport helper) for an application-driven transform.
187
187
 
188
- To verify programmatically: listen to `(fFullRendered)` on `<f-flow>`, then call `flow.getState()` and assert every declared connection resolved to existing connectors.
188
+ To verify programmatically: wait for `(fFullRendered)`, compare the node, group, and connection ids exported by `flow.getState()` with the expected graph, and fail the test on any `FFxxxx` console diagnostic. `getState()` exports registered graph records; it does not by itself prove that connection endpoints resolved. Dev-mode `FF1001` reports an unresolved endpoint.
189
189
 
190
190
  ## Additional Rules
191
191
 
package/README.md CHANGED
@@ -25,10 +25,10 @@
25
25
  <h1 align="center">Foblex Flow</h1>
26
26
 
27
27
  <p align="center">
28
- <strong>Angular-native node-based UI library for building node editors, workflow builders, and interactive graph interfaces.</strong>
28
+ <strong>The most adopted node editor library for Angular for production workflow builders, AI pipelines, and interactive diagram editors.</strong>
29
29
  </p>
30
30
 
31
- Foblex Flow gives Angular teams a simple way to start building graph-based products without adopting a React-first mental model. Begin with `f-flow`, `f-canvas`, nodes, and connections, then add richer editor features only when your product needs them.
31
+ Foblex Flow ships the hard parts of a production node editor drag logic, hit-testing, SVG connection paths, reassign, selection, zoom, and undo/redo — as Angular-native building blocks. Begin with `f-flow`, `f-canvas`, nodes, and connections, then add richer editor features only when your product needs them. It powers production products such as [Luware Nimbus](https://luware.com/products/nimbus), [ProcessMIX](https://processmix.com/), [XpertAI](https://xpertai.cn/en/), and [EpicStaff](https://www.epicstaff.ai/).
32
32
 
33
33
  Use it to create workflow builders, AI low-code tools, call-flow editors, UML diagrams, internal back-office tools, and other node-based interfaces. Start with app-owned graph records, or opt into managed records and undo/redo with `withFlowState()`; validation, persistence, permissions, and domain logic remain application concerns in both modes.
34
34
 
@@ -40,8 +40,17 @@ Use it to create workflow builders, AI low-code tools, call-flow editors, UML di
40
40
 
41
41
  Current `19.x` releases target Angular `17.3+`. If your app is on Angular 12-17.2, check the [Angular Version Compatibility](https://flow.foblex.com/docs/angular-version-compatibility) guide first and pin the matching Foblex Flow line before installing.
42
42
 
43
+ ## Built for AI Coding Agents
44
+
45
+ Foblex Flow treats AI coding agents as first-class users: the package ships a version-matched guide at `node_modules/@foblex/flow/AI.md`, `ng add` writes workspace agent rules, and stable `FFxxxx` diagnostics give agents a concrete pass/fail signal. Before generating code, verify Foblex-specific selectors and APIs against that guide or the linked official reference; do not infer APIs from other node editor libraries.
46
+
47
+ Choose the integration deliberately: classic mode keeps graph records in the application, while optional `provideFFlow(withFlowState())` provides typed managed records and undo/redo for supported operations. Verify generated flows using the APIs and `FFxxxx` diagnostics described in the shipped guide.
48
+
49
+ [AI setup guide](https://flow.foblex.com/docs/ai) · [Full curated LLM-readable reference](https://flow.foblex.com/llms-full.txt)
50
+
43
51
  ## Why Foblex Flow
44
52
 
53
+ - The most adopted node editor library built for Angular, by npm weekly downloads — maintained full-time since 2022 and used in production commercial products.
45
54
  - Easy starting path: most editors begin with `f-flow`, `f-canvas`, nodes, connectors, and connections.
46
55
  - Angular-first API that fits Angular apps instead of wrapping a React-style state model.
47
56
  - Built for real editor interactions: drag to connect, drag to reassign, selection, zoom, minimap, snapping, alignment helpers, and waypoints.
@@ -65,7 +74,7 @@ Current `19.x` releases target Angular `17.3+`. If your app is on Angular 12-17.
65
74
  | Integration | Classic event-driven API with app-owned records, or optional `withFlowState()` managed records, snapshots, and undo/redo; SSR-safe, zoneless-ready |
66
75
  | AI tooling | `llms.txt`, bundled `AI.md`, `ng add` writes agent rules, dev diagnostics with stable `FFxxxx` error codes |
67
76
 
68
- Coming from React Flow? Read the honest comparison: [React Flow vs Foblex Flow for Angular teams](https://flow.foblex.com/docs/react-flow-vs-foblex-flow-for-angular-teams).
77
+ Comparing options? Read the honest comparisons: [React Flow vs Foblex Flow for Angular teams](https://flow.foblex.com/docs/react-flow-vs-foblex-flow-for-angular-teams) and [ngx-vflow vs Foblex Flow](https://flow.foblex.com/docs/ngx-vflow-vs-foblex-flow).
69
78
 
70
79
  ## Choose Your State Integration
71
80
 
@@ -191,7 +200,7 @@ That is the rendering mental model: `f-flow` hosts the editor, `f-canvas` pans a
191
200
 
192
201
  ### For AI Agents and LLMs
193
202
 
194
- - [llms.txt](https://flow.foblex.com/llms.txt) — docs index for agents; [llms-full.txt](https://flow.foblex.com/llms-full.txt) — complete LLM-readable API reference
203
+ - [llms.txt](https://flow.foblex.com/llms.txt) — docs index for agents; [llms-full.txt](https://flow.foblex.com/llms-full.txt) — full curated LLM-readable reference
195
204
  - [AI usage guide](https://github.com/Foblex/f-flow/blob/main/libs/f-flow/AI.md) — strict code-generation rules, also shipped inside this package at `node_modules/@foblex/flow/AI.md`
196
205
 
197
206
  ## Community and Support
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, ElementRef, DestroyRef, Injector, input, effect, untracked, Directive, signal, numberAttribute, model, booleanAttribute, ChangeDetectionStrategy, Component, viewChild, Input, computed, contentChildren, contentChild, Renderer2, output, NgZone, ViewContainerRef, TemplateRef, runInInjectionContext, EventEmitter, Output, afterNextRender, NgModule } from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, ElementRef, DestroyRef, Injector, input, effect, untracked, Directive, signal, computed, numberAttribute, model, booleanAttribute, ChangeDetectionStrategy, Component, viewChild, Input, contentChildren, contentChild, Renderer2, output, NgZone, ViewContainerRef, TemplateRef, runInInjectionContext, EventEmitter, Output, afterNextRender, NgModule } from '@angular/core';
3
3
  import { TransformModelExtensions, PointExtensions, RectExtensions, GetIntersections, RoundedRect, Point, LineExtensions, SizeExtensions, setRectToElement, adjustRectToMinSize, setRectToViewBox } from '@foblex/2d';
4
4
  import { __decorate } from 'tslib';
5
5
  import { FExecutionRegister, FMediator } from '@foblex/mediator';
@@ -1971,6 +1971,21 @@ const F_CONNECTION_WAYPOINTS = new InjectionToken('F_CONNECTION_WAYPOINTS');
1971
1971
  class FConnectionWaypointsBase {
1972
1972
  hostElement = inject((ElementRef)).nativeElement;
1973
1973
  candidates = signal([], ...(ngDevMode ? [{ debugName: "candidates" }] : []));
1974
+ /**
1975
+ * Handle display positions supplied by the line builder (for example the
1976
+ * bend apex of a rounded segment corner). The waypoint model itself is
1977
+ * untouched — dragging and events always operate on the real waypoints.
1978
+ */
1979
+ handles = signal([], ...(ngDevMode ? [{ debugName: "handles" }] : []));
1980
+ /**
1981
+ * Where the waypoint handles are drawn and hit-tested: the builder-supplied
1982
+ * positions when they cover every waypoint, otherwise the waypoints
1983
+ * themselves.
1984
+ */
1985
+ displayedWaypoints = computed(() => {
1986
+ const handles = this.handles();
1987
+ return handles.length === this.waypoints().length ? handles : this.waypoints();
1988
+ }, ...(ngDevMode ? [{ debugName: "displayedWaypoints" }] : []));
1974
1989
  _activeIndex = 0;
1975
1990
  _waypoints = [];
1976
1991
  insert(candidate) {
@@ -2005,7 +2020,11 @@ function findWaypointCandidate(connection, position) {
2005
2020
  function findExistingWaypoint(connection, position) {
2006
2021
  const component = connection.fWaypoints();
2007
2022
  const radius = component?.radius() || 8;
2008
- return component?.waypoints().find((x) => isPointerInsidePoint(position, x, radius));
2023
+ // Handles can be drawn slightly off the raw waypoint (on the bend apex of a
2024
+ // rounded corner), so hit-test where they are rendered but hand back the
2025
+ // real waypoint — dragging always operates on the model value.
2026
+ const index = (component?.displayedWaypoints() ?? []).findIndex((x) => isPointerInsidePoint(position, x, radius));
2027
+ return index >= 0 ? component?.waypoints()[index] : undefined;
2009
2028
  }
2010
2029
 
2011
2030
  function pickWaypoint(connections, position) {
@@ -2060,13 +2079,13 @@ class FConnectionWaypoints extends FConnectionWaypointsBase {
2060
2079
  this._notifyDataChanged();
2061
2080
  }
2062
2081
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: FConnectionWaypoints, deps: null, target: i0.ɵɵFactoryTarget.Component });
2063
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: FConnectionWaypoints, isStandalone: true, selector: "f-connection-waypoints", inputs: { radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, waypoints: { classPropertyName: "waypoints", publicName: "waypoints", isSignal: true, isRequired: false, transformFunction: null }, visibility: { classPropertyName: "visibility", publicName: "visibility", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { waypoints: "waypointsChange" }, host: { classAttribute: "f-component f-connection-waypoints" }, providers: [{ provide: F_CONNECTION_WAYPOINTS, useExisting: FConnectionWaypoints }], usesInheritance: true, ngImport: i0, template: "@if (visibility()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n @for (candidate of candidates(); track $index) {\n <circle\n [attr.r]=\"radius()\"\n class=\"f-candidate\"\n [attr.cx]=\"candidate.x\"\n [attr.cy]=\"candidate.y\"\n ></circle>\n }\n @for (point of waypoints(); track $index) {\n <circle\n [attr.r]=\"radius()\"\n (contextmenu)=\"remove($index, $event)\"\n class=\"f-waypoint\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n ></circle>\n }\n </g>\n </svg>\n}\n\n", styles: [":host{pointer-events:none;position:absolute}svg{display:block;vertical-align:middle;position:absolute;overflow:visible}circle{pointer-events:visible}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2082
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: FConnectionWaypoints, isStandalone: true, selector: "f-connection-waypoints", inputs: { radius: { classPropertyName: "radius", publicName: "radius", isSignal: true, isRequired: false, transformFunction: null }, waypoints: { classPropertyName: "waypoints", publicName: "waypoints", isSignal: true, isRequired: false, transformFunction: null }, visibility: { classPropertyName: "visibility", publicName: "visibility", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { waypoints: "waypointsChange" }, host: { classAttribute: "f-component f-connection-waypoints" }, providers: [{ provide: F_CONNECTION_WAYPOINTS, useExisting: FConnectionWaypoints }], usesInheritance: true, ngImport: i0, template: "@if (visibility()) {\n<svg xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n @for (candidate of candidates(); track $index) {\n <circle\n [attr.r]=\"radius()\"\n class=\"f-candidate\"\n [attr.cx]=\"candidate.x\"\n [attr.cy]=\"candidate.y\"\n ></circle>\n } @for (point of displayedWaypoints(); track $index) {\n <circle\n [attr.r]=\"radius()\"\n (contextmenu)=\"remove($index, $event)\"\n class=\"f-waypoint\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n ></circle>\n }\n </g>\n</svg>\n}\n", styles: [":host{pointer-events:none;position:absolute}svg{display:block;vertical-align:middle;position:absolute;overflow:visible}circle{pointer-events:visible}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2064
2083
  }
2065
2084
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: FConnectionWaypoints, decorators: [{
2066
2085
  type: Component,
2067
2086
  args: [{ selector: 'f-connection-waypoints', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
2068
2087
  class: 'f-component f-connection-waypoints',
2069
- }, providers: [{ provide: F_CONNECTION_WAYPOINTS, useExisting: FConnectionWaypoints }], template: "@if (visibility()) {\n <svg xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n @for (candidate of candidates(); track $index) {\n <circle\n [attr.r]=\"radius()\"\n class=\"f-candidate\"\n [attr.cx]=\"candidate.x\"\n [attr.cy]=\"candidate.y\"\n ></circle>\n }\n @for (point of waypoints(); track $index) {\n <circle\n [attr.r]=\"radius()\"\n (contextmenu)=\"remove($index, $event)\"\n class=\"f-waypoint\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n ></circle>\n }\n </g>\n </svg>\n}\n\n", styles: [":host{pointer-events:none;position:absolute}svg{display:block;vertical-align:middle;position:absolute;overflow:visible}circle{pointer-events:visible}\n"] }]
2088
+ }, providers: [{ provide: F_CONNECTION_WAYPOINTS, useExisting: FConnectionWaypoints }], template: "@if (visibility()) {\n<svg xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n @for (candidate of candidates(); track $index) {\n <circle\n [attr.r]=\"radius()\"\n class=\"f-candidate\"\n [attr.cx]=\"candidate.x\"\n [attr.cy]=\"candidate.y\"\n ></circle>\n } @for (point of displayedWaypoints(); track $index) {\n <circle\n [attr.r]=\"radius()\"\n (contextmenu)=\"remove($index, $event)\"\n class=\"f-waypoint\"\n [attr.cx]=\"point.x\"\n [attr.cy]=\"point.y\"\n ></circle>\n }\n </g>\n</svg>\n}\n", styles: [":host{pointer-events:none;position:absolute}svg{display:block;vertical-align:middle;position:absolute;overflow:visible}circle{pointer-events:visible}\n"] }]
2070
2089
  }], propDecorators: { radius: [{ type: i0.Input, args: [{ isSignal: true, alias: "radius", required: false }] }], waypoints: [{ type: i0.Input, args: [{ isSignal: true, alias: "waypoints", required: false }] }, { type: i0.Output, args: ["waypointsChange"] }], visibility: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibility", required: false }] }] } });
2071
2090
 
2072
2091
  var EFMarkerType;
@@ -2642,6 +2661,29 @@ function dist(a, b) {
2642
2661
  return Math.hypot(b.x - a.x, b.y - a.y);
2643
2662
  }
2644
2663
 
2664
+ /**
2665
+ * Control point for a cubic segment end that lies on an intermediate waypoint.
2666
+ * The tangent runs from the previous toward the next neighbor (Catmull-Rom
2667
+ * style), so the two segments meeting at the waypoint share one tangent
2668
+ * direction and the curve passes through it smoothly. Connector sides shape
2669
+ * only the real endpoints of the connection, never the waypoints.
2670
+ *
2671
+ * `distance` is positive for an outgoing control point and negative for an
2672
+ * incoming one.
2673
+ */
2674
+ function calculateSmoothControlPoint(anchor, previous, next, distance) {
2675
+ const dx = next.x - previous.x;
2676
+ const dy = next.y - previous.y;
2677
+ const length = Math.hypot(dx, dy);
2678
+ if (length === 0) {
2679
+ return { x: anchor.x, y: anchor.y };
2680
+ }
2681
+ return {
2682
+ x: anchor.x + (dx / length) * distance,
2683
+ y: anchor.y + (dy / length) * distance,
2684
+ };
2685
+ }
2686
+
2645
2687
  function mergePointChains(chains) {
2646
2688
  const out = [];
2647
2689
  for (const chain of chains) {
@@ -2763,13 +2805,19 @@ class CalculateAdaptiveCurveData {
2763
2805
  const clampedOffset = Math.max(0, offset ?? 0);
2764
2806
  const anchors = buildConnectionAnchors(source, target, waypoints);
2765
2807
  const segments = [];
2808
+ // Connector sides shape only the first and the last tangent; at
2809
+ // intermediate waypoints both adjacent segments share one Catmull-Rom
2810
+ // style tangent, so the curve passes through waypoints without kinks.
2766
2811
  for (let i = 0; i < anchors.length - 1; i++) {
2767
2812
  const a = anchors[i];
2768
2813
  const b = anchors[i + 1];
2769
- const h0 = CalculateAdaptiveCurveData._handleLength(a, b, sourceSide, clampedOffset);
2770
- const h3 = CalculateAdaptiveCurveData._handleLength(b, a, targetSide, clampedOffset);
2771
- const c1 = CalculateAdaptiveCurveData._softControl(sourceSide, a, b, h0);
2772
- const c2 = CalculateAdaptiveCurveData._softControl(targetSide, b, a, h3);
2814
+ const handle = Math.hypot(b.x - a.x, b.y - a.y) / 3;
2815
+ const c1 = i === 0
2816
+ ? CalculateAdaptiveCurveData._softControl(sourceSide, a, b, CalculateAdaptiveCurveData._handleLength(a, b, sourceSide, clampedOffset))
2817
+ : calculateSmoothControlPoint(a, anchors[i - 1], b, handle);
2818
+ const c2 = i === anchors.length - 2
2819
+ ? CalculateAdaptiveCurveData._softControl(targetSide, b, a, CalculateAdaptiveCurveData._handleLength(b, a, targetSide, clampedOffset))
2820
+ : calculateSmoothControlPoint(b, a, anchors[i + 2], -handle);
2773
2821
  segments.push({ p0: a, c1, c2, p3: b, chainIndex: i });
2774
2822
  }
2775
2823
  const points = sampleMultiCubicUniform(segments, 12);
@@ -2787,11 +2835,19 @@ class CalculateBezierCurveData {
2787
2835
  handle({ source, sourceSide, target, targetSide, offset, waypoints, }) {
2788
2836
  const anchors = buildConnectionAnchors(source, target, waypoints);
2789
2837
  const segments = [];
2838
+ // Connector sides shape only the first and the last tangent; at
2839
+ // intermediate waypoints both adjacent segments share one Catmull-Rom
2840
+ // style tangent, so the curve passes through waypoints without kinks.
2790
2841
  for (let i = 0; i < anchors.length - 1; i++) {
2791
2842
  const a = anchors[i];
2792
2843
  const b = anchors[i + 1];
2793
- const c1 = getAnglePoint(sourceSide, a, b, offset ?? 0);
2794
- const c2 = getAnglePoint(targetSide, b, a, offset ?? 0);
2844
+ const handle = Math.hypot(b.x - a.x, b.y - a.y) / 3;
2845
+ const c1 = i === 0
2846
+ ? getAnglePoint(sourceSide, a, b, offset ?? 0)
2847
+ : calculateSmoothControlPoint(a, anchors[i - 1], b, handle);
2848
+ const c2 = i === anchors.length - 2
2849
+ ? getAnglePoint(targetSide, b, a, offset ?? 0)
2850
+ : calculateSmoothControlPoint(b, a, anchors[i + 2], -handle);
2795
2851
  segments.push({ p0: a, c1, c2, p3: b, chainIndex: i });
2796
2852
  }
2797
2853
  const points = sampleMultiCubicUniform(segments, 12);
@@ -2894,6 +2950,38 @@ function createSegmentLinePath(points, borderRadius) {
2894
2950
  parts.push(`L ${last.x + END_EPS} ${last.y + END_EPS}`);
2895
2951
  return parts.join(' ');
2896
2952
  }
2953
+ /**
2954
+ * The point of the rendered path closest to corner `b` — the apex of the
2955
+ * rounded bend `getBend` produces for it, or `b` itself when the corner is
2956
+ * rendered sharp. Uses the same bend-size clamping as `getBend`, so the
2957
+ * result always lies on the path.
2958
+ */
2959
+ function calculateCornerApex(a, b, c, size) {
2960
+ if (size <= 0) {
2961
+ return { x: b.x, y: b.y };
2962
+ }
2963
+ const collinearX = Math.abs(a.x - b.x) <= EPS$1 && Math.abs(b.x - c.x) <= EPS$1;
2964
+ const collinearY = Math.abs(a.y - b.y) <= EPS$1 && Math.abs(b.y - c.y) <= EPS$1;
2965
+ if (collinearX || collinearY) {
2966
+ return { x: b.x, y: b.y };
2967
+ }
2968
+ const ab = Math.hypot(b.x - a.x, b.y - a.y);
2969
+ const bc = Math.hypot(c.x - b.x, c.y - b.y);
2970
+ const bendSize = Math.min(ab * 0.5, bc * 0.5, size);
2971
+ if (bendSize < MIN_VISIBLE || ab === 0 || bc === 0) {
2972
+ return { x: b.x, y: b.y };
2973
+ }
2974
+ // The bend is a quadratic from (b - bendSize*din) to (b + bendSize*dout)
2975
+ // with control b; its apex at t = 0.5 is b + 0.25 * bendSize * (dout - din).
2976
+ const dinX = (b.x - a.x) / ab;
2977
+ const dinY = (b.y - a.y) / ab;
2978
+ const doutX = (c.x - b.x) / bc;
2979
+ const doutY = (c.y - b.y) / bc;
2980
+ return {
2981
+ x: b.x + 0.25 * bendSize * (doutX - dinX),
2982
+ y: b.y + 0.25 * bendSize * (doutY - dinY),
2983
+ };
2984
+ }
2897
2985
  function getBend(a, b, c, size) {
2898
2986
  const x = b.x;
2899
2987
  const y = b.y;
@@ -2933,17 +3021,24 @@ const CONNECTOR_SIDE_POINT = {
2933
3021
  [EFConnectableSide.BOTTOM]: PointExtensions.initialize(0, 1),
2934
3022
  [EFConnectableSide.AUTO]: PointExtensions.initialize(0, 0),
2935
3023
  };
3024
+ const HARD_VIOLATION_SCORE = 1000;
3025
+ const ARRIVAL_AXIS_SCORE = 8;
3026
+ const BEND_SCORE = 1;
3027
+ const LENGTH_SCORE = 1e-6;
3028
+ const NODE_ZONE_SCORE = 1;
3029
+ const NODE_ZONE_SCORE_LIMIT = 600;
2936
3030
  class CalculateSegmentLineData {
2937
3031
  handle({ source, sourceSide, target, targetSide, waypoints, offset, radius, }) {
2938
3032
  const anchors = buildConnectionAnchors(source, target, waypoints);
2939
- const chains = [];
3033
+ const chains = anchors.length === 2
3034
+ ? [this._getPathPoints(source, sourceSide, target, targetSide, offset ?? 0)]
3035
+ : this._buildWaypointChains(anchors, sourceSide, targetSide, offset ?? 0);
2940
3036
  const candidates = [];
2941
- for (let i = 0; i < anchors.length - 1; i++) {
2942
- const a = anchors[i];
2943
- const b = anchors[i + 1];
2944
- const points = this._getPathPoints(a, sourceSide, b, targetSide, offset ?? 0);
2945
- chains.push(points);
2946
- candidates.push(...calculatePolylineCandidates(points));
3037
+ for (const chain of chains) {
3038
+ const candidate = this._calculateChainCandidate(chain);
3039
+ if (candidate) {
3040
+ candidates.push(candidate);
3041
+ }
2947
3042
  }
2948
3043
  const polyline = normalizePolyline(mergePointChains(chains));
2949
3044
  const penultimatePoint = polyline.length > 1 ? polyline[polyline.length - 2] : source;
@@ -2954,8 +3049,205 @@ class CalculateSegmentLineData {
2954
3049
  secondPoint,
2955
3050
  points: polyline,
2956
3051
  candidates,
3052
+ waypointHandles: this._calculateWaypointHandles(waypoints ?? [], polyline, radius ?? 0),
2957
3053
  };
2958
3054
  }
3055
+ /**
3056
+ * Display positions for the waypoint handles. A waypoint that is a rounded
3057
+ * corner of the polyline maps to the apex of its bend, so the handle sits on
3058
+ * the rendered path; a waypoint lying mid-segment is already on the line.
3059
+ */
3060
+ _calculateWaypointHandles(waypoints, polyline, radius) {
3061
+ return waypoints.map((waypoint) => {
3062
+ const index = polyline.findIndex((point) => point.x === waypoint.x && point.y === waypoint.y);
3063
+ if (index <= 0 || index >= polyline.length - 1) {
3064
+ return { x: waypoint.x, y: waypoint.y };
3065
+ }
3066
+ return calculateCornerApex(polyline[index - 1], waypoint, polyline[index + 1], radius);
3067
+ });
3068
+ }
3069
+ /**
3070
+ * Routes the connection through intermediate waypoints. Connector sides and
3071
+ * the connector gap apply only at the real endpoints; waypoints are
3072
+ * pass-through anchors, so no connector-like stubs appear around them. Each
3073
+ * chain is an explicit orthogonal route that never doubles back on the
3074
+ * direction it arrived with — a same-line reversal would be collapsed by
3075
+ * polyline normalization and would detach the path from the waypoint.
3076
+ */
3077
+ _buildWaypointChains(anchors, sourceSide, targetSide, offset) {
3078
+ const sourceDirection = CONNECTOR_SIDE_POINT[sourceSide];
3079
+ const targetDirection = CONNECTOR_SIDE_POINT[targetSide];
3080
+ const nodeZones = [
3081
+ { anchor: anchors[0], direction: { x: -sourceDirection.x, y: -sourceDirection.y } },
3082
+ {
3083
+ anchor: anchors[anchors.length - 1],
3084
+ direction: { x: -targetDirection.x, y: -targetDirection.y },
3085
+ },
3086
+ ].filter((zone) => zone.direction.x !== 0 || zone.direction.y !== 0);
3087
+ const chains = [];
3088
+ let leaveDirection = null;
3089
+ for (let i = 0; i < anchors.length - 1; i++) {
3090
+ const a = anchors[i];
3091
+ const b = anchors[i + 1];
3092
+ const isFirstChain = i === 0;
3093
+ const isLastChain = i === anchors.length - 2;
3094
+ let chain;
3095
+ if (isFirstChain) {
3096
+ const sourceGap = {
3097
+ x: a.x + sourceDirection.x * offset,
3098
+ y: a.y + sourceDirection.y * offset,
3099
+ };
3100
+ const route = this._routeOrthogonal(sourceGap, sourceDirection, b, null, nodeZones);
3101
+ chain = [a, ...route];
3102
+ }
3103
+ else if (isLastChain) {
3104
+ const targetGap = {
3105
+ x: b.x + targetDirection.x * offset,
3106
+ y: b.y + targetDirection.y * offset,
3107
+ };
3108
+ const stubDirection = { x: -targetDirection.x, y: -targetDirection.y };
3109
+ const route = this._routeOrthogonal(a, leaveDirection, targetGap, stubDirection, nodeZones);
3110
+ chain = [...route, b];
3111
+ }
3112
+ else {
3113
+ chain = this._routeOrthogonal(a, leaveDirection, b, null, nodeZones);
3114
+ }
3115
+ chains.push(chain);
3116
+ leaveDirection = this._calculateArrivalDirection(isLastChain ? chain.slice(0, -1) : chain);
3117
+ }
3118
+ return chains;
3119
+ }
3120
+ /**
3121
+ * Connects two points with an axis-aligned route. Candidates are the
3122
+ * straight segment, both L-shapes, and both Z-shapes; the route that keeps
3123
+ * the constraints wins. `leaveDirection` is the motion the path arrived
3124
+ * with (its reversal as a first move is forbidden); `stubDirection` is the
3125
+ * upcoming connector stub motion (arriving against it is forbidden).
3126
+ * A non-dominant-axis arrival is only softly penalized, so waypoints are
3127
+ * entered along the axis they are farther away on.
3128
+ */
3129
+ _routeOrthogonal(from, leaveDirection, to, stubDirection, nodeZones) {
3130
+ if (from.x === to.x && from.y === to.y) {
3131
+ return [from];
3132
+ }
3133
+ const corners = [];
3134
+ if (from.x === to.x || from.y === to.y) {
3135
+ corners.push([]);
3136
+ }
3137
+ corners.push([{ x: to.x, y: from.y }]);
3138
+ corners.push([{ x: from.x, y: to.y }]);
3139
+ const centerBetweenPoints = calculateCenterBetweenPoints(from, to);
3140
+ corners.push([
3141
+ { x: centerBetweenPoints.x, y: from.y },
3142
+ { x: centerBetweenPoints.x, y: to.y },
3143
+ ]);
3144
+ corners.push([
3145
+ { x: from.x, y: centerBetweenPoints.y },
3146
+ { x: to.x, y: centerBetweenPoints.y },
3147
+ ]);
3148
+ const dominantAxis = Math.abs(to.x - from.x) >= Math.abs(to.y - from.y) ? 'x' : 'y';
3149
+ let bestRoute = null;
3150
+ let bestScore = Number.POSITIVE_INFINITY;
3151
+ for (const cornerPoints of corners) {
3152
+ const route = this._compactRoute([from, ...cornerPoints, to]);
3153
+ const score = this._scoreRoute(route, leaveDirection, stubDirection, dominantAxis, nodeZones);
3154
+ if (score < bestScore) {
3155
+ bestScore = score;
3156
+ bestRoute = route;
3157
+ }
3158
+ }
3159
+ return bestRoute ?? [from, to];
3160
+ }
3161
+ _compactRoute(points) {
3162
+ const route = [points[0]];
3163
+ for (let i = 1; i < points.length; i++) {
3164
+ const last = route[route.length - 1];
3165
+ if (points[i].x !== last.x || points[i].y !== last.y) {
3166
+ route.push(points[i]);
3167
+ }
3168
+ }
3169
+ return route;
3170
+ }
3171
+ _scoreRoute(route, leaveDirection, stubDirection, dominantAxis, nodeZones) {
3172
+ let score = 0;
3173
+ let length = 0;
3174
+ let zoneLength = 0;
3175
+ for (let i = 0; i < route.length - 1; i++) {
3176
+ length += Math.abs(route[i + 1].x - route[i].x) + Math.abs(route[i + 1].y - route[i].y);
3177
+ for (const zone of nodeZones) {
3178
+ zoneLength += this._calculateSegmentLengthInZone(route[i], route[i + 1], zone);
3179
+ }
3180
+ }
3181
+ score += Math.min(NODE_ZONE_SCORE_LIMIT, zoneLength * NODE_ZONE_SCORE);
3182
+ const first = this._segmentDirection(route[0], route[1]);
3183
+ if (leaveDirection &&
3184
+ (leaveDirection.x !== 0 || leaveDirection.y !== 0) &&
3185
+ first.x === -leaveDirection.x &&
3186
+ first.y === -leaveDirection.y) {
3187
+ score += HARD_VIOLATION_SCORE;
3188
+ }
3189
+ const arrival = this._segmentDirection(route[route.length - 2], route[route.length - 1]);
3190
+ if (stubDirection && arrival.x === -stubDirection.x && arrival.y === -stubDirection.y) {
3191
+ score += HARD_VIOLATION_SCORE;
3192
+ }
3193
+ if (!stubDirection && arrival[dominantAxis] === 0) {
3194
+ score += ARRIVAL_AXIS_SCORE;
3195
+ }
3196
+ return score + (route.length - 2) * BEND_SCORE + length * LENGTH_SCORE;
3197
+ }
3198
+ _segmentDirection(a, b) {
3199
+ return { x: Math.sign(b.x - a.x), y: Math.sign(b.y - a.y) };
3200
+ }
3201
+ /**
3202
+ * Length of the part of an axis-aligned segment lying inside the half-plane
3203
+ * behind a connector (where the endpoint's node body is).
3204
+ */
3205
+ _calculateSegmentLengthInZone(a, b, zone) {
3206
+ const zoneAxis = zone.direction.x !== 0 ? 'x' : 'y';
3207
+ const zoneSign = zone.direction[zoneAxis];
3208
+ const boundary = zone.anchor[zoneAxis];
3209
+ const start = (a[zoneAxis] - boundary) * zoneSign;
3210
+ const end = (b[zoneAxis] - boundary) * zoneSign;
3211
+ if (start <= 0 && end <= 0) {
3212
+ return 0;
3213
+ }
3214
+ const segmentLength = Math.abs(b.x - a.x) + Math.abs(b.y - a.y);
3215
+ if (a[zoneAxis] === b[zoneAxis]) {
3216
+ return segmentLength;
3217
+ }
3218
+ const insideLength = Math.max(start, end) - Math.max(0, Math.min(start, end));
3219
+ return Math.min(segmentLength, Math.max(0, insideLength));
3220
+ }
3221
+ /**
3222
+ * Waypoint-creation candidate for one chain: the midpoint of its longest
3223
+ * straight segment. Corner rounding consumes at most half of each adjacent
3224
+ * segment, so this point always lies on the rendered path — a length-based
3225
+ * chain midpoint can land on a rounded corner and float off the line.
3226
+ */
3227
+ _calculateChainCandidate(chain) {
3228
+ let bestLength = 0;
3229
+ let candidate = null;
3230
+ for (let i = 0; i < chain.length - 1; i++) {
3231
+ const length = Math.abs(chain[i + 1].x - chain[i].x) + Math.abs(chain[i + 1].y - chain[i].y);
3232
+ if (length > bestLength) {
3233
+ bestLength = length;
3234
+ candidate = {
3235
+ x: (chain[i].x + chain[i + 1].x) / 2,
3236
+ y: (chain[i].y + chain[i + 1].y) / 2,
3237
+ };
3238
+ }
3239
+ }
3240
+ return candidate;
3241
+ }
3242
+ _calculateArrivalDirection(chain) {
3243
+ for (let i = chain.length - 1; i > 0; i--) {
3244
+ const direction = this._segmentDirection(chain[i - 1], chain[i]);
3245
+ if (direction.x !== 0 || direction.y !== 0) {
3246
+ return direction;
3247
+ }
3248
+ }
3249
+ return null;
3250
+ }
2959
3251
  _getPathPoints(source, sourceSide, target, targetSide, offset) {
2960
3252
  const sourceDirection = CONNECTOR_SIDE_POINT[sourceSide];
2961
3253
  const targetDirection = CONNECTOR_SIDE_POINT[targetSide];
@@ -3531,11 +3823,12 @@ class FConnectionBase extends MIXIN_BASE$1 {
3531
3823
  }
3532
3824
  setLine({ point1, point2 }) {
3533
3825
  this.line = LineExtensions.initialize(point1, point2);
3534
- const { path, points, penultimatePoint, secondPoint, candidates } = this._getPathResult(point1, point2);
3826
+ const { path, points, penultimatePoint, secondPoint, candidates, waypointHandles } = this._getPathResult(point1, point2);
3535
3827
  this.path = path;
3536
3828
  this._penultimatePoint = penultimatePoint || point1;
3537
3829
  this._secondPoint = secondPoint || point2;
3538
3830
  this.fWaypoints()?.candidates.set(candidates || []);
3831
+ this.fWaypoints()?.handles.set(waypointHandles || []);
3539
3832
  this._contentLayoutEngine.layout(points || [], this._contents());
3540
3833
  }
3541
3834
  _contents() {
@@ -24423,5 +24716,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
24423
24716
  * Generated bundle index. Do not edit.
24424
24717
  */
24425
24718
 
24426
- export { AddCanvasToStore, AddCanvasToStoreRequest, AddConnectionForCreateToStore, AddConnectionForCreateToStoreRequest, AddConnectionMarkerToStore, AddConnectionMarkerToStoreRequest, AddConnectionToStore, AddConnectionToStoreRequest, AddConnectorToStore, AddConnectorToStoreRequest, AddDndToStore, AddDndToStoreRequest, AddFlowToStore, AddFlowToStoreRequest, AddNodeToStore, AddNodeToStoreRequest, AddPatternToBackground, AddPatternToBackgroundRequest, AddSnapConnectionToStore, AddSnapConnectionToStoreRequest, ApplyChildResizeConstraints, ApplyChildResizeConstraintsRequest, ApplyConnectionRender, ApplyConnectionRenderRequest, ApplyConnectionWorkerResult, ApplyConnectionWorkerResultRequest, ApplyParentResizeConstraints, ApplyParentResizeConstraintsRequest, AttachDragNodeHandlerFromSelection, AttachDragNodeHandlerFromSelectionRequest, AttachResizeConnectionDragHandlersToNode, AttachResizeConnectionDragHandlersToNodeRequest, AttachSoftParentConnectionDragHandlersToNode, AttachSoftParentConnectionDragHandlersToNodeRequest, AttachSourceConnectionDragHandlersToNode, AttachSourceConnectionDragHandlersToNodeRequest, AttachTargetConnectionDragHandlersToNode, AttachTargetConnectionDragHandlersToNodeRequest, BuildConnectionLine, BuildConnectionLineRequest, BuildConnectionWorkerBatch, BuildConnectionWorkerBatchRequest, BuildConnectionWorkerPayloadItem, BuildConnectionWorkerPayloadItemRequest, BuildDragNodeConstraints, BuildDragNodeConstraintsRequest, CALCULATABLE_SIDES, COMMON_PROVIDERS, CONNECTABLE_SIDE_EPSILON, CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS, CalculateAdaptiveCurveData, CalculateBezierCurveData, CalculateChangedRectFromDifference, CalculateChangedRectFromDifferenceRequest, CalculateClosestConnector, CalculateClosestConnectorRequest, CalculateConnectableSideByConnectedPositions, CalculateConnectableSideByConnectedPositionsRequest, CalculateConnectableSideByInternalPosition, CalculateConnectableSideByInternalPositionRequest, CalculateConnectionsState, CalculateConnectionsStateRequest, CalculateConnectorsConnectableSides, CalculateConnectorsConnectableSidesRequest, CalculateDirectChildrenUnionRect, CalculateDirectChildrenUnionRectRequest, CalculateFlowPointFromMinimapPoint, CalculateFlowPointFromMinimapPointRequest, CalculateFlowState, CalculateFlowStateRequest, CalculateInputConnections, CalculateInputConnectionsRequest, CalculateNodesBoundingBox, CalculateNodesBoundingBoxNormalizedPosition, CalculateNodesBoundingBoxNormalizedPositionRequest, CalculateNodesBoundingBoxRequest, CalculateNodesState, CalculateNodesStateRequest, CalculateOutputConnections, CalculateOutputConnectionsRequest, CalculateResizeLimits, CalculateResizeLimitsRequest, CalculateSegmentLineData, CalculateSelectableItems, CalculateSelectableItemsRequest, CalculateSourceConnectorsToConnect, CalculateSourceConnectorsToConnectRequest, CalculateStraightLineData, CalculateTargetConnectorsToConnect, CalculateTargetConnectorsToConnectRequest, CenterBasedDeltaCalculator, CenterGroupOrNode, CenterGroupOrNodeRequest, CenterOfMassSelectionStrategy, ChainPushCollisionResolver, ClearSelection, ClearSelectionRequest, CompleteConnectionRedraw, CompleteConnectionRedrawRequest, ConnectableSidesScheduler, ConnectedSubgraphScopeFilter, ConnectionBehaviourBuilder, ConnectionBehaviourBuilderRequest, ConnectionContentLayoutEngine, ConnectionLineBuilder, ConnectionLineBuilderRequest, ConnectionRedrawState, ConnectionWorkerState, CreateConnectionCreateDragHandler, CreateConnectionCreateDragHandlerRequest, CreateConnectionFinalize, CreateConnectionFinalizeRequest, CreateConnectionFromConnectorPreparation, CreateConnectionFromConnectorPreparationRequest, CreateConnectionFromOutletPreparation, CreateConnectionFromOutletPreparationRequest, CreateConnectionFromOutputPreparation, CreateConnectionFromOutputPreparationRequest, CreateConnectionHandler, CreateConnectionMarkers, CreateConnectionMarkersRequest, CreateConnectionPreparation, CreateConnectionPreparationRequest, CreateDragNodeHandler, CreateDragNodeHandlerRequest, CreateDragNodeHierarchy, CreateDragNodeHierarchyRequest, DRAG_AND_DROP_COMMON_PROVIDERS, DRAG_AUTO_PAN_PROVIDERS, DRAG_CANVAS_PROVIDERS, DRAG_CONNECTIONS_PROVIDERS, DRAG_DROP_TO_GROUP_PROVIDERS, DRAG_EXTERNAL_ITEM_HANDLER_KIND, DRAG_EXTERNAL_ITEM_HANDLER_TYPE, DRAG_EXTERNAL_ITEM_PROVIDERS, DRAG_MINIMAP_HANDLER_KIND, DRAG_MINIMAP_HANDLER_TYPE, DRAG_MINIMAP_PROVIDERS, DRAG_NODE_HANDLER_KIND, DRAG_NODE_HANDLER_TYPE, DRAG_SELECTION_AREA_PROVIDERS, DRAG_SELECT_BY_POINTER_PROVIDERS, DeltaClamp, Deprecated, DetectConnectionsUnderDragNode, DetectConnectionsUnderDragNodeRequest, DisableConnectionWorker, DisableConnectionWorkerRequest, DownstreamConnectionsSelectionStrategy, DragAndDropBase, DragCanvasFinalize, DragCanvasFinalizeRequest, DragCanvasHandler, DragCanvasPreparation, DragCanvasPreparationRequest, DragConnectionWaypointFinalize, DragConnectionWaypointFinalizeRequest, DragConnectionWaypointHandler, DragConnectionWaypointPreparation, DragConnectionWaypointPreparationRequest, DragExternalItemCreatePlaceholder, DragExternalItemCreatePlaceholderRequest, DragExternalItemCreatePreview, DragExternalItemCreatePreviewRequest, DragExternalItemFinalize, DragExternalItemFinalizeRequest, DragExternalItemHandler, DragExternalItemPreparation, DragExternalItemPreparationRequest, DragHandlerBase, DragHandlerInjector, DragMinimapFinalize, DragMinimapFinalizeRequest, DragMinimapHandler, DragMinimapPreparation, DragMinimapPreparationRequest, DragNodeConnectionBothSidesHandler, DragNodeConnectionHandlerBase, DragNodeConnectionSourceHandler, DragNodeConnectionTargetHandler, DragNodeDeltaConstraints, DragNodeFinalize, DragNodeFinalizeRequest, DragNodeHandler, DragNodeHierarchy, DragNodeItemHandler, DragNodePreparation, DragNodePreparationRequest, DropToGroupFinalize, DropToGroupFinalizeRequest, DropToGroupHandler, DropToGroupPreparation, DropToGroupPreparationRequest, ECanvasRedrawContext, EFCanvasLayer, EFConnectableSide, EFConnectionBehavior, EFConnectionConnectableSide, EFConnectionType, EFFlowFeatureKind, EFLayoutDirection, EFLayoutMode, EFMarkerType, EFReflowAxis, EFReflowCollision, EFReflowDeltaSource, EFReflowMode, EFReflowScope, EFResizeHandleType, EFZoomDirection, EMPTY_REFLOW_PLAN, EdgeBasedDeltaCalculator, EmitConnectionsChanges, EmitConnectionsChangesRequest, EmitEndDragSequenceEvent, EmitEndDragSequenceEventRequest, EmitSelectionChangeEvent, EmitSelectionChangeEventRequest, EmitStartDragSequenceEvent, EmitStartDragSequenceEventRequest, EnsureConnectionWorker, EnsureConnectionWorkerRequest, EventExtensions, ExternalRectConstraint, FA11yAnnouncer, FA11yController, FAutoPan, FAutoPanBase, FBackgroundBase, FBackgroundComponent, FCache, FCacheConnector, FCacheConnectorKeyFactory, FCacheNode, FCanvasBase, FCanvasChangeEvent, FCanvasComponent, FChannel, FChannelHub, FCirclePatternComponent, FClickConnectFlow, FComponentsStore, FConnectionBase, FConnectionComponent, FConnectionComponentsParent, FConnectionContent, FConnectionContentBase, FConnectionDragHandleBase, FConnectionDragHandleEnd, FConnectionDragHandleStart, FConnectionForCreateComponent, FConnectionGradient, FConnectionGradientBase, FConnectionGradientRenderer, FConnectionGradientRendererBase, FConnectionMarker, FConnectionMarkerArrow, FConnectionMarkerBase, FConnectionMarkerCircle, FConnectionMarkerRegistry, FConnectionPath, FConnectionPathBase, FConnectionRegistry, FConnectionSelection, FConnectionSelectionBase, FConnectionWaypoints, FConnectionWaypointsBase, FConnectionWaypointsChangedEvent, FConnectorBase, FConnectorDirective, FConnectorRegistry, FControlSchemeController, FCreateConnectionEvent, FCreateConnectionSession, FCreateNodeEvent, FDeleteSelectedEvent, FDragBlockerDirective, FDragExternalItemStartEventData, FDragHandleDirective, FDragHandlerResult, FDragNodeStartEventData, FDragStartedEvent, FDraggableBase, FDraggableDataContext, FDraggableDirective, FDropToGroupEvent, FExternalItem, FExternalItemBase, FExternalItemPlaceholder, FExternalItemPreview, FExternalItemService, FFlowBase, FFlowComponent, FFlowModule, FFlowState, FFlowStateController, FGroupDirective, FIdRegistryBase, FLayoutController, FLayoutEngine, FLineAlignmentComponent, FMagneticLines, FMagneticLinesBase, FMagneticRects, FMagneticRectsBase, FMinimapBase, FMinimapCanvasDirective, FMinimapComponent, FMinimapFlowDirective, FMinimapState, FMinimapViewDirective, FMoveNodesEvent, FNodeBase, FNodeConnectionsIntersectionEvent, FNodeDirective, FNodeInputBase, FNodeInputDirective, FNodeIntersectedWithConnections, FNodeOutletBase, FNodeOutletDirective, FNodeOutputBase, FNodeOutputDirective, FNodeRegistry, FReassignConnectionEvent, FRectPatternComponent, FReflowBaselineTracker, FReflowController, FReflowCycleGuard, FReflowIgnore, FReflowIgnoreRegistry, FReflowOrchestrator, FReflowPlanner, FResizeChannel, FResizeHandleDirective, FResizeNodeStartEventData, FRotateHandleDirective, FRotateNodeStartEventData, FSelectionArea, FSelectionAreaBase, FSelectionChangeEvent, FSingleRegistryBase, FSnapConnectionComponent, FSourceConnectorBase, FVirtualFor, FZoomBase, FZoomDirective, F_A11Y_CONFIG, F_AUTO_PAN_PROVIDERS, F_BACKGROUND, F_BACKGROUND_FEATURES, F_BACKGROUND_PATTERN, F_BACKGROUND_PROVIDERS, F_CACHE_FEATURES, F_CACHE_OPTIONS, F_CANVAS, F_CANVAS_CONFIG, F_CANVAS_FEATURES, F_CANVAS_PROVIDERS, F_CONNECTION_BUILDERS, F_CONNECTION_COMPONENTS_PARENT, F_CONNECTION_CONTENT, F_CONNECTION_DRAG_HANDLE_END, F_CONNECTION_DRAG_HANDLE_START, F_CONNECTION_FEATURES, F_CONNECTION_FLOW, F_CONNECTION_GRADIENT, F_CONNECTION_IMPORTS_EXPORTS, F_CONNECTION_MARKER, F_CONNECTION_PATH, F_CONNECTION_PROVIDERS, F_CONNECTION_SELECTION, F_CONNECTION_WAYPOINTS, F_CONNECTOR, F_CONNECTORS_FEATURES, F_CONNECTORS_PROVIDERS, F_CONTROL_SCHEME_CONFIG, F_CSS_CLASS, F_DEFAULT_A11Y_CONFIG, F_DEFAULT_A11Y_KEYS, F_DEFAULT_A11Y_MESSAGES, F_DEFAULT_CONTROL_SCHEME, F_DEFAULT_LAYER_ORDER, F_DRAGGABLE_FEATURES, F_DRAGGABLE_PROVIDERS, F_DRAG_SELECT_CONTROL_SCHEME, F_EXTERNAL_ITEM, F_EXTERNAL_ITEM_PROVIDERS, F_FLOW, F_FLOW_CONFIG, F_FLOW_FEATURES, F_FLOW_PROVIDERS, F_FLOW_STATE_CONFIG, F_LAYOUT, F_LAYOUT_OPTIONS, F_LINE_ALIGNMENT_PROVIDERS, F_MAGNETIC_LINES, F_MAGNETIC_LINES_PROVIDERS, F_MAGNETIC_RECTS, F_MAGNETIC_RECTS_PROVIDERS, F_MINIMAP_BASE, F_MINIMAP_FEATURES, F_MINIMAP_PROVIDERS, F_NODE, F_NODE_FEATURES, F_NODE_INPUT, F_NODE_OUTLET, F_NODE_OUTPUT, F_NODE_PROVIDERS, F_REFLOW_CONFIG, F_REFLOW_PROVIDERS, F_SCROLL_PAN_CONTROL_SCHEME, F_SELECTED_CLASS, F_SELECTION_AREA_PROVIDERS, F_SELECTION_FEATURES, F_STORAGE_PROVIDERS, F_VIRTUAL_FOR_PROVIDERS, F_ZOOM, F_ZOOM_FEATURES, F_ZOOM_PROVIDERS, FindConnectableConnectorUsingPriorityAndPosition, FindConnectableConnectorUsingPriorityAndPositionRequest, FitToChildNodesAndGroups, FitToChildNodesAndGroupsRequest, FitToFlow, FitToFlowRequest, GET_FLOW_STATE_PROVIDERS, GetCachedFCacheRect, GetCachedFCacheRectRequest, GetChildNodeIds, GetChildNodeIdsRequest, GetConnectorRectReference, GetConnectorRectReferenceRequest, GetCurrentSelection, GetCurrentSelectionRequest, GetDeepChildrenNodesAndGroups, GetDeepChildrenNodesAndGroupsRequest, GetFlow, GetFlowRequest, GetNodePadding, GetNodePaddingRequest, GetNormalizedConnectorRect, GetNormalizedConnectorRectRequest, GetNormalizedElementRect, GetNormalizedElementRectRequest, GetNormalizedParentNodeRect, GetNormalizedParentNodeRectRequest, GetNormalizedPoint, GetNormalizedPointRequest, GetParentNodes, GetParentNodesRequest, GlobalScopeFilter, GridSnapper, GroupScopeFilter, HandleConnectionWorkerMessage, HandleConnectionWorkerMessageRequest, IMouseEvent, INSTANCES, IPointerEvent, IPointerUpEvent, ITouchDownEvent, ITouchMoveEvent, InitializeDragSequence, InitializeDragSequenceRequest, InputCanvasPosition, InputCanvasPositionRequest, InputCanvasScale, InputCanvasScaleRequest, InvalidateFCacheNode, InvalidateFCacheNodeRequest, IsArrayHasParentNode, IsArrayHasParentNodeRequest, IsConnectionRedrawCurrent, IsConnectionRedrawCurrentRequest, IsConnectionWorkerEnabled, IsConnectionWorkerEnabledRequest, IsDragStarted, IsDragStartedRequest, ListenConnectionsChanges, ListenConnectionsChangesRequest, ListenNodesChanges, ListenNodesChangesRequest, ListenTransformChanges, ListenTransformChangesRequest, LogExecutionTime, MOUSE_EVENT_IGNORE_TIME, MagneticLineElement, MagneticLineRenderer, MagneticLinesHandler, MagneticLinesPreparation, MagneticLinesPreparationRequest, MagneticRectElement, MagneticRectsHandler, MagneticRectsPreparation, MagneticRectsPreparationRequest, MagneticRectsRenderer, MarkConnectableConnectors, MarkConnectableConnectorsRequest, MarkConnectionConnectorsAsConnected, MarkConnectionConnectorsAsConnectedRequest, MinimapCalculateViewRect, MinimapCalculateViewRectRequest, MinimapCalculateViewport, MinimapCalculateViewportRequest, MinimapDrawNodes, MinimapDrawNodesRequest, MinimapNodeRects, MoveFrontElementsBeforeTargetElement, MoveFrontElementsBeforeTargetElementRequest, NODE_PROVIDERS, NODE_RESIZE_PROVIDERS, NODE_ROTATE_PROVIDERS, NotifyFullRendered, NotifyFullRenderedRequest, NotifyNodesRendered, NotifyNodesRenderedRequest, NotifyTransformChanged, NotifyTransformChangedRequest, OnPointerMove, OnPointerMoveRequest, PINCH_TO_ZOOM_PROVIDERS, PinchToZoomFinalize, PinchToZoomFinalizeRequest, PinchToZoomHandler, PinchToZoomPreparation, PinchToZoomPreparationRequest, Polyline, PolylineContentAlign, PolylineContentPlace, PolylineSampler, PrepareDragSequence, PrepareDragSequenceRequest, PreventDefaultIsExternalItem, PreventDefaultIsExternalItemRequest, QueueConnectionRedraw, QueueConnectionRedrawRequest, QueueConnectionRedrawState, RESIZE_DIRECTIONS, RESIZE_NODE_HANDLER_KIND, RESIZE_NODE_HANDLER_TYPE, ROTATE_NODE_HANDLER_KIND, ROTATE_NODE_HANDLER_TYPE, ReadNodeBoundsWithPaddings, ReadNodeBoundsWithPaddingsRequest, ReadNodeBoundsWithPaddingsResponse, ReassignConnectionFinalize, ReassignConnectionFinalizeRequest, ReassignConnectionHandler, ReassignConnectionPreparation, ReassignConnectionPreparationRequest, ReassignConnectionSourceHandler, ReassignConnectionTargetHandler, RedrawCanvasWithAnimation, RedrawCanvasWithAnimationRequest, RedrawConnections, RedrawConnectionsRequest, RegisterFCacheConnector, RegisterFCacheConnectorRequest, RegisterFCacheNode, RegisterFCacheNodeRequest, RegisterPluginInstance, RegisterPluginInstanceRequest, RemoveCanvasFromStore, RemoveCanvasFromStoreRequest, RemoveConnectionForCreateFromStore, RemoveConnectionForCreateFromStoreRequest, RemoveConnectionFromStore, RemoveConnectionFromStoreRequest, RemoveConnectionMarkerFromStore, RemoveConnectionMarkerFromStoreRequest, RemoveConnectionWaypoint, RemoveConnectionWaypointRequest, RemoveConnectorFromStore, RemoveConnectorFromStoreRequest, RemoveDndFromStore, RemoveDndFromStoreRequest, RemoveFlowFromStore, RemoveFlowFromStoreRequest, RemoveNodeFromStore, RemoveNodeFromStoreRequest, RemovePluginInstance, RemovePluginInstanceRequest, RemoveSnapConnectionFromStore, RemoveSnapConnectionFromStoreRequest, RenderConnection, RenderConnectionFromGeometry, RenderConnectionFromGeometryRequest, RenderConnectionRequest, RenderConnectionWithLine, RenderConnectionWithLineRequest, RenderLifecycleState, ResetConnectionWorkerRuntime, ResetConnectionWorkerRuntimeRequest, ResetRenderLifecycle, ResetRenderLifecycleRequest, ResetScale, ResetScaleAndCenter, ResetScaleAndCenterRequest, ResetScaleRequest, ResetZoom, ResetZoomRequest, ResizeNodeConnectionBothSidesHandler, ResizeNodeConnectionHandlerBase, ResizeNodeConnectionSourceHandler, ResizeNodeConnectionTargetHandler, ResizeNodeFinalize, ResizeNodeFinalizeRequest, ResizeNodeHandler, ResizeNodePreparation, ResizeNodePreparationRequest, ResolveConnectableOutputForOutlet, ResolveConnectableOutputForOutletRequest, ResolveConnectionEndpointRect, ResolveConnectionEndpointRectRequest, ResolveConnectionEndpointRotationContext, ResolveConnectionEndpointRotationContextRequest, ResolveConnectionEndpoints, ResolveConnectionEndpointsRequest, ResolveConnectionGeometry, ResolveConnectionGeometryRequest, RotateNodeFinalize, RotateNodeFinalizeRequest, RotateNodeHandler, RotateNodePreparation, RotateNodePreparationRequest, RunAutoPanFrame, RunAutoPanFrameRequest, RunConnectionRedrawSlice, RunConnectionRedrawSliceRequest, RunConnectionWorker, RunConnectionWorkerBatch, RunConnectionWorkerBatchRequest, RunConnectionWorkerRequest, RunDevDiagnostics, RunDevDiagnosticsRequest, ScheduleAutoPanFrame, ScheduleAutoPanFrameRequest, ScrollCanvas, ScrollCanvasRequest, Select, SelectAll, SelectAllRequest, SelectAndUpdateNodeLayer, SelectAndUpdateNodeLayerRequest, SelectByPointer, SelectByPointerRequest, SelectRequest, SelectionAreaFinalize, SelectionAreaFinalizeRequest, SelectionAreaHandler, SelectionAreaPreparation, SelectionAreaPreparationRequest, SetBackgroundTransform, SetBackgroundTransformRequest, SetFCacheConnectorRect, SetFCacheConnectorRectRequest, SetFCacheNodeRect, SetFCacheNodeRectRequest, SetZoom, SetZoomRequest, ShouldUseConnectionWorker, ShouldUseConnectionWorkerRequest, SortDropCandidatesByLayer, SortDropCandidatesByLayerRequest, SortItemLayers, SortItemLayersRequest, SortItemsByParent, SortItemsByParentRequest, SortNodeLayers, SortNodeLayersRequest, StartConnectionRedraw, StartConnectionRedrawRequest, StartConnectionWorkerRedraw, StartConnectionWorkerRedrawRequest, StopAutoPan, StopAutoPanRequest, StopCollisionResolver, UnmarkConnectableConnectors, UnmarkConnectableConnectorsRequest, UnregisterFCacheConnector, UnregisterFCacheConnectorRequest, UnregisterFCacheNode, UnregisterFCacheNodeRequest, UpdateFCacheRectByElement, UpdateFCacheRectByElementRequest, UpdateItemAndChildrenLayers, UpdateItemAndChildrenLayersRequest, UpdateNodeWhenStateOrSizeChanged, UpdateNodeWhenStateOrSizeChangedRequest, UpdateScale, UpdateScaleRequest, WaitForConnectionsRendered, WaitForConnectionsRenderedRequest, XRangeSelectionStrategy, afterNextPaint, buildConnectionAnchors, buildCornerMidPointsAndApplyOffsets, calculateAutoPanAxisDelta, calculateAutoPanDelta, calculateCenterBetweenPoints, calculateCurveCandidates, calculateDifferenceAfterRotation, calculateMagneticGuides, calculateMagneticRects, calculatePointerInFlow, calculatePolylineCandidates, calculatePositionAfterRotation, castToConnectorType, coerceMarkerType, computeEdgeDeltas, createConnectionDomIdentifier, createConnectionSelectionDomIdentifier, createConnectionWorkerUrl, createGradientDomIdentifier, createGradientDomUrl, createMultiCubicPath, createSVGElement, createSegmentLinePath, cubicBezierAtT, debounceAnimationFrame, debounceMicrotask, debounceTime, defaultEventTrigger, determineSide, expandRectByOverflow, fDiagnosticMessage, fInstanceKey, fProvideCache, fSuppressDevWarnings, fWarnOnce, filterConnectableTargets, findExistingWaypoint, findNodeOrGroupContaining, findSourceConnector, findSpatialNeighbor, findTargetConnector, findWaypointCandidate, fixedCenterBehavior, fixedOutboundBehavior, floatingBehavior, getAllSourceConnectors, getAllTargetConnectors, getExternalItemHost, infinityMinMax, injectFlowState, isCalculateMode, isConnectionWorkerRuntimeSupported, isConnector, isDragBlocker, isDragExternalItemHandler, isDragHandleEnd, isDragHandleStart, isDragMinimapHandler, isDragNodeHandler, isExternalItem, isFDevMode, isMobile, isNode, isNodeOutlet, isNodeOutput, isOnFlowBackground, isOutletConnector, isPointerInsidePoint, isPointerInsideStartOrEndDragHandles, isResizeNodeHandler, isRotateHandle, isRotateNodeHandler, isSourceConnector, isTargetConnector, isValidEventTrigger, mergeA11yConfig, mergeControlSchemeConfig, mergeFCanvasConfig, mergeFlowStateConfig, mergeLayoutNodes, mergePointChains, mergeReflowConfig, middleButtonEventTrigger, mixinChangeSelection, mixinChangeVisibility, normalizeFlowLayoutData, normalizePolyline, notifyOnStart, pickWaypoint, primaryButtonEventTrigger, provideFFlow, provideFLayout, rebaseAutoPanPointerDownPosition, rectFromPoint, requireSourceConnector, requireTargetConnector, resolveAutoPanMode, resolveConnectionWorkerRuntime, resolveLayerOrder, revokeConnectionWorkerUrl, sampleCubicBezierUniform, sampleMultiCubicUniform, stringAttribute, takeOne, transitionEnd, withA11y, withConnectionFlow, withControlScheme, withFCanvas, withFlowState, withReflowOnResize, withinSnapThreshold };
24719
+ export { AddCanvasToStore, AddCanvasToStoreRequest, AddConnectionForCreateToStore, AddConnectionForCreateToStoreRequest, AddConnectionMarkerToStore, AddConnectionMarkerToStoreRequest, AddConnectionToStore, AddConnectionToStoreRequest, AddConnectorToStore, AddConnectorToStoreRequest, AddDndToStore, AddDndToStoreRequest, AddFlowToStore, AddFlowToStoreRequest, AddNodeToStore, AddNodeToStoreRequest, AddPatternToBackground, AddPatternToBackgroundRequest, AddSnapConnectionToStore, AddSnapConnectionToStoreRequest, ApplyChildResizeConstraints, ApplyChildResizeConstraintsRequest, ApplyConnectionRender, ApplyConnectionRenderRequest, ApplyConnectionWorkerResult, ApplyConnectionWorkerResultRequest, ApplyParentResizeConstraints, ApplyParentResizeConstraintsRequest, AttachDragNodeHandlerFromSelection, AttachDragNodeHandlerFromSelectionRequest, AttachResizeConnectionDragHandlersToNode, AttachResizeConnectionDragHandlersToNodeRequest, AttachSoftParentConnectionDragHandlersToNode, AttachSoftParentConnectionDragHandlersToNodeRequest, AttachSourceConnectionDragHandlersToNode, AttachSourceConnectionDragHandlersToNodeRequest, AttachTargetConnectionDragHandlersToNode, AttachTargetConnectionDragHandlersToNodeRequest, BuildConnectionLine, BuildConnectionLineRequest, BuildConnectionWorkerBatch, BuildConnectionWorkerBatchRequest, BuildConnectionWorkerPayloadItem, BuildConnectionWorkerPayloadItemRequest, BuildDragNodeConstraints, BuildDragNodeConstraintsRequest, CALCULATABLE_SIDES, COMMON_PROVIDERS, CONNECTABLE_SIDE_EPSILON, CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS, CalculateAdaptiveCurveData, CalculateBezierCurveData, CalculateChangedRectFromDifference, CalculateChangedRectFromDifferenceRequest, CalculateClosestConnector, CalculateClosestConnectorRequest, CalculateConnectableSideByConnectedPositions, CalculateConnectableSideByConnectedPositionsRequest, CalculateConnectableSideByInternalPosition, CalculateConnectableSideByInternalPositionRequest, CalculateConnectionsState, CalculateConnectionsStateRequest, CalculateConnectorsConnectableSides, CalculateConnectorsConnectableSidesRequest, CalculateDirectChildrenUnionRect, CalculateDirectChildrenUnionRectRequest, CalculateFlowPointFromMinimapPoint, CalculateFlowPointFromMinimapPointRequest, CalculateFlowState, CalculateFlowStateRequest, CalculateInputConnections, CalculateInputConnectionsRequest, CalculateNodesBoundingBox, CalculateNodesBoundingBoxNormalizedPosition, CalculateNodesBoundingBoxNormalizedPositionRequest, CalculateNodesBoundingBoxRequest, CalculateNodesState, CalculateNodesStateRequest, CalculateOutputConnections, CalculateOutputConnectionsRequest, CalculateResizeLimits, CalculateResizeLimitsRequest, CalculateSegmentLineData, CalculateSelectableItems, CalculateSelectableItemsRequest, CalculateSourceConnectorsToConnect, CalculateSourceConnectorsToConnectRequest, CalculateStraightLineData, CalculateTargetConnectorsToConnect, CalculateTargetConnectorsToConnectRequest, CenterBasedDeltaCalculator, CenterGroupOrNode, CenterGroupOrNodeRequest, CenterOfMassSelectionStrategy, ChainPushCollisionResolver, ClearSelection, ClearSelectionRequest, CompleteConnectionRedraw, CompleteConnectionRedrawRequest, ConnectableSidesScheduler, ConnectedSubgraphScopeFilter, ConnectionBehaviourBuilder, ConnectionBehaviourBuilderRequest, ConnectionContentLayoutEngine, ConnectionLineBuilder, ConnectionLineBuilderRequest, ConnectionRedrawState, ConnectionWorkerState, CreateConnectionCreateDragHandler, CreateConnectionCreateDragHandlerRequest, CreateConnectionFinalize, CreateConnectionFinalizeRequest, CreateConnectionFromConnectorPreparation, CreateConnectionFromConnectorPreparationRequest, CreateConnectionFromOutletPreparation, CreateConnectionFromOutletPreparationRequest, CreateConnectionFromOutputPreparation, CreateConnectionFromOutputPreparationRequest, CreateConnectionHandler, CreateConnectionMarkers, CreateConnectionMarkersRequest, CreateConnectionPreparation, CreateConnectionPreparationRequest, CreateDragNodeHandler, CreateDragNodeHandlerRequest, CreateDragNodeHierarchy, CreateDragNodeHierarchyRequest, DRAG_AND_DROP_COMMON_PROVIDERS, DRAG_AUTO_PAN_PROVIDERS, DRAG_CANVAS_PROVIDERS, DRAG_CONNECTIONS_PROVIDERS, DRAG_DROP_TO_GROUP_PROVIDERS, DRAG_EXTERNAL_ITEM_HANDLER_KIND, DRAG_EXTERNAL_ITEM_HANDLER_TYPE, DRAG_EXTERNAL_ITEM_PROVIDERS, DRAG_MINIMAP_HANDLER_KIND, DRAG_MINIMAP_HANDLER_TYPE, DRAG_MINIMAP_PROVIDERS, DRAG_NODE_HANDLER_KIND, DRAG_NODE_HANDLER_TYPE, DRAG_SELECTION_AREA_PROVIDERS, DRAG_SELECT_BY_POINTER_PROVIDERS, DeltaClamp, Deprecated, DetectConnectionsUnderDragNode, DetectConnectionsUnderDragNodeRequest, DisableConnectionWorker, DisableConnectionWorkerRequest, DownstreamConnectionsSelectionStrategy, DragAndDropBase, DragCanvasFinalize, DragCanvasFinalizeRequest, DragCanvasHandler, DragCanvasPreparation, DragCanvasPreparationRequest, DragConnectionWaypointFinalize, DragConnectionWaypointFinalizeRequest, DragConnectionWaypointHandler, DragConnectionWaypointPreparation, DragConnectionWaypointPreparationRequest, DragExternalItemCreatePlaceholder, DragExternalItemCreatePlaceholderRequest, DragExternalItemCreatePreview, DragExternalItemCreatePreviewRequest, DragExternalItemFinalize, DragExternalItemFinalizeRequest, DragExternalItemHandler, DragExternalItemPreparation, DragExternalItemPreparationRequest, DragHandlerBase, DragHandlerInjector, DragMinimapFinalize, DragMinimapFinalizeRequest, DragMinimapHandler, DragMinimapPreparation, DragMinimapPreparationRequest, DragNodeConnectionBothSidesHandler, DragNodeConnectionHandlerBase, DragNodeConnectionSourceHandler, DragNodeConnectionTargetHandler, DragNodeDeltaConstraints, DragNodeFinalize, DragNodeFinalizeRequest, DragNodeHandler, DragNodeHierarchy, DragNodeItemHandler, DragNodePreparation, DragNodePreparationRequest, DropToGroupFinalize, DropToGroupFinalizeRequest, DropToGroupHandler, DropToGroupPreparation, DropToGroupPreparationRequest, ECanvasRedrawContext, EFCanvasLayer, EFConnectableSide, EFConnectionBehavior, EFConnectionConnectableSide, EFConnectionType, EFFlowFeatureKind, EFLayoutDirection, EFLayoutMode, EFMarkerType, EFReflowAxis, EFReflowCollision, EFReflowDeltaSource, EFReflowMode, EFReflowScope, EFResizeHandleType, EFZoomDirection, EMPTY_REFLOW_PLAN, EdgeBasedDeltaCalculator, EmitConnectionsChanges, EmitConnectionsChangesRequest, EmitEndDragSequenceEvent, EmitEndDragSequenceEventRequest, EmitSelectionChangeEvent, EmitSelectionChangeEventRequest, EmitStartDragSequenceEvent, EmitStartDragSequenceEventRequest, EnsureConnectionWorker, EnsureConnectionWorkerRequest, EventExtensions, ExternalRectConstraint, FA11yAnnouncer, FA11yController, FAutoPan, FAutoPanBase, FBackgroundBase, FBackgroundComponent, FCache, FCacheConnector, FCacheConnectorKeyFactory, FCacheNode, FCanvasBase, FCanvasChangeEvent, FCanvasComponent, FChannel, FChannelHub, FCirclePatternComponent, FClickConnectFlow, FComponentsStore, FConnectionBase, FConnectionComponent, FConnectionComponentsParent, FConnectionContent, FConnectionContentBase, FConnectionDragHandleBase, FConnectionDragHandleEnd, FConnectionDragHandleStart, FConnectionForCreateComponent, FConnectionGradient, FConnectionGradientBase, FConnectionGradientRenderer, FConnectionGradientRendererBase, FConnectionMarker, FConnectionMarkerArrow, FConnectionMarkerBase, FConnectionMarkerCircle, FConnectionMarkerRegistry, FConnectionPath, FConnectionPathBase, FConnectionRegistry, FConnectionSelection, FConnectionSelectionBase, FConnectionWaypoints, FConnectionWaypointsBase, FConnectionWaypointsChangedEvent, FConnectorBase, FConnectorDirective, FConnectorRegistry, FControlSchemeController, FCreateConnectionEvent, FCreateConnectionSession, FCreateNodeEvent, FDeleteSelectedEvent, FDragBlockerDirective, FDragExternalItemStartEventData, FDragHandleDirective, FDragHandlerResult, FDragNodeStartEventData, FDragStartedEvent, FDraggableBase, FDraggableDataContext, FDraggableDirective, FDropToGroupEvent, FExternalItem, FExternalItemBase, FExternalItemPlaceholder, FExternalItemPreview, FExternalItemService, FFlowBase, FFlowComponent, FFlowModule, FFlowState, FFlowStateController, FGroupDirective, FIdRegistryBase, FLayoutController, FLayoutEngine, FLineAlignmentComponent, FMagneticLines, FMagneticLinesBase, FMagneticRects, FMagneticRectsBase, FMinimapBase, FMinimapCanvasDirective, FMinimapComponent, FMinimapFlowDirective, FMinimapState, FMinimapViewDirective, FMoveNodesEvent, FNodeBase, FNodeConnectionsIntersectionEvent, FNodeDirective, FNodeInputBase, FNodeInputDirective, FNodeIntersectedWithConnections, FNodeOutletBase, FNodeOutletDirective, FNodeOutputBase, FNodeOutputDirective, FNodeRegistry, FReassignConnectionEvent, FRectPatternComponent, FReflowBaselineTracker, FReflowController, FReflowCycleGuard, FReflowIgnore, FReflowIgnoreRegistry, FReflowOrchestrator, FReflowPlanner, FResizeChannel, FResizeHandleDirective, FResizeNodeStartEventData, FRotateHandleDirective, FRotateNodeStartEventData, FSelectionArea, FSelectionAreaBase, FSelectionChangeEvent, FSingleRegistryBase, FSnapConnectionComponent, FSourceConnectorBase, FVirtualFor, FZoomBase, FZoomDirective, F_A11Y_CONFIG, F_AUTO_PAN_PROVIDERS, F_BACKGROUND, F_BACKGROUND_FEATURES, F_BACKGROUND_PATTERN, F_BACKGROUND_PROVIDERS, F_CACHE_FEATURES, F_CACHE_OPTIONS, F_CANVAS, F_CANVAS_CONFIG, F_CANVAS_FEATURES, F_CANVAS_PROVIDERS, F_CONNECTION_BUILDERS, F_CONNECTION_COMPONENTS_PARENT, F_CONNECTION_CONTENT, F_CONNECTION_DRAG_HANDLE_END, F_CONNECTION_DRAG_HANDLE_START, F_CONNECTION_FEATURES, F_CONNECTION_FLOW, F_CONNECTION_GRADIENT, F_CONNECTION_IMPORTS_EXPORTS, F_CONNECTION_MARKER, F_CONNECTION_PATH, F_CONNECTION_PROVIDERS, F_CONNECTION_SELECTION, F_CONNECTION_WAYPOINTS, F_CONNECTOR, F_CONNECTORS_FEATURES, F_CONNECTORS_PROVIDERS, F_CONTROL_SCHEME_CONFIG, F_CSS_CLASS, F_DEFAULT_A11Y_CONFIG, F_DEFAULT_A11Y_KEYS, F_DEFAULT_A11Y_MESSAGES, F_DEFAULT_CONTROL_SCHEME, F_DEFAULT_LAYER_ORDER, F_DRAGGABLE_FEATURES, F_DRAGGABLE_PROVIDERS, F_DRAG_SELECT_CONTROL_SCHEME, F_EXTERNAL_ITEM, F_EXTERNAL_ITEM_PROVIDERS, F_FLOW, F_FLOW_CONFIG, F_FLOW_FEATURES, F_FLOW_PROVIDERS, F_FLOW_STATE_CONFIG, F_LAYOUT, F_LAYOUT_OPTIONS, F_LINE_ALIGNMENT_PROVIDERS, F_MAGNETIC_LINES, F_MAGNETIC_LINES_PROVIDERS, F_MAGNETIC_RECTS, F_MAGNETIC_RECTS_PROVIDERS, F_MINIMAP_BASE, F_MINIMAP_FEATURES, F_MINIMAP_PROVIDERS, F_NODE, F_NODE_FEATURES, F_NODE_INPUT, F_NODE_OUTLET, F_NODE_OUTPUT, F_NODE_PROVIDERS, F_REFLOW_CONFIG, F_REFLOW_PROVIDERS, F_SCROLL_PAN_CONTROL_SCHEME, F_SELECTED_CLASS, F_SELECTION_AREA_PROVIDERS, F_SELECTION_FEATURES, F_STORAGE_PROVIDERS, F_VIRTUAL_FOR_PROVIDERS, F_ZOOM, F_ZOOM_FEATURES, F_ZOOM_PROVIDERS, FindConnectableConnectorUsingPriorityAndPosition, FindConnectableConnectorUsingPriorityAndPositionRequest, FitToChildNodesAndGroups, FitToChildNodesAndGroupsRequest, FitToFlow, FitToFlowRequest, GET_FLOW_STATE_PROVIDERS, GetCachedFCacheRect, GetCachedFCacheRectRequest, GetChildNodeIds, GetChildNodeIdsRequest, GetConnectorRectReference, GetConnectorRectReferenceRequest, GetCurrentSelection, GetCurrentSelectionRequest, GetDeepChildrenNodesAndGroups, GetDeepChildrenNodesAndGroupsRequest, GetFlow, GetFlowRequest, GetNodePadding, GetNodePaddingRequest, GetNormalizedConnectorRect, GetNormalizedConnectorRectRequest, GetNormalizedElementRect, GetNormalizedElementRectRequest, GetNormalizedParentNodeRect, GetNormalizedParentNodeRectRequest, GetNormalizedPoint, GetNormalizedPointRequest, GetParentNodes, GetParentNodesRequest, GlobalScopeFilter, GridSnapper, GroupScopeFilter, HandleConnectionWorkerMessage, HandleConnectionWorkerMessageRequest, IMouseEvent, INSTANCES, IPointerEvent, IPointerUpEvent, ITouchDownEvent, ITouchMoveEvent, InitializeDragSequence, InitializeDragSequenceRequest, InputCanvasPosition, InputCanvasPositionRequest, InputCanvasScale, InputCanvasScaleRequest, InvalidateFCacheNode, InvalidateFCacheNodeRequest, IsArrayHasParentNode, IsArrayHasParentNodeRequest, IsConnectionRedrawCurrent, IsConnectionRedrawCurrentRequest, IsConnectionWorkerEnabled, IsConnectionWorkerEnabledRequest, IsDragStarted, IsDragStartedRequest, ListenConnectionsChanges, ListenConnectionsChangesRequest, ListenNodesChanges, ListenNodesChangesRequest, ListenTransformChanges, ListenTransformChangesRequest, LogExecutionTime, MOUSE_EVENT_IGNORE_TIME, MagneticLineElement, MagneticLineRenderer, MagneticLinesHandler, MagneticLinesPreparation, MagneticLinesPreparationRequest, MagneticRectElement, MagneticRectsHandler, MagneticRectsPreparation, MagneticRectsPreparationRequest, MagneticRectsRenderer, MarkConnectableConnectors, MarkConnectableConnectorsRequest, MarkConnectionConnectorsAsConnected, MarkConnectionConnectorsAsConnectedRequest, MinimapCalculateViewRect, MinimapCalculateViewRectRequest, MinimapCalculateViewport, MinimapCalculateViewportRequest, MinimapDrawNodes, MinimapDrawNodesRequest, MinimapNodeRects, MoveFrontElementsBeforeTargetElement, MoveFrontElementsBeforeTargetElementRequest, NODE_PROVIDERS, NODE_RESIZE_PROVIDERS, NODE_ROTATE_PROVIDERS, NotifyFullRendered, NotifyFullRenderedRequest, NotifyNodesRendered, NotifyNodesRenderedRequest, NotifyTransformChanged, NotifyTransformChangedRequest, OnPointerMove, OnPointerMoveRequest, PINCH_TO_ZOOM_PROVIDERS, PinchToZoomFinalize, PinchToZoomFinalizeRequest, PinchToZoomHandler, PinchToZoomPreparation, PinchToZoomPreparationRequest, Polyline, PolylineContentAlign, PolylineContentPlace, PolylineSampler, PrepareDragSequence, PrepareDragSequenceRequest, PreventDefaultIsExternalItem, PreventDefaultIsExternalItemRequest, QueueConnectionRedraw, QueueConnectionRedrawRequest, QueueConnectionRedrawState, RESIZE_DIRECTIONS, RESIZE_NODE_HANDLER_KIND, RESIZE_NODE_HANDLER_TYPE, ROTATE_NODE_HANDLER_KIND, ROTATE_NODE_HANDLER_TYPE, ReadNodeBoundsWithPaddings, ReadNodeBoundsWithPaddingsRequest, ReadNodeBoundsWithPaddingsResponse, ReassignConnectionFinalize, ReassignConnectionFinalizeRequest, ReassignConnectionHandler, ReassignConnectionPreparation, ReassignConnectionPreparationRequest, ReassignConnectionSourceHandler, ReassignConnectionTargetHandler, RedrawCanvasWithAnimation, RedrawCanvasWithAnimationRequest, RedrawConnections, RedrawConnectionsRequest, RegisterFCacheConnector, RegisterFCacheConnectorRequest, RegisterFCacheNode, RegisterFCacheNodeRequest, RegisterPluginInstance, RegisterPluginInstanceRequest, RemoveCanvasFromStore, RemoveCanvasFromStoreRequest, RemoveConnectionForCreateFromStore, RemoveConnectionForCreateFromStoreRequest, RemoveConnectionFromStore, RemoveConnectionFromStoreRequest, RemoveConnectionMarkerFromStore, RemoveConnectionMarkerFromStoreRequest, RemoveConnectionWaypoint, RemoveConnectionWaypointRequest, RemoveConnectorFromStore, RemoveConnectorFromStoreRequest, RemoveDndFromStore, RemoveDndFromStoreRequest, RemoveFlowFromStore, RemoveFlowFromStoreRequest, RemoveNodeFromStore, RemoveNodeFromStoreRequest, RemovePluginInstance, RemovePluginInstanceRequest, RemoveSnapConnectionFromStore, RemoveSnapConnectionFromStoreRequest, RenderConnection, RenderConnectionFromGeometry, RenderConnectionFromGeometryRequest, RenderConnectionRequest, RenderConnectionWithLine, RenderConnectionWithLineRequest, RenderLifecycleState, ResetConnectionWorkerRuntime, ResetConnectionWorkerRuntimeRequest, ResetRenderLifecycle, ResetRenderLifecycleRequest, ResetScale, ResetScaleAndCenter, ResetScaleAndCenterRequest, ResetScaleRequest, ResetZoom, ResetZoomRequest, ResizeNodeConnectionBothSidesHandler, ResizeNodeConnectionHandlerBase, ResizeNodeConnectionSourceHandler, ResizeNodeConnectionTargetHandler, ResizeNodeFinalize, ResizeNodeFinalizeRequest, ResizeNodeHandler, ResizeNodePreparation, ResizeNodePreparationRequest, ResolveConnectableOutputForOutlet, ResolveConnectableOutputForOutletRequest, ResolveConnectionEndpointRect, ResolveConnectionEndpointRectRequest, ResolveConnectionEndpointRotationContext, ResolveConnectionEndpointRotationContextRequest, ResolveConnectionEndpoints, ResolveConnectionEndpointsRequest, ResolveConnectionGeometry, ResolveConnectionGeometryRequest, RotateNodeFinalize, RotateNodeFinalizeRequest, RotateNodeHandler, RotateNodePreparation, RotateNodePreparationRequest, RunAutoPanFrame, RunAutoPanFrameRequest, RunConnectionRedrawSlice, RunConnectionRedrawSliceRequest, RunConnectionWorker, RunConnectionWorkerBatch, RunConnectionWorkerBatchRequest, RunConnectionWorkerRequest, RunDevDiagnostics, RunDevDiagnosticsRequest, ScheduleAutoPanFrame, ScheduleAutoPanFrameRequest, ScrollCanvas, ScrollCanvasRequest, Select, SelectAll, SelectAllRequest, SelectAndUpdateNodeLayer, SelectAndUpdateNodeLayerRequest, SelectByPointer, SelectByPointerRequest, SelectRequest, SelectionAreaFinalize, SelectionAreaFinalizeRequest, SelectionAreaHandler, SelectionAreaPreparation, SelectionAreaPreparationRequest, SetBackgroundTransform, SetBackgroundTransformRequest, SetFCacheConnectorRect, SetFCacheConnectorRectRequest, SetFCacheNodeRect, SetFCacheNodeRectRequest, SetZoom, SetZoomRequest, ShouldUseConnectionWorker, ShouldUseConnectionWorkerRequest, SortDropCandidatesByLayer, SortDropCandidatesByLayerRequest, SortItemLayers, SortItemLayersRequest, SortItemsByParent, SortItemsByParentRequest, SortNodeLayers, SortNodeLayersRequest, StartConnectionRedraw, StartConnectionRedrawRequest, StartConnectionWorkerRedraw, StartConnectionWorkerRedrawRequest, StopAutoPan, StopAutoPanRequest, StopCollisionResolver, UnmarkConnectableConnectors, UnmarkConnectableConnectorsRequest, UnregisterFCacheConnector, UnregisterFCacheConnectorRequest, UnregisterFCacheNode, UnregisterFCacheNodeRequest, UpdateFCacheRectByElement, UpdateFCacheRectByElementRequest, UpdateItemAndChildrenLayers, UpdateItemAndChildrenLayersRequest, UpdateNodeWhenStateOrSizeChanged, UpdateNodeWhenStateOrSizeChangedRequest, UpdateScale, UpdateScaleRequest, WaitForConnectionsRendered, WaitForConnectionsRenderedRequest, XRangeSelectionStrategy, afterNextPaint, buildConnectionAnchors, buildCornerMidPointsAndApplyOffsets, calculateAutoPanAxisDelta, calculateAutoPanDelta, calculateCenterBetweenPoints, calculateCornerApex, calculateCurveCandidates, calculateDifferenceAfterRotation, calculateMagneticGuides, calculateMagneticRects, calculatePointerInFlow, calculatePolylineCandidates, calculatePositionAfterRotation, calculateSmoothControlPoint, castToConnectorType, coerceMarkerType, computeEdgeDeltas, createConnectionDomIdentifier, createConnectionSelectionDomIdentifier, createConnectionWorkerUrl, createGradientDomIdentifier, createGradientDomUrl, createMultiCubicPath, createSVGElement, createSegmentLinePath, cubicBezierAtT, debounceAnimationFrame, debounceMicrotask, debounceTime, defaultEventTrigger, determineSide, expandRectByOverflow, fDiagnosticMessage, fInstanceKey, fProvideCache, fSuppressDevWarnings, fWarnOnce, filterConnectableTargets, findExistingWaypoint, findNodeOrGroupContaining, findSourceConnector, findSpatialNeighbor, findTargetConnector, findWaypointCandidate, fixedCenterBehavior, fixedOutboundBehavior, floatingBehavior, getAllSourceConnectors, getAllTargetConnectors, getExternalItemHost, infinityMinMax, injectFlowState, isCalculateMode, isConnectionWorkerRuntimeSupported, isConnector, isDragBlocker, isDragExternalItemHandler, isDragHandleEnd, isDragHandleStart, isDragMinimapHandler, isDragNodeHandler, isExternalItem, isFDevMode, isMobile, isNode, isNodeOutlet, isNodeOutput, isOnFlowBackground, isOutletConnector, isPointerInsidePoint, isPointerInsideStartOrEndDragHandles, isResizeNodeHandler, isRotateHandle, isRotateNodeHandler, isSourceConnector, isTargetConnector, isValidEventTrigger, mergeA11yConfig, mergeControlSchemeConfig, mergeFCanvasConfig, mergeFlowStateConfig, mergeLayoutNodes, mergePointChains, mergeReflowConfig, middleButtonEventTrigger, mixinChangeSelection, mixinChangeVisibility, normalizeFlowLayoutData, normalizePolyline, notifyOnStart, pickWaypoint, primaryButtonEventTrigger, provideFFlow, provideFLayout, rebaseAutoPanPointerDownPosition, rectFromPoint, requireSourceConnector, requireTargetConnector, resolveAutoPanMode, resolveConnectionWorkerRuntime, resolveLayerOrder, revokeConnectionWorkerUrl, sampleCubicBezierUniform, sampleMultiCubicUniform, stringAttribute, takeOne, transitionEnd, withA11y, withConnectionFlow, withControlScheme, withFCanvas, withFlowState, withReflowOnResize, withinSnapThreshold };
24427
24720
  //# sourceMappingURL=foblex-flow.mjs.map