@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.
- 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
- 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
- package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/index.d.ts +2 -0
- 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
- 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
- package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-internal-position/index.d.ts +2 -0
- package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-node-connectors-connectable-sides-request.d.ts +6 -0
- package/domain/f-node/calculate-node-connectors-connectable-sides/calculate-node-connectors-connectable-sides.d.ts +59 -0
- package/domain/f-node/calculate-node-connectors-connectable-sides/index.d.ts +4 -0
- package/domain/f-node/index.d.ts +1 -0
- package/domain/f-node/providers.d.ts +4 -3
- package/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed-request.d.ts +2 -2
- package/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed.d.ts +0 -23
- package/domain/providers.d.ts +1 -1
- 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
- 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
- package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-connected-positions/index.mjs +3 -0
- 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
- 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
- package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-connectable-side-by-internal-position/index.mjs +3 -0
- package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-node-connectors-connectable-sides-request.mjs +8 -0
- package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/calculate-node-connectors-connectable-sides.mjs +99 -0
- package/esm2022/domain/f-node/calculate-node-connectors-connectable-sides/index.mjs +5 -0
- package/esm2022/domain/f-node/index.mjs +2 -1
- package/esm2022/domain/f-node/providers.mjs +8 -4
- package/esm2022/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed-request.mjs +1 -1
- package/esm2022/domain/f-node/update-node-when-state-or-size-changed/update-node-when-state-or-size-changed.mjs +10 -67
- package/esm2022/f-connectors/e-f-connectable-side.mjs +2 -1
- package/esm2022/f-connectors/f-connector-base.mjs +1 -1
- package/esm2022/f-connectors/f-node-input/f-node-input.directive.mjs +4 -1
- package/esm2022/f-connectors/f-node-outlet/f-node-outlet.directive.mjs +4 -1
- package/esm2022/f-connectors/f-node-output/f-node-output.directive.mjs +4 -1
- package/esm2022/f-node/f-group.directive.mjs +20 -12
- package/esm2022/f-node/f-node-base.mjs +2 -2
- package/esm2022/f-node/f-node.directive.mjs +15 -3
- package/f-connection/providers.d.ts +1 -1
- package/f-connectors/e-f-connectable-side.d.ts +1 -0
- package/f-connectors/f-connector-base.d.ts +1 -0
- package/f-connectors/f-node-input/f-node-input.directive.d.ts +1 -0
- package/f-connectors/f-node-outlet/f-node-outlet.directive.d.ts +1 -0
- package/f-connectors/f-node-output/f-node-output.directive.d.ts +1 -0
- package/f-connectors/providers.d.ts +1 -1
- package/f-node/f-group.directive.d.ts +4 -1
- package/f-node/f-node-base.d.ts +1 -1
- package/f-node/f-node.directive.d.ts +3 -0
- package/f-node/providers.d.ts +2 -2
- package/fesm2022/foblex-flow.mjs +292 -71
- package/fesm2022/foblex-flow.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -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,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,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';
|
package/domain/f-node/index.d.ts
CHANGED
|
@@ -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
|
|
12
|
-
import { FitToChildNodesAndGroups } from
|
|
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>;
|
package/domain/providers.d.ts
CHANGED
|
@@ -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
|
|
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=
|