@foblex/flow 17.8.2 → 17.8.3

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 (49) hide show
  1. package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/calculate-connectable-side-by-connected-positions-request.d.ts +6 -0
  2. package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/calculate-connectable-side-by-connected-positions.d.ts +45 -0
  3. package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/index.d.ts +2 -0
  4. package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-internal-position/calculate-connectable-side-by-internal-position-request.d.ts +6 -0
  5. package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-internal-position/calculate-connectable-side-by-internal-position.d.ts +20 -0
  6. package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-internal-position/index.d.ts +2 -0
  7. package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-node-connectors-connectable-sides-request.d.ts +6 -0
  8. package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-node-connectors-connectable-sides.d.ts +59 -0
  9. package/domain/f-node/calculate-node-connectors-connectable-sides/index.d.ts +4 -0
  10. package/domain/f-node/index.d.ts +1 -0
  11. package/domain/f-node/providers.d.ts +4 -3
  12. package/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed-request.d.ts +2 -2
  13. package/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed.d.ts +0 -23
  14. package/domain/providers.d.ts +1 -1
  15. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/calculate-connectable-side-by-connected-positions-request.mjs +8 -0
  16. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/calculate-connectable-side-by-connected-positions.mjs +92 -0
  17. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/index.mjs +3 -0
  18. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-internal-position/calculate-connectable-side-by-internal-position-request.mjs +8 -0
  19. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-internal-position/calculate-connectable-side-by-internal-position.mjs +55 -0
  20. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-internal-position/index.mjs +3 -0
  21. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-node-connectors-connectable-sides-request.mjs +8 -0
  22. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-node-connectors-connectable-sides.mjs +99 -0
  23. package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/index.mjs +5 -0
  24. package/esm2022/domain/f-node/index.mjs +2 -1
  25. package/esm2022/domain/f-node/providers.mjs +8 -4
  26. package/esm2022/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed-request.mjs +1 -1
  27. package/esm2022/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed.mjs +10 -67
  28. package/esm2022/f-connectors/e-f-connectable-side.mjs +2 -1
  29. package/esm2022/f-connectors/f-connector-base.mjs +1 -1
  30. package/esm2022/f-connectors/f-node-input/f-node-input.directive.mjs +4 -1
  31. package/esm2022/f-connectors/f-node-outlet/f-node-outlet.directive.mjs +4 -1
  32. package/esm2022/f-connectors/f-node-output/f-node-output.directive.mjs +4 -1
  33. package/esm2022/f-node/f-group.directive.mjs +20 -12
  34. package/esm2022/f-node/f-node-base.mjs +2 -2
  35. package/esm2022/f-node/f-node.directive.mjs +15 -3
  36. package/f-connection/providers.d.ts +1 -1
  37. package/f-connectors/e-f-connectable-side.d.ts +1 -0
  38. package/f-connectors/f-connector-base.d.ts +1 -0
  39. package/f-connectors/f-node-input/f-node-input.directive.d.ts +1 -0
  40. package/f-connectors/f-node-outlet/f-node-outlet.directive.d.ts +1 -0
  41. package/f-connectors/f-node-output/f-node-output.directive.d.ts +1 -0
  42. package/f-connectors/providers.d.ts +1 -1
  43. package/f-node/f-group.directive.d.ts +4 -1
  44. package/f-node/f-node-base.d.ts +1 -1
  45. package/f-node/f-node.directive.d.ts +3 -0
  46. package/f-node/providers.d.ts +2 -2
  47. package/fesm2022/foblex-flow.mjs +292 -71
  48. package/fesm2022/foblex-flow.mjs.map +1 -1
  49. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ import { FConnectorBase } from '../../../../f-connectors';
2
+ export declare class CalculateConnectableSideByConnectedPositionsRequest {
3
+ readonly connector: FConnectorBase;
4
+ static readonly fToken: unique symbol;
5
+ constructor(connector: FConnectorBase);
6
+ }
@@ -0,0 +1,45 @@
1
+ import { IExecution } from '@foblex/mediator';
2
+ import { CalculateConnectableSideByConnectedPositionsRequest } from './calculate-connectable-side-by-connected-positions-request';
3
+ import { EFConnectableSide } from '../../../../f-connectors';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Execution that calculates the connectable side for a connector
7
+ * based on the positions of its connected connectors.
8
+ */
9
+ export declare class CalculateConnectableSideByConnectedPositions implements IExecution<CalculateConnectableSideByConnectedPositionsRequest, EFConnectableSide> {
10
+ private readonly _mediator;
11
+ /**
12
+ * Handles the request to calculate the connectable side for a connector
13
+ * based on the positions of its connected connectors.
14
+ *
15
+ * @param request - Contains the connector host element and its connected connectors.
16
+ * @returns {EFConnectableSide} - The calculated connectable side.
17
+ */
18
+ handle({ connector, }: CalculateConnectableSideByConnectedPositionsRequest): EFConnectableSide;
19
+ /**
20
+ * Extracts the gravity centers of connected connectors, excluding the current connector.
21
+ *
22
+ * @param selfHost - The host element of the current connector.
23
+ * @param connected - The list of connected connectors.
24
+ * @returns {Array<{x: number, y: number}>} - An array of gravity center coordinates.
25
+ */
26
+ private _getConnectedCenters;
27
+ /**
28
+ * Calculates the average point (center of mass) from a set of points.
29
+ *
30
+ * @param points - An array of point objects with x and y coordinates.
31
+ * @returns {{x: number, y: number}} - The average x and y coordinate.
32
+ */
33
+ private _calculateAveragePoint;
34
+ /**
35
+ * Determines the connectable side of the current connector relative to the
36
+ * average position of its connected connectors.
37
+ *
38
+ * @param self - The gravity center of the current connector.
39
+ * @param avg - The average gravity center of connected connectors.
40
+ * @returns {EFConnectableSide} - The chosen side (LEFT, RIGHT, TOP, BOTTOM).
41
+ */
42
+ private _determineSide;
43
+ static ɵfac: i0.ɵɵFactoryDeclaration<CalculateConnectableSideByConnectedPositions, never>;
44
+ static ɵprov: i0.ɵɵInjectableDeclaration<CalculateConnectableSideByConnectedPositions>;
45
+ }
@@ -0,0 +1,2 @@
1
+ export * from './calculate-connectable-side-by-connected-positions';
2
+ export * from './calculate-connectable-side-by-connected-positions-request';
@@ -0,0 +1,6 @@
1
+ import { FConnectorBase } from '../../../../f-connectors';
2
+ export declare class CalculateConnectableSideByInternalPositionRequest {
3
+ readonly connector: FConnectorBase;
4
+ static readonly fToken: unique symbol;
5
+ constructor(connector: FConnectorBase);
6
+ }
@@ -0,0 +1,20 @@
1
+ import { IExecution } from '@foblex/mediator';
2
+ import { CalculateConnectableSideByInternalPositionRequest } from './calculate-connectable-side-by-internal-position-request';
3
+ import { EFConnectableSide } from '../../../../f-connectors';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Execution that calculates the connectable side for a connector
7
+ * based on the internal position of the connector relative to its node host.
8
+ */
9
+ export declare class CalculateConnectableSideByInternalPosition implements IExecution<CalculateConnectableSideByInternalPositionRequest, EFConnectableSide> {
10
+ handle({ connector, }: CalculateConnectableSideByInternalPositionRequest): EFConnectableSide;
11
+ /**
12
+ * Determines the side of the connector relative to the node host based on the minimum distance.
13
+ * @param connectorHost
14
+ * @param nodeHost
15
+ * @private
16
+ */
17
+ private _getSideByDelta;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<CalculateConnectableSideByInternalPosition, never>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<CalculateConnectableSideByInternalPosition>;
20
+ }
@@ -0,0 +1,2 @@
1
+ export * from './calculate-connectable-side-by-internal-position';
2
+ export * from './calculate-connectable-side-by-internal-position-request';
@@ -0,0 +1,6 @@
1
+ import { FNodeBase } from '../../../f-node';
2
+ export declare class CalculateNodeConnectorsConnectableSidesRequest {
3
+ readonly node: FNodeBase;
4
+ static readonly fToken: unique symbol;
5
+ constructor(node: FNodeBase);
6
+ }
@@ -0,0 +1,59 @@
1
+ import { IExecution } from '@foblex/mediator';
2
+ import { CalculateNodeConnectorsConnectableSidesRequest } from './calculate-node-connectors-connectable-sides-request';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Execution that calculates connectable sides for all connectors of a node.
6
+ *
7
+ * Responsibility:
8
+ * - For each connector, decide the effective connectable side according to:
9
+ * - AUTO -> by internal position relative to node host
10
+ * - CALCULATE -> by positions of connected connectors
11
+ * - explicit -> use the user-defined side as-is
12
+ * - For each `toConnector` whose user side is CALCULATE, recalculate it as well.
13
+ */
14
+ export declare class CalculateNodeConnectorsConnectableSides implements IExecution<CalculateNodeConnectorsConnectableSidesRequest, void> {
15
+ private readonly _mediator;
16
+ /**
17
+ * Orchestrates side calculation for all connectors of the given node.
18
+ *
19
+ * @param request.node - Node whose connectors should be recalculated.
20
+ */
21
+ handle({ node }: CalculateNodeConnectorsConnectableSidesRequest): void;
22
+ /**
23
+ * Calculates and assigns the connectable side for a single connector.
24
+ *
25
+ * @param connector - The connector being updated.
26
+ */
27
+ private _updateConnectorSide;
28
+ /**
29
+ * Recalculates connectable sides for all `toConnector` items that are marked as CALCULATE.
30
+ *
31
+ * @param source - The source connector whose outgoing connections should be processed.
32
+ */
33
+ private _updateConnectedTargets;
34
+ /**
35
+ * Resolves the effective side for a connector according to its user preference.
36
+ *
37
+ * @param connector - The connector to resolve side for.
38
+ * @returns {EFConnectableSide} - The resolved side.
39
+ */
40
+ private _resolveSideForConnector;
41
+ /**
42
+ * Calculates side using the connector's internal position relative to the node host.
43
+ * Delegates to `CalculateConnectableSideByInternalPositionRequest`.
44
+ *
45
+ * @param connector - Current connector.
46
+ * @returns {EFConnectableSide}
47
+ */
48
+ private _resolveSideByInternalPosition;
49
+ /**
50
+ * Calculates side using average positions of connectors connected to the given connector.
51
+ * Delegates to `CalculateConnectableSideByConnectedPositionsRequest`.
52
+ *
53
+ * @param connector - Current connector.
54
+ * @returns {EFConnectableSide}
55
+ */
56
+ private _resolveSideByConnectedPositions;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<CalculateNodeConnectorsConnectableSides, never>;
58
+ static ɵprov: i0.ɵɵInjectableDeclaration<CalculateNodeConnectorsConnectableSides>;
59
+ }
@@ -0,0 +1,4 @@
1
+ export * from './calculate-connectable-side-by-connected-positions';
2
+ export * from './calculate-connectable-side-by-internal-position';
3
+ export * from './calculate-node-connectors-connectable-sides';
4
+ export * from './calculate-node-connectors-connectable-sides-request';
@@ -1,5 +1,6 @@
1
1
  export * from './add-node-to-store';
2
2
  export * from './calculate-input-connections';
3
+ export * from './calculate-node-connectors-connectable-sides';
3
4
  export * from './calculate-nodes-bounding-box';
4
5
  export * from './calculate-nodes-bounding-box-normalized-position';
5
6
  export * from './calculate-output-connections';
@@ -8,9 +8,10 @@ import { GetNodePadding } from './get-node-padding';
8
8
  import { GetParentNodes } from './get-parent-nodes';
9
9
  import { CalculateInputConnections } from './calculate-input-connections';
10
10
  import { CalculateOutputConnections } from './calculate-output-connections';
11
- import { GetChildNodeIds } from "./get-child-node-ids";
12
- import { FitToChildNodesAndGroups } from "./fit-to-child-nodes-and-groups";
11
+ import { GetChildNodeIds } from './get-child-node-ids';
12
+ import { FitToChildNodesAndGroups } from './fit-to-child-nodes-and-groups';
13
+ import { CalculateConnectableSideByConnectedPositions, CalculateConnectableSideByInternalPosition, CalculateNodeConnectorsConnectableSides } from './calculate-node-connectors-connectable-sides';
13
14
  /**
14
15
  * This file exports all the node-related executions that can be used in the F-Flow domain.
15
16
  */
16
- export declare const F_NODE_FEATURES: (typeof AddNodeToStore | typeof CalculateInputConnections | typeof CalculateNodesBoundingBox | typeof CalculateNodesBoundingBoxNormalizedPosition | typeof CalculateOutputConnections | typeof FitToChildNodesAndGroups | typeof GetChildNodeIds | typeof GetNodePadding | typeof GetNodes | typeof GetParentNodes | typeof UpdateNodeWhenStateOrSizeChanged | typeof RemoveNodeFromStore)[];
17
+ export declare const F_NODE_FEATURES: (typeof AddNodeToStore | typeof CalculateConnectableSideByConnectedPositions | typeof CalculateConnectableSideByInternalPosition | typeof CalculateInputConnections | typeof CalculateNodeConnectorsConnectableSides | typeof CalculateNodesBoundingBox | typeof CalculateNodesBoundingBoxNormalizedPosition | typeof CalculateOutputConnections | typeof FitToChildNodesAndGroups | typeof GetChildNodeIds | typeof GetNodePadding | typeof GetNodes | typeof GetParentNodes | typeof UpdateNodeWhenStateOrSizeChanged | typeof RemoveNodeFromStore)[];
@@ -1,8 +1,8 @@
1
1
  import { DestroyRef } from '@angular/core';
2
2
  import { FNodeBase } from '../../../f-node';
3
3
  export declare class UpdateNodeWhenStateOrSizeChangedRequest {
4
- nodeOrGroup: FNodeBase;
5
- destroyRef: DestroyRef;
4
+ readonly nodeOrGroup: FNodeBase;
5
+ readonly destroyRef: DestroyRef;
6
6
  static readonly fToken: unique symbol;
7
7
  constructor(nodeOrGroup: FNodeBase, destroyRef: DestroyRef);
8
8
  }
@@ -6,35 +6,12 @@ import * as i0 from "@angular/core";
6
6
  */
7
7
  export declare class UpdateNodeWhenStateOrSizeChanged implements IExecution<UpdateNodeWhenStateOrSizeChangedRequest, void> {
8
8
  private readonly _mediator;
9
- private readonly _store;
10
9
  /**
11
10
  * Handles the request to update the node's connectors based on state or size changes.
12
11
  * It listens for resize events and recalculates the connectable sides of the connectors.
13
12
  * @param request
14
13
  */
15
14
  handle({ nodeOrGroup, destroyRef }: UpdateNodeWhenStateOrSizeChangedRequest): void;
16
- /**
17
- * Calculates the connectable side for each connector based on its position relative to the node host.
18
- * @param fConnectors
19
- * @param fNodeHost
20
- * @private
21
- */
22
- private _calculateConnectorsConnectableSide;
23
- /**
24
- * Calculates the connectable side of a connector based on its user-defined side or its position relative to the node host.
25
- * @param fConnector
26
- * @param fNodeHost
27
- * @returns {EFConnectableSide}
28
- * @private
29
- */
30
- private _calculateConnectorConnectableSide;
31
- /**
32
- * Determines the side of the connector relative to the node host based on the minimum distance.
33
- * @param fConnectorHost
34
- * @param fNodeHost
35
- * @private
36
- */
37
- private _getSideByDelta;
38
15
  private _isDragging;
39
16
  static ɵfac: i0.ɵɵFactoryDeclaration<UpdateNodeWhenStateOrSizeChanged, never>;
40
17
  static ɵprov: i0.ɵɵInjectableDeclaration<UpdateNodeWhenStateOrSizeChanged>;
@@ -10,4 +10,4 @@ import { GetNormalizedConnectorRectExecution } from "./get-normalized-connector-
10
10
  * draggable elements, flow, line alignment, nodes, selection, zoom,
11
11
  * and various utility executions.
12
12
  */
13
- export declare const COMMON_PROVIDERS: (typeof GetElementRoundedRectExecution | typeof import("./f-canvas").AddCanvasToStoreExecution | typeof import("./f-canvas").CenterGroupOrNodeExecution | typeof import("./f-canvas").FitToFlowExecution | typeof import("./f-canvas").InputCanvasPositionExecution | typeof import("./f-canvas").InputCanvasScaleExecution | typeof import("./f-canvas").RedrawCanvasWithAnimationExecution | typeof import("./f-canvas").ResetScaleAndCenterExecution | typeof import("./f-canvas").UpdateScaleExecution | typeof import("./f-connection").AddConnectionForCreateToStoreExecution | typeof import("./f-connection").AddConnectionMarkerToStoreExecution | typeof import("./f-connection").AddConnectionToStoreExecution | typeof import("./f-connection").AddSnapConnectionToStoreExecution | typeof import("./f-connection").CreateConnectionMarkersExecution | typeof import("./f-connection").CalculateConnectionLineByBehavior | typeof import("./f-connection").RemoveConnectionFromStoreExecution | typeof import("./f-connection").RemoveConnectionMarkerFromStoreExecution | typeof import("./f-background").AddBackgroundToStoreExecution | typeof import("./f-background").AddPatternToBackgroundExecution | typeof import("./f-background").RemoveBackgroundFromStoreExecution | typeof import("./f-background").SetBackgroundTransformExecution | typeof import("./f-connectors").AddInputToStore | typeof import("./f-connectors").AddOutletToStore | typeof import("./f-connectors").AddOutputToStore | typeof import("./f-connectors").CalculateClosestConnector | typeof import("./f-connectors").FindConnectableConnectorUsingPriorityAndPositionExecution | typeof import("./f-connectors").GetAllCanBeConnectedSourceConnectorsAndRectsExecution | typeof import("./f-connectors").GetAllCanBeConnectedInputsAndRectsExecution | typeof import("./f-connectors").GetConnectorAndRect | typeof import("./f-connectors").MarkConnectableConnectors | typeof import("./f-connectors").RemoveInputFromStore | typeof import("./f-connectors").RemoveOutletFromStoreExecution | typeof import("./f-connectors").RemoveOutputFromStoreExecution | typeof import("./f-connectors").UnmarkConnectableConnectors | typeof import("./f-draggable").AddDndToStoreExecution | typeof import("./f-draggable").OnPointerMoveExecution | typeof import("./f-flow").AddFlowToStoreExecution | typeof import("./f-flow").GetFlowStateNodesExecution | typeof import("./f-line-alignment").AddLineAlignmentToStoreExecution | typeof import("./f-node").AddNodeToStore | typeof import("./f-node").CalculateInputConnections | typeof import("./f-node").CalculateNodesBoundingBoxNormalizedPosition | typeof import("./f-node").CalculateOutputConnections | typeof import("./f-node").FitToChildNodesAndGroups | typeof import("./f-node").GetChildNodeIds | typeof import("./f-node").GetNodePadding | typeof import("./f-node").GetParentNodes | typeof import("./f-node").UpdateNodeWhenStateOrSizeChanged | typeof import("./f-node").RemoveNodeFromStore | typeof import("./f-selection").SelectExecution | typeof import("./f-selection").SelectAndUpdateNodeLayerExecution | typeof import("./f-zoom").AddZoomToStoreExecution | typeof import("./f-zoom").SetZoomExecution | typeof GetDeepChildrenNodesAndGroupsExecution | typeof GetNormalizedConnectorRectExecution | typeof GetNormalizedElementRectExecution | typeof GetNormalizedPointExecution | typeof UpdateItemAndChildrenLayersExecution | typeof MoveFrontElementsBeforeTargetElementExecution)[];
13
+ export declare const COMMON_PROVIDERS: (typeof import("./f-node").AddNodeToStore | typeof import("./f-node").CalculateConnectableSideByConnectedPositions | typeof import("./f-node").CalculateConnectableSideByInternalPosition | typeof import("./f-node").CalculateInputConnections | typeof import("./f-node").CalculateNodeConnectorsConnectableSides | typeof import("./f-node").CalculateNodesBoundingBoxNormalizedPosition | typeof import("./f-node").CalculateOutputConnections | typeof import("./f-node").FitToChildNodesAndGroups | typeof import("./f-node").GetChildNodeIds | typeof import("./f-node").GetNodePadding | typeof import("./f-node").GetParentNodes | typeof import("./f-node").UpdateNodeWhenStateOrSizeChanged | typeof import("./f-node").RemoveNodeFromStore | typeof import("./f-canvas").AddCanvasToStoreExecution | typeof import("./f-canvas").CenterGroupOrNodeExecution | typeof import("./f-canvas").FitToFlowExecution | typeof import("./f-canvas").InputCanvasPositionExecution | typeof import("./f-canvas").InputCanvasScaleExecution | typeof import("./f-canvas").RedrawCanvasWithAnimationExecution | typeof import("./f-canvas").ResetScaleAndCenterExecution | typeof import("./f-canvas").UpdateScaleExecution | typeof import("./f-connection").AddConnectionForCreateToStoreExecution | typeof import("./f-connection").AddConnectionMarkerToStoreExecution | typeof import("./f-connection").AddConnectionToStoreExecution | typeof import("./f-connection").AddSnapConnectionToStoreExecution | typeof import("./f-connection").CreateConnectionMarkersExecution | typeof import("./f-connection").CalculateConnectionLineByBehavior | typeof import("./f-connection").RemoveConnectionFromStoreExecution | typeof import("./f-connection").RemoveConnectionMarkerFromStoreExecution | typeof import("./f-background").AddBackgroundToStoreExecution | typeof import("./f-background").AddPatternToBackgroundExecution | typeof import("./f-background").RemoveBackgroundFromStoreExecution | typeof import("./f-background").SetBackgroundTransformExecution | typeof import("./f-connectors").AddInputToStore | typeof import("./f-connectors").AddOutletToStore | typeof import("./f-connectors").AddOutputToStore | typeof import("./f-connectors").CalculateClosestConnector | typeof import("./f-connectors").FindConnectableConnectorUsingPriorityAndPositionExecution | typeof import("./f-connectors").GetAllCanBeConnectedSourceConnectorsAndRectsExecution | typeof import("./f-connectors").GetAllCanBeConnectedInputsAndRectsExecution | typeof import("./f-connectors").GetConnectorAndRect | typeof import("./f-connectors").MarkConnectableConnectors | typeof import("./f-connectors").RemoveInputFromStore | typeof import("./f-connectors").RemoveOutletFromStoreExecution | typeof import("./f-connectors").RemoveOutputFromStoreExecution | typeof import("./f-connectors").UnmarkConnectableConnectors | typeof import("./f-draggable").AddDndToStoreExecution | typeof import("./f-draggable").OnPointerMoveExecution | typeof import("./f-flow").AddFlowToStoreExecution | typeof import("./f-flow").GetFlowStateNodesExecution | typeof import("./f-line-alignment").AddLineAlignmentToStoreExecution | typeof GetElementRoundedRectExecution | typeof import("./f-selection").SelectExecution | typeof import("./f-selection").SelectAndUpdateNodeLayerExecution | typeof import("./f-zoom").AddZoomToStoreExecution | typeof import("./f-zoom").SetZoomExecution | typeof GetDeepChildrenNodesAndGroupsExecution | typeof GetNormalizedConnectorRectExecution | typeof GetNormalizedElementRectExecution | typeof GetNormalizedPointExecution | typeof UpdateItemAndChildrenLayersExecution | typeof MoveFrontElementsBeforeTargetElementExecution)[];
@@ -0,0 +1,8 @@
1
+ export class CalculateConnectableSideByConnectedPositionsRequest {
2
+ connector;
3
+ static fToken = Symbol('CalculateConnectableSideByConnectedPositionsRequest');
4
+ constructor(connector) {
5
+ this.connector = connector;
6
+ }
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktY29ubmVjdGVkLXBvc2l0aW9ucy1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9kb21haW4vZi1ub2RlL2NhbGN1bGF0ZS1ub2RlLWNvbm5lY3RvcnMtY29ubmVjdGFibGUtc2lkZXMvY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktY29ubmVjdGVkLXBvc2l0aW9ucy9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1jb25uZWN0ZWQtcG9zaXRpb25zLXJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLG1EQUFtRDtJQUVsQztJQUQ1QixNQUFNLENBQVUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3ZGLFlBQTRCLFNBQXlCO1FBQXpCLGNBQVMsR0FBVCxTQUFTLENBQWdCO0lBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZDb25uZWN0b3JCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZi1jb25uZWN0b3JzJztcblxuZXhwb3J0IGNsYXNzIENhbGN1bGF0ZUNvbm5lY3RhYmxlU2lkZUJ5Q29ubmVjdGVkUG9zaXRpb25zUmVxdWVzdCB7XG4gIHN0YXRpYyByZWFkb25seSBmVG9rZW4gPSBTeW1ib2woJ0NhbGN1bGF0ZUNvbm5lY3RhYmxlU2lkZUJ5Q29ubmVjdGVkUG9zaXRpb25zUmVxdWVzdCcpO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgY29ubmVjdG9yOiBGQ29ubmVjdG9yQmFzZSkge31cbn1cbiJdfQ==
@@ -0,0 +1,92 @@
1
+ import { __decorate } from "tslib";
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { FExecutionRegister, FMediator } from '@foblex/mediator';
4
+ import { CalculateConnectableSideByConnectedPositionsRequest } from './calculate-connectable-side-by-connected-positions-request';
5
+ import { EFConnectableSide } from '../../../../f-connectors';
6
+ import { PointExtensions, RectExtensions } from '@foblex/2d';
7
+ import { CalculateConnectableSideByInternalPositionRequest } from '../calculate-connectable-side-by-internal-position';
8
+ import * as i0 from "@angular/core";
9
+ /**
10
+ * Execution that calculates the connectable side for a connector
11
+ * based on the positions of its connected connectors.
12
+ */
13
+ let CalculateConnectableSideByConnectedPositions = class CalculateConnectableSideByConnectedPositions {
14
+ _mediator = inject(FMediator);
15
+ /**
16
+ * Handles the request to calculate the connectable side for a connector
17
+ * based on the positions of its connected connectors.
18
+ *
19
+ * @param request - Contains the connector host element and its connected connectors.
20
+ * @returns {EFConnectableSide} - The calculated connectable side.
21
+ */
22
+ handle({ connector, }) {
23
+ const selfCenter = RectExtensions.fromElement(connector.hostElement).gravityCenter;
24
+ const targetCenters = this._getConnectedCenters(connector.hostElement, connector.toConnector);
25
+ if (!targetCenters.length) {
26
+ return this._mediator.execute(new CalculateConnectableSideByInternalPositionRequest(connector));
27
+ }
28
+ const avg = this._calculateAveragePoint(targetCenters);
29
+ return this._determineSide(selfCenter, avg);
30
+ }
31
+ /**
32
+ * Extracts the gravity centers of connected connectors, excluding the current connector.
33
+ *
34
+ * @param selfHost - The host element of the current connector.
35
+ * @param connected - The list of connected connectors.
36
+ * @returns {Array<{x: number, y: number}>} - An array of gravity center coordinates.
37
+ */
38
+ _getConnectedCenters(selfHost, connected) {
39
+ return (connected ?? [])
40
+ .map((c) => c?.hostElement)
41
+ .filter((el) => !!el && el !== selfHost)
42
+ .map((el) => RectExtensions.fromElement(el).gravityCenter);
43
+ }
44
+ /**
45
+ * Calculates the average point (center of mass) from a set of points.
46
+ *
47
+ * @param points - An array of point objects with x and y coordinates.
48
+ * @returns {{x: number, y: number}} - The average x and y coordinate.
49
+ */
50
+ _calculateAveragePoint(points) {
51
+ const sum = points.reduce((result, p) => {
52
+ result.x += p.x;
53
+ result.y += p.y;
54
+ return result;
55
+ }, PointExtensions.initialize());
56
+ return {
57
+ x: sum.x / points.length,
58
+ y: sum.y / points.length,
59
+ };
60
+ }
61
+ /**
62
+ * Determines the connectable side of the current connector relative to the
63
+ * average position of its connected connectors.
64
+ *
65
+ * @param self - The gravity center of the current connector.
66
+ * @param avg - The average gravity center of connected connectors.
67
+ * @returns {EFConnectableSide} - The chosen side (LEFT, RIGHT, TOP, BOTTOM).
68
+ */
69
+ _determineSide(self, avg) {
70
+ const dx = avg.x - self.x;
71
+ const dy = avg.y - self.y;
72
+ const snapEps = 2; // px — hysteresis threshold to avoid side-flipping near diagonals
73
+ if (Math.abs(dx) - Math.abs(dy) > snapEps) {
74
+ return dx < 0 ? EFConnectableSide.LEFT : EFConnectableSide.RIGHT;
75
+ }
76
+ if (Math.abs(dy) - Math.abs(dx) > snapEps) {
77
+ return dy < 0 ? EFConnectableSide.TOP : EFConnectableSide.BOTTOM;
78
+ }
79
+ // When differences are nearly equal, prefer vertical orientation for stability
80
+ return dy < 0 ? EFConnectableSide.TOP : EFConnectableSide.BOTTOM;
81
+ }
82
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectableSideByConnectedPositions, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
83
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectableSideByConnectedPositions });
84
+ };
85
+ CalculateConnectableSideByConnectedPositions = __decorate([
86
+ FExecutionRegister(CalculateConnectableSideByConnectedPositionsRequest)
87
+ ], CalculateConnectableSideByConnectedPositions);
88
+ export { CalculateConnectableSideByConnectedPositions };
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectableSideByConnectedPositions, decorators: [{
90
+ type: Injectable
91
+ }] });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktY29ubmVjdGVkLXBvc2l0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZG9tYWluL2Ytbm9kZS9jYWxjdWxhdGUtbm9kZS1jb25uZWN0b3JzLWNvbm5lY3RhYmxlLXNpZGVzL2NhbGN1bGF0ZS1jb25uZWN0YWJsZS1zaWRlLWJ5LWNvbm5lY3RlZC1wb3NpdGlvbnMvY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktY29ubmVjdGVkLXBvc2l0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBYyxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxtREFBbUQsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxpQkFBaUIsRUFBa0IsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RSxPQUFPLEVBQVUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRSxPQUFPLEVBQUUsaURBQWlELEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7QUFFdkg7OztHQUdHO0FBR0ksSUFBTSw0Q0FBNEMsR0FBbEQsTUFBTSw0Q0FBNEM7SUFHdEMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvQzs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsRUFDWixTQUFTLEdBQzJDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNuRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMzQixJQUFJLGlEQUFpRCxDQUFDLFNBQVMsQ0FBQyxDQUNqRSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV2RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxvQkFBb0IsQ0FDMUIsUUFBa0MsRUFDbEMsU0FBMkI7UUFFM0IsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7YUFDckIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDO2FBQzFCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBa0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLFFBQVEsQ0FBQzthQUN2RSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssc0JBQXNCLENBQUMsTUFBZ0I7UUFDN0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQWMsRUFBRSxDQUFTLEVBQUUsRUFBRTtZQUN0RCxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUVqQyxPQUFPO1lBQ0wsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU07WUFDeEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU07U0FDekIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssY0FBYyxDQUNwQixJQUE4QixFQUM5QixHQUE2QjtRQUU3QixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtFQUFrRTtRQUVyRixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUMxQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ25FLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUMxQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO1FBQ25FLENBQUM7UUFFRCwrRUFBK0U7UUFDL0UsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztJQUNuRSxDQUFDO3dHQTNGVSw0Q0FBNEM7NEdBQTVDLDRDQUE0Qzs7QUFBNUMsNENBQTRDO0lBRHhELGtCQUFrQixDQUFDLG1EQUFtRCxDQUFDO0dBQzNELDRDQUE0QyxDQTRGeEQ7OzRGQTVGWSw0Q0FBNEM7a0JBRnhELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZFeGVjdXRpb25SZWdpc3RlciwgRk1lZGlhdG9yLCBJRXhlY3V0aW9uIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUNvbm5lY3RlZFBvc2l0aW9uc1JlcXVlc3QgfSBmcm9tICcuL2NhbGN1bGF0ZS1jb25uZWN0YWJsZS1zaWRlLWJ5LWNvbm5lY3RlZC1wb3NpdGlvbnMtcmVxdWVzdCc7XG5pbXBvcnQgeyBFRkNvbm5lY3RhYmxlU2lkZSwgRkNvbm5lY3RvckJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi9mLWNvbm5lY3RvcnMnO1xuaW1wb3J0IHsgSVBvaW50LCBQb2ludEV4dGVuc2lvbnMsIFJlY3RFeHRlbnNpb25zIH0gZnJvbSAnQGZvYmxleC8yZCc7XG5pbXBvcnQgeyBDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUludGVybmFsUG9zaXRpb25SZXF1ZXN0IH0gZnJvbSAnLi4vY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktaW50ZXJuYWwtcG9zaXRpb24nO1xuXG4vKipcbiAqIEV4ZWN1dGlvbiB0aGF0IGNhbGN1bGF0ZXMgdGhlIGNvbm5lY3RhYmxlIHNpZGUgZm9yIGEgY29ubmVjdG9yXG4gKiBiYXNlZCBvbiB0aGUgcG9zaXRpb25zIG9mIGl0cyBjb25uZWN0ZWQgY29ubmVjdG9ycy5cbiAqL1xuQEluamVjdGFibGUoKVxuQEZFeGVjdXRpb25SZWdpc3RlcihDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUNvbm5lY3RlZFBvc2l0aW9uc1JlcXVlc3QpXG5leHBvcnQgY2xhc3MgQ2FsY3VsYXRlQ29ubmVjdGFibGVTaWRlQnlDb25uZWN0ZWRQb3NpdGlvbnNcbiAgaW1wbGVtZW50cyBJRXhlY3V0aW9uPENhbGN1bGF0ZUNvbm5lY3RhYmxlU2lkZUJ5Q29ubmVjdGVkUG9zaXRpb25zUmVxdWVzdCwgRUZDb25uZWN0YWJsZVNpZGU+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lZGlhdG9yID0gaW5qZWN0KEZNZWRpYXRvcik7XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHJlcXVlc3QgdG8gY2FsY3VsYXRlIHRoZSBjb25uZWN0YWJsZSBzaWRlIGZvciBhIGNvbm5lY3RvclxuICAgKiBiYXNlZCBvbiB0aGUgcG9zaXRpb25zIG9mIGl0cyBjb25uZWN0ZWQgY29ubmVjdG9ycy5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgLSBDb250YWlucyB0aGUgY29ubmVjdG9yIGhvc3QgZWxlbWVudCBhbmQgaXRzIGNvbm5lY3RlZCBjb25uZWN0b3JzLlxuICAgKiBAcmV0dXJucyB7RUZDb25uZWN0YWJsZVNpZGV9IC0gVGhlIGNhbGN1bGF0ZWQgY29ubmVjdGFibGUgc2lkZS5cbiAgICovXG4gIHB1YmxpYyBoYW5kbGUoe1xuICAgIGNvbm5lY3RvcixcbiAgfTogQ2FsY3VsYXRlQ29ubmVjdGFibGVTaWRlQnlDb25uZWN0ZWRQb3NpdGlvbnNSZXF1ZXN0KTogRUZDb25uZWN0YWJsZVNpZGUge1xuICAgIGNvbnN0IHNlbGZDZW50ZXIgPSBSZWN0RXh0ZW5zaW9ucy5mcm9tRWxlbWVudChjb25uZWN0b3IuaG9zdEVsZW1lbnQpLmdyYXZpdHlDZW50ZXI7XG4gICAgY29uc3QgdGFyZ2V0Q2VudGVycyA9IHRoaXMuX2dldENvbm5lY3RlZENlbnRlcnMoY29ubmVjdG9yLmhvc3RFbGVtZW50LCBjb25uZWN0b3IudG9Db25uZWN0b3IpO1xuXG4gICAgaWYgKCF0YXJnZXRDZW50ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUoXG4gICAgICAgIG5ldyBDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUludGVybmFsUG9zaXRpb25SZXF1ZXN0KGNvbm5lY3RvciksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGF2ZyA9IHRoaXMuX2NhbGN1bGF0ZUF2ZXJhZ2VQb2ludCh0YXJnZXRDZW50ZXJzKTtcblxuICAgIHJldHVybiB0aGlzLl9kZXRlcm1pbmVTaWRlKHNlbGZDZW50ZXIsIGF2Zyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGdyYXZpdHkgY2VudGVycyBvZiBjb25uZWN0ZWQgY29ubmVjdG9ycywgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGNvbm5lY3Rvci5cbiAgICpcbiAgICogQHBhcmFtIHNlbGZIb3N0IC0gVGhlIGhvc3QgZWxlbWVudCBvZiB0aGUgY3VycmVudCBjb25uZWN0b3IuXG4gICAqIEBwYXJhbSBjb25uZWN0ZWQgLSBUaGUgbGlzdCBvZiBjb25uZWN0ZWQgY29ubmVjdG9ycy5cbiAgICogQHJldHVybnMge0FycmF5PHt4OiBudW1iZXIsIHk6IG51bWJlcn0+fSAtIEFuIGFycmF5IG9mIGdyYXZpdHkgY2VudGVyIGNvb3JkaW5hdGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Q29ubmVjdGVkQ2VudGVycyhcbiAgICBzZWxmSG9zdDogSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50LFxuICAgIGNvbm5lY3RlZDogRkNvbm5lY3RvckJhc2VbXSxcbiAgKTogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9W10ge1xuICAgIHJldHVybiAoY29ubmVjdGVkID8/IFtdKVxuICAgICAgLm1hcCgoYykgPT4gYz8uaG9zdEVsZW1lbnQpXG4gICAgICAuZmlsdGVyKChlbCk6IGVsIGlzIEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCA9PiAhIWVsICYmIGVsICE9PSBzZWxmSG9zdClcbiAgICAgIC5tYXAoKGVsKSA9PiBSZWN0RXh0ZW5zaW9ucy5mcm9tRWxlbWVudChlbCkuZ3Jhdml0eUNlbnRlcik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgYXZlcmFnZSBwb2ludCAoY2VudGVyIG9mIG1hc3MpIGZyb20gYSBzZXQgb2YgcG9pbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gcG9pbnRzIC0gQW4gYXJyYXkgb2YgcG9pbnQgb2JqZWN0cyB3aXRoIHggYW5kIHkgY29vcmRpbmF0ZXMuXG4gICAqIEByZXR1cm5zIHt7eDogbnVtYmVyLCB5OiBudW1iZXJ9fSAtIFRoZSBhdmVyYWdlIHggYW5kIHkgY29vcmRpbmF0ZS5cbiAgICovXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUF2ZXJhZ2VQb2ludChwb2ludHM6IElQb2ludFtdKTogSVBvaW50IHtcbiAgICBjb25zdCBzdW0gPSBwb2ludHMucmVkdWNlKChyZXN1bHQ6IElQb2ludCwgcDogSVBvaW50KSA9PiB7XG4gICAgICByZXN1bHQueCArPSBwLng7XG4gICAgICByZXN1bHQueSArPSBwLnk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgUG9pbnRFeHRlbnNpb25zLmluaXRpYWxpemUoKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogc3VtLnggLyBwb2ludHMubGVuZ3RoLFxuICAgICAgeTogc3VtLnkgLyBwb2ludHMubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgY29ubmVjdGFibGUgc2lkZSBvZiB0aGUgY3VycmVudCBjb25uZWN0b3IgcmVsYXRpdmUgdG8gdGhlXG4gICAqIGF2ZXJhZ2UgcG9zaXRpb24gb2YgaXRzIGNvbm5lY3RlZCBjb25uZWN0b3JzLlxuICAgKlxuICAgKiBAcGFyYW0gc2VsZiAtIFRoZSBncmF2aXR5IGNlbnRlciBvZiB0aGUgY3VycmVudCBjb25uZWN0b3IuXG4gICAqIEBwYXJhbSBhdmcgLSBUaGUgYXZlcmFnZSBncmF2aXR5IGNlbnRlciBvZiBjb25uZWN0ZWQgY29ubmVjdG9ycy5cbiAgICogQHJldHVybnMge0VGQ29ubmVjdGFibGVTaWRlfSAtIFRoZSBjaG9zZW4gc2lkZSAoTEVGVCwgUklHSFQsIFRPUCwgQk9UVE9NKS5cbiAgICovXG4gIHByaXZhdGUgX2RldGVybWluZVNpZGUoXG4gICAgc2VsZjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LFxuICAgIGF2ZzogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LFxuICApOiBFRkNvbm5lY3RhYmxlU2lkZSB7XG4gICAgY29uc3QgZHggPSBhdmcueCAtIHNlbGYueDtcbiAgICBjb25zdCBkeSA9IGF2Zy55IC0gc2VsZi55O1xuICAgIGNvbnN0IHNuYXBFcHMgPSAyOyAvLyBweCDigJQgaHlzdGVyZXNpcyB0aHJlc2hvbGQgdG8gYXZvaWQgc2lkZS1mbGlwcGluZyBuZWFyIGRpYWdvbmFsc1xuXG4gICAgaWYgKE1hdGguYWJzKGR4KSAtIE1hdGguYWJzKGR5KSA+IHNuYXBFcHMpIHtcbiAgICAgIHJldHVybiBkeCA8IDAgPyBFRkNvbm5lY3RhYmxlU2lkZS5MRUZUIDogRUZDb25uZWN0YWJsZVNpZGUuUklHSFQ7XG4gICAgfVxuICAgIGlmIChNYXRoLmFicyhkeSkgLSBNYXRoLmFicyhkeCkgPiBzbmFwRXBzKSB7XG4gICAgICByZXR1cm4gZHkgPCAwID8gRUZDb25uZWN0YWJsZVNpZGUuVE9QIDogRUZDb25uZWN0YWJsZVNpZGUuQk9UVE9NO1xuICAgIH1cblxuICAgIC8vIFdoZW4gZGlmZmVyZW5jZXMgYXJlIG5lYXJseSBlcXVhbCwgcHJlZmVyIHZlcnRpY2FsIG9yaWVudGF0aW9uIGZvciBzdGFiaWxpdHlcbiAgICByZXR1cm4gZHkgPCAwID8gRUZDb25uZWN0YWJsZVNpZGUuVE9QIDogRUZDb25uZWN0YWJsZVNpZGUuQk9UVE9NO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './calculate-connectable-side-by-connected-positions';
2
+ export * from './calculate-connectable-side-by-connected-positions-request';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLW5vZGUvY2FsY3VsYXRlLW5vZGUtY29ubmVjdG9ycy1jb25uZWN0YWJsZS1zaWRlcy9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1jb25uZWN0ZWQtcG9zaXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscURBQXFELENBQUM7QUFFcEUsY0FBYyw2REFBNkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktY29ubmVjdGVkLXBvc2l0aW9ucyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktY29ubmVjdGVkLXBvc2l0aW9ucy1yZXF1ZXN0JztcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ export class CalculateConnectableSideByInternalPositionRequest {
2
+ connector;
3
+ static fToken = Symbol('CalculateConnectableSideByInternalPositionRequest');
4
+ constructor(connector) {
5
+ this.connector = connector;
6
+ }
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktaW50ZXJuYWwtcG9zaXRpb24tcmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZG9tYWluL2Ytbm9kZS9jYWxjdWxhdGUtbm9kZS1jb25uZWN0b3JzLWNvbm5lY3RhYmxlLXNpZGVzL2NhbGN1bGF0ZS1jb25uZWN0YWJsZS1zaWRlLWJ5LWludGVybmFsLXBvc2l0aW9uL2NhbGN1bGF0ZS1jb25uZWN0YWJsZS1zaWRlLWJ5LWludGVybmFsLXBvc2l0aW9uLXJlcXVlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLGlEQUFpRDtJQUVoQztJQUQ1QixNQUFNLENBQVUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ3JGLFlBQTRCLFNBQXlCO1FBQXpCLGNBQVMsR0FBVCxTQUFTLENBQWdCO0lBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZDb25uZWN0b3JCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZi1jb25uZWN0b3JzJztcblxuZXhwb3J0IGNsYXNzIENhbGN1bGF0ZUNvbm5lY3RhYmxlU2lkZUJ5SW50ZXJuYWxQb3NpdGlvblJlcXVlc3Qge1xuICBzdGF0aWMgcmVhZG9ubHkgZlRva2VuID0gU3ltYm9sKCdDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUludGVybmFsUG9zaXRpb25SZXF1ZXN0Jyk7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjb25uZWN0b3I6IEZDb25uZWN0b3JCYXNlKSB7fVxufVxuIl19
@@ -0,0 +1,55 @@
1
+ import { __decorate } from "tslib";
2
+ import { Injectable } from '@angular/core';
3
+ import { FExecutionRegister } from '@foblex/mediator';
4
+ import { CalculateConnectableSideByInternalPositionRequest } from './calculate-connectable-side-by-internal-position-request';
5
+ import { EFConnectableSide } from '../../../../f-connectors';
6
+ import { RectExtensions } from '@foblex/2d';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * Execution that calculates the connectable side for a connector
10
+ * based on the internal position of the connector relative to its node host.
11
+ */
12
+ let CalculateConnectableSideByInternalPosition = class CalculateConnectableSideByInternalPosition {
13
+ handle({ connector, }) {
14
+ return this._getSideByDelta(connector.hostElement, connector.fNodeHost);
15
+ }
16
+ /**
17
+ * Determines the side of the connector relative to the node host based on the minimum distance.
18
+ * @param connectorHost
19
+ * @param nodeHost
20
+ * @private
21
+ */
22
+ _getSideByDelta(connectorHost, nodeHost) {
23
+ let result;
24
+ const childRect = RectExtensions.fromElement(connectorHost);
25
+ const parentRect = nodeHost.getBoundingClientRect();
26
+ const deltaLeft = childRect.gravityCenter.x - parentRect.left;
27
+ const deltaRight = parentRect.right - childRect.gravityCenter.x;
28
+ const deltaTop = childRect.gravityCenter.y - parentRect.top;
29
+ const deltaBottom = parentRect.bottom - childRect.gravityCenter.y;
30
+ const minDelta = Math.min(deltaLeft, deltaRight, deltaTop, deltaBottom);
31
+ if (minDelta === deltaLeft) {
32
+ result = EFConnectableSide.LEFT;
33
+ }
34
+ else if (minDelta === deltaRight) {
35
+ result = EFConnectableSide.RIGHT;
36
+ }
37
+ else if (minDelta === deltaTop) {
38
+ result = EFConnectableSide.TOP;
39
+ }
40
+ else {
41
+ result = EFConnectableSide.BOTTOM;
42
+ }
43
+ return result;
44
+ }
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectableSideByInternalPosition, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
46
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectableSideByInternalPosition });
47
+ };
48
+ CalculateConnectableSideByInternalPosition = __decorate([
49
+ FExecutionRegister(CalculateConnectableSideByInternalPositionRequest)
50
+ ], CalculateConnectableSideByInternalPosition);
51
+ export { CalculateConnectableSideByInternalPosition };
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateConnectableSideByInternalPosition, decorators: [{
53
+ type: Injectable
54
+ }] });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLWNvbm5lY3RhYmxlLXNpZGUtYnktaW50ZXJuYWwtcG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLW5vZGUvY2FsY3VsYXRlLW5vZGUtY29ubmVjdG9ycy1jb25uZWN0YWJsZS1zaWRlcy9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1pbnRlcm5hbC1wb3NpdGlvbi9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1pbnRlcm5hbC1wb3NpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaURBQWlELEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUM5SCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQUU1Qzs7O0dBR0c7QUFHSSxJQUFNLDBDQUEwQyxHQUFoRCxNQUFNLDBDQUEwQztJQUc5QyxNQUFNLENBQUMsRUFDWixTQUFTLEdBQ3lDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxlQUFlLENBQ3JCLGFBQXVDLEVBQ3ZDLFFBQWtDO1FBRWxDLElBQUksTUFBcUMsQ0FBQztRQUUxQyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRXBELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDOUQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFFbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV4RSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQixNQUFNLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1FBQ2xDLENBQUM7YUFBTSxJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ25DLENBQUM7YUFBTSxJQUFJLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDO1FBQ2pDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztRQUNwQyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzt3R0ExQ1UsMENBQTBDOzRHQUExQywwQ0FBMEM7O0FBQTFDLDBDQUEwQztJQUR0RCxrQkFBa0IsQ0FBQyxpREFBaUQsQ0FBQztHQUN6RCwwQ0FBMEMsQ0EyQ3REOzs0RkEzQ1ksMENBQTBDO2tCQUZ0RCxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkV4ZWN1dGlvblJlZ2lzdGVyLCBJRXhlY3V0aW9uIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQgeyBDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUludGVybmFsUG9zaXRpb25SZXF1ZXN0IH0gZnJvbSAnLi9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1pbnRlcm5hbC1wb3NpdGlvbi1yZXF1ZXN0JztcbmltcG9ydCB7IEVGQ29ubmVjdGFibGVTaWRlIH0gZnJvbSAnLi4vLi4vLi4vLi4vZi1jb25uZWN0b3JzJztcbmltcG9ydCB7IFJlY3RFeHRlbnNpb25zIH0gZnJvbSAnQGZvYmxleC8yZCc7XG5cbi8qKlxuICogRXhlY3V0aW9uIHRoYXQgY2FsY3VsYXRlcyB0aGUgY29ubmVjdGFibGUgc2lkZSBmb3IgYSBjb25uZWN0b3JcbiAqIGJhc2VkIG9uIHRoZSBpbnRlcm5hbCBwb3NpdGlvbiBvZiB0aGUgY29ubmVjdG9yIHJlbGF0aXZlIHRvIGl0cyBub2RlIGhvc3QuXG4gKi9cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoQ2FsY3VsYXRlQ29ubmVjdGFibGVTaWRlQnlJbnRlcm5hbFBvc2l0aW9uUmVxdWVzdClcbmV4cG9ydCBjbGFzcyBDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUludGVybmFsUG9zaXRpb25cbiAgaW1wbGVtZW50cyBJRXhlY3V0aW9uPENhbGN1bGF0ZUNvbm5lY3RhYmxlU2lkZUJ5SW50ZXJuYWxQb3NpdGlvblJlcXVlc3QsIEVGQ29ubmVjdGFibGVTaWRlPlxue1xuICBwdWJsaWMgaGFuZGxlKHtcbiAgICBjb25uZWN0b3IsXG4gIH06IENhbGN1bGF0ZUNvbm5lY3RhYmxlU2lkZUJ5SW50ZXJuYWxQb3NpdGlvblJlcXVlc3QpOiBFRkNvbm5lY3RhYmxlU2lkZSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFNpZGVCeURlbHRhKGNvbm5lY3Rvci5ob3N0RWxlbWVudCwgY29ubmVjdG9yLmZOb2RlSG9zdCk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgc2lkZSBvZiB0aGUgY29ubmVjdG9yIHJlbGF0aXZlIHRvIHRoZSBub2RlIGhvc3QgYmFzZWQgb24gdGhlIG1pbmltdW0gZGlzdGFuY2UuXG4gICAqIEBwYXJhbSBjb25uZWN0b3JIb3N0XG4gICAqIEBwYXJhbSBub2RlSG9zdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U2lkZUJ5RGVsdGEoXG4gICAgY29ubmVjdG9ySG9zdDogSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50LFxuICAgIG5vZGVIb3N0OiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQsXG4gICk6IEVGQ29ubmVjdGFibGVTaWRlIHtcbiAgICBsZXQgcmVzdWx0OiBFRkNvbm5lY3RhYmxlU2lkZSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNoaWxkUmVjdCA9IFJlY3RFeHRlbnNpb25zLmZyb21FbGVtZW50KGNvbm5lY3Rvckhvc3QpO1xuICAgIGNvbnN0IHBhcmVudFJlY3QgPSBub2RlSG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IGRlbHRhTGVmdCA9IGNoaWxkUmVjdC5ncmF2aXR5Q2VudGVyLnggLSBwYXJlbnRSZWN0LmxlZnQ7XG4gICAgY29uc3QgZGVsdGFSaWdodCA9IHBhcmVudFJlY3QucmlnaHQgLSBjaGlsZFJlY3QuZ3Jhdml0eUNlbnRlci54O1xuICAgIGNvbnN0IGRlbHRhVG9wID0gY2hpbGRSZWN0LmdyYXZpdHlDZW50ZXIueSAtIHBhcmVudFJlY3QudG9wO1xuICAgIGNvbnN0IGRlbHRhQm90dG9tID0gcGFyZW50UmVjdC5ib3R0b20gLSBjaGlsZFJlY3QuZ3Jhdml0eUNlbnRlci55O1xuXG4gICAgY29uc3QgbWluRGVsdGEgPSBNYXRoLm1pbihkZWx0YUxlZnQsIGRlbHRhUmlnaHQsIGRlbHRhVG9wLCBkZWx0YUJvdHRvbSk7XG5cbiAgICBpZiAobWluRGVsdGEgPT09IGRlbHRhTGVmdCkge1xuICAgICAgcmVzdWx0ID0gRUZDb25uZWN0YWJsZVNpZGUuTEVGVDtcbiAgICB9IGVsc2UgaWYgKG1pbkRlbHRhID09PSBkZWx0YVJpZ2h0KSB7XG4gICAgICByZXN1bHQgPSBFRkNvbm5lY3RhYmxlU2lkZS5SSUdIVDtcbiAgICB9IGVsc2UgaWYgKG1pbkRlbHRhID09PSBkZWx0YVRvcCkge1xuICAgICAgcmVzdWx0ID0gRUZDb25uZWN0YWJsZVNpZGUuVE9QO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBFRkNvbm5lY3RhYmxlU2lkZS5CT1RUT007XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './calculate-connectable-side-by-internal-position';
2
+ export * from './calculate-connectable-side-by-internal-position-request';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLW5vZGUvY2FsY3VsYXRlLW5vZGUtY29ubmVjdG9ycy1jb25uZWN0YWJsZS1zaWRlcy9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1pbnRlcm5hbC1wb3NpdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1EQUFtRCxDQUFDO0FBRWxFLGNBQWMsMkRBQTJELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NhbGN1bGF0ZS1jb25uZWN0YWJsZS1zaWRlLWJ5LWludGVybmFsLXBvc2l0aW9uJztcblxuZXhwb3J0ICogZnJvbSAnLi9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1pbnRlcm5hbC1wb3NpdGlvbi1yZXF1ZXN0JztcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ export class CalculateNodeConnectorsConnectableSidesRequest {
2
+ node;
3
+ static fToken = Symbol('CalculateNodeConnectorsConnectableSidesRequest');
4
+ constructor(node) {
5
+ this.node = node;
6
+ }
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLW5vZGUtY29ubmVjdG9ycy1jb25uZWN0YWJsZS1zaWRlcy1yZXF1ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZi1mbG93L3NyYy9kb21haW4vZi1ub2RlL2NhbGN1bGF0ZS1ub2RlLWNvbm5lY3RvcnMtY29ubmVjdGFibGUtc2lkZXMvY2FsY3VsYXRlLW5vZGUtY29ubmVjdG9ycy1jb25uZWN0YWJsZS1zaWRlcy1yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyw4Q0FBOEM7SUFFN0I7SUFENUIsTUFBTSxDQUFVLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUNsRixZQUE0QixJQUFlO1FBQWYsU0FBSSxHQUFKLElBQUksQ0FBVztJQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGTm9kZUJhc2UgfSBmcm9tICcuLi8uLi8uLi9mLW5vZGUnO1xuXG5leHBvcnQgY2xhc3MgQ2FsY3VsYXRlTm9kZUNvbm5lY3RvcnNDb25uZWN0YWJsZVNpZGVzUmVxdWVzdCB7XG4gIHN0YXRpYyByZWFkb25seSBmVG9rZW4gPSBTeW1ib2woJ0NhbGN1bGF0ZU5vZGVDb25uZWN0b3JzQ29ubmVjdGFibGVTaWRlc1JlcXVlc3QnKTtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG5vZGU6IEZOb2RlQmFzZSkge31cbn1cbiJdfQ==
@@ -0,0 +1,99 @@
1
+ import { __decorate } from "tslib";
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { FExecutionRegister, FMediator } from '@foblex/mediator';
4
+ import { CalculateNodeConnectorsConnectableSidesRequest } from './calculate-node-connectors-connectable-sides-request';
5
+ import { EFConnectableSide } from '../../../f-connectors';
6
+ import { CalculateConnectableSideByConnectedPositionsRequest } from './calculate-connectable-side-by-connected-positions';
7
+ import { CalculateConnectableSideByInternalPositionRequest } from './calculate-connectable-side-by-internal-position';
8
+ import * as i0 from "@angular/core";
9
+ /**
10
+ * Execution that calculates connectable sides for all connectors of a node.
11
+ *
12
+ * Responsibility:
13
+ * - For each connector, decide the effective connectable side according to:
14
+ * - AUTO -> by internal position relative to node host
15
+ * - CALCULATE -> by positions of connected connectors
16
+ * - explicit -> use the user-defined side as-is
17
+ * - For each `toConnector` whose user side is CALCULATE, recalculate it as well.
18
+ */
19
+ let CalculateNodeConnectorsConnectableSides = class CalculateNodeConnectorsConnectableSides {
20
+ _mediator = inject(FMediator);
21
+ /**
22
+ * Orchestrates side calculation for all connectors of the given node.
23
+ *
24
+ * @param request.node - Node whose connectors should be recalculated.
25
+ */
26
+ handle({ node }) {
27
+ node.connectors.forEach((connector) => {
28
+ this._updateConnectorSide(connector);
29
+ this._updateConnectedTargets(connector);
30
+ });
31
+ }
32
+ /**
33
+ * Calculates and assigns the connectable side for a single connector.
34
+ *
35
+ * @param connector - The connector being updated.
36
+ */
37
+ _updateConnectorSide(connector) {
38
+ connector.fConnectableSide = this._resolveSideForConnector(connector);
39
+ }
40
+ /**
41
+ * Recalculates connectable sides for all `toConnector` items that are marked as CALCULATE.
42
+ *
43
+ * @param source - The source connector whose outgoing connections should be processed.
44
+ */
45
+ _updateConnectedTargets(source) {
46
+ source.toConnector.forEach((target) => {
47
+ if (target.userFConnectableSide === EFConnectableSide.CALCULATE) {
48
+ target.fConnectableSide = this._resolveSideByConnectedPositions(target);
49
+ }
50
+ });
51
+ }
52
+ /**
53
+ * Resolves the effective side for a connector according to its user preference.
54
+ *
55
+ * @param connector - The connector to resolve side for.
56
+ * @returns {EFConnectableSide} - The resolved side.
57
+ */
58
+ _resolveSideForConnector(connector) {
59
+ const preference = connector.userFConnectableSide;
60
+ if (preference === EFConnectableSide.AUTO) {
61
+ return this._resolveSideByInternalPosition(connector);
62
+ }
63
+ if (preference === EFConnectableSide.CALCULATE) {
64
+ return this._resolveSideByConnectedPositions(connector);
65
+ }
66
+ // Explicit side set by the user
67
+ return preference;
68
+ }
69
+ /**
70
+ * Calculates side using the connector's internal position relative to the node host.
71
+ * Delegates to `CalculateConnectableSideByInternalPositionRequest`.
72
+ *
73
+ * @param connector - Current connector.
74
+ * @returns {EFConnectableSide}
75
+ */
76
+ _resolveSideByInternalPosition(connector) {
77
+ return this._mediator.execute(new CalculateConnectableSideByInternalPositionRequest(connector));
78
+ }
79
+ /**
80
+ * Calculates side using average positions of connectors connected to the given connector.
81
+ * Delegates to `CalculateConnectableSideByConnectedPositionsRequest`.
82
+ *
83
+ * @param connector - Current connector.
84
+ * @returns {EFConnectableSide}
85
+ */
86
+ _resolveSideByConnectedPositions(connector) {
87
+ return this._mediator.execute(new CalculateConnectableSideByConnectedPositionsRequest(connector));
88
+ }
89
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateNodeConnectorsConnectableSides, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
90
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateNodeConnectorsConnectableSides });
91
+ };
92
+ CalculateNodeConnectorsConnectableSides = __decorate([
93
+ FExecutionRegister(CalculateNodeConnectorsConnectableSidesRequest)
94
+ ], CalculateNodeConnectorsConnectableSides);
95
+ export { CalculateNodeConnectorsConnectableSides };
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalculateNodeConnectorsConnectableSides, decorators: [{
97
+ type: Injectable
98
+ }] });
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLW5vZGUtY29ubmVjdG9ycy1jb25uZWN0YWJsZS1zaWRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZG9tYWluL2Ytbm9kZS9jYWxjdWxhdGUtbm9kZS1jb25uZWN0b3JzLWNvbm5lY3RhYmxlLXNpZGVzL2NhbGN1bGF0ZS1ub2RlLWNvbm5lY3RvcnMtY29ubmVjdGFibGUtc2lkZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN2SCxPQUFPLEVBQUUsaUJBQWlCLEVBQWtCLE1BQU0sdUJBQXVCLENBQUM7QUFDMUUsT0FBTyxFQUFFLG1EQUFtRCxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDMUgsT0FBTyxFQUFFLGlEQUFpRCxFQUFFLE1BQU0sbURBQW1ELENBQUM7O0FBRXRIOzs7Ozs7Ozs7R0FTRztBQUdJLElBQU0sdUNBQXVDLEdBQTdDLE1BQU0sdUNBQXVDO0lBR2pDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFL0M7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBa0Q7UUFDcEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUF5QixFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssb0JBQW9CLENBQUMsU0FBeUI7UUFDcEQsU0FBUyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHVCQUF1QixDQUFDLE1BQXNCO1FBQ3BELE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEMsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEtBQUssaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2hFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUUsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssd0JBQXdCLENBQUMsU0FBeUI7UUFDeEQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1FBRWxELElBQUksVUFBVSxLQUFLLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxJQUFJLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyw4QkFBOEIsQ0FBQyxTQUF5QjtRQUM5RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksaURBQWlELENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0NBQWdDLENBQUMsU0FBeUI7UUFDaEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDM0IsSUFBSSxtREFBbUQsQ0FBQyxTQUFTLENBQUMsQ0FDbkUsQ0FBQztJQUNKLENBQUM7d0dBbEZVLHVDQUF1Qzs0R0FBdkMsdUNBQXVDOztBQUF2Qyx1Q0FBdUM7SUFEbkQsa0JBQWtCLENBQUMsOENBQThDLENBQUM7R0FDdEQsdUNBQXVDLENBbUZuRDs7NEZBbkZZLHVDQUF1QztrQkFGbkQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkV4ZWN1dGlvblJlZ2lzdGVyLCBGTWVkaWF0b3IsIElFeGVjdXRpb24gfSBmcm9tICdAZm9ibGV4L21lZGlhdG9yJztcbmltcG9ydCB7IENhbGN1bGF0ZU5vZGVDb25uZWN0b3JzQ29ubmVjdGFibGVTaWRlc1JlcXVlc3QgfSBmcm9tICcuL2NhbGN1bGF0ZS1ub2RlLWNvbm5lY3RvcnMtY29ubmVjdGFibGUtc2lkZXMtcmVxdWVzdCc7XG5pbXBvcnQgeyBFRkNvbm5lY3RhYmxlU2lkZSwgRkNvbm5lY3RvckJhc2UgfSBmcm9tICcuLi8uLi8uLi9mLWNvbm5lY3RvcnMnO1xuaW1wb3J0IHsgQ2FsY3VsYXRlQ29ubmVjdGFibGVTaWRlQnlDb25uZWN0ZWRQb3NpdGlvbnNSZXF1ZXN0IH0gZnJvbSAnLi9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1jb25uZWN0ZWQtcG9zaXRpb25zJztcbmltcG9ydCB7IENhbGN1bGF0ZUNvbm5lY3RhYmxlU2lkZUJ5SW50ZXJuYWxQb3NpdGlvblJlcXVlc3QgfSBmcm9tICcuL2NhbGN1bGF0ZS1jb25uZWN0YWJsZS1zaWRlLWJ5LWludGVybmFsLXBvc2l0aW9uJztcblxuLyoqXG4gKiBFeGVjdXRpb24gdGhhdCBjYWxjdWxhdGVzIGNvbm5lY3RhYmxlIHNpZGVzIGZvciBhbGwgY29ubmVjdG9ycyBvZiBhIG5vZGUuXG4gKlxuICogUmVzcG9uc2liaWxpdHk6XG4gKiAtIEZvciBlYWNoIGNvbm5lY3RvciwgZGVjaWRlIHRoZSBlZmZlY3RpdmUgY29ubmVjdGFibGUgc2lkZSBhY2NvcmRpbmcgdG86XG4gKiAgIC0gQVVUTyAgICAgICAtPiBieSBpbnRlcm5hbCBwb3NpdGlvbiByZWxhdGl2ZSB0byBub2RlIGhvc3RcbiAqICAgLSBDQUxDVUxBVEUgIC0+IGJ5IHBvc2l0aW9ucyBvZiBjb25uZWN0ZWQgY29ubmVjdG9yc1xuICogICAtIGV4cGxpY2l0ICAgLT4gdXNlIHRoZSB1c2VyLWRlZmluZWQgc2lkZSBhcy1pc1xuICogLSBGb3IgZWFjaCBgdG9Db25uZWN0b3JgIHdob3NlIHVzZXIgc2lkZSBpcyBDQUxDVUxBVEUsIHJlY2FsY3VsYXRlIGl0IGFzIHdlbGwuXG4gKi9cbkBJbmplY3RhYmxlKClcbkBGRXhlY3V0aW9uUmVnaXN0ZXIoQ2FsY3VsYXRlTm9kZUNvbm5lY3RvcnNDb25uZWN0YWJsZVNpZGVzUmVxdWVzdClcbmV4cG9ydCBjbGFzcyBDYWxjdWxhdGVOb2RlQ29ubmVjdG9yc0Nvbm5lY3RhYmxlU2lkZXNcbiAgaW1wbGVtZW50cyBJRXhlY3V0aW9uPENhbGN1bGF0ZU5vZGVDb25uZWN0b3JzQ29ubmVjdGFibGVTaWRlc1JlcXVlc3QsIHZvaWQ+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lZGlhdG9yID0gaW5qZWN0KEZNZWRpYXRvcik7XG5cbiAgLyoqXG4gICAqIE9yY2hlc3RyYXRlcyBzaWRlIGNhbGN1bGF0aW9uIGZvciBhbGwgY29ubmVjdG9ycyBvZiB0aGUgZ2l2ZW4gbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3Qubm9kZSAtIE5vZGUgd2hvc2UgY29ubmVjdG9ycyBzaG91bGQgYmUgcmVjYWxjdWxhdGVkLlxuICAgKi9cbiAgcHVibGljIGhhbmRsZSh7IG5vZGUgfTogQ2FsY3VsYXRlTm9kZUNvbm5lY3RvcnNDb25uZWN0YWJsZVNpZGVzUmVxdWVzdCk6IHZvaWQge1xuICAgIG5vZGUuY29ubmVjdG9ycy5mb3JFYWNoKChjb25uZWN0b3I6IEZDb25uZWN0b3JCYXNlKSA9PiB7XG4gICAgICB0aGlzLl91cGRhdGVDb25uZWN0b3JTaWRlKGNvbm5lY3Rvcik7XG4gICAgICB0aGlzLl91cGRhdGVDb25uZWN0ZWRUYXJnZXRzKGNvbm5lY3Rvcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhbmQgYXNzaWducyB0aGUgY29ubmVjdGFibGUgc2lkZSBmb3IgYSBzaW5nbGUgY29ubmVjdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gY29ubmVjdG9yIC0gVGhlIGNvbm5lY3RvciBiZWluZyB1cGRhdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlQ29ubmVjdG9yU2lkZShjb25uZWN0b3I6IEZDb25uZWN0b3JCYXNlKTogdm9pZCB7XG4gICAgY29ubmVjdG9yLmZDb25uZWN0YWJsZVNpZGUgPSB0aGlzLl9yZXNvbHZlU2lkZUZvckNvbm5lY3Rvcihjb25uZWN0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYXRlcyBjb25uZWN0YWJsZSBzaWRlcyBmb3IgYWxsIGB0b0Nvbm5lY3RvcmAgaXRlbXMgdGhhdCBhcmUgbWFya2VkIGFzIENBTENVTEFURS5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2UgY29ubmVjdG9yIHdob3NlIG91dGdvaW5nIGNvbm5lY3Rpb25zIHNob3VsZCBiZSBwcm9jZXNzZWQuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVDb25uZWN0ZWRUYXJnZXRzKHNvdXJjZTogRkNvbm5lY3RvckJhc2UpOiB2b2lkIHtcbiAgICBzb3VyY2UudG9Db25uZWN0b3IuZm9yRWFjaCgodGFyZ2V0KSA9PiB7XG4gICAgICBpZiAodGFyZ2V0LnVzZXJGQ29ubmVjdGFibGVTaWRlID09PSBFRkNvbm5lY3RhYmxlU2lkZS5DQUxDVUxBVEUpIHtcbiAgICAgICAgdGFyZ2V0LmZDb25uZWN0YWJsZVNpZGUgPSB0aGlzLl9yZXNvbHZlU2lkZUJ5Q29ubmVjdGVkUG9zaXRpb25zKHRhcmdldCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgdGhlIGVmZmVjdGl2ZSBzaWRlIGZvciBhIGNvbm5lY3RvciBhY2NvcmRpbmcgdG8gaXRzIHVzZXIgcHJlZmVyZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbm5lY3RvciAtIFRoZSBjb25uZWN0b3IgdG8gcmVzb2x2ZSBzaWRlIGZvci5cbiAgICogQHJldHVybnMge0VGQ29ubmVjdGFibGVTaWRlfSAtIFRoZSByZXNvbHZlZCBzaWRlLlxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzb2x2ZVNpZGVGb3JDb25uZWN0b3IoY29ubmVjdG9yOiBGQ29ubmVjdG9yQmFzZSk6IEVGQ29ubmVjdGFibGVTaWRlIHtcbiAgICBjb25zdCBwcmVmZXJlbmNlID0gY29ubmVjdG9yLnVzZXJGQ29ubmVjdGFibGVTaWRlO1xuXG4gICAgaWYgKHByZWZlcmVuY2UgPT09IEVGQ29ubmVjdGFibGVTaWRlLkFVVE8pIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlU2lkZUJ5SW50ZXJuYWxQb3NpdGlvbihjb25uZWN0b3IpO1xuICAgIH1cblxuICAgIGlmIChwcmVmZXJlbmNlID09PSBFRkNvbm5lY3RhYmxlU2lkZS5DQUxDVUxBVEUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZXNvbHZlU2lkZUJ5Q29ubmVjdGVkUG9zaXRpb25zKGNvbm5lY3Rvcik7XG4gICAgfVxuXG4gICAgLy8gRXhwbGljaXQgc2lkZSBzZXQgYnkgdGhlIHVzZXJcbiAgICByZXR1cm4gcHJlZmVyZW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHNpZGUgdXNpbmcgdGhlIGNvbm5lY3RvcidzIGludGVybmFsIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBub2RlIGhvc3QuXG4gICAqIERlbGVnYXRlcyB0byBgQ2FsY3VsYXRlQ29ubmVjdGFibGVTaWRlQnlJbnRlcm5hbFBvc2l0aW9uUmVxdWVzdGAuXG4gICAqXG4gICAqIEBwYXJhbSBjb25uZWN0b3IgLSBDdXJyZW50IGNvbm5lY3Rvci5cbiAgICogQHJldHVybnMge0VGQ29ubmVjdGFibGVTaWRlfVxuICAgKi9cbiAgcHJpdmF0ZSBfcmVzb2x2ZVNpZGVCeUludGVybmFsUG9zaXRpb24oY29ubmVjdG9yOiBGQ29ubmVjdG9yQmFzZSk6IEVGQ29ubmVjdGFibGVTaWRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZShuZXcgQ2FsY3VsYXRlQ29ubmVjdGFibGVTaWRlQnlJbnRlcm5hbFBvc2l0aW9uUmVxdWVzdChjb25uZWN0b3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHNpZGUgdXNpbmcgYXZlcmFnZSBwb3NpdGlvbnMgb2YgY29ubmVjdG9ycyBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuIGNvbm5lY3Rvci5cbiAgICogRGVsZWdhdGVzIHRvIGBDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUNvbm5lY3RlZFBvc2l0aW9uc1JlcXVlc3RgLlxuICAgKlxuICAgKiBAcGFyYW0gY29ubmVjdG9yIC0gQ3VycmVudCBjb25uZWN0b3IuXG4gICAqIEByZXR1cm5zIHtFRkNvbm5lY3RhYmxlU2lkZX1cbiAgICovXG4gIHByaXZhdGUgX3Jlc29sdmVTaWRlQnlDb25uZWN0ZWRQb3NpdGlvbnMoY29ubmVjdG9yOiBGQ29ubmVjdG9yQmFzZSk6IEVGQ29ubmVjdGFibGVTaWRlIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZShcbiAgICAgIG5ldyBDYWxjdWxhdGVDb25uZWN0YWJsZVNpZGVCeUNvbm5lY3RlZFBvc2l0aW9uc1JlcXVlc3QoY29ubmVjdG9yKSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export * from './calculate-connectable-side-by-connected-positions';
2
+ export * from './calculate-connectable-side-by-internal-position';
3
+ export * from './calculate-node-connectors-connectable-sides';
4
+ export * from './calculate-node-connectors-connectable-sides-request';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2RvbWFpbi9mLW5vZGUvY2FsY3VsYXRlLW5vZGUtY29ubmVjdG9ycy1jb25uZWN0YWJsZS1zaWRlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFEQUFxRCxDQUFDO0FBRXBFLGNBQWMsbURBQW1ELENBQUM7QUFFbEUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLHVEQUF1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1jb25uZWN0ZWQtcG9zaXRpb25zJztcblxuZXhwb3J0ICogZnJvbSAnLi9jYWxjdWxhdGUtY29ubmVjdGFibGUtc2lkZS1ieS1pbnRlcm5hbC1wb3NpdGlvbic7XG5cbmV4cG9ydCAqIGZyb20gJy4vY2FsY3VsYXRlLW5vZGUtY29ubmVjdG9ycy1jb25uZWN0YWJsZS1zaWRlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NhbGN1bGF0ZS1ub2RlLWNvbm5lY3RvcnMtY29ubmVjdGFibGUtc2lkZXMtcmVxdWVzdCc7XG4iXX0=