@foblex/flow 17.8.5 → 17.8.6

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 (111) hide show
  1. package/domain/drag-rect-cache.d.ts +8 -0
  2. package/domain/f-background/providers.d.ts +1 -1
  3. package/domain/f-canvas/providers.d.ts +1 -1
  4. package/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior-request.d.ts +7 -7
  5. package/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior.d.ts +37 -3
  6. package/domain/f-connection/calculate-connection-line-by-behavior/index.d.ts +4 -3
  7. package/domain/f-connection/calculate-connection-line-by-behavior/models/calculate-behavior-request.d.ts +8 -0
  8. package/domain/f-connection/calculate-connection-line-by-behavior/{fixed-center-behavior.d.ts → utils/fixed-center-behavior.d.ts} +2 -2
  9. package/domain/f-connection/calculate-connection-line-by-behavior/{fixed-outbound-behavior.d.ts → utils/fixed-outbound-behavior.d.ts} +2 -2
  10. package/domain/f-connection/calculate-connection-line-by-behavior/{floating-behavior.d.ts → utils/floating-behavior.d.ts} +2 -2
  11. package/domain/f-connection/providers.d.ts +2 -2
  12. package/domain/f-connection/redraw-connections/index.d.ts +1 -1
  13. package/domain/f-connection/redraw-connections/{redraw-connections.execution.d.ts → redraw-connections.d.ts} +3 -3
  14. package/domain/f-draggable/emit-selection-change-event/emit-selection-change-event.execution.d.ts +1 -1
  15. package/domain/f-flow/providers.d.ts +1 -1
  16. package/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store-request.d.ts +2 -2
  17. 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
  18. package/domain/f-line-alignment/add-line-alignment-to-store/index.d.ts +1 -1
  19. package/domain/f-line-alignment/providers.d.ts +3 -3
  20. package/domain/f-line-alignment/remove-line-alignment-from-store/index.d.ts +1 -1
  21. 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
  22. package/domain/f-node/get-parent-nodes/get-parent-nodes.d.ts +1 -1
  23. package/domain/f-node/get-parent-nodes/get-parent-nodes.request.d.ts +2 -2
  24. package/domain/f-node/remove-node-from-store/remove-node-from-store-request.d.ts +2 -2
  25. package/domain/f-node/remove-node-from-store/remove-node-from-store.d.ts +1 -1
  26. package/domain/f-zoom/providers.d.ts +1 -1
  27. package/domain/index.d.ts +1 -0
  28. package/domain/providers.d.ts +4 -3
  29. package/domain/update-item-and-children-layers/move-front-elements-before-target-element/index.d.ts +2 -2
  30. 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
  31. 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
  32. package/esm2022/domain/drag-rect-cache.mjs +19 -0
  33. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior-request.mjs +4 -4
  34. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/calculate-connection-line-by-behavior.mjs +126 -13
  35. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/index.mjs +5 -4
  36. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/models/calculate-behavior-request.mjs +2 -0
  37. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/utils/fixed-center-behavior.mjs +12 -0
  38. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/utils/fixed-outbound-behavior.mjs +31 -0
  39. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/utils/floating-behavior.mjs +22 -0
  40. package/esm2022/domain/f-connection/providers.mjs +3 -3
  41. package/esm2022/domain/f-connection/redraw-connections/index.mjs +2 -2
  42. package/esm2022/domain/f-connection/redraw-connections/redraw-connections.mjs +75 -0
  43. package/esm2022/domain/f-draggable/emit-selection-change-event/emit-selection-change-event-request.mjs +1 -1
  44. package/esm2022/domain/f-draggable/emit-selection-change-event/emit-selection-change-event.execution.mjs +2 -2
  45. package/esm2022/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store-request.mjs +4 -4
  46. package/esm2022/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store.mjs +25 -0
  47. package/esm2022/domain/f-line-alignment/add-line-alignment-to-store/index.mjs +2 -2
  48. package/esm2022/domain/f-line-alignment/providers.mjs +4 -7
  49. package/esm2022/domain/f-line-alignment/remove-line-alignment-from-store/index.mjs +2 -2
  50. package/esm2022/domain/f-line-alignment/remove-line-alignment-from-store/remove-line-alignment-from-store.mjs +25 -0
  51. package/esm2022/domain/f-node/calculate-nodes-bounding-box-normalized-position/calculate-nodes-bounding-box-normalized-position.mjs +1 -1
  52. package/esm2022/domain/f-node/fit-to-child-nodes-and-groups/fit-to-child-nodes-and-groups-request.mjs +1 -1
  53. package/esm2022/domain/f-node/get-parent-nodes/get-parent-nodes.mjs +8 -8
  54. package/esm2022/domain/f-node/get-parent-nodes/get-parent-nodes.request.mjs +4 -4
  55. package/esm2022/domain/f-node/remove-node-from-store/remove-node-from-store-request.mjs +4 -4
  56. package/esm2022/domain/f-node/remove-node-from-store/remove-node-from-store.mjs +3 -3
  57. package/esm2022/domain/index.mjs +2 -1
  58. package/esm2022/domain/providers.mjs +5 -5
  59. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/index.mjs +3 -3
  60. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element-request.mjs +15 -0
  61. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element.mjs +34 -0
  62. package/esm2022/f-connection/common/domain/adaptive-curve-builder.mjs +201 -0
  63. package/esm2022/f-connection/common/domain/index.mjs +2 -1
  64. package/esm2022/f-connection/common/e-f-connection-connectable-side.mjs +12 -0
  65. package/esm2022/f-connection/common/e-f-connection-type.mjs +2 -1
  66. package/esm2022/f-connection/common/f-connection-base.mjs +28 -5
  67. package/esm2022/f-connection/common/index.mjs +2 -1
  68. package/esm2022/f-connection/f-connection/f-connection.component.mjs +13 -3
  69. package/esm2022/f-connection/f-connection-builder/f-connection-factory.mjs +9 -17
  70. package/esm2022/f-connection/f-connection-content/f-connection-content.mjs +10 -4
  71. package/esm2022/f-connection/f-connection-content/polyline-content-engine/polyline-content-layout-engine.mjs +4 -5
  72. package/esm2022/f-connection/f-connection-content/polyline-content-engine/polyline-content-place.mjs +3 -2
  73. package/esm2022/f-connection/f-connection-for-create/f-connection-for-create.component.mjs +14 -4
  74. package/esm2022/f-connection/f-snap-connection/f-snap-connection.component.mjs +14 -4
  75. package/esm2022/f-draggable/f-connection/f-create-connection/f-create-connection.drag-handler.mjs +5 -5
  76. package/esm2022/f-draggable/f-connection/f-reassign-connection/f-reassign-source.drag-handler.mjs +5 -5
  77. package/esm2022/f-draggable/f-connection/f-reassign-connection/f-reassign-target.drag-handler.mjs +5 -5
  78. package/esm2022/f-draggable/f-draggable.directive.mjs +3 -2
  79. package/esm2022/f-draggable/f-node-move/connection-drag-handlers/base-connection.drag-handler.mjs +3 -3
  80. package/esm2022/f-draggable/f-node-move/move-preparation/f-node-move-preparation.execution.mjs +1 -1
  81. package/esm2022/f-flow/f-flow.component.mjs +2 -2
  82. package/f-backgroud/providers.d.ts +1 -1
  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/providers.d.ts +1 -1
  99. package/f-minimap/providers.d.ts +1 -1
  100. package/f-node/providers.d.ts +1 -1
  101. package/fesm2022/foblex-flow.mjs +502 -113
  102. package/fesm2022/foblex-flow.mjs.map +1 -1
  103. package/package.json +1 -1
  104. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/fixed-center-behavior.mjs +0 -12
  105. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/fixed-outbound-behavior.mjs +0 -31
  106. package/esm2022/domain/f-connection/calculate-connection-line-by-behavior/floating-behavior.mjs +0 -22
  107. package/esm2022/domain/f-connection/redraw-connections/redraw-connections.execution.mjs +0 -73
  108. package/esm2022/domain/f-line-alignment/add-line-alignment-to-store/add-line-alignment-to-store.execution.mjs +0 -25
  109. package/esm2022/domain/f-line-alignment/remove-line-alignment-from-store/remove-line-alignment-from-store.execution.mjs +0 -25
  110. package/esm2022/domain/update-item-and-children-layers/move-front-elements-before-target-element/move-front-elements-before-target-element.execution.mjs +0 -34
  111. 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
  }
@@ -1869,6 +1870,205 @@ const F_CONNECTORS_PROVIDERS = [
1869
1870
  FNodeOutputDirective,
1870
1871
  ];
1871
1872
 
1873
+ /**
1874
+ * AdaptiveCurveBuilder
1875
+ *
1876
+ * Builds a smooth **adaptive connector curve** between two points using a cubic Bézier path,
1877
+ * but with control points computed differently from a classic “Bezier” connector.
1878
+ *
1879
+ * Key differences from a classic Bézier builder:
1880
+ * - Control handles are **aligned with the port side** (LEFT/RIGHT/TOP/BOTTOM),
1881
+ * yet are **slightly blended toward the target direction** to reduce harsh S-shapes.
1882
+ * - Handle lengths are **adaptive**: based on the `offset` (your “padding” from ports)
1883
+ * and the projected distance along the side’s axis. This produces a subtler curvature
1884
+ * and a distinct look & feel compared to a standard Bézier connector.
1885
+ *
1886
+ * Compatibility:
1887
+ * - Implements {@link IFConnectionBuilder}; output shape is the same:
1888
+ * SVG path, sampled points for hit-testing, and connection center.
1889
+ * - Only the four base sides are expected to be passed here:
1890
+ * {@link EFConnectableSide.LEFT}, {@link EFConnectableSide.RIGHT},
1891
+ * {@link EFConnectableSide.TOP}, {@link EFConnectableSide.BOTTOM}.
1892
+ *
1893
+ * Usage example:
1894
+ * ```ts
1895
+ * const builder = new AdaptiveCurveBuilder();
1896
+ * const res = builder.handle({
1897
+ * source: { x: 100, y: 120 },
1898
+ * sourceSide: EFConnectableSide.RIGHT,
1899
+ * target: { x: 340, y: 220 },
1900
+ * targetSide: EFConnectableSide.LEFT,
1901
+ * offset: 16, // acts as padding + minimal handle baseline
1902
+ * });
1903
+ * // res.path -> SVG "M … C …" string
1904
+ * // res.points -> sampled points along the curve
1905
+ * ```
1906
+ */
1907
+ class AdaptiveCurveBuilder {
1908
+ /**
1909
+ * Returns a unit direction vector for a given side.
1910
+ *
1911
+ * @param side - One of LEFT/RIGHT/TOP/BOTTOM.
1912
+ * @returns Unit vector pointing outwards from the side.
1913
+ * @remarks
1914
+ * Only base sides should reach this builder. A fallback `{0,0}` is returned
1915
+ * defensively, but should not occur in normal usage.
1916
+ */
1917
+ static _dir(side) {
1918
+ switch (side) {
1919
+ case EFConnectableSide.LEFT:
1920
+ return { x: -1, y: 0 };
1921
+ case EFConnectableSide.RIGHT:
1922
+ return { x: 1, y: 0 };
1923
+ case EFConnectableSide.TOP:
1924
+ return { x: 0, y: -1 };
1925
+ case EFConnectableSide.BOTTOM:
1926
+ return { x: 0, y: 1 };
1927
+ }
1928
+ return { x: 0, y: 0 };
1929
+ }
1930
+ /**
1931
+ * Checks whether a side is horizontal (LEFT/RIGHT).
1932
+ *
1933
+ * @param side - Side to check.
1934
+ * @returns `true` for LEFT/RIGHT, otherwise `false`.
1935
+ */
1936
+ static _isH(side) {
1937
+ return side === EFConnectableSide.LEFT || side === EFConnectableSide.RIGHT;
1938
+ }
1939
+ /**
1940
+ * Computes a **soft** handle length for a control point.
1941
+ *
1942
+ * The handle length is derived from:
1943
+ * - `offset` (acts as padding & the baseline handle),
1944
+ * - distance projected along the side’s axis (dx for horizontal, dy for vertical),
1945
+ * - a conservative upper bound to avoid bloated curves.
1946
+ *
1947
+ * @param p0 - Start (or end) point of the segment.
1948
+ * @param p3 - Opposite end (or start) point.
1949
+ * @param side - Side at which the handle originates.
1950
+ * @param offset - Visual padding/minimal handle baseline (must be ≥ 0).
1951
+ * @returns A bounded positive handle length.
1952
+ */
1953
+ static _handleLen(p0, p3, side, offset) {
1954
+ const dx = Math.abs(p3.x - p0.x);
1955
+ const dy = Math.abs(p3.y - p0.y);
1956
+ const d = Math.hypot(dx, dy);
1957
+ const along = this._isH(side) ? dx : dy;
1958
+ const MIN = Math.max(8, offset);
1959
+ const MAX = offset + 0.5 * d; // upper cap to keep the shape compact
1960
+ const len = offset * 1.05 + along * 0.3; // moderate growth along the axis
1961
+ return Math.min(MAX, Math.max(MIN, len));
1962
+ }
1963
+ /**
1964
+ * Computes a control point by taking the side direction and **lightly blending**
1965
+ * it toward the target direction. This reduces harsh inflections while keeping
1966
+ * the perceptual attachment to the port side.
1967
+ *
1968
+ * @param side - Base side defining the primary direction (LEFT/RIGHT/TOP/BOTTOM).
1969
+ * @param source - Anchor point where the control handle is attached.
1970
+ * @param target - Opposite end; used to orient the handle slightly toward the goal.
1971
+ * @param handle - Handle length (see {@link _handleLen}).
1972
+ * @returns Control point coordinates for the cubic Bézier segment.
1973
+ */
1974
+ static _softControl(side, source, target, handle) {
1975
+ const v = this._dir(side);
1976
+ const dx = target.x - source.x;
1977
+ const dy = target.y - source.y;
1978
+ const dist = Math.hypot(dx, dy) || 1;
1979
+ const tx = dx / dist;
1980
+ const ty = dy / dist;
1981
+ // Orientation of side vs. target direction (in [-1, 1])
1982
+ const dot = v.x * tx + v.y * ty;
1983
+ // Small base blend toward the target; slightly increase if the side points away.
1984
+ const baseBlend = 0.12;
1985
+ const extra = Math.max(0, -dot) * 0.08; // add a bit when pointing “backwards”
1986
+ const blend = Math.min(0.2, baseBlend + extra);
1987
+ const dirX = v.x * (1 - blend) + tx * blend;
1988
+ const dirY = v.y * (1 - blend) + ty * blend;
1989
+ const len = Math.hypot(dirX, dirY) || 1;
1990
+ return { x: source.x + (dirX / len) * handle, y: source.y + (dirY / len) * handle };
1991
+ }
1992
+ /**
1993
+ * Builds an adaptive connector between `source` and `target`.
1994
+ *
1995
+ * @param request - Connection build request.
1996
+ * @param request.source - Start point of the connector.
1997
+ * @param request.sourceSide - Side at the source port (LEFT/RIGHT/TOP/BOTTOM).
1998
+ * @param request.target - End point of the connector.
1999
+ * @param request.targetSide - Side at the target port (LEFT/RIGHT/TOP/BOTTOM).
2000
+ * @param request.offset - Visual padding & minimal handle baseline (≥ 0).
2001
+ *
2002
+ * @returns Standard {@link IFConnectionBuilderResponse}:
2003
+ * - `path`: SVG cubic path (“M … C …”),
2004
+ * - `points`: discretized samples along the curve,
2005
+ * - `connectionCenter`: approximate visual center for labeling/interaction,
2006
+ * - `secondPoint`/`penultimatePoint`: first/second control points (for tooling).
2007
+ *
2008
+ * @remarks
2009
+ * The returned path slightly offsets the end point by +0.0002 on both axes
2010
+ * to avoid edge cases in some renderers and hit-testing implementations.
2011
+ */
2012
+ handle(request) {
2013
+ const { source, sourceSide, target, targetSide } = request;
2014
+ const offset = Math.max(0, request.offset ?? 0);
2015
+ const p0 = { x: source.x, y: source.y };
2016
+ const p3 = { x: target.x, y: target.y };
2017
+ const h0 = AdaptiveCurveBuilder._handleLen(p0, p3, sourceSide, offset);
2018
+ const h3 = AdaptiveCurveBuilder._handleLen(p3, p0, targetSide, offset);
2019
+ const c1 = AdaptiveCurveBuilder._softControl(sourceSide, p0, p3, h0);
2020
+ const c2 = AdaptiveCurveBuilder._softControl(targetSide, p3, p0, h3);
2021
+ const path = `M ${p0.x} ${p0.y} C ${c1.x} ${c1.y}, ${c2.x} ${c2.y}, ${p3.x + 0.0002} ${p3.y + 0.0002}`;
2022
+ const connectionCenter = new CalculateConnectionCenterHandler().handle(new CalculateConnectionCenterRequest([p0, c1, c2, p3]));
2023
+ return {
2024
+ path,
2025
+ connectionCenter,
2026
+ secondPoint: c1,
2027
+ penultimatePoint: c2,
2028
+ points: _sampleCubic$1(p0, c1, c2, p3, 32),
2029
+ };
2030
+ }
2031
+ }
2032
+ /**
2033
+ * Evaluates a cubic Bézier at parameter `t` in [0, 1].
2034
+ *
2035
+ * @param p0 - Start point.
2036
+ * @param p1 - First control point.
2037
+ * @param p2 - Second control point.
2038
+ * @param p3 - End point.
2039
+ * @param t - Parameter in [0, 1].
2040
+ * @returns Point on the curve at `t`.
2041
+ */
2042
+ function bez3$1(p0, p1, p2, p3, t) {
2043
+ const u = 1 - t, tt = t * t, uu = u * u, uuu = uu * u, ttt = tt * t;
2044
+ return {
2045
+ x: uuu * p0.x + 3 * uu * t * p1.x + 3 * u * tt * p2.x + ttt * p3.x,
2046
+ y: uuu * p0.y + 3 * uu * t * p1.y + 3 * u * tt * p2.y + ttt * p3.y,
2047
+ };
2048
+ }
2049
+ /**
2050
+ * Uniformly samples a cubic Bézier segment.
2051
+ *
2052
+ * @param p0 - Start point.
2053
+ * @param p1 - First control point.
2054
+ * @param p2 - Second control point.
2055
+ * @param p3 - End point.
2056
+ * @param samples - Number of sub-segments (default: 32). The function returns `samples + 1` points.
2057
+ * @returns Array of sampled points including both endpoints.
2058
+ * @remarks
2059
+ * Sampling is uniform in parameter `t`, not in arc length. This is typically
2060
+ * sufficient for hit-testing and bounding boxes; if you need error-bounded
2061
+ * flattening, consider an adaptive subdivision strategy instead.
2062
+ */
2063
+ function _sampleCubic$1(p0, p1, p2, p3, samples = 32) {
2064
+ const out = new Array(samples + 1);
2065
+ out[0] = { ...p0 };
2066
+ for (let i = 1; i <= samples; i++) {
2067
+ out[i] = bez3$1(p0, p1, p2, p3, i / samples);
2068
+ }
2069
+ return out;
2070
+ }
2071
+
1872
2072
  class FBezierPathBuilder {
1873
2073
  static _getConnectorOffset(distance, offset) {
1874
2074
  if (distance >= offset) {
@@ -2449,34 +2649,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2449
2649
  const F_CONNECTION_BUILDERS = new InjectionToken('F_CONNECTION_BUILDERS');
2450
2650
 
2451
2651
  class FConnectionFactory {
2452
- builders = {
2652
+ _builders = {
2453
2653
  [EFConnectionType.STRAIGHT]: new FStraightPathBuilder(),
2454
2654
  [EFConnectionType.BEZIER]: new FBezierPathBuilder(),
2655
+ [EFConnectionType.ADAPTIVE_CURVE]: new AdaptiveCurveBuilder(),
2455
2656
  [EFConnectionType.SEGMENT]: new FSegmentPathBuilder(),
2657
+ ...(inject(F_CONNECTION_BUILDERS, { optional: true }) || {}),
2456
2658
  };
2457
- constructor(builders) {
2458
- if (builders) {
2459
- this.builders = { ...this.builders, ...builders };
2460
- }
2461
- }
2462
2659
  handle(request) {
2463
- const builder = this.builders[request.type];
2660
+ const builder = this._builders[request.type];
2464
2661
  if (!builder) {
2465
2662
  throw new Error(`FConnectionBuilder not found for type ${request.type}`);
2466
2663
  }
2467
2664
  return builder.handle(request.payload);
2468
2665
  }
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 });
2666
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2470
2667
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionFactory });
2471
2668
  }
2472
2669
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionFactory, decorators: [{
2473
2670
  type: Injectable
2474
- }], ctorParameters: () => [{ type: undefined, decorators: [{
2475
- type: Optional
2476
- }, {
2477
- type: Inject,
2478
- args: [F_CONNECTION_BUILDERS]
2479
- }] }] });
2671
+ }] });
2480
2672
 
2481
2673
  let warnedFConnectionCenter = false;
2482
2674
  /** @deprecated '[fConnectionCenter] is deprecated and will be removed in v18.0.0. Use FConnectionContent directive instead.' */
@@ -2759,7 +2951,7 @@ class PolylineContentPlace {
2759
2951
  return { x, y };
2760
2952
  }
2761
2953
  _sizeAlongDirection(element, dir) {
2762
- const rect = element.getBoundingClientRect();
2954
+ const rect = DragRectCache.fromElement(element);
2763
2955
  return Math.abs(dir.x) * rect.width + Math.abs(dir.y) * rect.height;
2764
2956
  }
2765
2957
  _normalize180(angleDeg) {
@@ -2800,16 +2992,15 @@ class ConnectionContentLayoutEngine {
2800
2992
  const total = sampler.totalLength;
2801
2993
  for (const item of contents) {
2802
2994
  const { position, rotationDeg } = this._placement.compute(sampler, item);
2803
- const style = this._createTransformString(position, rotationDeg);
2804
- item.hostElement.setAttribute('style', style);
2995
+ item.hostElement.style.transform = this._createTransformString(position, rotationDeg);
2805
2996
  }
2806
2997
  return total;
2807
2998
  }
2808
2999
  _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`;
3000
+ return `translate3d(${position.x}px, ${position.y}px, 0) translate(-50%, -50%) rotate(${rotationDeg}deg)`;
2810
3001
  }
2811
3002
  }
2812
- function calculatePathPointsIfEmpty({ point1, point2 }, { secondPoint, connectionCenter, penultimatePoint }) {
3003
+ function calculatePathPointsIfEmpty({ point1, point2 }, { secondPoint, connectionCenter, penultimatePoint, }) {
2813
3004
  return [point1, secondPoint || point1, connectionCenter, penultimatePoint || point2, point2];
2814
3005
  }
2815
3006
 
@@ -2857,7 +3048,10 @@ class FConnectionContent {
2857
3048
  * - `0.5` — at the middle of the connection (default).
2858
3049
  */
2859
3050
  position = input(0.5, {
2860
- transform: (v) => (v < 0 ? 0 : v > 1 ? 1 : v),
3051
+ transform: (x) => {
3052
+ const v = coerceNumberProperty(x);
3053
+ return v < 0 ? 0 : v > 1 ? 1 : v;
3054
+ },
2861
3055
  });
2862
3056
  /**
2863
3057
  * Perpendicular offset from the connection line (in pixels).
@@ -2867,7 +3061,9 @@ class FConnectionContent {
2867
3061
  * - Negative values shift it to the left.
2868
3062
  * - Default: `0` (no shift).
2869
3063
  */
2870
- offset = input(0);
3064
+ offset = input(0, {
3065
+ transform: (x) => coerceNumberProperty(x),
3066
+ });
2871
3067
  /**
2872
3068
  * Controls the orientation (rotation) of the content relative to the connection.
2873
3069
  *
@@ -2903,6 +3099,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
2903
3099
  }]
2904
3100
  }] });
2905
3101
 
3102
+ var EFConnectionConnectableSide;
3103
+ (function (EFConnectionConnectableSide) {
3104
+ EFConnectionConnectableSide["DEFAULT"] = "default";
3105
+ EFConnectionConnectableSide["TOP"] = "top";
3106
+ EFConnectionConnectableSide["BOTTOM"] = "bottom";
3107
+ EFConnectionConnectableSide["LEFT"] = "left";
3108
+ EFConnectionConnectableSide["RIGHT"] = "right";
3109
+ EFConnectionConnectableSide["CALCULATE"] = "calculate";
3110
+ EFConnectionConnectableSide["CALCULATE_HORIZONTAL"] = "calculate_horizontal";
3111
+ EFConnectionConnectableSide["CALCULATE_VERTICAL"] = "calculate_vertical";
3112
+ })(EFConnectionConnectableSide || (EFConnectionConnectableSide = {}));
3113
+
2906
3114
  const MIXIN_BASE = mixinChangeSelection(mixinChangeVisibility(class {
2907
3115
  hostElement;
2908
3116
  constructor(hostElement) {
@@ -2932,6 +3140,10 @@ class FConnectionBase extends MIXIN_BASE {
2932
3140
  fConnectionContents = contentChildren(FConnectionContent, {
2933
3141
  descendants: true,
2934
3142
  });
3143
+ fInputSide = signal(EFConnectionConnectableSide.DEFAULT);
3144
+ _sourceSide = EFConnectableSide.AUTO;
3145
+ fOutputSide = signal(EFConnectionConnectableSide.DEFAULT);
3146
+ _targetSide = EFConnectableSide.AUTO;
2935
3147
  _penultimatePoint = PointExtensions.initialize();
2936
3148
  _secondPoint = PointExtensions.initialize();
2937
3149
  constructor() {
@@ -2945,9 +3157,9 @@ class FConnectionBase extends MIXIN_BASE {
2945
3157
  isContains(element) {
2946
3158
  return (this.hostElement.firstChild?.lastChild).contains(element);
2947
3159
  }
2948
- setLine({ point1, point2 }, sourceSide, targetSide) {
3160
+ setLine({ point1, point2 }) {
2949
3161
  this.line = LineExtensions.initialize(point1, point2);
2950
- const pathResult = this._getPathResult(point1, sourceSide, point2, targetSide);
3162
+ const pathResult = this._getPathResult(point1, point2);
2951
3163
  this.path = pathResult.path;
2952
3164
  this._penultimatePoint = pathResult.penultimatePoint || point1;
2953
3165
  this._secondPoint = pathResult.secondPoint || point2;
@@ -2957,12 +3169,19 @@ class FConnectionBase extends MIXIN_BASE {
2957
3169
  _contents() {
2958
3170
  return Array.from(this.fConnectionContents()?.values() ?? []);
2959
3171
  }
2960
- _getPathResult(source, sourceSide, target, targetSide) {
3172
+ _getPathResult(source, target) {
2961
3173
  const radius = this.fRadius > 0 ? this.fRadius : 0;
2962
3174
  const offset = this.fOffset > 0 ? this.fOffset : 1;
2963
3175
  return this._connectionFactory.handle({
2964
3176
  type: this.fType,
2965
- payload: { source, sourceSide, target, targetSide, radius, offset },
3177
+ payload: {
3178
+ source,
3179
+ sourceSide: this._sourceSide,
3180
+ target,
3181
+ targetSide: this._targetSide,
3182
+ radius,
3183
+ offset,
3184
+ },
2966
3185
  });
2967
3186
  }
2968
3187
  _createTransformString(position, rotate = 0) {
@@ -2982,6 +3201,16 @@ class FConnectionBase extends MIXIN_BASE {
2982
3201
  this.fDragHandleStart()?.redraw(this._secondPoint, this.line.point1);
2983
3202
  this.fTextComponent().redraw(this.line);
2984
3203
  }
3204
+ /**
3205
+ * Applies the resolved sides to the connection. Don't call this method directly; it's used internally.
3206
+ *
3207
+ * @param sourceSide The resolved side for the source element.
3208
+ * @param targetSide The resolved side for the target element.
3209
+ */
3210
+ _applyResolvedSidesToConnection(sourceSide, targetSide) {
3211
+ this._sourceSide = sourceSide;
3212
+ this._targetSide = targetSide;
3213
+ }
2985
3214
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
2986
3215
  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
3216
  }
@@ -3001,6 +3230,7 @@ var EFConnectionType;
3001
3230
  EFConnectionType["SEGMENT"] = "segment";
3002
3231
  EFConnectionType["STRAIGHT"] = "straight";
3003
3232
  EFConnectionType["BEZIER"] = "bezier";
3233
+ EFConnectionType["ADAPTIVE_CURVE"] = "adaptive-curve";
3004
3234
  })(EFConnectionType || (EFConnectionType = {}));
3005
3235
 
3006
3236
  let uniqueId$6 = 0;
@@ -3014,6 +3244,16 @@ class FConnectionForCreateComponent extends FConnectionBase {
3014
3244
  fOffset = 12;
3015
3245
  fBehavior = EFConnectionBehavior.FIXED;
3016
3246
  fType = EFConnectionType.STRAIGHT;
3247
+ fInputSide = input(EFConnectionConnectableSide.DEFAULT, {
3248
+ transform: (x) => {
3249
+ return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);
3250
+ },
3251
+ });
3252
+ fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {
3253
+ transform: (x) => {
3254
+ return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);
3255
+ },
3256
+ });
3017
3257
  get boundingElement() {
3018
3258
  return this.fPath().hostElement;
3019
3259
  }
@@ -3031,7 +3271,7 @@ class FConnectionForCreateComponent extends FConnectionBase {
3031
3271
  this._mediator.execute(new RemoveConnectionForCreateFromStoreRequest());
3032
3272
  }
3033
3273
  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 });
3274
+ 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
3275
  }
3036
3276
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionForCreateComponent, decorators: [{
3037
3277
  type: Component,
@@ -3074,6 +3314,16 @@ class FConnectionComponent extends FConnectionBase {
3074
3314
  alias: 'fReassignDisabled',
3075
3315
  transform: booleanAttribute,
3076
3316
  });
3317
+ fInputSide = input(EFConnectionConnectableSide.DEFAULT, {
3318
+ transform: (x) => {
3319
+ return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);
3320
+ },
3321
+ });
3322
+ fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {
3323
+ transform: (x) => {
3324
+ return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);
3325
+ },
3326
+ });
3077
3327
  get boundingElement() {
3078
3328
  return this.fPath().hostElement;
3079
3329
  }
@@ -3088,7 +3338,7 @@ class FConnectionComponent extends FConnectionBase {
3088
3338
  this._mediator.execute(new RemoveConnectionFromStoreRequest(this));
3089
3339
  }
3090
3340
  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 });
3341
+ 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
3342
  }
3093
3343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionComponent, decorators: [{
3094
3344
  type: Component,
@@ -3184,6 +3434,16 @@ class FSnapConnectionComponent extends FConnectionBase {
3184
3434
  fOffset = 12;
3185
3435
  fBehavior = EFConnectionBehavior.FIXED;
3186
3436
  fType = EFConnectionType.STRAIGHT;
3437
+ fInputSide = input(EFConnectionConnectableSide.DEFAULT, {
3438
+ transform: (x) => {
3439
+ return castToEnum(x, 'fInputSide', EFConnectionConnectableSide);
3440
+ },
3441
+ });
3442
+ fOutputSide = input(EFConnectionConnectableSide.DEFAULT, {
3443
+ transform: (x) => {
3444
+ return castToEnum(x, 'fOutputSide', EFConnectionConnectableSide);
3445
+ },
3446
+ });
3187
3447
  get boundingElement() {
3188
3448
  return this.fPath().hostElement;
3189
3449
  }
@@ -3201,7 +3461,7 @@ class FSnapConnectionComponent extends FConnectionBase {
3201
3461
  this._mediator.execute(new RemoveSnapConnectionFromStoreRequest());
3202
3462
  }
3203
3463
  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 });
3464
+ 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
3465
  }
3206
3466
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FSnapConnectionComponent, decorators: [{
3207
3467
  type: Component,
@@ -3244,7 +3504,7 @@ const F_CONNECTION_PROVIDERS = [
3244
3504
  * It constructs a line between the intersections of the connectors rectangles and line from the centers of the connector rectangles
3245
3505
  * @param payload
3246
3506
  */
3247
- function floatingBehavior({ sourceRect, targetRect, }) {
3507
+ function floatingBehavior({ sourceRect, targetRect }) {
3248
3508
  return _getIntersectionsLine(_fromRoundedRectIntersections(sourceRect, targetRect), _toRoundedRectIntersections(sourceRect, targetRect), sourceRect, targetRect);
3249
3509
  }
3250
3510
  function _fromRoundedRectIntersections(sourceRect, targetRect) {
@@ -3265,7 +3525,7 @@ function _getIntersectionsLine(from, to, sourceRect, targetRect) {
3265
3525
  * It constructs a line between the gravity centers of the connector rectangles
3266
3526
  * @param payload
3267
3527
  */
3268
- function fixedCenterBehavior({ sourceRect, targetRect, }) {
3528
+ function fixedCenterBehavior({ sourceRect, targetRect }) {
3269
3529
  return {
3270
3530
  point1: sourceRect.gravityCenter,
3271
3531
  point2: targetRect.gravityCenter,
@@ -3303,16 +3563,128 @@ function _getPosition(rect, side) {
3303
3563
  }
3304
3564
 
3305
3565
  /**
3306
- * Execution that calculates the connection line based on the behavior.
3566
+ * Small epsilon to treat near-zero differences as negligible.
3567
+ */
3568
+ const EPSILON = 0.5;
3569
+ /**
3570
+ * Registry of all connection behavior handlers.
3571
+ */
3572
+ const BEHAVIOR_HANDLERS = {
3573
+ [EFConnectionBehavior.FLOATING]: floatingBehavior,
3574
+ [EFConnectionBehavior.FIXED_CENTER]: fixedCenterBehavior,
3575
+ [EFConnectionBehavior.FIXED]: fixedOutboundBehavior,
3576
+ };
3577
+ /**
3578
+ * Calculates connection lines based on behavior rules.
3579
+ * It determines which sides of the source and target should connect,
3580
+ * then delegates to a registered behavior handler.
3307
3581
  */
3308
3582
  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);
3583
+ /**
3584
+ * Main execution entry point.
3585
+ *
3586
+ * @param request The request containing source, target, and connection details.
3587
+ * @returns A calculated connection line (ILine).
3588
+ */
3589
+ handle(request) {
3590
+ const vectors = this._calculateDirectionalVectors(request.sourceRect.gravityCenter.x, request.sourceRect.gravityCenter.y, request.targetRect.gravityCenter.x, request.targetRect.gravityCenter.y);
3591
+ const sourceSide = this._determineSourceSide(request, vectors);
3592
+ const targetSide = this._determineTargetSide(request, vectors);
3593
+ request.connection._applyResolvedSidesToConnection(sourceSide, targetSide);
3594
+ const handler = this._getBehaviorHandler(request.connection.fBehavior);
3595
+ return handler({
3596
+ sourceRect: request.sourceRect,
3597
+ targetRect: request.targetRect,
3598
+ sourceConnectableSide: sourceSide,
3599
+ targetConnectableSide: targetSide,
3600
+ });
3601
+ }
3602
+ /**
3603
+ * Computes the directional deltas between two rectangles.
3604
+ */
3605
+ _calculateDirectionalVectors(sourceX, sourceY, targetX, targetY) {
3606
+ const sourceToTargetX = targetX - sourceX;
3607
+ const sourceToTargetY = targetY - sourceY;
3608
+ return {
3609
+ sourceToTargetX,
3610
+ sourceToTargetY,
3611
+ targetToSourceX: -sourceToTargetX,
3612
+ targetToSourceY: -sourceToTargetY,
3613
+ };
3614
+ }
3615
+ /**
3616
+ * Determines the side for the source element.
3617
+ */
3618
+ _determineSourceSide(request, vectors) {
3619
+ return this._resolveConnectableSide(request.connection.fOutputSide(), vectors.sourceToTargetX, vectors.sourceToTargetY, request.sourceConnectableSide);
3620
+ }
3621
+ /**
3622
+ * Determines the side for the target element.
3623
+ */
3624
+ _determineTargetSide(request, vectors) {
3625
+ return this._resolveConnectableSide(request.connection.fInputSide(), vectors.targetToSourceX, vectors.targetToSourceY, request.targetConnectableSide);
3626
+ }
3627
+ /**
3628
+ * Resolves which side of a shape to connect to based on direction, fallback, and connection mode.
3629
+ *
3630
+ * @param requestedSide The side mode (e.g. CALCULATE, CALCULATE_HORIZONTAL, FIXED, etc.).
3631
+ * @param deltaX Difference in X between source and target.
3632
+ * @param deltaY Difference in Y between source and target.
3633
+ * @param fallbackSide The default fallback side if calculation is ambiguous.
3634
+ */
3635
+ _resolveConnectableSide(requestedSide, deltaX, deltaY, fallbackSide) {
3636
+ if (requestedSide === EFConnectionConnectableSide.DEFAULT) {
3637
+ return fallbackSide;
3638
+ }
3639
+ const absoluteX = Math.abs(deltaX);
3640
+ const absoluteY = Math.abs(deltaY);
3641
+ const isNearZero = absoluteX < EPSILON && absoluteY < EPSILON;
3642
+ if (isNearZero) {
3643
+ return fallbackSide;
3644
+ }
3645
+ const isHorizontalDominant = absoluteX >= absoluteY;
3646
+ switch (requestedSide) {
3647
+ case EFConnectionConnectableSide.CALCULATE:
3648
+ return isHorizontalDominant
3649
+ ? deltaX >= 0
3650
+ ? EFConnectableSide.RIGHT
3651
+ : EFConnectableSide.LEFT
3652
+ : deltaY >= 0
3653
+ ? EFConnectableSide.BOTTOM
3654
+ : EFConnectableSide.TOP;
3655
+ case EFConnectionConnectableSide.CALCULATE_HORIZONTAL:
3656
+ if (absoluteX < EPSILON) {
3657
+ return fallbackSide;
3658
+ }
3659
+ return deltaX >= 0 ? EFConnectableSide.RIGHT : EFConnectableSide.LEFT;
3660
+ case EFConnectionConnectableSide.CALCULATE_VERTICAL:
3661
+ if (absoluteY < EPSILON) {
3662
+ return fallbackSide;
3663
+ }
3664
+ return deltaY >= 0 ? EFConnectableSide.BOTTOM : EFConnectableSide.TOP;
3665
+ case EFConnectionConnectableSide.TOP:
3666
+ return EFConnectableSide.TOP;
3667
+ case EFConnectionConnectableSide.BOTTOM:
3668
+ return EFConnectableSide.BOTTOM;
3669
+ case EFConnectionConnectableSide.LEFT:
3670
+ return EFConnectableSide.LEFT;
3671
+ case EFConnectionConnectableSide.RIGHT:
3672
+ return EFConnectableSide.RIGHT;
3673
+ default:
3674
+ return fallbackSide;
3675
+ }
3676
+ }
3677
+ /**
3678
+ * Returns the appropriate handler for the given connection behavior.
3679
+ *
3680
+ * @throws Error if no handler is registered for the behavior.
3681
+ */
3682
+ _getBehaviorHandler(behavior) {
3683
+ const handler = BEHAVIOR_HANDLERS[behavior];
3684
+ if (!handler) {
3685
+ throw new Error(`[Behavior] No handler for behavior: ${behavior}`);
3686
+ }
3687
+ return handler;
3316
3688
  }
3317
3689
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectionLineByBehavior, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3318
3690
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectionLineByBehavior });
@@ -3436,12 +3808,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
3436
3808
  type: Injectable
3437
3809
  }] });
3438
3810
 
3811
+ class DragRectCache {
3812
+ static _cache = new WeakMap();
3813
+ static fromElement(element) {
3814
+ const rect = this._cache.get(element) || RectExtensions.fromElement(element);
3815
+ this._cache.set(element, rect);
3816
+ return rect;
3817
+ }
3818
+ static set(element) {
3819
+ this._cache.set(element, RectExtensions.fromElement(element));
3820
+ }
3821
+ static invalidate(element) {
3822
+ this._cache.delete(element);
3823
+ }
3824
+ static invalidateAll() {
3825
+ this._cache = new WeakMap();
3826
+ }
3827
+ }
3828
+
3439
3829
  /**
3440
3830
  * Execution that redraws connections in the FComponentsStore.
3441
3831
  * It resets connectors, sets markers for temporary and snap connections,
3442
3832
  * and sets up connections based on the stored outputs and inputs.
3443
3833
  */
3444
- let RedrawConnectionsExecution = class RedrawConnectionsExecution {
3834
+ let RedrawConnections = class RedrawConnections {
3445
3835
  _mediator = inject(FMediator);
3446
3836
  _store = inject(FComponentsStore);
3447
3837
  handle(_request) {
@@ -3455,6 +3845,7 @@ let RedrawConnectionsExecution = class RedrawConnectionsExecution {
3455
3845
  this._store.fConnections.forEach((x) => {
3456
3846
  this._setupConnection(this._getOutput(x.fOutputId()), this._getInput(x.fInputId()), x);
3457
3847
  });
3848
+ DragRectCache.invalidateAll();
3458
3849
  }
3459
3850
  _getOutput(id) {
3460
3851
  const result = this._store.fOutputs.find((x) => x.fId() === id);
@@ -3479,23 +3870,23 @@ let RedrawConnectionsExecution = class RedrawConnectionsExecution {
3479
3870
  fInput.setConnected(fOutput);
3480
3871
  const line = this._getLine(fOutput, fInput, fConnection);
3481
3872
  this._setMarkers(fConnection);
3482
- fConnection.setLine(line, fOutput.fConnectableSide, fInput.fConnectableSide);
3873
+ fConnection.setLine(line);
3483
3874
  fConnection.initialize();
3484
3875
  fConnection.isSelected() ? fConnection.markAsSelected() : null;
3485
3876
  }
3486
3877
  _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));
3878
+ 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
3879
  }
3489
3880
  _setMarkers(connection) {
3490
3881
  this._mediator.execute(new CreateConnectionMarkersRequest(connection));
3491
3882
  }
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 });
3883
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnections, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
3884
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnections });
3494
3885
  };
3495
- RedrawConnectionsExecution = __decorate([
3886
+ RedrawConnections = __decorate([
3496
3887
  FExecutionRegister(RedrawConnectionsRequest)
3497
- ], RedrawConnectionsExecution);
3498
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnectionsExecution, decorators: [{
3888
+ ], RedrawConnections);
3889
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RedrawConnections, decorators: [{
3499
3890
  type: Injectable
3500
3891
  }] });
3501
3892
 
@@ -3613,7 +4004,7 @@ const F_CONNECTION_FEATURES = [
3613
4004
  AddSnapConnectionToStoreExecution,
3614
4005
  CreateConnectionMarkersExecution,
3615
4006
  CalculateConnectionLineByBehavior,
3616
- RedrawConnectionsExecution,
4007
+ RedrawConnections,
3617
4008
  RemoveConnectionForCreateFromStoreExecution,
3618
4009
  RemoveConnectionFromStoreExecution,
3619
4010
  RemoveConnectionMarkerFromStoreExecution,
@@ -4735,15 +5126,15 @@ class FCreateConnectionDragHandler {
4735
5126
  }
4736
5127
  }
4737
5128
  _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);
5129
+ const line = this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._fOutputWithRect.fRect, toConnectorRect, this._connection, this._fOutputWithRect.fConnector.fConnectableSide, fSide));
5130
+ this._connection.setLine(line);
4740
5131
  this._connection.redraw();
4741
5132
  }
4742
5133
  _drawSnapConnection(fClosestInput) {
4743
5134
  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));
5135
+ const line = this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._fOutputWithRect.fRect, fClosestInput.fRect, this._snapConnection, this._fOutputWithRect.fConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide));
4745
5136
  this._snapConnection?.show();
4746
- this._snapConnection?.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide);
5137
+ this._snapConnection?.setLine(line);
4747
5138
  this._snapConnection?.redraw();
4748
5139
  }
4749
5140
  else {
@@ -5081,18 +5472,18 @@ class FReassignTargetDragHandler {
5081
5472
  }
5082
5473
  _drawConnection(newPoint, fSide) {
5083
5474
  const line = this._calculateNewLine(newPoint, fSide);
5084
- this._connection.setLine(line, this._sourceConnectorAndRect.fConnector.fConnectableSide, fSide);
5475
+ this._connection.setLine(line);
5085
5476
  this._connection.redraw();
5086
5477
  }
5087
5478
  _calculateNewLine(targetPoint, fSide) {
5088
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._sourceConnectorRect, roundedRectFromPoint(targetPoint), this._connection.fBehavior, this._sourceConnector.fConnectableSide, fSide));
5479
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._sourceConnectorRect, roundedRectFromPoint(targetPoint), this._connection, this._sourceConnector.fConnectableSide, fSide));
5089
5480
  }
5090
5481
  _drawSnapConnection(closestConnector) {
5091
5482
  const snapConnection = this._snapConnection;
5092
5483
  if (closestConnector) {
5093
5484
  const line = this._getLineToClosestTargetConnector(closestConnector, snapConnection);
5094
5485
  snapConnection.show();
5095
- snapConnection.setLine(line, this._sourceConnector.fConnectableSide, closestConnector.fConnector.fConnectableSide);
5486
+ snapConnection.setLine(line);
5096
5487
  snapConnection.redraw();
5097
5488
  }
5098
5489
  else {
@@ -5100,7 +5491,7 @@ class FReassignTargetDragHandler {
5100
5491
  }
5101
5492
  }
5102
5493
  _getLineToClosestTargetConnector(fClosestInput, snapConnection) {
5103
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._sourceConnectorRect, fClosestInput.fRect, snapConnection.fBehavior, this._sourceConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide));
5494
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(this._sourceConnectorRect, fClosestInput.fRect, snapConnection, this._sourceConnector.fConnectableSide, fClosestInput.fConnector.fConnectableSide));
5104
5495
  }
5105
5496
  onPointerUp() {
5106
5497
  this._drawConnection(this._connectorRect, this._targetConnectorAndRect.fConnector.fConnectableSide);
@@ -5162,18 +5553,18 @@ class FReassignSourceDragHandler {
5162
5553
  }
5163
5554
  _drawConnection(newPoint, fSide) {
5164
5555
  const line = this._calculateNewLine(newPoint, fSide);
5165
- this._connection.setLine(line, fSide, this._targetConnectorAndRect.fConnector.fConnectableSide);
5556
+ this._connection.setLine(line);
5166
5557
  this._connection.redraw();
5167
5558
  }
5168
5559
  _calculateNewLine(sourcePoint, fSide) {
5169
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(roundedRectFromPoint(sourcePoint), this._targetConnectorAndRect.fRect, this._connection.fBehavior, fSide, this._targetConnectorAndRect.fConnector.fConnectableSide));
5560
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(roundedRectFromPoint(sourcePoint), this._targetConnectorAndRect.fRect, this._connection, fSide, this._targetConnectorAndRect.fConnector.fConnectableSide));
5170
5561
  }
5171
5562
  _drawSnapConnection(fClosestConnector) {
5172
5563
  const snapConnection = this._snapConnection;
5173
5564
  if (fClosestConnector) {
5174
5565
  const line = this._getLineToClosestSourceConnector(fClosestConnector, snapConnection);
5175
5566
  snapConnection.show();
5176
- snapConnection.setLine(line, fClosestConnector.fConnector.fConnectableSide, this._targetConnector.fConnectableSide);
5567
+ snapConnection.setLine(line);
5177
5568
  snapConnection.redraw();
5178
5569
  }
5179
5570
  else {
@@ -5181,7 +5572,7 @@ class FReassignSourceDragHandler {
5181
5572
  }
5182
5573
  }
5183
5574
  _getLineToClosestSourceConnector(fClosestInput, snapConnection) {
5184
- return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(fClosestInput.fRect, this._targetConnectorAndRect.fRect, snapConnection.fBehavior, fClosestInput.fConnector.fConnectableSide, this._targetConnector.fConnectableSide));
5575
+ return this._mediator.execute(new CalculateConnectionLineByBehaviorRequest(fClosestInput.fRect, this._targetConnectorAndRect.fRect, snapConnection, fClosestInput.fConnector.fConnectableSide, this._targetConnector.fConnectableSide));
5185
5576
  }
5186
5577
  onPointerUp() {
5187
5578
  this._drawConnection(this._connectorRect, this._sourceConnectorAndRect.fConnector.fConnectableSide);
@@ -5550,10 +5941,10 @@ class BaseConnectionDragHandler {
5550
5941
  this._redrawConnection(this._recalculateConnection());
5551
5942
  }
5552
5943
  _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));
5944
+ 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
5945
  }
5555
5946
  _redrawConnection(line) {
5556
- this.fConnection.setLine(line, this._fOutputWithRect.fConnector.fConnectableSide, this._fInputWithRect.fConnector.fConnectableSide);
5947
+ this.fConnection.setLine(line);
5557
5948
  this.fConnection.redraw();
5558
5949
  }
5559
5950
  _connectorNotFoundPrefix(message) {
@@ -8900,6 +9291,7 @@ class FDraggableDirective extends FDraggableBase {
8900
9291
  this._mediator.execute(new EndDragSequenceRequest());
8901
9292
  }
8902
9293
  finalizeDragSequence() {
9294
+ DragRectCache.invalidateAll();
8903
9295
  this._mediator.execute(new EmitSelectionChangeEventRequest());
8904
9296
  this._result.clear();
8905
9297
  }
@@ -9782,7 +10174,7 @@ class MoveFrontElementsBeforeTargetElementRequest {
9782
10174
  * Execution that moves elements in the FItemsContainer before a target element.
9783
10175
  * It removes elements that should not be in front and inserts them before the target element.
9784
10176
  */
9785
- let MoveFrontElementsBeforeTargetElementExecution = class MoveFrontElementsBeforeTargetElementExecution {
10177
+ let MoveFrontElementsBeforeTargetElement = class MoveFrontElementsBeforeTargetElement {
9786
10178
  handle(request) {
9787
10179
  const elementsToMove = [];
9788
10180
  for (let i = request.targetIndex + 1; i < request.allElements.length; i++) {
@@ -9796,13 +10188,13 @@ let MoveFrontElementsBeforeTargetElementExecution = class MoveFrontElementsBefor
9796
10188
  request.fItemsContainer.insertBefore(x, request.allElements[request.targetIndex]);
9797
10189
  });
9798
10190
  }
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 });
10191
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElement, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10192
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElement });
9801
10193
  };
9802
- MoveFrontElementsBeforeTargetElementExecution = __decorate([
10194
+ MoveFrontElementsBeforeTargetElement = __decorate([
9803
10195
  FExecutionRegister(MoveFrontElementsBeforeTargetElementRequest)
9804
- ], MoveFrontElementsBeforeTargetElementExecution);
9805
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElementExecution, decorators: [{
10196
+ ], MoveFrontElementsBeforeTargetElement);
10197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MoveFrontElementsBeforeTargetElement, decorators: [{
9806
10198
  type: Injectable
9807
10199
  }] });
9808
10200
 
@@ -9994,7 +10386,7 @@ let EmitSelectionChangeEventExecution = class EmitSelectionChangeEventExecution
9994
10386
  return this._store.fDraggable.fSelectionChange;
9995
10387
  }
9996
10388
  _dragContext = inject(FDraggableDataContext);
9997
- handle(request) {
10389
+ handle(_request) {
9998
10390
  if (!this._dragContext.isSelectedChanged) {
9999
10391
  return;
10000
10392
  }
@@ -10689,10 +11081,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
10689
11081
  }] });
10690
11082
 
10691
11083
  class GetParentNodesRequest {
10692
- fNode;
11084
+ nodeOrGroup;
10693
11085
  static fToken = Symbol('GetParentNodesRequest');
10694
- constructor(fNode) {
10695
- this.fNode = fNode;
11086
+ constructor(nodeOrGroup) {
11087
+ this.nodeOrGroup = nodeOrGroup;
10696
11088
  }
10697
11089
  }
10698
11090
 
@@ -10701,15 +11093,15 @@ class GetParentNodesRequest {
10701
11093
  */
10702
11094
  let GetParentNodes = class GetParentNodes {
10703
11095
  _store = inject(FComponentsStore);
10704
- handle(request) {
10705
- return this._getParentNodes(request.fNode, new Set(), []);
11096
+ handle({ nodeOrGroup }) {
11097
+ return this._getParentNodes(nodeOrGroup, new Set(), []);
10706
11098
  }
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());
11099
+ _getParentNodes(nodeOrGroup, visited, result) {
11100
+ if (visited.has(nodeOrGroup.fId())) {
11101
+ throw new Error('Circular reference detected in the node hierarchy. Node id: ' + nodeOrGroup.fId());
10710
11102
  }
10711
- visited.add(fNode.fId());
10712
- const parent = this._store.fNodes.find((x) => x.fId() === fNode.fParentId());
11103
+ visited.add(nodeOrGroup.fId());
11104
+ const parent = this._store.fNodes.find((x) => x.fId() === nodeOrGroup.fParentId());
10713
11105
  if (!parent) {
10714
11106
  return result;
10715
11107
  }
@@ -10772,10 +11164,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
10772
11164
  }] });
10773
11165
 
10774
11166
  class RemoveNodeFromStoreRequest {
10775
- fComponent;
11167
+ instance;
10776
11168
  static fToken = Symbol('RemoveNodeFromStoreRequest');
10777
- constructor(fComponent) {
10778
- this.fComponent = fComponent;
11169
+ constructor(instance) {
11170
+ this.instance = instance;
10779
11171
  }
10780
11172
  }
10781
11173
 
@@ -10784,8 +11176,8 @@ class RemoveNodeFromStoreRequest {
10784
11176
  */
10785
11177
  let RemoveNodeFromStore = class RemoveNodeFromStore {
10786
11178
  _store = inject(FComponentsStore);
10787
- handle(request) {
10788
- this._store.removeComponent(this._store.fNodes, request.fComponent);
11179
+ handle({ instance }) {
11180
+ this._store.removeComponent(this._store.fNodes, instance);
10789
11181
  }
10790
11182
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveNodeFromStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10791
11183
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveNodeFromStore });
@@ -11331,28 +11723,28 @@ const F_FLOW_FEATURES = [
11331
11723
  ];
11332
11724
 
11333
11725
  class AddLineAlignmentToStoreRequest {
11334
- fComponent;
11726
+ instance;
11335
11727
  static fToken = Symbol('AddLineAlignmentToStoreRequest');
11336
- constructor(fComponent) {
11337
- this.fComponent = fComponent;
11728
+ constructor(instance) {
11729
+ this.instance = instance;
11338
11730
  }
11339
11731
  }
11340
11732
 
11341
11733
  /**
11342
11734
  * Execution that adds a line alignment to the FComponentsStore.
11343
11735
  */
11344
- let AddLineAlignmentToStoreExecution = class AddLineAlignmentToStoreExecution {
11736
+ let AddLineAlignmentToStore = class AddLineAlignmentToStore {
11345
11737
  _store = inject(FComponentsStore);
11346
- handle(request) {
11347
- this._store.fLineAlignment = request.fComponent;
11738
+ handle({ instance }) {
11739
+ this._store.fLineAlignment = instance;
11348
11740
  }
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 });
11741
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11742
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStore });
11351
11743
  };
11352
- AddLineAlignmentToStoreExecution = __decorate([
11744
+ AddLineAlignmentToStore = __decorate([
11353
11745
  FExecutionRegister(AddLineAlignmentToStoreRequest)
11354
- ], AddLineAlignmentToStoreExecution);
11355
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStoreExecution, decorators: [{
11746
+ ], AddLineAlignmentToStore);
11747
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLineAlignmentToStore, decorators: [{
11356
11748
  type: Injectable
11357
11749
  }] });
11358
11750
 
@@ -11363,18 +11755,18 @@ class RemoveLineAlignmentFromStoreRequest {
11363
11755
  /**
11364
11756
  * Execution that removes a line alignment from the FComponentsStore.
11365
11757
  */
11366
- let RemoveLineAlignmentFromStoreExecution = class RemoveLineAlignmentFromStoreExecution {
11758
+ let RemoveLineAlignmentFromStore = class RemoveLineAlignmentFromStore {
11367
11759
  _store = inject(FComponentsStore);
11368
- handle(request) {
11760
+ handle(_request) {
11369
11761
  this._store.fLineAlignment = undefined;
11370
11762
  }
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 });
11763
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
11764
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStore });
11373
11765
  };
11374
- RemoveLineAlignmentFromStoreExecution = __decorate([
11766
+ RemoveLineAlignmentFromStore = __decorate([
11375
11767
  FExecutionRegister(RemoveLineAlignmentFromStoreRequest)
11376
- ], RemoveLineAlignmentFromStoreExecution);
11377
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStoreExecution, decorators: [{
11768
+ ], RemoveLineAlignmentFromStore);
11769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RemoveLineAlignmentFromStore, decorators: [{
11378
11770
  type: Injectable
11379
11771
  }] });
11380
11772
 
@@ -11383,10 +11775,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
11383
11775
  * These executions handle the addition and removal of line alignments
11384
11776
  * in the FComponentsStore.
11385
11777
  */
11386
- const F_LINE_ALIGNMENT_FEATURES = [
11387
- AddLineAlignmentToStoreExecution,
11388
- RemoveLineAlignmentFromStoreExecution,
11389
- ];
11778
+ const F_LINE_ALIGNMENT_FEATURES = [AddLineAlignmentToStore, RemoveLineAlignmentFromStore];
11390
11779
 
11391
11780
  class AddZoomToStoreRequest {
11392
11781
  fComponent;
@@ -11764,7 +12153,7 @@ const COMMON_PROVIDERS = [
11764
12153
  SortItemsByParentExecution,
11765
12154
  SortNodeLayersExecution,
11766
12155
  UpdateItemAndChildrenLayersExecution,
11767
- MoveFrontElementsBeforeTargetElementExecution,
12156
+ MoveFrontElementsBeforeTargetElement,
11768
12157
  ];
11769
12158
 
11770
12159
  let uniqueId$2 = 0;
@@ -12410,7 +12799,7 @@ class FFlowComponent extends FFlowBase {
12410
12799
  ...COMMON_PROVIDERS,
12411
12800
  ...F_DRAGGABLE_PROVIDERS,
12412
12801
  { 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 });
12802
+ ], 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}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
12414
12803
  }
12415
12804
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFlowComponent, decorators: [{
12416
12805
  type: Component,
@@ -12425,7 +12814,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
12425
12814
  ...COMMON_PROVIDERS,
12426
12815
  ...F_DRAGGABLE_PROVIDERS,
12427
12816
  { 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"] }]
12817
+ ], 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}\n"] }]
12429
12818
  }] });
12430
12819
 
12431
12820
  const F_FLOW_PROVIDERS = [
@@ -12639,5 +13028,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
12639
13028
  * Generated bundle index. Do not edit.
12640
13029
  */
12641
13030
 
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 };
13031
+ 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
13032
  //# sourceMappingURL=foblex-flow.mjs.map