@foblex/flow 17.8.5 → 17.8.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.
Files changed (115) hide show
  1. package/domain/drag-rect-cache.d.ts +8 -0
  2. package/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior-request.d.ts +7 -7
  3. package/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior.d.ts +37 -3
  4. package/domain/f-connection/calculate-connection-line-by-behavior/index.d.ts +4 -3
  5. package/domain/f-connection/calculate-connection-line-by-behavior/models/calculate-behavior-request.d.ts +8 -0
  6. package/domain/f-connection/calculate-connection-line-by-behavior/{fixed-center-behavior.d.ts → utils/fixed-center-behavior.d.ts} +2 -2
  7. package/domain/f-connection/calculate-connection-line-by-behavior/{fixed-outbound-behavior.d.ts → utils/fixed-outbound-behavior.d.ts} +2 -2
  8. package/domain/f-connection/calculate-connection-line-by-behavior/{floating-behavior.d.ts → utils/floating-behavior.d.ts} +2 -2
  9. package/domain/f-connection/providers.d.ts +2 -2
  10. package/domain/f-connection/redraw-connections/index.d.ts +1 -1
  11. package/domain/f-connection/redraw-connections/{redraw-connections.execution.d.ts → redraw-connections.d.ts} +3 -3
  12. package/domain/f-draggable/emit-selection-change-event/emit-selection-change-event.execution.d.ts +1 -1
  13. package/domain/f-flow/providers.d.ts +1 -1
  14. package/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store-request.d.ts +2 -2
  15. package/domain/f-line-alignment/add-line-alignment-to-store/{add-line-alignment-to-store.execution.d.ts → add-line-alignment-to-store.d.ts} +4 -4
  16. package/domain/f-line-alignment/add-line-alignment-to-store/index.d.ts +1 -1
  17. package/domain/f-line-alignment/providers.d.ts +3 -3
  18. package/domain/f-line-alignment/remove-line-alignment-from-store/index.d.ts +1 -1
  19. package/domain/f-line-alignment/remove-line-alignment-from-store/{remove-line-alignment-from-store.execution.d.ts → remove-line-alignment-from-store.d.ts} +4 -4
  20. package/domain/f-node/get-parent-nodes/get-parent-nodes.d.ts +1 -1
  21. package/domain/f-node/get-parent-nodes/get-parent-nodes.request.d.ts +2 -2
  22. package/domain/f-node/remove-node-from-store/remove-node-from-store-request.d.ts +2 -2
  23. package/domain/f-node/remove-node-from-store/remove-node-from-store.d.ts +1 -1
  24. package/domain/f-zoom/providers.d.ts +1 -1
  25. package/domain/index.d.ts +1 -0
  26. package/domain/providers.d.ts +4 -3
  27. package/domain/update-item-and-children-layers/move-front-elements-before-target-element/index.d.ts +2 -2
  28. package/domain/update-item-and-children-layers/move-front-elements-before-target-element/{move-front-elements-before-target-element.request.d.ts → move-front-elements-before-target-element-request.d.ts} +4 -4
  29. package/domain/update-item-and-children-layers/move-front-elements-before-target-element/{move-front-elements-before-target-element.execution.d.ts → move-front-elements-before-target-element.d.ts} +4 -4
  30. package/esm2022/domain/drag-rect-cache.mjs +19 -0
  31. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior-request.mjs +4 -4
  32. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior.mjs +126 -13
  33. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/index.mjs +5 -4
  34. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/models/calculate-behavior-request.mjs +2 -0
  35. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/utils/fixed-center-behavior.mjs +12 -0
  36. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/utils/fixed-outbound-behavior.mjs +31 -0
  37. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/utils/floating-behavior.mjs +22 -0
  38. package/esm2022/domain/f-connection/providers.mjs +3 -3
  39. package/esm2022/domain/f-connection/redraw-connections/index.mjs +2 -2
  40. package/esm2022/domain/f-connection/redraw-connections/redraw-connections.mjs +75 -0
  41. package/esm2022/domain/f-draggable/emit-selection-change-event/emit-selection-change-event-request.mjs +1 -1
  42. package/esm2022/domain/f-draggable/emit-selection-change-event/emit-selection-change-event.execution.mjs +2 -2
  43. package/esm2022/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store-request.mjs +4 -4
  44. package/esm2022/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store.mjs +25 -0
  45. package/esm2022/domain/f-line-alignment/add-line-alignment-to-store/index.mjs +2 -2
  46. package/esm2022/domain/f-line-alignment/providers.mjs +4 -7
  47. package/esm2022/domain/f-line-alignment/remove-line-alignment-from-store/index.mjs +2 -2
  48. package/esm2022/domain/f-line-alignment/remove-line-alignment-from-store/remove-line-alignment-from-store.mjs +25 -0
  49. package/esm2022/domain/f-node/calculate-nodes-bounding-box-normalized-position/calculate-nodes-bounding-box-normalized-position.mjs +1 -1
  50. package/esm2022/domain/f-node/fit-to-child-nodes-and-groups/fit-to-child-nodes-and-groups-request.mjs +1 -1
  51. package/esm2022/domain/f-node/get-parent-nodes/get-parent-nodes.mjs +8 -8
  52. package/esm2022/domain/f-node/get-parent-nodes/get-parent-nodes.request.mjs +4 -4
  53. package/esm2022/domain/f-node/remove-node-from-store/remove-node-from-store-request.mjs +4 -4
  54. package/esm2022/domain/f-node/remove-node-from-store/remove-node-from-store.mjs +3 -3
  55. package/esm2022/domain/index.mjs +2 -1
  56. package/esm2022/domain/providers.mjs +5 -5
  57. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/index.mjs +3 -3
  58. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element-request.mjs +15 -0
  59. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element.mjs +34 -0
  60. package/esm2022/f-canvas/f-canvas.component.mjs +2 -2
  61. package/esm2022/f-connection/common/domain/adaptive-curve-builder.mjs +201 -0
  62. package/esm2022/f-connection/common/domain/index.mjs +2 -1
  63. package/esm2022/f-connection/common/e-f-connection-connectable-side.mjs +12 -0
  64. package/esm2022/f-connection/common/e-f-connection-type.mjs +2 -1
  65. package/esm2022/f-connection/common/f-connection-base.mjs +28 -5
  66. package/esm2022/f-connection/common/index.mjs +2 -1
  67. package/esm2022/f-connection/f-connection/f-connection.component.mjs +13 -3
  68. package/esm2022/f-connection/f-connection-builder/f-connection-factory.mjs +9 -17
  69. package/esm2022/f-connection/f-connection-content/f-connection-content.mjs +10 -4
  70. package/esm2022/f-connection/f-connection-content/polyline-content-engine/polyline-content-layout-engine.mjs +4 -5
  71. package/esm2022/f-connection/f-connection-content/polyline-content-engine/polyline-content-place.mjs +3 -2
  72. package/esm2022/f-connection/f-connection-for-create/f-connection-for-create.component.mjs +14 -4
  73. package/esm2022/f-connection/f-snap-connection/f-snap-connection.component.mjs +14 -4
  74. package/esm2022/f-draggable/f-connection/f-create-connection/f-create-connection.drag-handler.mjs +5 -5
  75. package/esm2022/f-draggable/f-connection/f-reassign-connection/f-reassign-source.drag-handler.mjs +5 -5
  76. package/esm2022/f-draggable/f-connection/f-reassign-connection/f-reassign-target.drag-handler.mjs +5 -5
  77. package/esm2022/f-draggable/f-draggable.directive.mjs +3 -2
  78. package/esm2022/f-draggable/f-node-move/connection-drag-handlers/base-connection.drag-handler.mjs +3 -3
  79. package/esm2022/f-draggable/f-node-move/move-preparation/f-node-move-preparation.execution.mjs +1 -1
  80. package/esm2022/f-flow/f-flow.component.mjs +2 -2
  81. package/esm2022/f-node/f-group.directive.mjs +1 -7
  82. package/esm2022/f-node/f-node.directive.mjs +1 -7
  83. package/f-connection/common/domain/adaptive-curve-builder.d.ts +102 -0
  84. package/f-connection/common/domain/index.d.ts +1 -0
  85. package/f-connection/common/e-f-connection-connectable-side.d.ts +10 -0
  86. package/f-connection/common/e-f-connection-type.d.ts +2 -1
  87. package/f-connection/common/f-connection-base.d.ts +14 -2
  88. package/f-connection/common/index.d.ts +1 -0
  89. package/f-connection/f-connection/f-connection.component.d.ts +4 -2
  90. package/f-connection/f-connection-builder/f-connection-factory.d.ts +2 -4
  91. package/f-connection/f-connection-content/f-connection-content.d.ts +2 -2
  92. package/f-connection/f-connection-for-create/f-connection-for-create.component.d.ts +4 -2
  93. package/f-connection/f-snap-connection/f-snap-connection.component.d.ts +4 -2
  94. package/f-connection/providers.d.ts +1 -1
  95. package/f-connectors/providers.d.ts +1 -1
  96. package/f-draggable/f-connection/providers.d.ts +1 -1
  97. package/f-draggable/f-drop-to-group/providers.d.ts +1 -1
  98. package/f-draggable/f-node-move/create-drag-model-from-selection/providers.d.ts +1 -1
  99. package/f-draggable/f-node-move/providers.d.ts +1 -1
  100. package/f-draggable/providers.d.ts +1 -1
  101. package/f-minimap/domain/providers.d.ts +1 -1
  102. package/f-minimap/providers.d.ts +1 -1
  103. package/f-selection-area/domain/providers.d.ts +1 -1
  104. package/f-storage/providers.d.ts +1 -1
  105. package/fesm2022/foblex-flow.mjs +504 -127
  106. package/fesm2022/foblex-flow.mjs.map +1 -1
  107. package/package.json +1 -1
  108. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/fixed-center-behavior.mjs +0 -12
  109. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/fixed-outbound-behavior.mjs +0 -31
  110. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/floating-behavior.mjs +0 -22
  111. package/esm2022/domain/f-connection/redraw-connections/redraw-connections.execution.mjs +0 -73
  112. package/esm2022/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store.execution.mjs +0 -25
  113. package/esm2022/domain/f-line-alignment/remove-line-alignment-from-store/remove-line-alignment-from-store.execution.mjs +0 -25
  114. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element.execution.mjs +0 -34
  115. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element.request.mjs +0 -15
@@ -1,10 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, Directive, input, computed, signal, Injector, Renderer2, effect, untracked, DestroyRef, model, output, booleanAttribute, ElementRef, Input, viewChild, Component, ChangeDetectionStrategy, Optional, Inject, isDevMode, contentChildren, numberAttribute, ViewContainerRef, TemplateRef, EventEmitter, NgZone, Output, ContentChildren, contentChild, NgModule } from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, Directive, input, computed, signal, Injector, Renderer2, effect, untracked, DestroyRef, model, output, booleanAttribute, ElementRef, Input, viewChild, Component, ChangeDetectionStrategy, isDevMode, contentChildren, numberAttribute, ViewContainerRef, TemplateRef, EventEmitter, NgZone, Output, ContentChildren, contentChild, NgModule } from '@angular/core';
3
3
  import { RectExtensions, RoundedRect, TransformModelExtensions, PointExtensions, Point, LineExtensions, GetIntersections, SizeExtensions, findClosestAlignment, setRectToElement, adjustRectToMinSize, setRectToViewBox } from '@foblex/2d';
4
4
  import { __decorate } from 'tslib';
5
5
  import { FExecutionRegister, FMediator } from '@foblex/mediator';
6
6
  import { BrowserService, PlatformService, EOperationSystem } from '@foblex/platform';
7
7
  import { normalizeDomElementId, castToEnum, isClosestElementHasClass, flatMap, getOrCreateRootNodeForViewRef, deepCloneNode, disableDragInteractions, extendStyles, getDataAttrValueFromClosestElementWithClass } from '@foblex/utils';
8
+ import { coerceNumberProperty } from '@angular/cdk/coercion';
8
9
  import { CommonModule } from '@angular/common';
9
10
 
10
11
  const F_BACKGROUND_PATTERN = new InjectionToken('F_BACKGROUND_PATTERN');
@@ -1023,14 +1024,14 @@ function createSVGElement$1(tag, fBrowser) {
1023
1024
  class CalculateConnectionLineByBehaviorRequest {
1024
1025
  sourceRect;
1025
1026
  targetRect;
1026
- behavior;
1027
+ connection;
1027
1028
  sourceConnectableSide;
1028
1029
  targetConnectableSide;
1029
1030
  static fToken = Symbol('CalculateConnectionLineByBehaviorRequest');
1030
- constructor(sourceRect, targetRect, behavior, sourceConnectableSide, targetConnectableSide) {
1031
+ constructor(sourceRect, targetRect, connection, sourceConnectableSide, targetConnectableSide) {
1031
1032
  this.sourceRect = sourceRect;
1032
1033
  this.targetRect = targetRect;
1033
- this.behavior = behavior;
1034
+ this.connection = connection;
1034
1035
  this.sourceConnectableSide = sourceConnectableSide;
1035
1036
  this.targetConnectableSide = targetConnectableSide;
1036
1037
  }
@@ -1411,12 +1412,6 @@ class FGroupDirective extends FNodeBase {
1411
1412
  super.parentChanges();
1412
1413
  }
1413
1414
  ngOnInit() {
1414
- this.setStyle('position', 'absolute');
1415
- this.setStyle('transform-origin', 'center');
1416
- this.setStyle('user-select', 'none');
1417
- this.setStyle('pointer-events', 'all');
1418
- this.setStyle('left', '0');
1419
- this.setStyle('top', '0');
1420
1415
  super.redraw();
1421
1416
  this._mediator.execute(new AddNodeToStoreRequest(this));
1422
1417
  }
@@ -1538,12 +1533,6 @@ class FNodeDirective extends FNodeBase {
1538
1533
  super.parentChanges();
1539
1534
  }
1540
1535
  ngOnInit() {
1541
- this.setStyle('position', 'absolute');
1542
- this.setStyle('transform-origin', 'center');
1543
- this.setStyle('user-select', 'none');
1544
- this.setStyle('pointer-events', 'all');
1545
- this.setStyle('left', '0');
1546
- this.setStyle('top', '0');
1547
1536
  super.redraw();
1548
1537
  this._mediator.execute(new AddNodeToStoreRequest(this));
1549
1538
  }
@@ -1869,6 +1858,205 @@ const F_CONNECTORS_PROVIDERS = [
1869
1858
  FNodeOutputDirective,
1870
1859
  ];
1871
1860
 
1861
+ /**
1862
+ * AdaptiveCurveBuilder
1863
+ *
1864
+ * Builds a smooth **adaptive connector curve** between two points using a cubic Bézier path,
1865
+ * but with control points computed differently from a classic “Bezier” connector.
1866
+ *
1867
+ * Key differences from a classic Bézier builder:
1868
+ * - Control handles are **aligned with the port side** (LEFT/RIGHT/TOP/BOTTOM),
1869
+ * yet are **slightly blended toward the target direction** to reduce harsh S-shapes.
1870
+ * - Handle lengths are **adaptive**: based on the `offset` (your “padding” from ports)
1871
+ * and the projected distance along the side’s axis. This produces a subtler curvature
1872
+ * and a distinct look & feel compared to a standard Bézier connector.
1873
+ *
1874
+ * Compatibility:
1875
+ * - Implements {@link IFConnectionBuilder}; output shape is the same:
1876
+ * SVG path, sampled points for hit-testing, and connection center.
1877
+ * - Only the four base sides are expected to be passed here:
1878
+ * {@link EFConnectableSide.LEFT}, {@link EFConnectableSide.RIGHT},
1879
+ * {@link EFConnectableSide.TOP}, {@link EFConnectableSide.BOTTOM}.
1880
+ *
1881
+ * Usage example:
1882
+ * ```ts
1883
+ * const builder = new AdaptiveCurveBuilder();
1884
+ * const res = builder.handle({
1885
+ * source: { x: 100, y: 120 },
1886
+ * sourceSide: EFConnectableSide.RIGHT,
1887
+ * target: { x: 340, y: 220 },
1888
+ * targetSide: EFConnectableSide.LEFT,
1889
+ * offset: 16, // acts as padding + minimal handle baseline
1890
+ * });
1891
+ * // res.path -> SVG "M … C …" string
1892
+ * // res.points -> sampled points along the curve
1893
+ * ```
1894
+ */
1895
+ class AdaptiveCurveBuilder {
1896
+ /**
1897
+ * Returns a unit direction vector for a given side.
1898
+ *
1899
+ * @param side - One of LEFT/RIGHT/TOP/BOTTOM.
1900
+ * @returns Unit vector pointing outwards from the side.
1901
+ * @remarks
1902
+ * Only base sides should reach this builder. A fallback `{0,0}` is returned
1903
+ * defensively, but should not occur in normal usage.
1904
+ */
1905
+ static _dir(side) {
1906
+ switch (side) {
1907
+ case EFConnectableSide.LEFT:
1908
+ return { x: -1, y: 0 };
1909
+ case EFConnectableSide.RIGHT:
1910
+ return { x: 1, y: 0 };
1911
+ case EFConnectableSide.TOP:
1912
+ return { x: 0, y: -1 };
1913
+ case EFConnectableSide.BOTTOM:
1914
+ return { x: 0, y: 1 };
1915
+ }
1916
+ return { x: 0, y: 0 };
1917
+ }
1918
+ /**
1919
+ * Checks whether a side is horizontal (LEFT/RIGHT).
1920
+ *
1921
+ * @param side - Side to check.
1922
+ * @returns `true` for LEFT/RIGHT, otherwise `false`.
1923
+ */
1924
+ static _isH(side) {
1925
+ return side === EFConnectableSide.LEFT || side === EFConnectableSide.RIGHT;
1926
+ }
1927
+ /**
1928
+ * Computes a **soft** handle length for a control point.
1929
+ *
1930
+ * The handle length is derived from:
1931
+ * - `offset` (acts as padding & the baseline handle),
1932
+ * - distance projected along the side’s axis (dx for horizontal, dy for vertical),
1933
+ * - a conservative upper bound to avoid bloated curves.
1934
+ *
1935
+ * @param p0 - Start (or end) point of the segment.
1936
+ * @param p3 - Opposite end (or start) point.
1937
+ * @param side - Side at which the handle originates.
1938
+ * @param offset - Visual padding/minimal handle baseline (must be ≥ 0).
1939
+ * @returns A bounded positive handle length.
1940
+ */
1941
+ static _handleLen(p0, p3, side, offset) {
1942
+ const dx = Math.abs(p3.x - p0.x);
1943
+ const dy = Math.abs(p3.y - p0.y);
1944
+ const d = Math.hypot(dx, dy);
1945
+ const along = this._isH(side) ? dx : dy;
1946
+ const MIN = Math.max(8, offset);
1947
+ const MAX = offset + 0.5 * d; // upper cap to keep the shape compact
1948
+ const len = offset * 1.05 + along * 0.3; // moderate growth along the axis
1949
+ return Math.min(MAX, Math.max(MIN, len));
1950
+ }
1951
+ /**
1952
+ * Computes a control point by taking the side direction and **lightly blending**
1953
+ * it toward the target direction. This reduces harsh inflections while keeping
1954
+ * the perceptual attachment to the port side.
1955
+ *
1956
+ * @param side - Base side defining the primary direction (LEFT/RIGHT/TOP/BOTTOM).
1957
+ * @param source - Anchor point where the control handle is attached.
1958
+ * @param target - Opposite end; used to orient the handle slightly toward the goal.
1959
+ * @param handle - Handle length (see {@link _handleLen}).
1960
+ * @returns Control point coordinates for the cubic Bézier segment.
1961
+ */
1962
+ static _softControl(side, source, target, handle) {
1963
+ const v = this._dir(side);
1964
+ const dx = target.x - source.x;
1965
+ const dy = target.y - source.y;
1966
+ const dist = Math.hypot(dx, dy) || 1;
1967
+ const tx = dx / dist;
1968
+ const ty = dy / dist;
1969
+ // Orientation of side vs. target direction (in [-1, 1])
1970
+ const dot = v.x * tx + v.y * ty;
1971
+ // Small base blend toward the target; slightly increase if the side points away.
1972
+ const baseBlend = 0.12;
1973
+ const extra = Math.max(0, -dot) * 0.08; // add a bit when pointing “backwards”
1974
+ const blend = Math.min(0.2, baseBlend + extra);
1975
+ const dirX = v.x * (1 - blend) + tx * blend;
1976
+ const dirY = v.y * (1 - blend) + ty * blend;
1977
+ const len = Math.hypot(dirX, dirY) || 1;
1978
+ return { x: source.x + (dirX / len) * handle, y: source.y + (dirY / len) * handle };
1979
+ }
1980
+ /**
1981
+ * Builds an adaptive connector between `source` and `target`.
1982
+ *
1983
+ * @param request - Connection build request.
1984
+ * @param request.source - Start point of the connector.
1985
+ * @param request.sourceSide - Side at the source port (LEFT/RIGHT/TOP/BOTTOM).
1986
+ * @param request.target - End point of the connector.
1987
+ * @param request.targetSide - Side at the target port (LEFT/RIGHT/TOP/BOTTOM).
1988
+ * @param request.offset - Visual padding & minimal handle baseline (≥ 0).
1989
+ *
1990
+ * @returns Standard {@link IFConnectionBuilderResponse}:
1991
+ * - `path`: SVG cubic path (“M … C …”),
1992
+ * - `points`: discretized samples along the curve,
1993
+ * - `connectionCenter`: approximate visual center for labeling/interaction,
1994
+ * - `secondPoint`/`penultimatePoint`: first/second control points (for tooling).
1995
+ *
1996
+ * @remarks
1997
+ * The returned path slightly offsets the end point by +0.0002 on both axes
1998
+ * to avoid edge cases in some renderers and hit-testing implementations.
1999
+ */
2000
+ handle(request) {
2001
+ const { source, sourceSide, target, targetSide } = request;
2002
+ const offset = Math.max(0, request.offset ?? 0);
2003
+ const p0 = { x: source.x, y: source.y };
2004
+ const p3 = { x: target.x, y: target.y };
2005
+ const h0 = AdaptiveCurveBuilder._handleLen(p0, p3, sourceSide, offset);
2006
+ const h3 = AdaptiveCurveBuilder._handleLen(p3, p0, targetSide, offset);
2007
+ const c1 = AdaptiveCurveBuilder._softControl(sourceSide, p0, p3, h0);
2008
+ const c2 = AdaptiveCurveBuilder._softControl(targetSide, p3, p0, h3);
2009
+ const path = `M ${p0.x} ${p0.y} C ${c1.x} ${c1.y}, ${c2.x} ${c2.y}, ${p3.x + 0.0002} ${p3.y + 0.0002}`;
2010
+ const connectionCenter = new CalculateConnectionCenterHandler().handle(new CalculateConnectionCenterRequest([p0, c1, c2, p3]));
2011
+ return {
2012
+ path,
2013
+ connectionCenter,
2014
+ secondPoint: c1,
2015
+ penultimatePoint: c2,
2016
+ points: _sampleCubic$1(p0, c1, c2, p3, 32),
2017
+ };
2018
+ }
2019
+ }
2020
+ /**
2021
+ * Evaluates a cubic Bézier at parameter `t` in [0, 1].
2022
+ *
2023
+ * @param p0 - Start point.
2024
+ * @param p1 - First control point.
2025
+ * @param p2 - Second control point.
2026
+ * @param p3 - End point.
2027
+ * @param t - Parameter in [0, 1].
2028
+ * @returns Point on the curve at `t`.
2029
+ */
2030
+ function bez3$1(p0, p1, p2, p3, t) {
2031
+ const u = 1 - t, tt = t * t, uu = u * u, uuu = uu * u, ttt = tt * t;
2032
+ return {
2033
+ x: uuu * p0.x + 3 * uu * t * p1.x + 3 * u * tt * p2.x + ttt * p3.x,
2034
+ y: uuu * p0.y + 3 * uu * t * p1.y + 3 * u * tt * p2.y + ttt * p3.y,
2035
+ };
2036
+ }
2037
+ /**
2038
+ * Uniformly samples a cubic Bézier segment.
2039
+ *
2040
+ * @param p0 - Start point.
2041
+ * @param p1 - First control point.
2042
+ * @param p2 - Second control point.
2043
+ * @param p3 - End point.
2044
+ * @param samples - Number of sub-segments (default: 32). The function returns `samples + 1` points.
2045
+ * @returns Array of sampled points including both endpoints.
2046
+ * @remarks
2047
+ * Sampling is uniform in parameter `t`, not in arc length. This is typically
2048
+ * sufficient for hit-testing and bounding boxes; if you need error-bounded
2049
+ * flattening, consider an adaptive subdivision strategy instead.
2050
+ */
2051
+ function _sampleCubic$1(p0, p1, p2, p3, samples = 32) {
2052
+ const out = new Array(samples + 1);
2053
+ out[0] = { ...p0 };
2054
+ for (let i = 1; i <= samples; i++) {
2055
+ out[i] = bez3$1(p0, p1, p2, p3, i / samples);
2056
+ }
2057
+ return out;
2058
+ }
2059
+
1872
2060
  class FBezierPathBuilder {
1873
2061
  static _getConnectorOffset(distance, offset) {
1874
2062
  if (distance >= offset) {
@@ -2449,34 +2637,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2449
2637
  const F_CONNECTION_BUILDERS = new InjectionToken('F_CONNECTION_BUILDERS');
2450
2638
 
2451
2639
  class FConnectionFactory {
2452
- builders = {
2640
+ _builders = {
2453
2641
  [EFConnectionType.STRAIGHT]: new FStraightPathBuilder(),
2454
2642
  [EFConnectionType.BEZIER]: new FBezierPathBuilder(),
2643
+ [EFConnectionType.ADAPTIVE_CURVE]: new AdaptiveCurveBuilder(),
2455
2644
  [EFConnectionType.SEGMENT]: new FSegmentPathBuilder(),
2645
+ ...(inject(F_CONNECTION_BUILDERS, { optional: true }) || {}),
2456
2646
  };
2457
- constructor(builders) {
2458
- if (builders) {
2459
- this.builders = { ...this.builders, ...builders };
2460
- }
2461
- }
2462
2647
  handle(request) {
2463
- const builder = this.builders[request.type];
2648
+ const builder = this._builders[request.type];
2464
2649
  if (!builder) {
2465
2650
  throw new Error(`FConnectionBuilder not found for type ${request.type}`);
2466
2651
  }
2467
2652
  return builder.handle(request.payload);
2468
2653
  }
2469
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionFactory, deps: [{ token: F_CONNECTION_BUILDERS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
2654
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2470
2655
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionFactory });
2471
2656
  }
2472
2657
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionFactory, decorators: [{
2473
2658
  type: Injectable
2474
- }], ctorParameters: () => [{ type: undefined, decorators: [{
2475
- type: Optional
2476
- }, {
2477
- type: Inject,
2478
- args: [F_CONNECTION_BUILDERS]
2479
- }] }] });
2659
+ }] });
2480
2660
 
2481
2661
  let warnedFConnectionCenter = false;
2482
2662
  /** @deprecated '[fConnectionCenter] is deprecated and will be removed in v18.0.0. Use FConnectionContent directive instead.' */
@@ -2759,7 +2939,7 @@ class PolylineContentPlace {
2759
2939
  return { x, y };
2760
2940
  }
2761
2941
  _sizeAlongDirection(element, dir) {
2762
- const rect = element.getBoundingClientRect();
2942
+ const rect = DragRectCache.fromElement(element);
2763
2943
  return Math.abs(dir.x) * rect.width + Math.abs(dir.y) * rect.height;
2764
2944
  }
2765
2945
  _normalize180(angleDeg) {
@@ -2800,16 +2980,15 @@ class ConnectionContentLayoutEngine {
2800
2980
  const total = sampler.totalLength;
2801
2981
  for (const item of contents) {
2802
2982
  const { position, rotationDeg } = this._placement.compute(sampler, item);
2803
- const style = this._createTransformString(position, rotationDeg);
2804
- item.hostElement.setAttribute('style', style);
2983
+ item.hostElement.style.transform = this._createTransformString(position, rotationDeg);
2805
2984
  }
2806
2985
  return total;
2807
2986
  }
2808
2987
  _createTransformString(position, rotationDeg) {
2809
- return `position: fixed; pointer-events: all; transform: translate(-50%, -50%) rotate(${rotationDeg}deg); left: ${position.x}px; top: ${position.y}px`;
2988
+ return `translate3d(${position.x}px, ${position.y}px, 0) translate(-50%, -50%) rotate(${rotationDeg}deg)`;
2810
2989
  }
2811
2990
  }
2812
- function calculatePathPointsIfEmpty({ point1, point2 }, { secondPoint, connectionCenter, penultimatePoint }) {
2991
+ function calculatePathPointsIfEmpty({ point1, point2 }, { secondPoint, connectionCenter, penultimatePoint, }) {
2813
2992
  return [point1, secondPoint || point1, connectionCenter, penultimatePoint || point2, point2];
2814
2993
  }
2815
2994
 
@@ -2857,7 +3036,10 @@ class FConnectionContent {
2857
3036
  * - `0.5` — at the middle of the connection (default).
2858
3037
  */
2859
3038
  position = input(0.5, {
2860
- transform: (v) => (v < 0 ? 0 : v > 1 ? 1 : v),
3039
+ transform: (x) => {
3040
+ const v = coerceNumberProperty(x);
3041
+ return v < 0 ? 0 : v > 1 ? 1 : v;
3042
+ },
2861
3043
  });
2862
3044
  /**
2863
3045
  * Perpendicular offset from the connection line (in pixels).
@@ -2867,7 +3049,9 @@ class FConnectionContent {
2867
3049
  * - Negative values shift it to the left.
2868
3050
  * - Default: `0` (no shift).
2869
3051
  */
2870
- offset = input(0);
3052
+ offset = input(0, {
3053
+ transform: (x) => coerceNumberProperty(x),
3054
+ });
2871
3055
  /**
2872
3056
  * Controls the orientation (rotation) of the content relative to the connection.
2873
3057
  *
@@ -2903,6 +3087,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2903
3087
  }]
2904
3088
  }] });
2905
3089
 
3090
+ var EFConnectionConnectableSide;
3091
+ (function (EFConnectionConnectableSide) {
3092
+ EFConnectionConnectableSide["DEFAULT"] = "default";
3093
+ EFConnectionConnectableSide["TOP"] = "top";
3094
+ EFConnectionConnectableSide["BOTTOM"] = "bottom";
3095
+ EFConnectionConnectableSide["LEFT"] = "left";
3096
+ EFConnectionConnectableSide["RIGHT"] = "right";
3097
+ EFConnectionConnectableSide["CALCULATE"] = "calculate";
3098
+ EFConnectionConnectableSide["CALCULATE_HORIZONTAL"] = "calculate_horizontal";
3099
+ EFConnectionConnectableSide["CALCULATE_VERTICAL"] = "calculate_vertical";
3100
+ })(EFConnectionConnectableSide || (EFConnectionConnectableSide = {}));
3101
+
2906
3102
  const MIXIN_BASE = mixinChangeSelection(mixinChangeVisibility(class {
2907
3103
  hostElement;
2908
3104
  constructor(hostElement) {
@@ -2932,6 +3128,10 @@ class FConnectionBase extends MIXIN_BASE {
2932
3128
  fConnectionContents = contentChildren(FConnectionContent, {
2933
3129
  descendants: true,
2934
3130
  });
3131
+ fInputSide = signal(EFConnectionConnectableSide.DEFAULT);
3132
+ _sourceSide = EFConnectableSide.AUTO;
3133
+ fOutputSide = signal(EFConnectionConnectableSide.DEFAULT);
3134
+ _targetSide = EFConnectableSide.AUTO;
2935
3135
  _penultimatePoint = PointExtensions.initialize();
2936
3136
  _secondPoint = PointExtensions.initialize();
2937
3137
  constructor() {
@@ -2945,9 +3145,9 @@ class FConnectionBase extends MIXIN_BASE {
2945
3145
  isContains(element) {
2946
3146
  return (this.hostElement.firstChild?.lastChild).contains(element);
2947
3147
  }
2948
- setLine({ point1, point2 }, sourceSide, targetSide) {
3148
+ setLine({ point1, point2 }) {
2949
3149
  this.line = LineExtensions.initialize(point1, point2);
2950
- const pathResult = this._getPathResult(point1, sourceSide, point2, targetSide);
3150
+ const pathResult = this._getPathResult(point1, point2);
2951
3151
  this.path = pathResult.path;
2952
3152
  this._penultimatePoint = pathResult.penultimatePoint || point1;
2953
3153
  this._secondPoint = pathResult.secondPoint || point2;
@@ -2957,12 +3157,19 @@ class FConnectionBase extends MIXIN_BASE {
2957
3157
  _contents() {
2958
3158
  return Array.from(this.fConnectionContents()?.values() ?? []);
2959
3159
  }
2960
- _getPathResult(source, sourceSide, target, targetSide) {
3160
+ _getPathResult(source, target) {
2961
3161
  const radius = this.fRadius > 0 ? this.fRadius : 0;
2962
3162
  const offset = this.fOffset > 0 ? this.fOffset : 1;
2963
3163
  return this._connectionFactory.handle({
2964
3164
  type: this.fType,
2965
- payload: { source, sourceSide, target, targetSide, radius, offset },
3165
+ payload: {
3166
+ source,
3167
+ sourceSide: this._sourceSide,
3168
+ target,
3169
+ targetSide: this._targetSide,
3170
+ radius,
3171
+ offset,
3172
+ },
2966
3173
  });
2967
3174
  }
2968
3175
  _createTransformString(position, rotate = 0) {
@@ -2982,6 +3189,16 @@ class FConnectionBase extends MIXIN_BASE {
2982
3189
  this.fDragHandleStart()?.redraw(this._secondPoint, this.line.point1);
2983
3190
  this.fTextComponent().redraw(this.line);
2984
3191
  }
3192
+ /**
3193
+ * Applies the resolved sides to the connection. Don't call this method directly; it's used internally.
3194
+ *
3195
+ * @param sourceSide The resolved side for the source element.
3196
+ * @param targetSide The resolved side for the target element.
3197
+ */
3198
+ _applyResolvedSidesToConnection(sourceSide, targetSide) {
3199
+ this._sourceSide = sourceSide;
3200
+ this._targetSide = targetSide;
3201
+ }
2985
3202
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2986
3203
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "18.2.13", type: FConnectionBase, inputs: { fStartColor: { classPropertyName: "fStartColor", publicName: "fStartColor", isSignal: true, isRequired: false, transformFunction: null }, fEndColor: { classPropertyName: "fEndColor", publicName: "fEndColor", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "fConnectionCenters", predicate: FConnectionCenterDirective, descendants: true, isSignal: true }, { propertyName: "fConnectionContents", predicate: FConnectionContent, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "fDefs", first: true, predicate: ["defs"], descendants: true, isSignal: true }, { propertyName: "fPath", first: true, predicate: CONNECTION_PATH, descendants: true, isSignal: true }, { propertyName: "fGradient", first: true, predicate: CONNECTION_GRADIENT, descendants: true, isSignal: true }, { propertyName: "fDragHandleStart", first: true, predicate: FConnectionDragHandleStartComponent, descendants: true, isSignal: true }, { propertyName: "fDragHandleEnd", first: true, predicate: FConnectionDragHandleEndComponent, descendants: true, isSignal: true }, { propertyName: "fSelection", first: true, predicate: FConnectionSelectionComponent, descendants: true, isSignal: true }, { propertyName: "fTextComponent", first: true, predicate: CONNECTION_TEXT, descendants: true, isSignal: true }, { propertyName: "fConnectionCenter", first: true, predicate: ["fConnectionCenter"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
2987
3204
  }
@@ -3001,6 +3218,7 @@ var EFConnectionType;
3001
3218
  EFConnectionType["SEGMENT"] = "segment";
3002
3219
  EFConnectionType["STRAIGHT"] = "straight";
3003
3220
  EFConnectionType["BEZIER"] = "bezier";
3221
+ EFConnectionType["ADAPTIVE_CURVE"] = "adaptive-curve";
3004
3222
  })(EFConnectionType || (EFConnectionType = {}));
3005
3223
 
3006
3224
  let uniqueId$6 = 0;
@@ -3014,6 +3232,16 @@ class FConnectionForCreateComponent extends FConnectionBase {
3014
3232
  fOffset = 12;
3015
3233
  fBehavior = EFConnectionBehavior.FIXED;
3016
3234
  fType = EFConnectionType.STRAIGHT;
3235
+ fInputSide = input(EFConnectionConnectableSide.DEFAULT, {
3236
+ transform: (x) => {
3237
+ return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);
3238
+ },
3239
+ });
3240
+ fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {
3241
+ transform: (x) => {
3242
+ return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);
3243
+ },
3244
+ });
3017
3245
  get boundingElement() {
3018
3246
  return this.fPath().hostElement;
3019
3247
  }
@@ -3031,7 +3259,7 @@ class FConnectionForCreateComponent extends FConnectionBase {
3031
3259
  this._mediator.execute(new RemoveConnectionForCreateFromStoreRequest());
3032
3260
  }
3033
3261
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionForCreateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3034
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FConnectionForCreateComponent, selector: "f-connection-for-create", inputs: { fRadius: ["fRadius", "fRadius", numberAttribute], fOffset: ["fOffset", "fOffset", numberAttribute], fBehavior: ["fBehavior", "fBehavior", (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior)], fType: "fType" }, host: { classAttribute: "f-component f-connection f-connection-for-create" }, providers: [{ provide: F_CONNECTION, useExisting: FConnectionForCreateComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg xmlns=\"http://www.w3.org/2000/svg\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path [attr.d]=\"path\"></path>\n <circle f-connection-drag-handle-start r=\"8\"></circle>\n <circle f-connection-drag-handle-end r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\"></ng-content>\n}\n", styles: [":host{pointer-events:none;position:absolute}:host svg{overflow:visible}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center,:host .f-connection-content{pointer-events:all}\n"], dependencies: [{ kind: "component", type: FConnectionTextComponent, selector: "text[f-connection-text]" }, { kind: "component", type: FConnectionDragHandleStartComponent, selector: "circle[f-connection-drag-handle-start]" }, { kind: "component", type: FConnectionDragHandleEndComponent, selector: "circle[f-connection-drag-handle-end]" }, { kind: "component", type: FConnectionGradientComponent, selector: "linearGradient[fConnectionGradient]" }, { kind: "component", type: FConnectionPathComponent, selector: "path[f-connection-path]" }, { kind: "component", type: FConnectionSelectionComponent, selector: "path[fConnectionSelection]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3262
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FConnectionForCreateComponent, selector: "f-connection-for-create", inputs: { fRadius: { classPropertyName: "fRadius", publicName: "fRadius", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fOffset: { classPropertyName: "fOffset", publicName: "fOffset", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fBehavior: { classPropertyName: "fBehavior", publicName: "fBehavior", isSignal: false, isRequired: false, transformFunction: (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior) }, fType: { classPropertyName: "fType", publicName: "fType", isSignal: false, isRequired: false, transformFunction: null }, fInputSide: { classPropertyName: "fInputSide", publicName: "fInputSide", isSignal: true, isRequired: false, transformFunction: null }, fOutputSide: { classPropertyName: "fOutputSide", publicName: "fOutputSide", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "f-component f-connection f-connection-for-create" }, providers: [{ provide: F_CONNECTION, useExisting: FConnectionForCreateComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg xmlns=\"http://www.w3.org/2000/svg\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path [attr.d]=\"path\"></path>\n <circle f-connection-drag-handle-start r=\"8\"></circle>\n <circle f-connection-drag-handle-end r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\"></ng-content>\n}\n", styles: [":host{pointer-events:none;position:absolute}:host svg{overflow:visible}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center,:host .f-connection-content{pointer-events:all}\n"], dependencies: [{ kind: "component", type: FConnectionTextComponent, selector: "text[f-connection-text]" }, { kind: "component", type: FConnectionDragHandleStartComponent, selector: "circle[f-connection-drag-handle-start]" }, { kind: "component", type: FConnectionDragHandleEndComponent, selector: "circle[f-connection-drag-handle-end]" }, { kind: "component", type: FConnectionGradientComponent, selector: "linearGradient[fConnectionGradient]" }, { kind: "component", type: FConnectionPathComponent, selector: "path[f-connection-path]" }, { kind: "component", type: FConnectionSelectionComponent, selector: "path[fConnectionSelection]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3035
3263
  }
3036
3264
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionForCreateComponent, decorators: [{
3037
3265
  type: Component,
@@ -3074,6 +3302,16 @@ class FConnectionComponent extends FConnectionBase {
3074
3302
  alias: 'fReassignDisabled',
3075
3303
  transform: booleanAttribute,
3076
3304
  });
3305
+ fInputSide = input(EFConnectionConnectableSide.DEFAULT, {
3306
+ transform: (x) => {
3307
+ return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);
3308
+ },
3309
+ });
3310
+ fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {
3311
+ transform: (x) => {
3312
+ return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);
3313
+ },
3314
+ });
3077
3315
  get boundingElement() {
3078
3316
  return this.fPath().hostElement;
3079
3317
  }
@@ -3088,7 +3326,7 @@ class FConnectionComponent extends FConnectionBase {
3088
3326
  this._mediator.execute(new RemoveConnectionFromStoreRequest(this));
3089
3327
  }
3090
3328
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3091
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FConnectionComponent, selector: "f-connection", inputs: { fId: { classPropertyName: "fId", publicName: "fConnectionId", isSignal: true, isRequired: false, transformFunction: null }, fText: { classPropertyName: "fText", publicName: "fText", isSignal: false, isRequired: false, transformFunction: null }, fTextStartOffset: { classPropertyName: "fTextStartOffset", publicName: "fTextStartOffset", isSignal: false, isRequired: false, transformFunction: null }, fOutputId: { classPropertyName: "fOutputId", publicName: "fOutputId", isSignal: true, isRequired: false, transformFunction: null }, fInputId: { classPropertyName: "fInputId", publicName: "fInputId", isSignal: true, isRequired: false, transformFunction: null }, fRadius: { classPropertyName: "fRadius", publicName: "fRadius", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fOffset: { classPropertyName: "fOffset", publicName: "fOffset", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fBehavior: { classPropertyName: "fBehavior", publicName: "fBehavior", isSignal: false, isRequired: false, transformFunction: (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior) }, fType: { classPropertyName: "fType", publicName: "fType", isSignal: false, isRequired: false, transformFunction: null }, fSelectionDisabled: { classPropertyName: "fSelectionDisabled", publicName: "fSelectionDisabled", isSignal: true, isRequired: false, transformFunction: null }, fReassignableStart: { classPropertyName: "fReassignableStart", publicName: "fReassignableStart", isSignal: true, isRequired: false, transformFunction: null }, fDraggingDisabled: { classPropertyName: "fDraggingDisabled", publicName: "fReassignDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "fId()", "class.f-connection-selection-disabled": "fSelectionDisabled()", "class.f-connection-reassign-disabled": "fDraggingDisabled()" }, classAttribute: "f-component f-connection" }, providers: [{ provide: F_CONNECTION, useExisting: FConnectionComponent }], exportAs: ["fComponent"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n style=\"overflow: visible; display: block; vertical-align: middle;\"\n>\n <defs #defs></defs>\n <ng-content></ng-content>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path [attr.d]=\"path\"></path>\n @if (fReassignableStart()) {\n <circle f-connection-drag-handle-start r=\"8\"></circle>\n }\n <circle f-connection-drag-handle-end r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\"></ng-content>\n}\n", styles: [":host{pointer-events:none;position:absolute}:host svg{overflow:visible}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center,:host .f-connection-content{pointer-events:all}\n"], dependencies: [{ kind: "component", type: FConnectionTextComponent, selector: "text[f-connection-text]" }, { kind: "component", type: FConnectionDragHandleStartComponent, selector: "circle[f-connection-drag-handle-start]" }, { kind: "component", type: FConnectionDragHandleEndComponent, selector: "circle[f-connection-drag-handle-end]" }, { kind: "component", type: FConnectionGradientComponent, selector: "linearGradient[fConnectionGradient]" }, { kind: "component", type: FConnectionPathComponent, selector: "path[f-connection-path]" }, { kind: "component", type: FConnectionSelectionComponent, selector: "path[fConnectionSelection]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3329
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FConnectionComponent, selector: "f-connection", inputs: { fId: { classPropertyName: "fId", publicName: "fConnectionId", isSignal: true, isRequired: false, transformFunction: null }, fText: { classPropertyName: "fText", publicName: "fText", isSignal: false, isRequired: false, transformFunction: null }, fTextStartOffset: { classPropertyName: "fTextStartOffset", publicName: "fTextStartOffset", isSignal: false, isRequired: false, transformFunction: null }, fOutputId: { classPropertyName: "fOutputId", publicName: "fOutputId", isSignal: true, isRequired: false, transformFunction: null }, fInputId: { classPropertyName: "fInputId", publicName: "fInputId", isSignal: true, isRequired: false, transformFunction: null }, fRadius: { classPropertyName: "fRadius", publicName: "fRadius", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fOffset: { classPropertyName: "fOffset", publicName: "fOffset", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fBehavior: { classPropertyName: "fBehavior", publicName: "fBehavior", isSignal: false, isRequired: false, transformFunction: (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior) }, fType: { classPropertyName: "fType", publicName: "fType", isSignal: false, isRequired: false, transformFunction: null }, fSelectionDisabled: { classPropertyName: "fSelectionDisabled", publicName: "fSelectionDisabled", isSignal: true, isRequired: false, transformFunction: null }, fReassignableStart: { classPropertyName: "fReassignableStart", publicName: "fReassignableStart", isSignal: true, isRequired: false, transformFunction: null }, fDraggingDisabled: { classPropertyName: "fDraggingDisabled", publicName: "fReassignDisabled", isSignal: true, isRequired: false, transformFunction: null }, fInputSide: { classPropertyName: "fInputSide", publicName: "fInputSide", isSignal: true, isRequired: false, transformFunction: null }, fOutputSide: { classPropertyName: "fOutputSide", publicName: "fOutputSide", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "fId()", "class.f-connection-selection-disabled": "fSelectionDisabled()", "class.f-connection-reassign-disabled": "fDraggingDisabled()" }, classAttribute: "f-component f-connection" }, providers: [{ provide: F_CONNECTION, useExisting: FConnectionComponent }], exportAs: ["fComponent"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n style=\"overflow: visible; display: block; vertical-align: middle;\"\n>\n <defs #defs></defs>\n <ng-content></ng-content>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path [attr.d]=\"path\"></path>\n @if (fReassignableStart()) {\n <circle f-connection-drag-handle-start r=\"8\"></circle>\n }\n <circle f-connection-drag-handle-end r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\"></ng-content>\n}\n", styles: [":host{pointer-events:none;position:absolute}:host svg{overflow:visible}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center,:host .f-connection-content{pointer-events:all}\n"], dependencies: [{ kind: "component", type: FConnectionTextComponent, selector: "text[f-connection-text]" }, { kind: "component", type: FConnectionDragHandleStartComponent, selector: "circle[f-connection-drag-handle-start]" }, { kind: "component", type: FConnectionDragHandleEndComponent, selector: "circle[f-connection-drag-handle-end]" }, { kind: "component", type: FConnectionGradientComponent, selector: "linearGradient[fConnectionGradient]" }, { kind: "component", type: FConnectionPathComponent, selector: "path[f-connection-path]" }, { kind: "component", type: FConnectionSelectionComponent, selector: "path[fConnectionSelection]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3092
3330
  }
3093
3331
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionComponent, decorators: [{
3094
3332
  type: Component,
@@ -3184,6 +3422,16 @@ class FSnapConnectionComponent extends FConnectionBase {
3184
3422
  fOffset = 12;
3185
3423
  fBehavior = EFConnectionBehavior.FIXED;
3186
3424
  fType = EFConnectionType.STRAIGHT;
3425
+ fInputSide = input(EFConnectionConnectableSide.DEFAULT, {
3426
+ transform: (x) => {
3427
+ return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);
3428
+ },
3429
+ });
3430
+ fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {
3431
+ transform: (x) => {
3432
+ return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);
3433
+ },
3434
+ });
3187
3435
  get boundingElement() {
3188
3436
  return this.fPath().hostElement;
3189
3437
  }
@@ -3201,7 +3449,7 @@ class FSnapConnectionComponent extends FConnectionBase {
3201
3449
  this._mediator.execute(new RemoveSnapConnectionFromStoreRequest());
3202
3450
  }
3203
3451
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FSnapConnectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
3204
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FSnapConnectionComponent, selector: "f-snap-connection", inputs: { fSnapThreshold: ["fSnapThreshold", "fSnapThreshold", numberAttribute], fRadius: ["fRadius", "fRadius", numberAttribute], fOffset: ["fOffset", "fOffset", numberAttribute], fBehavior: ["fBehavior", "fBehavior", (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior)], fType: "fType" }, host: { classAttribute: "f-component f-connection f-snap-connection" }, providers: [{ provide: F_CONNECTION, useExisting: FSnapConnectionComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg xmlns=\"http://www.w3.org/2000/svg\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path [attr.d]=\"path\"></path>\n <circle f-connection-drag-handle-start r=\"8\"></circle>\n <circle f-connection-drag-handle-end r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\"></ng-content>\n}\n", styles: [":host{pointer-events:none;position:absolute}:host svg{overflow:visible}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center,:host .f-connection-content{pointer-events:all}\n"], dependencies: [{ kind: "component", type: FConnectionTextComponent, selector: "text[f-connection-text]" }, { kind: "component", type: FConnectionDragHandleStartComponent, selector: "circle[f-connection-drag-handle-start]" }, { kind: "component", type: FConnectionDragHandleEndComponent, selector: "circle[f-connection-drag-handle-end]" }, { kind: "component", type: FConnectionGradientComponent, selector: "linearGradient[fConnectionGradient]" }, { kind: "component", type: FConnectionPathComponent, selector: "path[f-connection-path]" }, { kind: "component", type: FConnectionSelectionComponent, selector: "path[fConnectionSelection]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3452
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FSnapConnectionComponent, selector: "f-snap-connection", inputs: { fSnapThreshold: { classPropertyName: "fSnapThreshold", publicName: "fSnapThreshold", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fRadius: { classPropertyName: "fRadius", publicName: "fRadius", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fOffset: { classPropertyName: "fOffset", publicName: "fOffset", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fBehavior: { classPropertyName: "fBehavior", publicName: "fBehavior", isSignal: false, isRequired: false, transformFunction: (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior) }, fType: { classPropertyName: "fType", publicName: "fType", isSignal: false, isRequired: false, transformFunction: null }, fInputSide: { classPropertyName: "fInputSide", publicName: "fInputSide", isSignal: true, isRequired: false, transformFunction: null }, fOutputSide: { classPropertyName: "fOutputSide", publicName: "fOutputSide", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "f-component f-connection f-snap-connection" }, providers: [{ provide: F_CONNECTION, useExisting: FSnapConnectionComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg xmlns=\"http://www.w3.org/2000/svg\">\n <defs #defs></defs>\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path [attr.d]=\"path\"></path>\n <circle f-connection-drag-handle-start r=\"8\"></circle>\n <circle f-connection-drag-handle-end r=\"8\"></circle>\n </g>\n <text f-connection-text></text>\n </g>\n <ng-content></ng-content>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\"></ng-content>\n}\n", styles: [":host{pointer-events:none;position:absolute}:host svg{overflow:visible}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center,:host .f-connection-content{pointer-events:all}\n"], dependencies: [{ kind: "component", type: FConnectionTextComponent, selector: "text[f-connection-text]" }, { kind: "component", type: FConnectionDragHandleStartComponent, selector: "circle[f-connection-drag-handle-start]" }, { kind: "component", type: FConnectionDragHandleEndComponent, selector: "circle[f-connection-drag-handle-end]" }, { kind: "component", type: FConnectionGradientComponent, selector: "linearGradient[fConnectionGradient]" }, { kind: "component", type: FConnectionPathComponent, selector: "path[f-connection-path]" }, { kind: "component", type: FConnectionSelectionComponent, selector: "path[fConnectionSelection]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3205
3453
  }
3206
3454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FSnapConnectionComponent, decorators: [{
3207
3455
  type: Component,
@@ -3244,7 +3492,7 @@ const F_CONNECTION_PROVIDERS = [
3244
3492
  * It constructs a line between the intersections of the connectors rectangles and line from the centers of the connector rectangles
3245
3493
  * @param payload
3246
3494
  */
3247
- function floatingBehavior({ sourceRect, targetRect, }) {
3495
+ function floatingBehavior({ sourceRect, targetRect }) {
3248
3496
  return _getIntersectionsLine(_fromRoundedRectIntersections(sourceRect, targetRect), _toRoundedRectIntersections(sourceRect, targetRect), sourceRect, targetRect);
3249
3497
  }
3250
3498
  function _fromRoundedRectIntersections(sourceRect, targetRect) {
@@ -3265,7 +3513,7 @@ function _getIntersectionsLine(from, to, sourceRect, targetRect) {
3265
3513
  * It constructs a line between the gravity centers of the connector rectangles
3266
3514
  * @param payload
3267
3515
  */
3268
- function fixedCenterBehavior({ sourceRect, targetRect, }) {
3516
+ function fixedCenterBehavior({ sourceRect, targetRect }) {
3269
3517
  return {
3270
3518
  point1: sourceRect.gravityCenter,
3271
3519
  point2: targetRect.gravityCenter,
@@ -3303,16 +3551,128 @@ function _getPosition(rect, side) {
3303
3551
  }
3304
3552
 
3305
3553
  /**
3306
- * Execution that calculates the connection line based on the behavior.
3554
+ * Small epsilon to treat near-zero differences as negligible.
3555
+ */
3556
+ const EPSILON = 0.5;
3557
+ /**
3558
+ * Registry of all connection behavior handlers.
3559
+ */
3560
+ const BEHAVIOR_HANDLERS = {
3561
+ [EFConnectionBehavior.FLOATING]: floatingBehavior,
3562
+ [EFConnectionBehavior.FIXED_CENTER]: fixedCenterBehavior,
3563
+ [EFConnectionBehavior.FIXED]: fixedOutboundBehavior,
3564
+ };
3565
+ /**
3566
+ * Calculates connection lines based on behavior rules.
3567
+ * It determines which sides of the source and target should connect,
3568
+ * then delegates to a registered behavior handler.
3307
3569
  */
3308
3570
  let CalculateConnectionLineByBehavior = class CalculateConnectionLineByBehavior {
3309
- _handlers = {
3310
- [EFConnectionBehavior.FLOATING.toString()]: floatingBehavior,
3311
- [EFConnectionBehavior.FIXED_CENTER.toString()]: fixedCenterBehavior,
3312
- [EFConnectionBehavior.FIXED.toString()]: fixedOutboundBehavior,
3313
- };
3314
- handle(payload) {
3315
- return this._handlers[payload.behavior](payload);
3571
+ /**
3572
+ * Main execution entry point.
3573
+ *
3574
+ * @param request The request containing source, target, and connection details.
3575
+ * @returns A calculated connection line (ILine).
3576
+ */
3577
+ handle(request) {
3578
+ const vectors = this._calculateDirectionalVectors(request.sourceRect.gravityCenter.x, request.sourceRect.gravityCenter.y, request.targetRect.gravityCenter.x, request.targetRect.gravityCenter.y);
3579
+ const sourceSide = this._determineSourceSide(request, vectors);
3580
+ const targetSide = this._determineTargetSide(request, vectors);
3581
+ request.connection._applyResolvedSidesToConnection(sourceSide, targetSide);
3582
+ const handler = this._getBehaviorHandler(request.connection.fBehavior);
3583
+ return handler({
3584
+ sourceRect: request.sourceRect,
3585
+ targetRect: request.targetRect,
3586
+ sourceConnectableSide: sourceSide,
3587
+ targetConnectableSide: targetSide,
3588
+ });
3589
+ }
3590
+ /**
3591
+ * Computes the directional deltas between two rectangles.
3592
+ */
3593
+ _calculateDirectionalVectors(sourceX, sourceY, targetX, targetY) {
3594
+ const sourceToTargetX = targetX - sourceX;
3595
+ const sourceToTargetY = targetY - sourceY;
3596
+ return {
3597
+ sourceToTargetX,
3598
+ sourceToTargetY,
3599
+ targetToSourceX: -sourceToTargetX,
3600
+ targetToSourceY: -sourceToTargetY,
3601
+ };
3602
+ }
3603
+ /**
3604
+ * Determines the side for the source element.
3605
+ */
3606
+ _determineSourceSide(request, vectors) {
3607
+ return this._resolveConnectableSide(request.connection.fOutputSide(), vectors.sourceToTargetX, vectors.sourceToTargetY, request.sourceConnectableSide);
3608
+ }
3609
+ /**
3610
+ * Determines the side for the target element.
3611
+ */
3612
+ _determineTargetSide(request, vectors) {
3613
+ return this._resolveConnectableSide(request.connection.fInputSide(), vectors.targetToSourceX, vectors.targetToSourceY, request.targetConnectableSide);
3614
+ }
3615
+ /**
3616
+ * Resolves which side of a shape to connect to based on direction, fallback, and connection mode.
3617
+ *
3618
+ * @param requestedSide The side mode (e.g. CALCULATE, CALCULATE_HORIZONTAL, FIXED, etc.).
3619
+ * @param deltaX Difference in X between source and target.
3620
+ * @param deltaY Difference in Y between source and target.
3621
+ * @param fallbackSide The default fallback side if calculation is ambiguous.
3622
+ */
3623
+ _resolveConnectableSide(requestedSide, deltaX, deltaY, fallbackSide) {
3624
+ if (requestedSide === EFConnectionConnectableSide.DEFAULT) {
3625
+ return fallbackSide;
3626
+ }
3627
+ const absoluteX = Math.abs(deltaX);
3628
+ const absoluteY = Math.abs(deltaY);
3629
+ const isNearZero = absoluteX < EPSILON && absoluteY < EPSILON;
3630
+ if (isNearZero) {
3631
+ return fallbackSide;
3632
+ }
3633
+ const isHorizontalDominant = absoluteX >= absoluteY;
3634
+ switch (requestedSide) {
3635
+ case EFConnectionConnectableSide.CALCULATE:
3636
+ return isHorizontalDominant
3637
+ ? deltaX >= 0
3638
+ ? EFConnectableSide.RIGHT
3639
+ : EFConnectableSide.LEFT
3640
+ : deltaY >= 0
3641
+ ? EFConnectableSide.BOTTOM
3642
+ : EFConnectableSide.TOP;
3643
+ case EFConnectionConnectableSide.CALCULATE_HORIZONTAL:
3644
+ if (absoluteX < EPSILON) {
3645
+ return fallbackSide;
3646
+ }
3647
+ return deltaX >= 0 ? EFConnectableSide.RIGHT : EFConnectableSide.LEFT;
3648
+ case EFConnectionConnectableSide.CALCULATE_VERTICAL:
3649
+ if (absoluteY < EPSILON) {
3650
+ return fallbackSide;
3651
+ }
3652
+ return deltaY >= 0 ? EFConnectableSide.BOTTOM : EFConnectableSide.TOP;
3653
+ case EFConnectionConnectableSide.TOP:
3654
+ return EFConnectableSide.TOP;
3655
+ case EFConnectionConnectableSide.BOTTOM:
3656
+ return EFConnectableSide.BOTTOM;
3657
+ case EFConnectionConnectableSide.LEFT:
3658
+ return EFConnectableSide.LEFT;
3659
+ case EFConnectionConnectableSide.RIGHT:
3660
+ return EFConnectableSide.RIGHT;
3661
+ default:
3662
+ return fallbackSide;
3663
+ }
3664
+ }
3665
+ /**
3666
+ * Returns the appropriate handler for the given connection behavior.
3667
+ *
3668
+ * @throws Error if no handler is registered for the behavior.
3669
+ */
3670
+ _getBehaviorHandler(behavior) {
3671
+ const handler = BEHAVIOR_HANDLERS[behavior];
3672
+ if (!handler) {
3673
+ throw new Error(`[Behavior] No handler for behavior: ${behavior}`);
3674
+ }
3675
+ return handler;
3316
3676
  }
3317
3677
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectionLineByBehavior, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3318
3678
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectionLineByBehavior });
@@ -3436,12 +3796,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3436
3796
  type: Injectable
3437
3797
  }] });
3438
3798
 
3799
+ class DragRectCache {
3800
+ static _cache = new WeakMap();
3801
+ static fromElement(element) {
3802
+ const rect = this._cache.get(element) || RectExtensions.fromElement(element);
3803
+ this._cache.set(element, rect);
3804
+ return rect;
3805
+ }
3806
+ static set(element) {
3807
+ this._cache.set(element, RectExtensions.fromElement(element));
3808
+ }
3809
+ static invalidate(element) {
3810
+ this._cache.delete(element);
3811
+ }
3812
+ static invalidateAll() {
3813
+ this._cache = new WeakMap();
3814
+ }
3815
+ }
3816
+
3439
3817
  /**
3440
3818
  * Execution that redraws connections in the FComponentsStore.
3441
3819
  * It resets connectors, sets markers for temporary and snap connections,
3442
3820
  * and sets up connections based on the stored outputs and inputs.
3443
3821
  */
3444
- let RedrawConnectionsExecution = class RedrawConnectionsExecution {
3822
+ let RedrawConnections = class RedrawConnections {
3445
3823
  _mediator = inject(FMediator);
3446
3824
  _store = inject(FComponentsStore);
3447
3825
  handle(_request) {
@@ -3455,6 +3833,7 @@ let RedrawConnectionsExecution = class RedrawConnectionsExecution {
3455
3833
  this._store.fConnections.forEach((x) => {
3456
3834
  this._setupConnection(this._getOutput(x.fOutputId()), this._getInput(x.fInputId()), x);
3457
3835
  });
3836
+ DragRectCache.invalidateAll();
3458
3837
  }
3459
3838
  _getOutput(id) {
3460
3839
  const result = this._store.fOutputs.find((x) => x.fId() === id);
@@ -3479,23 +3858,23 @@ let RedrawConnectionsExecution = class RedrawConnectionsExecution {
3479
3858
  fInput.setConnected(fOutput);
3480
3859
  const line = this._getLine(fOutput, fInput, fConnection);
3481
3860
  this._setMarkers(fConnection);
3482
- fConnection.setLine(line, fOutput.fConnectableSide, fInput.fConnectableSide);
3861
+ fConnection.setLine(line);
3483
3862
  fConnection.initialize();
3484
3863
  fConnection.isSelected() ? fConnection.markAsSelected() : null;
3485
3864
  }
3486
3865
  _getLine(output, input, connection) {
3487
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._mediator.execute(new GetNormalizedConnectorRectRequest(output.hostElement)), this._mediator.execute(new GetNormalizedConnectorRectRequest(input.hostElement)), connection.fBehavior, output.fConnectableSide, input.fConnectableSide));
3866
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._mediator.execute(new GetNormalizedConnectorRectRequest(output.hostElement)), this._mediator.execute(new GetNormalizedConnectorRectRequest(input.hostElement)), connection, output.fConnectableSide, input.fConnectableSide));
3488
3867
  }
3489
3868
  _setMarkers(connection) {
3490
3869
  this._mediator.execute(new CreateConnectionMarkersRequest(connection));
3491
3870
  }
3492
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnectionsExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3493
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnectionsExecution });
3871
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnections, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3872
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnections });
3494
3873
  };
3495
- RedrawConnectionsExecution = __decorate([
3874
+ RedrawConnections = __decorate([
3496
3875
  FExecutionRegister(RedrawConnectionsRequest)
3497
- ], RedrawConnectionsExecution);
3498
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnectionsExecution, decorators: [{
3876
+ ], RedrawConnections);
3877
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnections, decorators: [{
3499
3878
  type: Injectable
3500
3879
  }] });
3501
3880
 
@@ -3613,7 +3992,7 @@ const F_CONNECTION_FEATURES = [
3613
3992
  AddSnapConnectionToStoreExecution,
3614
3993
  CreateConnectionMarkersExecution,
3615
3994
  CalculateConnectionLineByBehavior,
3616
- RedrawConnectionsExecution,
3995
+ RedrawConnections,
3617
3996
  RemoveConnectionForCreateFromStoreExecution,
3618
3997
  RemoveConnectionFromStoreExecution,
3619
3998
  RemoveConnectionMarkerFromStoreExecution,
@@ -4735,15 +5114,15 @@ class FCreateConnectionDragHandler {
4735
5114
  }
4736
5115
  }
4737
5116
  _drawConnectionForCreate(toConnectorRect, fSide) {
4738
- const line = this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._fOutputWithRect.fRect, toConnectorRect, this._connection.fBehavior, this._fOutputWithRect.fConnector.fConnectableSide, fSide));
4739
- this._connection.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, fSide);
5117
+ const line = this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._fOutputWithRect.fRect, toConnectorRect, this._connection, this._fOutputWithRect.fConnector.fConnectableSide, fSide));
5118
+ this._connection.setLine(line);
4740
5119
  this._connection.redraw();
4741
5120
  }
4742
5121
  _drawSnapConnection(fClosestInput) {
4743
5122
  if (fClosestInput) {
4744
- const line = this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._fOutputWithRect.fRect, fClosestInput.fRect, this._snapConnection.fBehavior, this._fOutputWithRect.fConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide));
5123
+ const line = this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._fOutputWithRect.fRect, fClosestInput.fRect, this._snapConnection, this._fOutputWithRect.fConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide));
4745
5124
  this._snapConnection?.show();
4746
- this._snapConnection?.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide);
5125
+ this._snapConnection?.setLine(line);
4747
5126
  this._snapConnection?.redraw();
4748
5127
  }
4749
5128
  else {
@@ -5081,18 +5460,18 @@ class FReassignTargetDragHandler {
5081
5460
  }
5082
5461
  _drawConnection(newPoint, fSide) {
5083
5462
  const line = this._calculateNewLine(newPoint, fSide);
5084
- this._connection.setLine(line, this._sourceConnectorAndRect.fConnector.fConnectableSide, fSide);
5463
+ this._connection.setLine(line);
5085
5464
  this._connection.redraw();
5086
5465
  }
5087
5466
  _calculateNewLine(targetPoint, fSide) {
5088
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._sourceConnectorRect, roundedRectFromPoint(targetPoint), this._connection.fBehavior, this._sourceConnector.fConnectableSide, fSide));
5467
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._sourceConnectorRect, roundedRectFromPoint(targetPoint), this._connection, this._sourceConnector.fConnectableSide, fSide));
5089
5468
  }
5090
5469
  _drawSnapConnection(closestConnector) {
5091
5470
  const snapConnection = this._snapConnection;
5092
5471
  if (closestConnector) {
5093
5472
  const line = this._getLineToClosestTargetConnector(closestConnector, snapConnection);
5094
5473
  snapConnection.show();
5095
- snapConnection.setLine(line, this._sourceConnector.fConnectableSide, closestConnector.fConnector.fConnectableSide);
5474
+ snapConnection.setLine(line);
5096
5475
  snapConnection.redraw();
5097
5476
  }
5098
5477
  else {
@@ -5100,7 +5479,7 @@ class FReassignTargetDragHandler {
5100
5479
  }
5101
5480
  }
5102
5481
  _getLineToClosestTargetConnector(fClosestInput, snapConnection) {
5103
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._sourceConnectorRect, fClosestInput.fRect, snapConnection.fBehavior, this._sourceConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide));
5482
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._sourceConnectorRect, fClosestInput.fRect, snapConnection, this._sourceConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide));
5104
5483
  }
5105
5484
  onPointerUp() {
5106
5485
  this._drawConnection(this._connectorRect, this._targetConnectorAndRect.fConnector.fConnectableSide);
@@ -5162,18 +5541,18 @@ class FReassignSourceDragHandler {
5162
5541
  }
5163
5542
  _drawConnection(newPoint, fSide) {
5164
5543
  const line = this._calculateNewLine(newPoint, fSide);
5165
- this._connection.setLine(line, fSide, this._targetConnectorAndRect.fConnector.fConnectableSide);
5544
+ this._connection.setLine(line);
5166
5545
  this._connection.redraw();
5167
5546
  }
5168
5547
  _calculateNewLine(sourcePoint, fSide) {
5169
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(roundedRectFromPoint(sourcePoint), this._targetConnectorAndRect.fRect, this._connection.fBehavior, fSide, this._targetConnectorAndRect.fConnector.fConnectableSide));
5548
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(roundedRectFromPoint(sourcePoint), this._targetConnectorAndRect.fRect, this._connection, fSide, this._targetConnectorAndRect.fConnector.fConnectableSide));
5170
5549
  }
5171
5550
  _drawSnapConnection(fClosestConnector) {
5172
5551
  const snapConnection = this._snapConnection;
5173
5552
  if (fClosestConnector) {
5174
5553
  const line = this._getLineToClosestSourceConnector(fClosestConnector, snapConnection);
5175
5554
  snapConnection.show();
5176
- snapConnection.setLine(line, fClosestConnector.fConnector.fConnectableSide, this._targetConnector.fConnectableSide);
5555
+ snapConnection.setLine(line);
5177
5556
  snapConnection.redraw();
5178
5557
  }
5179
5558
  else {
@@ -5181,7 +5560,7 @@ class FReassignSourceDragHandler {
5181
5560
  }
5182
5561
  }
5183
5562
  _getLineToClosestSourceConnector(fClosestInput, snapConnection) {
5184
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(fClosestInput.fRect, this._targetConnectorAndRect.fRect, snapConnection.fBehavior, fClosestInput.fConnector.fConnectableSide, this._targetConnector.fConnectableSide));
5563
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(fClosestInput.fRect, this._targetConnectorAndRect.fRect, snapConnection, fClosestInput.fConnector.fConnectableSide, this._targetConnector.fConnectableSide));
5185
5564
  }
5186
5565
  onPointerUp() {
5187
5566
  this._drawConnection(this._connectorRect, this._sourceConnectorAndRect.fConnector.fConnectableSide);
@@ -5550,10 +5929,10 @@ class BaseConnectionDragHandler {
5550
5929
  this._redrawConnection(this._recalculateConnection());
5551
5930
  }
5552
5931
  _recalculateConnection() {
5553
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(RoundedRect.fromRoundedRect(this._fOutputWithRect.fRect).addPoint(this._sourceDifference), RoundedRect.fromRoundedRect(this._fInputWithRect.fRect).addPoint(this._targetDifference), this.fConnection.fBehavior, this._fOutputWithRect.fConnector.fConnectableSide, this._fInputWithRect.fConnector.fConnectableSide));
5932
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(RoundedRect.fromRoundedRect(this._fOutputWithRect.fRect).addPoint(this._sourceDifference), RoundedRect.fromRoundedRect(this._fInputWithRect.fRect).addPoint(this._targetDifference), this.fConnection, this._fOutputWithRect.fConnector.fConnectableSide, this._fInputWithRect.fConnector.fConnectableSide));
5554
5933
  }
5555
5934
  _redrawConnection(line) {
5556
- this.fConnection.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, this._fInputWithRect.fConnector.fConnectableSide);
5935
+ this.fConnection.setLine(line);
5557
5936
  this.fConnection.redraw();
5558
5937
  }
5559
5938
  _connectorNotFoundPrefix(message) {
@@ -8900,6 +9279,7 @@ class FDraggableDirective extends FDraggableBase {
8900
9279
  this._mediator.execute(new EndDragSequenceRequest());
8901
9280
  }
8902
9281
  finalizeDragSequence() {
9282
+ DragRectCache.invalidateAll();
8903
9283
  this._mediator.execute(new EmitSelectionChangeEventRequest());
8904
9284
  this._result.clear();
8905
9285
  }
@@ -9782,7 +10162,7 @@ class MoveFrontElementsBeforeTargetElementRequest {
9782
10162
  * Execution that moves elements in the FItemsContainer before a target element.
9783
10163
  * It removes elements that should not be in front and inserts them before the target element.
9784
10164
  */
9785
- let MoveFrontElementsBeforeTargetElementExecution = class MoveFrontElementsBeforeTargetElementExecution {
10165
+ let MoveFrontElementsBeforeTargetElement = class MoveFrontElementsBeforeTargetElement {
9786
10166
  handle(request) {
9787
10167
  const elementsToMove = [];
9788
10168
  for (let i = request.targetIndex + 1; i < request.allElements.length; i++) {
@@ -9796,13 +10176,13 @@ let MoveFrontElementsBeforeTargetElementExecution = class MoveFrontElementsBefor
9796
10176
  request.fItemsContainer.insertBefore(x, request.allElements[request.targetIndex]);
9797
10177
  });
9798
10178
  }
9799
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElementExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
9800
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElementExecution });
10179
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElement, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10180
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElement });
9801
10181
  };
9802
- MoveFrontElementsBeforeTargetElementExecution = __decorate([
10182
+ MoveFrontElementsBeforeTargetElement = __decorate([
9803
10183
  FExecutionRegister(MoveFrontElementsBeforeTargetElementRequest)
9804
- ], MoveFrontElementsBeforeTargetElementExecution);
9805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElementExecution, decorators: [{
10184
+ ], MoveFrontElementsBeforeTargetElement);
10185
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElement, decorators: [{
9806
10186
  type: Injectable
9807
10187
  }] });
9808
10188
 
@@ -9994,7 +10374,7 @@ let EmitSelectionChangeEventExecution = class EmitSelectionChangeEventExecution
9994
10374
  return this._store.fDraggable.fSelectionChange;
9995
10375
  }
9996
10376
  _dragContext = inject(FDraggableDataContext);
9997
- handle(request) {
10377
+ handle(_request) {
9998
10378
  if (!this._dragContext.isSelectedChanged) {
9999
10379
  return;
10000
10380
  }
@@ -10689,10 +11069,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
10689
11069
  }] });
10690
11070
 
10691
11071
  class GetParentNodesRequest {
10692
- fNode;
11072
+ nodeOrGroup;
10693
11073
  static fToken = Symbol('GetParentNodesRequest');
10694
- constructor(fNode) {
10695
- this.fNode = fNode;
11074
+ constructor(nodeOrGroup) {
11075
+ this.nodeOrGroup = nodeOrGroup;
10696
11076
  }
10697
11077
  }
10698
11078
 
@@ -10701,15 +11081,15 @@ class GetParentNodesRequest {
10701
11081
  */
10702
11082
  let GetParentNodes = class GetParentNodes {
10703
11083
  _store = inject(FComponentsStore);
10704
- handle(request) {
10705
- return this._getParentNodes(request.fNode, new Set(), []);
11084
+ handle({ nodeOrGroup }) {
11085
+ return this._getParentNodes(nodeOrGroup, new Set(), []);
10706
11086
  }
10707
- _getParentNodes(fNode, visited, result) {
10708
- if (visited.has(fNode.fId())) {
10709
- throw new Error('Circular reference detected in the node hierarchy. Node id: ' + fNode.fId());
11087
+ _getParentNodes(nodeOrGroup, visited, result) {
11088
+ if (visited.has(nodeOrGroup.fId())) {
11089
+ throw new Error('Circular reference detected in the node hierarchy. Node id: ' + nodeOrGroup.fId());
10710
11090
  }
10711
- visited.add(fNode.fId());
10712
- const parent = this._store.fNodes.find((x) => x.fId() === fNode.fParentId());
11091
+ visited.add(nodeOrGroup.fId());
11092
+ const parent = this._store.fNodes.find((x) => x.fId() === nodeOrGroup.fParentId());
10713
11093
  if (!parent) {
10714
11094
  return result;
10715
11095
  }
@@ -10772,10 +11152,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
10772
11152
  }] });
10773
11153
 
10774
11154
  class RemoveNodeFromStoreRequest {
10775
- fComponent;
11155
+ instance;
10776
11156
  static fToken = Symbol('RemoveNodeFromStoreRequest');
10777
- constructor(fComponent) {
10778
- this.fComponent = fComponent;
11157
+ constructor(instance) {
11158
+ this.instance = instance;
10779
11159
  }
10780
11160
  }
10781
11161
 
@@ -10784,8 +11164,8 @@ class RemoveNodeFromStoreRequest {
10784
11164
  */
10785
11165
  let RemoveNodeFromStore = class RemoveNodeFromStore {
10786
11166
  _store = inject(FComponentsStore);
10787
- handle(request) {
10788
- this._store.removeComponent(this._store.fNodes, request.fComponent);
11167
+ handle({ instance }) {
11168
+ this._store.removeComponent(this._store.fNodes, instance);
10789
11169
  }
10790
11170
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveNodeFromStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10791
11171
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveNodeFromStore });
@@ -11331,28 +11711,28 @@ const F_FLOW_FEATURES = [
11331
11711
  ];
11332
11712
 
11333
11713
  class AddLineAlignmentToStoreRequest {
11334
- fComponent;
11714
+ instance;
11335
11715
  static fToken = Symbol('AddLineAlignmentToStoreRequest');
11336
- constructor(fComponent) {
11337
- this.fComponent = fComponent;
11716
+ constructor(instance) {
11717
+ this.instance = instance;
11338
11718
  }
11339
11719
  }
11340
11720
 
11341
11721
  /**
11342
11722
  * Execution that adds a line alignment to the FComponentsStore.
11343
11723
  */
11344
- let AddLineAlignmentToStoreExecution = class AddLineAlignmentToStoreExecution {
11724
+ let AddLineAlignmentToStore = class AddLineAlignmentToStore {
11345
11725
  _store = inject(FComponentsStore);
11346
- handle(request) {
11347
- this._store.fLineAlignment = request.fComponent;
11726
+ handle({ instance }) {
11727
+ this._store.fLineAlignment = instance;
11348
11728
  }
11349
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStoreExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11350
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStoreExecution });
11729
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11730
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStore });
11351
11731
  };
11352
- AddLineAlignmentToStoreExecution = __decorate([
11732
+ AddLineAlignmentToStore = __decorate([
11353
11733
  FExecutionRegister(AddLineAlignmentToStoreRequest)
11354
- ], AddLineAlignmentToStoreExecution);
11355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStoreExecution, decorators: [{
11734
+ ], AddLineAlignmentToStore);
11735
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStore, decorators: [{
11356
11736
  type: Injectable
11357
11737
  }] });
11358
11738
 
@@ -11363,18 +11743,18 @@ class RemoveLineAlignmentFromStoreRequest {
11363
11743
  /**
11364
11744
  * Execution that removes a line alignment from the FComponentsStore.
11365
11745
  */
11366
- let RemoveLineAlignmentFromStoreExecution = class RemoveLineAlignmentFromStoreExecution {
11746
+ let RemoveLineAlignmentFromStore = class RemoveLineAlignmentFromStore {
11367
11747
  _store = inject(FComponentsStore);
11368
- handle(request) {
11748
+ handle(_request) {
11369
11749
  this._store.fLineAlignment = undefined;
11370
11750
  }
11371
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStoreExecution, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11372
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStoreExecution });
11751
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11752
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStore });
11373
11753
  };
11374
- RemoveLineAlignmentFromStoreExecution = __decorate([
11754
+ RemoveLineAlignmentFromStore = __decorate([
11375
11755
  FExecutionRegister(RemoveLineAlignmentFromStoreRequest)
11376
- ], RemoveLineAlignmentFromStoreExecution);
11377
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStoreExecution, decorators: [{
11756
+ ], RemoveLineAlignmentFromStore);
11757
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStore, decorators: [{
11378
11758
  type: Injectable
11379
11759
  }] });
11380
11760
 
@@ -11383,10 +11763,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
11383
11763
  * These executions handle the addition and removal of line alignments
11384
11764
  * in the FComponentsStore.
11385
11765
  */
11386
- const F_LINE_ALIGNMENT_FEATURES = [
11387
- AddLineAlignmentToStoreExecution,
11388
- RemoveLineAlignmentFromStoreExecution,
11389
- ];
11766
+ const F_LINE_ALIGNMENT_FEATURES = [AddLineAlignmentToStore, RemoveLineAlignmentFromStore];
11390
11767
 
11391
11768
  class AddZoomToStoreRequest {
11392
11769
  fComponent;
@@ -11764,7 +12141,7 @@ const COMMON_PROVIDERS = [
11764
12141
  SortItemsByParentExecution,
11765
12142
  SortNodeLayersExecution,
11766
12143
  UpdateItemAndChildrenLayersExecution,
11767
- MoveFrontElementsBeforeTargetElementExecution,
12144
+ MoveFrontElementsBeforeTargetElement,
11768
12145
  ];
11769
12146
 
11770
12147
  let uniqueId$2 = 0;
@@ -12159,7 +12536,7 @@ class FCanvasComponent extends FCanvasBase {
12159
12536
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FCanvasComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
12160
12537
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: FCanvasComponent, isStandalone: true, selector: "f-canvas", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fCanvasChange: "fCanvasChange" }, host: { classAttribute: "f-component f-canvas" }, providers: [
12161
12538
  { provide: F_CANVAS, useExisting: FCanvasComponent },
12162
- ], viewQueries: [{ propertyName: "fGroupsContainer", first: true, predicate: ["fGroupsContainer"], descendants: true, isSignal: true }, { propertyName: "fNodesContainer", first: true, predicate: ["fNodesContainer"], descendants: true, isSignal: true }, { propertyName: "fConnectionsContainer", first: true, predicate: ["fConnectionsContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <div #fGroupsContainer>\n <ng-content select=\"[fGroup]\"></ng-content>\n </div>\n <div #fConnectionsContainer>\n <ng-content select=\"f-snap-connection\"></ng-content>\n <ng-content select=\"f-connection\"></ng-content>\n <ng-content select=\"f-connection-for-create\"></ng-content>\n </div>\n\n <div #fNodesContainer>\n <ng-content select=\"[fNode]\"></ng-content>\n </div>\n</ng-container>\n", styles: [":host{position:absolute;overflow:visible;width:100%;height:100%;left:0;top:0;transform-origin:0 0;pointer-events:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12539
+ ], viewQueries: [{ propertyName: "fGroupsContainer", first: true, predicate: ["fGroupsContainer"], descendants: true, isSignal: true }, { propertyName: "fNodesContainer", first: true, predicate: ["fNodesContainer"], descendants: true, isSignal: true }, { propertyName: "fConnectionsContainer", first: true, predicate: ["fConnectionsContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <div #fGroupsContainer>\n <ng-content select=\"[fGroup]\"></ng-content>\n </div>\n <div #fConnectionsContainer>\n <ng-content select=\"f-snap-connection\"></ng-content>\n <ng-content select=\"f-connection\"></ng-content>\n <ng-content select=\"f-connection-for-create\"></ng-content>\n </div>\n\n <div #fNodesContainer>\n <ng-content select=\"[fNode]\"></ng-content>\n </div>\n</ng-container>\n", styles: [":host{position:absolute;overflow:visible;width:100%;height:100%;left:0;top:0;transform-origin:0 0;pointer-events:none;will-change:transform;transform:translateZ(0)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12163
12540
  }
12164
12541
  __decorate([
12165
12542
  Deprecated('setScale')
@@ -12173,7 +12550,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
12173
12550
  'class': 'f-component f-canvas',
12174
12551
  }, providers: [
12175
12552
  { provide: F_CANVAS, useExisting: FCanvasComponent },
12176
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <div #fGroupsContainer>\n <ng-content select=\"[fGroup]\"></ng-content>\n </div>\n <div #fConnectionsContainer>\n <ng-content select=\"f-snap-connection\"></ng-content>\n <ng-content select=\"f-connection\"></ng-content>\n <ng-content select=\"f-connection-for-create\"></ng-content>\n </div>\n\n <div #fNodesContainer>\n <ng-content select=\"[fNode]\"></ng-content>\n </div>\n</ng-container>\n", styles: [":host{position:absolute;overflow:visible;width:100%;height:100%;left:0;top:0;transform-origin:0 0;pointer-events:none}\n"] }]
12553
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <div #fGroupsContainer>\n <ng-content select=\"[fGroup]\"></ng-content>\n </div>\n <div #fConnectionsContainer>\n <ng-content select=\"f-snap-connection\"></ng-content>\n <ng-content select=\"f-connection\"></ng-content>\n <ng-content select=\"f-connection-for-create\"></ng-content>\n </div>\n\n <div #fNodesContainer>\n <ng-content select=\"[fNode]\"></ng-content>\n </div>\n</ng-container>\n", styles: [":host{position:absolute;overflow:visible;width:100%;height:100%;left:0;top:0;transform-origin:0 0;pointer-events:none;will-change:transform;transform:translateZ(0)}\n"] }]
12177
12554
  }], propDecorators: { setZoom: [], resetZoom: [] } });
12178
12555
 
12179
12556
  const F_CANVAS_PROVIDERS = [
@@ -12410,7 +12787,7 @@ class FFlowComponent extends FFlowBase {
12410
12787
  ...COMMON_PROVIDERS,
12411
12788
  ...F_DRAGGABLE_PROVIDERS,
12412
12789
  { provide: F_FLOW, useExisting: FFlowComponent },
12413
- ], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12790
+ ], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}::ng-deep .f-connection-content{position:fixed;left:0;top:0;pointer-events:all;transform-origin:50% 50%;will-change:transform}::ng-deep .f-node,::ng-deep .f-group{position:absolute;transform-origin:center;-webkit-user-select:none;user-select:none;pointer-events:all;left:0;top:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12414
12791
  }
12415
12792
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFlowComponent, decorators: [{
12416
12793
  type: Component,
@@ -12425,7 +12802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
12425
12802
  ...COMMON_PROVIDERS,
12426
12803
  ...F_DRAGGABLE_PROVIDERS,
12427
12804
  { provide: F_FLOW, useExisting: FFlowComponent },
12428
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}\n"] }]
12805
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}::ng-deep .f-connection-content{position:fixed;left:0;top:0;pointer-events:all;transform-origin:50% 50%;will-change:transform}::ng-deep .f-node,::ng-deep .f-group{position:absolute;transform-origin:center;-webkit-user-select:none;user-select:none;pointer-events:all;left:0;top:0}\n"] }]
12429
12806
  }] });
12430
12807
 
12431
12808
  const F_FLOW_PROVIDERS = [
@@ -12639,5 +13016,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
12639
13016
  * Generated bundle index. Do not edit.
12640
13017
  */
12641
13018
 
12642
- export { AddBackgroundToStoreExecution, AddBackgroundToStoreRequest, AddCanvasToStoreExecution, AddCanvasToStoreRequest, AddConnectionForCreateToStoreExecution, AddConnectionForCreateToStoreRequest, AddConnectionMarkerToStoreExecution, AddConnectionMarkerToStoreRequest, AddConnectionToStoreExecution, AddConnectionToStoreRequest, AddDndToStoreExecution, AddDndToStoreRequest, AddFlowToStoreExecution, AddFlowToStoreRequest, AddInputToStore, AddInputToStoreRequest, AddLineAlignmentToStoreExecution, AddLineAlignmentToStoreRequest, AddNodeToStore, AddNodeToStoreRequest, AddOutletToStore, AddOutletToStoreRequest, AddOutputToStore, AddOutputToStoreRequest, AddPatternToBackgroundExecution, AddPatternToBackgroundRequest, AddSnapConnectionToStoreExecution, AddSnapConnectionToStoreRequest, AddZoomToStoreExecution, AddZoomToStoreRequest, ApplyChildResizeConstraints, ApplyChildResizeConstraintsRequest, ApplyParentResizeConstraints, ApplyParentResizeConstraintsRequest, BaseConnectionDragHandler, BuildDragHierarchy, BuildDragHierarchyRequest, BuildDragHierarchyResponse, CALCULATABLE_SIDES, CANVAS_PROVIDERS, COMMON_PROVIDERS, CONNECTABLE_SIDE_EPSILON, CONNECTIONS_PROVIDERS, CONNECTION_GRADIENT, CONNECTION_PATH, CONNECTION_TEXT, CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS, CalculateCenterBetweenPointsHandler, CalculateCenterBetweenPointsRequest, CalculateChangedRectFromDifference, CalculateChangedRectFromDifferenceRequest, CalculateClosestConnector, CalculateClosestConnectorRequest, CalculateConnectableSideByConnectedPositions, CalculateConnectableSideByConnectedPositionsRequest, CalculateConnectableSideByInternalPosition, CalculateConnectableSideByInternalPositionRequest, CalculateConnectionCenterHandler, CalculateConnectionCenterRequest, CalculateConnectionLineByBehavior, CalculateConnectionLineByBehaviorRequest, CalculateConnectorsConnectableSides, CalculateConnectorsConnectableSidesRequest, CalculateDirectChildrenUnionRect, CalculateDirectChildrenUnionRectRequest, CalculateDragLimits, CalculateDragLimitsRequest, CalculateFlowPointFromMinimapPointExecution, CalculateFlowPointFromMinimapPointRequest, CalculateInputConnections, CalculateInputConnectionsRequest, CalculateNodesBoundingBox, CalculateNodesBoundingBoxNormalizedPosition, CalculateNodesBoundingBoxNormalizedPositionRequest, CalculateNodesBoundingBoxRequest, CalculateOutputConnections, CalculateOutputConnectionsRequest, CalculateResizeLimits, CalculateResizeLimitsRequest, CalculateSourceConnectorsToConnect, CalculateSourceConnectorsToConnectRequest, CalculateTargetConnectorsToConnect, CalculateTargetConnectorsToConnectRequest, CenterGroupOrNodeExecution, CenterGroupOrNodeRequest, ClearSelectionExecution, ClearSelectionRequest, ConnectionContentLayoutEngine, CreateConnectionFromOutputPreparation, CreateConnectionFromOutputPreparationRequest, CreateConnectionMarkersExecution, CreateConnectionMarkersRequest, CreateConnectionPreparation, CreateConnectionPreparationRequest, CreateDragModelFromSelection, CreateDragModelFromSelectionRequest, CreateInputConnectionHandlerAndSetToNodeHandler, CreateInputConnectionHandlerAndSetToNodeHandlerRequest, CreateOutputConnectionHandlerAndSetToNodeHandler, CreateOutputConnectionHandlerAndSetToNodeHandlerRequest, CreateSnapLines, CreateSnapLinesRequest, CreateSummaryDragHandler, CreateSummaryDragHandlerRequest, DRAG_AND_DROP_COMMON_PROVIDERS, Deprecated, DragAndDropBase, DragConstraintPipeline, DropToGroupFinalize, DropToGroupFinalizeRequest, DropToGroupPreparation, DropToGroupPreparationRequest, EFConnectableSide, EFConnectionBehavior, EFConnectionType, EFMarkerType, EFResizeHandleType, EFZoomDirection, EmitSelectionChangeEventExecution, EmitSelectionChangeEventRequest, EndDragSequenceExecution, EndDragSequenceRequest, EventExtensions, ExternalRectConstraint, FBackgroundBase, FBackgroundComponent, FBezierPathBuilder, FCanvasBase, FCanvasChangeEvent, FCanvasComponent, FCanvasDragHandler, FCanvasMoveFinalizeExecution, FCanvasMoveFinalizeRequest, FCanvasMovePreparationExecution, FCanvasMovePreparationRequest, FChannel, FChannelHub, FCirclePatternComponent, FComponentsStore, FConnectionBase, FConnectionCenterDirective, FConnectionComponent, FConnectionContent, FConnectionDragHandleEndComponent, FConnectionDragHandleStartComponent, FConnectionFactory, FConnectionForCreateComponent, FConnectionGradientComponent, FConnectionPathComponent, FConnectionSelectionComponent, FConnectionTextComponent, FConnectionTextPathDirective, FConnectorBase, FConnectorsStore, FCreateConnectionDragHandler, FCreateConnectionDragHandlerPreparationExecution, FCreateConnectionDragHandlerPreparationRequest, FCreateConnectionEvent, FCreateConnectionFinalizeExecution, FCreateConnectionFinalizeRequest, FCreateConnectionFromOutletPreparationExecution, FCreateConnectionFromOutletPreparationRequest, FCreateNodeEvent, FDragBlockerDirective, FDragHandleDirective, FDragHandlerResult, FDragStartedEvent, FDraggableBase, FDraggableDataContext, FDraggableDirective, FDropToGroupEvent, FExternalItemBase, FExternalItemCreatePlaceholderExecution, FExternalItemCreatePlaceholderRequest, FExternalItemCreatePreviewExecution, FExternalItemCreatePreviewRequest, FExternalItemDirective, FExternalItemDragHandler, FExternalItemFinalizeExecution, FExternalItemFinalizeRequest, FExternalItemPlaceholderDirective, FExternalItemPreparationExecution, FExternalItemPreparationRequest, FExternalItemPreviewDirective, FExternalItemService, FFlowBase, FFlowComponent, FFlowModule, FGroupDirective, FLineAlignmentBase, FLineAlignmentComponent, FMarkerBase, FMarkerDirective, FMinimapCanvasDirective, FMinimapComponent, FMinimapData, FMinimapDragHandler, FMinimapFlowDirective, FMinimapViewDirective, FMoveNodesEvent, FNodeBase, FNodeDirective, FNodeDropToGroupDragHandler, FNodeInputBase, FNodeInputDirective, FNodeIntersectedWithConnections, FNodeMoveFinalizeExecution, FNodeMoveFinalizeRequest, FNodeMovePreparationExecution, FNodeMovePreparationRequest, FNodeOutletBase, FNodeOutletDirective, FNodeOutputBase, FNodeOutputDirective, FNodeRotateDragHandler, FNodeRotateFinalizeExecution, FNodeRotateFinalizeRequest, FNodeRotatePreparationExecution, FNodeRotatePreparationRequest, FReassignConnectionDragHandler, FReassignConnectionEvent, FReassignConnectionFinalizeExecution, FReassignConnectionFinalizeRequest, FReassignConnectionPreparationExecution, FReassignConnectionPreparationRequest, FReassignSourceDragHandler, FReassignTargetDragHandler, FRectPatternComponent, FResizeChannel, FResizeHandleDirective, FRotateHandleDirective, FSegmentPathBuilder, FSelectionAreaBase, FSelectionAreaComponent, FSelectionChangeEvent, FSingleSelectExecution, FSingleSelectRequest, FSnapConnectionComponent, FSourceConnectorBase, FStraightPathBuilder, FZoomBase, FZoomDirective, F_AFTER_MAIN_PLUGIN, F_BACKGROUND, F_BACKGROUND_FEATURES, F_BACKGROUND_PATTERN, F_BACKGROUND_PROVIDERS, F_BEFORE_MAIN_PLUGIN, F_CANVAS, F_CANVAS_FEATURES, F_CANVAS_PROVIDERS, F_CONNECTION_BUILDERS, F_CONNECTION_FEATURES, F_CONNECTION_IDENTIFIERS, F_CONNECTION_PROVIDERS, F_CONNECTORS_FEATURES, F_CONNECTORS_PROVIDERS, F_CSS_CLASS, F_DRAGGABLE_FEATURES, F_DRAGGABLE_PROVIDERS, F_EXTERNAL_ITEM, F_EXTERNAL_ITEM_DRAG_AND_DROP_PROVIDERS, F_EXTERNAL_ITEM_PROVIDERS, F_FLOW, F_FLOW_FEATURES, F_FLOW_PROVIDERS, F_LINE_ALIGNMENT, F_LINE_ALIGNMENT_FEATURES, F_LINE_ALIGNMENT_PROVIDERS, F_MARKER, F_MINIMAP_DRAG_AND_DROP_PROVIDERS, F_MINIMAP_PROVIDERS, F_NODE, F_NODE_FEATURES, F_NODE_INPUT, F_NODE_OUTLET, F_NODE_OUTPUT, F_NODE_PROVIDERS, F_SELECTED_CLASS, F_SELECTION_AREA_DRAG_AND_DROP_PROVIDERS, F_SELECTION_AREA_PROVIDERS, F_SELECTION_FEATURES, F_STORAGE_PROVIDERS, F_ZOOM, F_ZOOM_FEATURES, F_ZOOM_PROVIDERS, F_ZOOM_TAG, FindConnectableConnectorUsingPriorityAndPositionExecution, FindConnectableConnectorUsingPriorityAndPositionRequest, FitToChildNodesAndGroups, FitToChildNodesAndGroupsRequest, FitToFlowExecution, FitToFlowRequest, GET_FLOW_STATE_PROVIDERS, GetCanBeSelectedItemsExecution, GetCanBeSelectedItemsRequest, GetCanvasExecution, GetCanvasRequest, GetChildNodeIds, GetChildNodeIdsRequest, GetConnectorAndRect, GetConnectorAndRectRequest, GetCurrentSelectionExecution, GetCurrentSelectionRequest, GetDeepChildrenNodesAndGroupsExecution, GetDeepChildrenNodesAndGroupsRequest, GetElementRoundedRectExecution, GetElementRoundedRectRequest, GetFirstConnectableOutputExecution, GetFirstConnectableOutputRequest, GetFlowExecution, GetFlowHostElementExecution, GetFlowHostElementRequest, GetFlowRequest, GetFlowStateConnectionsExecution, GetFlowStateConnectionsRequest, GetFlowStateExecution, GetFlowStateNodesExecution, GetFlowStateNodesRequest, GetFlowStateRequest, GetNodeBoundingIncludePaddings, GetNodeBoundingIncludePaddingsRequest, GetNodeBoundingIncludePaddingsResponse, GetNodePadding, GetNodePaddingRequest, GetNormalizedConnectorRectExecution, GetNormalizedConnectorRectRequest, GetNormalizedElementRectExecution, GetNormalizedElementRectRequest, GetNormalizedParentNodeRectExecution, GetNormalizedParentNodeRectRequest, GetNormalizedPointExecution, GetNormalizedPointRequest, GetParentNodes, GetParentNodesRequest, IMouseEvent, IPointerEvent, IPointerUpEvent, ITouchDownEvent, ITouchMoveEvent, InitializeDragSequenceExecution, InitializeDragSequenceRequest, InputCanvasPositionExecution, InputCanvasPositionRequest, InputCanvasScaleExecution, InputCanvasScaleRequest, IsArrayHasParentNodeExecution, IsArrayHasParentNodeRequest, IsConnectionUnderNodeExecution, IsConnectionUnderNodeRequest, IsDragStarted, IsDragStartedRequest, ListenCountChangesExecution, ListenCountChangesRequest, ListenDataChangesExecution, ListenDataChangesRequest, ListenTransformChangesExecution, ListenTransformChangesRequest, LogExecutionTime, MINIMAP_DRAG_FINALIZE_PROVIDERS, MINIMAP_DRAG_PREPARATION_PROVIDERS, MOUSE_EVENT_IGNORE_TIME, MarkConnectableConnectors, MarkConnectableConnectorsRequest, MinimapCalculateSvgScaleAndViewBoxExecution, MinimapCalculateSvgScaleAndViewBoxRequest, MinimapCalculateViewBoxExecution, MinimapCalculateViewBoxRequest, MinimapDragFinalizeExecution, MinimapDragFinalizeRequest, MinimapDragPreparationExecution, MinimapDragPreparationRequest, MinimapDrawNodesExecution, MinimapDrawNodesRequest, MoveDragHandler, MoveFrontElementsBeforeTargetElementExecution, MoveFrontElementsBeforeTargetElementRequest, MoveSummaryDragHandler, NODE_DROP_TO_GROUP_PROVIDERS, NODE_PROVIDERS, NODE_RESIZE_PROVIDERS, NODE_ROTATE_PROVIDERS, NodeResizeDragHandler, NodeResizeFinalize, NodeResizeFinalizeRequest, NodeResizePreparation, NodeResizePreparationRequest, NotifyDataChangedExecution, NotifyDataChangedRequest, NotifyTransformChangedExecution, NotifyTransformChangedRequest, OnPointerMoveExecution, OnPointerMoveRequest, Polyline, PolylineContentAlign, PolylineContentPlace, PolylineSampler, PrepareDragSequenceExecution, PrepareDragSequenceRequest, PreventDefaultIsExternalItemExecution, PreventDefaultIsExternalItemRequest, RESIZE_DIRECTIONS, RectConstraint, RedrawCanvasWithAnimationExecution, RedrawCanvasWithAnimationRequest, RedrawConnectionsExecution, RedrawConnectionsRequest, RemoveBackgroundFromStoreExecution, RemoveBackgroundFromStoreRequest, RemoveCanvasFromStoreExecution, RemoveCanvasFromStoreRequest, RemoveConnectionForCreateFromStoreExecution, RemoveConnectionForCreateFromStoreRequest, RemoveConnectionFromStoreExecution, RemoveConnectionFromStoreRequest, RemoveConnectionMarkerFromStoreExecution, RemoveConnectionMarkerFromStoreRequest, RemoveDndFromStoreExecution, RemoveDndFromStoreRequest, RemoveFlowFromStoreExecution, RemoveFlowFromStoreRequest, RemoveInputFromStore, RemoveInputFromStoreRequest, RemoveLineAlignmentFromStoreExecution, RemoveLineAlignmentFromStoreRequest, RemoveNodeFromStore, RemoveNodeFromStoreRequest, RemoveOutletFromStoreExecution, RemoveOutletFromStoreRequest, RemoveOutputFromStoreExecution, RemoveOutputFromStoreRequest, RemoveSnapConnectionFromStoreExecution, RemoveSnapConnectionFromStoreRequest, RemoveZoomFromStoreExecution, RemoveZoomFromStoreRequest, ResetScaleAndCenterExecution, ResetScaleAndCenterRequest, ResetScaleExecution, ResetScaleRequest, ResetZoomExecution, ResetZoomRequest, SINGLE_SELECT_PROVIDERS, SelectAllExecution, SelectAllRequest, SelectAndUpdateNodeLayerExecution, SelectAndUpdateNodeLayerRequest, SelectExecution, SelectRequest, SelectionAreaDragHandle, SelectionAreaFinalizeExecution, SelectionAreaFinalizeRequest, SelectionAreaPreparationExecution, SelectionAreaPreparationRequest, SetBackgroundTransformExecution, SetBackgroundTransformRequest, SetZoomExecution, SetZoomRequest, SnapLineElement, SnapLineService, SnapLinesDragHandler, SnapToGrid, SortContainersForDropByLayer, SortContainersForDropByLayerRequest, SortItemLayersExecution, SortItemLayersRequest, SortItemsByParentExecution, SortItemsByParentRequest, SortNodeLayersExecution, SortNodeLayersRequest, SourceConnectionDragHandler, SourceTargetConnectionDragHandler, StartDragSequenceExecution, StartDragSequenceRequest, TargetConnectionDragHandler, UnmarkConnectableConnectors, UnmarkConnectableConnectorsRequest, UpdateItemAndChildrenLayersExecution, UpdateItemAndChildrenLayersRequest, UpdateNodeWhenStateOrSizeChanged, UpdateNodeWhenStateOrSizeChangedRequest, UpdateScaleExecution, UpdateScaleRequest, createSVGElement, debounceTime, defaultEventTrigger, determineSide, expandRectFromBaseline, fixedCenterBehavior, fixedOutboundBehavior, floatingBehavior, getExternalItem, getMarkerEndId, getMarkerSelectedEndId, getMarkerSelectedStartId, getMarkerStartId, infinityMinMax, isCalculateMode, isClosestConnectorInsideSnapThreshold, isDragBlocker, isDragHandleEnd, isDragHandleStart, isExternalItem, isMobile, isNode, isNodeOutlet, isNodeOutput, isPointerInsideStartOrEndDragHandles, isRotateHandle, isValidEventTrigger, mixinChangeSelection, mixinChangeVisibility, notifyOnStart, roundedRectFromPoint, stringAttribute, transitionEnd };
13019
+ export { AdaptiveCurveBuilder, AddBackgroundToStoreExecution, AddBackgroundToStoreRequest, AddCanvasToStoreExecution, AddCanvasToStoreRequest, AddConnectionForCreateToStoreExecution, AddConnectionForCreateToStoreRequest, AddConnectionMarkerToStoreExecution, AddConnectionMarkerToStoreRequest, AddConnectionToStoreExecution, AddConnectionToStoreRequest, AddDndToStoreExecution, AddDndToStoreRequest, AddFlowToStoreExecution, AddFlowToStoreRequest, AddInputToStore, AddInputToStoreRequest, AddLineAlignmentToStore, AddLineAlignmentToStoreRequest, AddNodeToStore, AddNodeToStoreRequest, AddOutletToStore, AddOutletToStoreRequest, AddOutputToStore, AddOutputToStoreRequest, AddPatternToBackgroundExecution, AddPatternToBackgroundRequest, AddSnapConnectionToStoreExecution, AddSnapConnectionToStoreRequest, AddZoomToStoreExecution, AddZoomToStoreRequest, ApplyChildResizeConstraints, ApplyChildResizeConstraintsRequest, ApplyParentResizeConstraints, ApplyParentResizeConstraintsRequest, BaseConnectionDragHandler, BuildDragHierarchy, BuildDragHierarchyRequest, BuildDragHierarchyResponse, CALCULATABLE_SIDES, CANVAS_PROVIDERS, COMMON_PROVIDERS, CONNECTABLE_SIDE_EPSILON, CONNECTIONS_PROVIDERS, CONNECTION_GRADIENT, CONNECTION_PATH, CONNECTION_TEXT, CREATE_MOVE_NODE_DRAG_MODEL_FROM_SELECTION_PROVIDERS, CalculateCenterBetweenPointsHandler, CalculateCenterBetweenPointsRequest, CalculateChangedRectFromDifference, CalculateChangedRectFromDifferenceRequest, CalculateClosestConnector, CalculateClosestConnectorRequest, CalculateConnectableSideByConnectedPositions, CalculateConnectableSideByConnectedPositionsRequest, CalculateConnectableSideByInternalPosition, CalculateConnectableSideByInternalPositionRequest, CalculateConnectionCenterHandler, CalculateConnectionCenterRequest, CalculateConnectionLineByBehavior, CalculateConnectionLineByBehaviorRequest, CalculateConnectorsConnectableSides, CalculateConnectorsConnectableSidesRequest, CalculateDirectChildrenUnionRect, CalculateDirectChildrenUnionRectRequest, CalculateDragLimits, CalculateDragLimitsRequest, CalculateFlowPointFromMinimapPointExecution, CalculateFlowPointFromMinimapPointRequest, CalculateInputConnections, CalculateInputConnectionsRequest, CalculateNodesBoundingBox, CalculateNodesBoundingBoxNormalizedPosition, CalculateNodesBoundingBoxNormalizedPositionRequest, CalculateNodesBoundingBoxRequest, CalculateOutputConnections, CalculateOutputConnectionsRequest, CalculateResizeLimits, CalculateResizeLimitsRequest, CalculateSourceConnectorsToConnect, CalculateSourceConnectorsToConnectRequest, CalculateTargetConnectorsToConnect, CalculateTargetConnectorsToConnectRequest, CenterGroupOrNodeExecution, CenterGroupOrNodeRequest, ClearSelectionExecution, ClearSelectionRequest, ConnectionContentLayoutEngine, CreateConnectionFromOutputPreparation, CreateConnectionFromOutputPreparationRequest, CreateConnectionMarkersExecution, CreateConnectionMarkersRequest, CreateConnectionPreparation, CreateConnectionPreparationRequest, CreateDragModelFromSelection, CreateDragModelFromSelectionRequest, CreateInputConnectionHandlerAndSetToNodeHandler, CreateInputConnectionHandlerAndSetToNodeHandlerRequest, CreateOutputConnectionHandlerAndSetToNodeHandler, CreateOutputConnectionHandlerAndSetToNodeHandlerRequest, CreateSnapLines, CreateSnapLinesRequest, CreateSummaryDragHandler, CreateSummaryDragHandlerRequest, DRAG_AND_DROP_COMMON_PROVIDERS, Deprecated, DragAndDropBase, DragConstraintPipeline, DragRectCache, DropToGroupFinalize, DropToGroupFinalizeRequest, DropToGroupPreparation, DropToGroupPreparationRequest, EFConnectableSide, EFConnectionBehavior, EFConnectionConnectableSide, EFConnectionType, EFMarkerType, EFResizeHandleType, EFZoomDirection, EmitSelectionChangeEventExecution, EmitSelectionChangeEventRequest, EndDragSequenceExecution, EndDragSequenceRequest, EventExtensions, ExternalRectConstraint, FBackgroundBase, FBackgroundComponent, FBezierPathBuilder, FCanvasBase, FCanvasChangeEvent, FCanvasComponent, FCanvasDragHandler, FCanvasMoveFinalizeExecution, FCanvasMoveFinalizeRequest, FCanvasMovePreparationExecution, FCanvasMovePreparationRequest, FChannel, FChannelHub, FCirclePatternComponent, FComponentsStore, FConnectionBase, FConnectionCenterDirective, FConnectionComponent, FConnectionContent, FConnectionDragHandleEndComponent, FConnectionDragHandleStartComponent, FConnectionFactory, FConnectionForCreateComponent, FConnectionGradientComponent, FConnectionPathComponent, FConnectionSelectionComponent, FConnectionTextComponent, FConnectionTextPathDirective, FConnectorBase, FConnectorsStore, FCreateConnectionDragHandler, FCreateConnectionDragHandlerPreparationExecution, FCreateConnectionDragHandlerPreparationRequest, FCreateConnectionEvent, FCreateConnectionFinalizeExecution, FCreateConnectionFinalizeRequest, FCreateConnectionFromOutletPreparationExecution, FCreateConnectionFromOutletPreparationRequest, FCreateNodeEvent, FDragBlockerDirective, FDragHandleDirective, FDragHandlerResult, FDragStartedEvent, FDraggableBase, FDraggableDataContext, FDraggableDirective, FDropToGroupEvent, FExternalItemBase, FExternalItemCreatePlaceholderExecution, FExternalItemCreatePlaceholderRequest, FExternalItemCreatePreviewExecution, FExternalItemCreatePreviewRequest, FExternalItemDirective, FExternalItemDragHandler, FExternalItemFinalizeExecution, FExternalItemFinalizeRequest, FExternalItemPlaceholderDirective, FExternalItemPreparationExecution, FExternalItemPreparationRequest, FExternalItemPreviewDirective, FExternalItemService, FFlowBase, FFlowComponent, FFlowModule, FGroupDirective, FLineAlignmentBase, FLineAlignmentComponent, FMarkerBase, FMarkerDirective, FMinimapCanvasDirective, FMinimapComponent, FMinimapData, FMinimapDragHandler, FMinimapFlowDirective, FMinimapViewDirective, FMoveNodesEvent, FNodeBase, FNodeDirective, FNodeDropToGroupDragHandler, FNodeInputBase, FNodeInputDirective, FNodeIntersectedWithConnections, FNodeMoveFinalizeExecution, FNodeMoveFinalizeRequest, FNodeMovePreparationExecution, FNodeMovePreparationRequest, FNodeOutletBase, FNodeOutletDirective, FNodeOutputBase, FNodeOutputDirective, FNodeRotateDragHandler, FNodeRotateFinalizeExecution, FNodeRotateFinalizeRequest, FNodeRotatePreparationExecution, FNodeRotatePreparationRequest, FReassignConnectionDragHandler, FReassignConnectionEvent, FReassignConnectionFinalizeExecution, FReassignConnectionFinalizeRequest, FReassignConnectionPreparationExecution, FReassignConnectionPreparationRequest, FReassignSourceDragHandler, FReassignTargetDragHandler, FRectPatternComponent, FResizeChannel, FResizeHandleDirective, FRotateHandleDirective, FSegmentPathBuilder, FSelectionAreaBase, FSelectionAreaComponent, FSelectionChangeEvent, FSingleSelectExecution, FSingleSelectRequest, FSnapConnectionComponent, FSourceConnectorBase, FStraightPathBuilder, FZoomBase, FZoomDirective, F_AFTER_MAIN_PLUGIN, F_BACKGROUND, F_BACKGROUND_FEATURES, F_BACKGROUND_PATTERN, F_BACKGROUND_PROVIDERS, F_BEFORE_MAIN_PLUGIN, F_CANVAS, F_CANVAS_FEATURES, F_CANVAS_PROVIDERS, F_CONNECTION_BUILDERS, F_CONNECTION_FEATURES, F_CONNECTION_IDENTIFIERS, F_CONNECTION_PROVIDERS, F_CONNECTORS_FEATURES, F_CONNECTORS_PROVIDERS, F_CSS_CLASS, F_DRAGGABLE_FEATURES, F_DRAGGABLE_PROVIDERS, F_EXTERNAL_ITEM, F_EXTERNAL_ITEM_DRAG_AND_DROP_PROVIDERS, F_EXTERNAL_ITEM_PROVIDERS, F_FLOW, F_FLOW_FEATURES, F_FLOW_PROVIDERS, F_LINE_ALIGNMENT, F_LINE_ALIGNMENT_FEATURES, F_LINE_ALIGNMENT_PROVIDERS, F_MARKER, F_MINIMAP_DRAG_AND_DROP_PROVIDERS, F_MINIMAP_PROVIDERS, F_NODE, F_NODE_FEATURES, F_NODE_INPUT, F_NODE_OUTLET, F_NODE_OUTPUT, F_NODE_PROVIDERS, F_SELECTED_CLASS, F_SELECTION_AREA_DRAG_AND_DROP_PROVIDERS, F_SELECTION_AREA_PROVIDERS, F_SELECTION_FEATURES, F_STORAGE_PROVIDERS, F_ZOOM, F_ZOOM_FEATURES, F_ZOOM_PROVIDERS, F_ZOOM_TAG, FindConnectableConnectorUsingPriorityAndPositionExecution, FindConnectableConnectorUsingPriorityAndPositionRequest, FitToChildNodesAndGroups, FitToChildNodesAndGroupsRequest, FitToFlowExecution, FitToFlowRequest, GET_FLOW_STATE_PROVIDERS, GetCanBeSelectedItemsExecution, GetCanBeSelectedItemsRequest, GetCanvasExecution, GetCanvasRequest, GetChildNodeIds, GetChildNodeIdsRequest, GetConnectorAndRect, GetConnectorAndRectRequest, GetCurrentSelectionExecution, GetCurrentSelectionRequest, GetDeepChildrenNodesAndGroupsExecution, GetDeepChildrenNodesAndGroupsRequest, GetElementRoundedRectExecution, GetElementRoundedRectRequest, GetFirstConnectableOutputExecution, GetFirstConnectableOutputRequest, GetFlowExecution, GetFlowHostElementExecution, GetFlowHostElementRequest, GetFlowRequest, GetFlowStateConnectionsExecution, GetFlowStateConnectionsRequest, GetFlowStateExecution, GetFlowStateNodesExecution, GetFlowStateNodesRequest, GetFlowStateRequest, GetNodeBoundingIncludePaddings, GetNodeBoundingIncludePaddingsRequest, GetNodeBoundingIncludePaddingsResponse, GetNodePadding, GetNodePaddingRequest, GetNormalizedConnectorRectExecution, GetNormalizedConnectorRectRequest, GetNormalizedElementRectExecution, GetNormalizedElementRectRequest, GetNormalizedParentNodeRectExecution, GetNormalizedParentNodeRectRequest, GetNormalizedPointExecution, GetNormalizedPointRequest, GetParentNodes, GetParentNodesRequest, IMouseEvent, IPointerEvent, IPointerUpEvent, ITouchDownEvent, ITouchMoveEvent, InitializeDragSequenceExecution, InitializeDragSequenceRequest, InputCanvasPositionExecution, InputCanvasPositionRequest, InputCanvasScaleExecution, InputCanvasScaleRequest, IsArrayHasParentNodeExecution, IsArrayHasParentNodeRequest, IsConnectionUnderNodeExecution, IsConnectionUnderNodeRequest, IsDragStarted, IsDragStartedRequest, ListenCountChangesExecution, ListenCountChangesRequest, ListenDataChangesExecution, ListenDataChangesRequest, ListenTransformChangesExecution, ListenTransformChangesRequest, LogExecutionTime, MINIMAP_DRAG_FINALIZE_PROVIDERS, MINIMAP_DRAG_PREPARATION_PROVIDERS, MOUSE_EVENT_IGNORE_TIME, MarkConnectableConnectors, MarkConnectableConnectorsRequest, MinimapCalculateSvgScaleAndViewBoxExecution, MinimapCalculateSvgScaleAndViewBoxRequest, MinimapCalculateViewBoxExecution, MinimapCalculateViewBoxRequest, MinimapDragFinalizeExecution, MinimapDragFinalizeRequest, MinimapDragPreparationExecution, MinimapDragPreparationRequest, MinimapDrawNodesExecution, MinimapDrawNodesRequest, MoveDragHandler, MoveFrontElementsBeforeTargetElement, MoveFrontElementsBeforeTargetElementRequest, MoveSummaryDragHandler, NODE_DROP_TO_GROUP_PROVIDERS, NODE_PROVIDERS, NODE_RESIZE_PROVIDERS, NODE_ROTATE_PROVIDERS, NodeResizeDragHandler, NodeResizeFinalize, NodeResizeFinalizeRequest, NodeResizePreparation, NodeResizePreparationRequest, NotifyDataChangedExecution, NotifyDataChangedRequest, NotifyTransformChangedExecution, NotifyTransformChangedRequest, OnPointerMoveExecution, OnPointerMoveRequest, Polyline, PolylineContentAlign, PolylineContentPlace, PolylineSampler, PrepareDragSequenceExecution, PrepareDragSequenceRequest, PreventDefaultIsExternalItemExecution, PreventDefaultIsExternalItemRequest, RESIZE_DIRECTIONS, RectConstraint, RedrawCanvasWithAnimationExecution, RedrawCanvasWithAnimationRequest, RedrawConnections, RedrawConnectionsRequest, RemoveBackgroundFromStoreExecution, RemoveBackgroundFromStoreRequest, RemoveCanvasFromStoreExecution, RemoveCanvasFromStoreRequest, RemoveConnectionForCreateFromStoreExecution, RemoveConnectionForCreateFromStoreRequest, RemoveConnectionFromStoreExecution, RemoveConnectionFromStoreRequest, RemoveConnectionMarkerFromStoreExecution, RemoveConnectionMarkerFromStoreRequest, RemoveDndFromStoreExecution, RemoveDndFromStoreRequest, RemoveFlowFromStoreExecution, RemoveFlowFromStoreRequest, RemoveInputFromStore, RemoveInputFromStoreRequest, RemoveLineAlignmentFromStore, RemoveLineAlignmentFromStoreRequest, RemoveNodeFromStore, RemoveNodeFromStoreRequest, RemoveOutletFromStoreExecution, RemoveOutletFromStoreRequest, RemoveOutputFromStoreExecution, RemoveOutputFromStoreRequest, RemoveSnapConnectionFromStoreExecution, RemoveSnapConnectionFromStoreRequest, RemoveZoomFromStoreExecution, RemoveZoomFromStoreRequest, ResetScaleAndCenterExecution, ResetScaleAndCenterRequest, ResetScaleExecution, ResetScaleRequest, ResetZoomExecution, ResetZoomRequest, SINGLE_SELECT_PROVIDERS, SelectAllExecution, SelectAllRequest, SelectAndUpdateNodeLayerExecution, SelectAndUpdateNodeLayerRequest, SelectExecution, SelectRequest, SelectionAreaDragHandle, SelectionAreaFinalizeExecution, SelectionAreaFinalizeRequest, SelectionAreaPreparationExecution, SelectionAreaPreparationRequest, SetBackgroundTransformExecution, SetBackgroundTransformRequest, SetZoomExecution, SetZoomRequest, SnapLineElement, SnapLineService, SnapLinesDragHandler, SnapToGrid, SortContainersForDropByLayer, SortContainersForDropByLayerRequest, SortItemLayersExecution, SortItemLayersRequest, SortItemsByParentExecution, SortItemsByParentRequest, SortNodeLayersExecution, SortNodeLayersRequest, SourceConnectionDragHandler, SourceTargetConnectionDragHandler, StartDragSequenceExecution, StartDragSequenceRequest, TargetConnectionDragHandler, UnmarkConnectableConnectors, UnmarkConnectableConnectorsRequest, UpdateItemAndChildrenLayersExecution, UpdateItemAndChildrenLayersRequest, UpdateNodeWhenStateOrSizeChanged, UpdateNodeWhenStateOrSizeChangedRequest, UpdateScaleExecution, UpdateScaleRequest, createSVGElement, debounceTime, defaultEventTrigger, determineSide, expandRectFromBaseline, fixedCenterBehavior, fixedOutboundBehavior, floatingBehavior, getExternalItem, getMarkerEndId, getMarkerSelectedEndId, getMarkerSelectedStartId, getMarkerStartId, infinityMinMax, isCalculateMode, isClosestConnectorInsideSnapThreshold, isDragBlocker, isDragHandleEnd, isDragHandleStart, isExternalItem, isMobile, isNode, isNodeOutlet, isNodeOutput, isPointerInsideStartOrEndDragHandles, isRotateHandle, isValidEventTrigger, mixinChangeSelection, mixinChangeVisibility, notifyOnStart, roundedRectFromPoint, stringAttribute, transitionEnd };
12643
13020
  //# sourceMappingURL=foblex-flow.mjs.map