ngx-vflow 1.16.3 → 2.0.0
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/README.md +35 -69
- package/fesm2022/ngx-vflow-testing.mjs +77 -67
- package/fesm2022/ngx-vflow-testing.mjs.map +1 -1
- package/fesm2022/ngx-vflow.mjs +926 -559
- package/fesm2022/ngx-vflow.mjs.map +1 -1
- package/lib/vflow/components/custom-node-base/custom-node-base.component.d.ts +1 -1
- package/lib/vflow/components/vflow/vflow.component.d.ts +18 -9
- package/lib/vflow/directives/auto-pan.directive.d.ts +16 -0
- package/lib/vflow/directives/changes-controller.directive.d.ts +13 -87
- package/lib/vflow/directives/connection-controller.directive.d.ts +8 -10
- package/lib/vflow/directives/space-point-context.directive.d.ts +2 -1
- package/lib/vflow/interfaces/component-node-event.interface.d.ts +1 -2
- package/lib/vflow/interfaces/connection-events.interface.d.ts +66 -0
- package/lib/vflow/interfaces/connection-settings.interface.d.ts +7 -1
- package/lib/vflow/interfaces/connection.interface.d.ts +0 -5
- package/lib/vflow/interfaces/curve-factory.interface.d.ts +2 -2
- package/lib/vflow/interfaces/edge-label.interface.d.ts +0 -4
- package/lib/vflow/interfaces/edge.interface.d.ts +36 -8
- package/lib/vflow/interfaces/node.interface.d.ts +44 -63
- package/lib/vflow/interfaces/selection-strategy.interface.d.ts +16 -0
- package/lib/vflow/interfaces/template-context.interface.d.ts +8 -3
- package/lib/vflow/models/connection.model.d.ts +1 -1
- package/lib/vflow/models/edge.model.d.ts +20 -23
- package/lib/vflow/models/handle.model.d.ts +1 -1
- package/lib/vflow/models/node.model.d.ts +4 -7
- package/lib/vflow/public-components/custom-node/custom-node.component.d.ts +1 -1
- package/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.d.ts +2 -1
- package/lib/vflow/public-components/minimap/minimap.component.d.ts +1 -1
- package/lib/vflow/services/draggable.service.d.ts +3 -0
- package/lib/vflow/services/flow-entities.service.d.ts +2 -2
- package/lib/vflow/services/flow-settings.service.d.ts +3 -0
- package/lib/vflow/services/flow-status.service.d.ts +35 -7
- package/lib/vflow/services/selection.service.d.ts +4 -1
- package/lib/vflow/strategies/default-selection.strategy.d.ts +6 -0
- package/lib/vflow/strategies/manual-selection.strategy.d.ts +5 -0
- package/lib/vflow/types/selection-mode.type.d.ts +1 -0
- package/lib/vflow/types/unwrap-signal.type.d.ts +4 -0
- package/lib/vflow/utils/adjust-direction.d.ts +2 -6
- package/lib/vflow/utils/identity-checker/reference-identity-checker.d.ts +2 -2
- package/lib/vflow/utils/is-vflow-component.d.ts +0 -2
- package/lib/vflow/utils/signals/to-lazy-signal.d.ts +4 -4
- package/package.json +3 -7
- package/public-api.d.ts +3 -2
- package/testing/component-mocks/vflow-mock.component.d.ts +8 -6
- package/testing/directive-mocks/connection-controller-mock.directive.d.ts +8 -6
- package/esm2022/lib/vflow/components/alignment-helper/alignment-helper.component.mjs +0 -103
- package/esm2022/lib/vflow/components/background/background.component.mjs +0 -121
- package/esm2022/lib/vflow/components/connection/connection.component.mjs +0 -157
- package/esm2022/lib/vflow/components/custom-node-base/custom-node-base.component.mjs +0 -57
- package/esm2022/lib/vflow/components/default-node/default-node.component.mjs +0 -16
- package/esm2022/lib/vflow/components/defs/defs.component.mjs +0 -16
- package/esm2022/lib/vflow/components/edge/edge.component.mjs +0 -54
- package/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +0 -76
- package/esm2022/lib/vflow/components/node/node.component.mjs +0 -107
- package/esm2022/lib/vflow/components/preview-flow/draw-node.mjs +0 -100
- package/esm2022/lib/vflow/components/preview-flow/preview-flow.component.mjs +0 -62
- package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +0 -437
- package/esm2022/lib/vflow/constants/magic-number-to-fix-glitch-in-chrome.constant.mjs +0 -4
- package/esm2022/lib/vflow/decorators/microtask.decorator.mjs +0 -11
- package/esm2022/lib/vflow/directives/changes-controller.directive.mjs +0 -165
- package/esm2022/lib/vflow/directives/connection-controller.directive.mjs +0 -145
- package/esm2022/lib/vflow/directives/drag-handle.directive.mjs +0 -28
- package/esm2022/lib/vflow/directives/flow-size-controller.directive.mjs +0 -40
- package/esm2022/lib/vflow/directives/handle-size-controller.directive.mjs +0 -41
- package/esm2022/lib/vflow/directives/map-context.directive.mjs +0 -116
- package/esm2022/lib/vflow/directives/node-handles-controller.directive.mjs +0 -33
- package/esm2022/lib/vflow/directives/node-resize-controller.directive.mjs +0 -37
- package/esm2022/lib/vflow/directives/pointer.directive.mjs +0 -84
- package/esm2022/lib/vflow/directives/reference.directive.mjs +0 -17
- package/esm2022/lib/vflow/directives/root-pointer.directive.mjs +0 -58
- package/esm2022/lib/vflow/directives/root-svg-context.directive.mjs +0 -35
- package/esm2022/lib/vflow/directives/selectable.directive.mjs +0 -48
- package/esm2022/lib/vflow/directives/space-point-context.directive.mjs +0 -42
- package/esm2022/lib/vflow/directives/template.directive.mjs +0 -119
- package/esm2022/lib/vflow/interfaces/alignment-helper-settings.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/box.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/component-node-event.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/connection-settings.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/connection.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/connection.internal.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/contextable.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/curve-factory.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/edge-label.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/edge.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/fit-view-options.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/flow-entity.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/intersecting-nodes-options.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/marker.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/node-preview.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/node.interface.mjs +0 -53
- package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +0 -7
- package/esm2022/lib/vflow/interfaces/point.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/rect.mjs +0 -10
- package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +0 -2
- package/esm2022/lib/vflow/interfaces/viewport.interface.mjs +0 -2
- package/esm2022/lib/vflow/math/edge-path/bezier-path.mjs +0 -66
- package/esm2022/lib/vflow/math/edge-path/smooth-step-path.mjs +0 -226
- package/esm2022/lib/vflow/math/edge-path/straigh-path.mjs +0 -12
- package/esm2022/lib/vflow/math/point-on-line-by-ratio.mjs +0 -12
- package/esm2022/lib/vflow/models/connection.model.mjs +0 -31
- package/esm2022/lib/vflow/models/edge-label.model.mjs +0 -8
- package/esm2022/lib/vflow/models/edge.model.mjs +0 -208
- package/esm2022/lib/vflow/models/handle.model.mjs +0 -98
- package/esm2022/lib/vflow/models/minimap.model.mjs +0 -7
- package/esm2022/lib/vflow/models/node.model.mjs +0 -181
- package/esm2022/lib/vflow/models/toolbar.model.mjs +0 -36
- package/esm2022/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.mjs +0 -25
- package/esm2022/lib/vflow/public-components/custom-node/custom-node.component.mjs +0 -24
- package/esm2022/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.mjs +0 -29
- package/esm2022/lib/vflow/public-components/handle/handle.component.mjs +0 -53
- package/esm2022/lib/vflow/public-components/minimap/minimap.component.mjs +0 -108
- package/esm2022/lib/vflow/public-components/node-toolbar/node-toolbar.component.mjs +0 -73
- package/esm2022/lib/vflow/public-components/resizable/resizable.component.mjs +0 -272
- package/esm2022/lib/vflow/services/component-event-bus.service.mjs +0 -18
- package/esm2022/lib/vflow/services/draggable.service.mjs +0 -124
- package/esm2022/lib/vflow/services/edge-changes.service.mjs +0 -43
- package/esm2022/lib/vflow/services/edge-rendering.service.mjs +0 -40
- package/esm2022/lib/vflow/services/flow-entities.service.mjs +0 -56
- package/esm2022/lib/vflow/services/flow-rendering.service.mjs +0 -41
- package/esm2022/lib/vflow/services/flow-settings.service.mjs +0 -33
- package/esm2022/lib/vflow/services/flow-status.service.mjs +0 -49
- package/esm2022/lib/vflow/services/handle.service.mjs +0 -30
- package/esm2022/lib/vflow/services/keyboard.service.mjs +0 -47
- package/esm2022/lib/vflow/services/node-accessor.service.mjs +0 -16
- package/esm2022/lib/vflow/services/node-changes.service.mjs +0 -41
- package/esm2022/lib/vflow/services/node-rendering.service.mjs +0 -66
- package/esm2022/lib/vflow/services/overlays.service.mjs +0 -35
- package/esm2022/lib/vflow/services/preview-flow-render-strategy.service.mjs +0 -21
- package/esm2022/lib/vflow/services/selection.service.mjs +0 -54
- package/esm2022/lib/vflow/services/viewport.service.mjs +0 -64
- package/esm2022/lib/vflow/types/background.type.mjs +0 -2
- package/esm2022/lib/vflow/types/connection-mode.type.mjs +0 -2
- package/esm2022/lib/vflow/types/edge-change.type.mjs +0 -2
- package/esm2022/lib/vflow/types/handle-type.type.mjs +0 -2
- package/esm2022/lib/vflow/types/keyboard-action.type.mjs +0 -2
- package/esm2022/lib/vflow/types/node-change.type.mjs +0 -2
- package/esm2022/lib/vflow/types/position.type.mjs +0 -2
- package/esm2022/lib/vflow/types/viewport-change-type.type.mjs +0 -2
- package/esm2022/lib/vflow/utils/add-nodes-to-edges.mjs +0 -11
- package/esm2022/lib/vflow/utils/adjust-direction.mjs +0 -30
- package/esm2022/lib/vflow/utils/align-number.mjs +0 -4
- package/esm2022/lib/vflow/utils/assert-injector.mjs +0 -27
- package/esm2022/lib/vflow/utils/event.mjs +0 -4
- package/esm2022/lib/vflow/utils/get-os.mjs +0 -24
- package/esm2022/lib/vflow/utils/get-overlapping-area.mjs +0 -6
- package/esm2022/lib/vflow/utils/get-space-points.mjs +0 -25
- package/esm2022/lib/vflow/utils/hash.mjs +0 -7
- package/esm2022/lib/vflow/utils/id.mjs +0 -5
- package/esm2022/lib/vflow/utils/identity-checker/reference-identity-checker.mjs +0 -28
- package/esm2022/lib/vflow/utils/is-callable.mjs +0 -10
- package/esm2022/lib/vflow/utils/is-defined.mjs +0 -4
- package/esm2022/lib/vflow/utils/is-group-node.mjs +0 -4
- package/esm2022/lib/vflow/utils/is-vflow-component.mjs +0 -9
- package/esm2022/lib/vflow/utils/nodes.mjs +0 -60
- package/esm2022/lib/vflow/utils/resizable.mjs +0 -11
- package/esm2022/lib/vflow/utils/round.mjs +0 -2
- package/esm2022/lib/vflow/utils/signals/extended-computed.mjs +0 -15
- package/esm2022/lib/vflow/utils/signals/to-lazy-signal.mjs +0 -35
- package/esm2022/lib/vflow/utils/to-unified-node.mjs +0 -24
- package/esm2022/lib/vflow/utils/transform-background.mjs +0 -4
- package/esm2022/lib/vflow/utils/viewport.mjs +0 -51
- package/esm2022/lib/vflow/vflow.mjs +0 -29
- package/esm2022/ngx-vflow.mjs +0 -5
- package/esm2022/public-api.mjs +0 -55
- package/esm2022/testing/component-mocks/custom-template-edge-mock.component.mjs +0 -16
- package/esm2022/testing/component-mocks/handle-mock.component.mjs +0 -26
- package/esm2022/testing/component-mocks/minimap-mock.component.mjs +0 -24
- package/esm2022/testing/component-mocks/node-toolbar-mock.component.mjs +0 -23
- package/esm2022/testing/component-mocks/resizable-mock.component.mjs +0 -27
- package/esm2022/testing/component-mocks/vflow-mock.component.mjs +0 -299
- package/esm2022/testing/directive-mocks/connection-controller-mock.directive.mjs +0 -29
- package/esm2022/testing/directive-mocks/drag-handle-mock.directive.mjs +0 -11
- package/esm2022/testing/directive-mocks/selectable-mock.directive.mjs +0 -14
- package/esm2022/testing/directive-mocks/template-mock.directive.mjs +0 -101
- package/esm2022/testing/ngx-vflow-testing.mjs +0 -5
- package/esm2022/testing/provide-custom-node-mocks.mjs +0 -60
- package/esm2022/testing/public-api.mjs +0 -13
- package/esm2022/testing/types.mjs +0 -2
- package/esm2022/testing/vflow-mocks.mjs +0 -28
- package/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.d.ts +0 -13
- package/lib/vflow/utils/to-unified-node.d.ts +0 -2
package/public-api.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export * from './lib/vflow/interfaces/edge.interface';
|
|
|
5
5
|
export * from './lib/vflow/interfaces/edge-label.interface';
|
|
6
6
|
export * from './lib/vflow/interfaces/connection.interface';
|
|
7
7
|
export * from './lib/vflow/interfaces/connection.interface';
|
|
8
|
-
export
|
|
8
|
+
export { ConnectionSettings, ConnectionValidatorFn } from './lib/vflow/interfaces/connection-settings.interface';
|
|
9
9
|
export * from './lib/vflow/interfaces/marker.interface';
|
|
10
10
|
export { ViewportState } from './lib/vflow/interfaces/viewport.interface';
|
|
11
11
|
export * from './lib/vflow/interfaces/component-node-event.interface';
|
|
@@ -15,16 +15,17 @@ export * from './lib/vflow/interfaces/intersecting-nodes-options.interface';
|
|
|
15
15
|
export * from './lib/vflow/interfaces/curve-factory.interface';
|
|
16
16
|
export * from './lib/vflow/interfaces/node-preview.interface';
|
|
17
17
|
export * from './lib/vflow/interfaces/alignment-helper-settings.interface';
|
|
18
|
+
export { ConnectEndEvent, ConnectStartEvent, ReconnectEndEvent, ReconnectEvent, ReconnectStartEvent, } from './lib/vflow/interfaces/connection-events.interface';
|
|
18
19
|
export * from './lib/vflow/types/node-change.type';
|
|
19
20
|
export * from './lib/vflow/types/edge-change.type';
|
|
20
21
|
export * from './lib/vflow/types/position.type';
|
|
21
22
|
export * from './lib/vflow/types/background.type';
|
|
22
23
|
export * from './lib/vflow/types/connection-mode.type';
|
|
23
24
|
export * from './lib/vflow/types/keyboard-action.type';
|
|
25
|
+
export * from './lib/vflow/types/selection-mode.type';
|
|
24
26
|
export * from './lib/vflow/components/vflow/vflow.component';
|
|
25
27
|
export * from './lib/vflow/public-components/handle/handle.component';
|
|
26
28
|
export * from './lib/vflow/public-components/custom-node/custom-node.component';
|
|
27
|
-
export * from './lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component';
|
|
28
29
|
export * from './lib/vflow/public-components/resizable/resizable.component';
|
|
29
30
|
export * from './lib/vflow/public-components/minimap/minimap.component';
|
|
30
31
|
export * from './lib/vflow/public-components/node-toolbar/node-toolbar.component';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { WritableSignal, OnInit } from '@angular/core';
|
|
2
|
-
import { Node,
|
|
2
|
+
import { Node, Edge, SpacePoint, Point, Background, KeyboardShortcuts, ViewportState, NodeChange, EdgeChange, FitViewOptions, VflowComponent, IntersectingNodesOptions, ɵConnectionModel as ConnectionModel, AlignmentHelperSettings, SelectionMode } from 'ngx-vflow';
|
|
3
3
|
import { ConnectionTemplateMockDirective, EdgeLabelHtmlTemplateMockDirective, EdgeTemplateMockDirective, GroupNodeTemplateMockDirective, NodeHtmlTemplateMockDirective } from '../directive-mocks/template-mock.directive';
|
|
4
4
|
import { AsInterface } from '../types';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "ngx-vflow";
|
|
7
7
|
export declare class VflowMockComponent implements AsInterface<VflowComponent>, OnInit {
|
|
8
|
-
readonly nodes: Node[]
|
|
8
|
+
readonly nodes: Node[];
|
|
9
9
|
readonly edges: Edge[];
|
|
10
10
|
readonly view: [
|
|
11
11
|
number,
|
|
@@ -16,6 +16,7 @@ export declare class VflowMockComponent implements AsInterface<VflowComponent>,
|
|
|
16
16
|
readonly background: Background | string;
|
|
17
17
|
readonly optimization: Required<import("ngx-vflow").Optimization>;
|
|
18
18
|
readonly entitiesSelectable = true;
|
|
19
|
+
readonly selectionMode: SelectionMode;
|
|
19
20
|
readonly keyboardShortcuts: KeyboardShortcuts;
|
|
20
21
|
readonly connection: ConnectionModel;
|
|
21
22
|
readonly snapGrid: [
|
|
@@ -24,8 +25,9 @@ export declare class VflowMockComponent implements AsInterface<VflowComponent>,
|
|
|
24
25
|
];
|
|
25
26
|
elevateNodesOnSelect: boolean;
|
|
26
27
|
elevateEdgesOnSelect: boolean;
|
|
28
|
+
autoPan: boolean;
|
|
27
29
|
alignmentHelper: import("@angular/core").InputSignal<boolean | AlignmentHelperSettings>;
|
|
28
|
-
readonly
|
|
30
|
+
readonly componentNodeEvent: import("@angular/core").OutputEmitterRef<any>;
|
|
29
31
|
protected nodeTemplateDirective: import("@angular/core").Signal<NodeHtmlTemplateMockDirective | undefined>;
|
|
30
32
|
protected groupNodeTemplateDirective: import("@angular/core").Signal<GroupNodeTemplateMockDirective | undefined>;
|
|
31
33
|
protected edgeTemplateDirective: import("@angular/core").Signal<EdgeTemplateMockDirective | undefined>;
|
|
@@ -50,12 +52,12 @@ export declare class VflowMockComponent implements AsInterface<VflowComponent>,
|
|
|
50
52
|
documentPointToFlowPoint(point: Point, options: {
|
|
51
53
|
spaces: true;
|
|
52
54
|
}): SpacePoint[];
|
|
53
|
-
getIntesectingNodes(nodeId: string, options?: IntersectingNodesOptions): Node[]
|
|
55
|
+
getIntesectingNodes(nodeId: string, options?: IntersectingNodesOptions): Node[];
|
|
54
56
|
toNodeSpace(nodeId: string, spaceNodeId: string): Point;
|
|
55
|
-
getNode<T = unknown>(id: string): Node<T> |
|
|
57
|
+
getNode<T = unknown>(id: string): Node<T> | undefined;
|
|
56
58
|
getDetachedEdges(): Edge[];
|
|
57
59
|
protected createSignal<T>(value: T): WritableSignal<T>;
|
|
58
60
|
static ɵfac: i0.ɵɵFactoryDeclaration<VflowMockComponent, never>;
|
|
59
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<VflowMockComponent, "vflow", never, { "nodes": { "alias": "nodes"; "required": true; }; "edges": { "alias": "edges"; "required": false; }; "view": { "alias": "view"; "required": false; }; "minZoom": { "alias": "minZoom"; "required": false; }; "maxZoom": { "alias": "maxZoom"; "required": false; }; "background": { "alias": "background"; "required": false; }; "optimization": { "alias": "optimization"; "required": false; }; "entitiesSelectable": { "alias": "entitiesSelectable"; "required": false; }; "keyboardShortcuts": { "alias": "keyboardShortcuts"; "required": false; }; "connection": { "alias": "connection"; "required": false; }; "snapGrid": { "alias": "snapGrid"; "required": false; }; "elevateNodesOnSelect": { "alias": "elevateNodesOnSelect"; "required": false; }; "elevateEdgesOnSelect": { "alias": "elevateEdgesOnSelect"; "required": false; }; "alignmentHelper": { "alias": "alignmentHelper"; "required": false; "isSignal": true; }; }, { "
|
|
61
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<VflowMockComponent, "vflow", never, { "nodes": { "alias": "nodes"; "required": true; }; "edges": { "alias": "edges"; "required": false; }; "view": { "alias": "view"; "required": false; }; "minZoom": { "alias": "minZoom"; "required": false; }; "maxZoom": { "alias": "maxZoom"; "required": false; }; "background": { "alias": "background"; "required": false; }; "optimization": { "alias": "optimization"; "required": false; }; "entitiesSelectable": { "alias": "entitiesSelectable"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "keyboardShortcuts": { "alias": "keyboardShortcuts"; "required": false; }; "connection": { "alias": "connection"; "required": false; }; "snapGrid": { "alias": "snapGrid"; "required": false; }; "elevateNodesOnSelect": { "alias": "elevateNodesOnSelect"; "required": false; }; "elevateEdgesOnSelect": { "alias": "elevateEdgesOnSelect"; "required": false; }; "autoPan": { "alias": "autoPan"; "required": false; }; "alignmentHelper": { "alias": "alignmentHelper"; "required": false; "isSignal": true; }; }, { "componentNodeEvent": "componentNodeEvent"; }, ["nodeTemplateDirective", "groupNodeTemplateDirective", "edgeTemplateDirective", "edgeLabelHtmlDirective", "connectionTemplateDirective"], ["*"], true, never>;
|
|
60
62
|
static ngAcceptInputType_connection: i1.ConnectionSettings;
|
|
61
63
|
}
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import { Connection,
|
|
1
|
+
import { Connection, ReconnectEvent } from 'ngx-vflow';
|
|
2
2
|
import { AsInterface } from '../types';
|
|
3
|
-
import type { ConnectionControllerDirective, ɵHandleModel as HandleModel } from 'ngx-vflow';
|
|
3
|
+
import type { ConnectEndEvent, ConnectionControllerDirective, ConnectStartEvent, ɵHandleModel as HandleModel, ReconnectEndEvent, ReconnectStartEvent } from 'ngx-vflow';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class ConnectionControllerMockDirective implements AsInterface<ConnectionControllerDirective> {
|
|
6
|
+
readonly connectStart: import("@angular/core").OutputEmitterRef<ConnectStartEvent>;
|
|
6
7
|
readonly connect: import("@angular/core").OutputEmitterRef<Connection>;
|
|
7
|
-
readonly
|
|
8
|
-
readonly
|
|
9
|
-
readonly
|
|
8
|
+
readonly connectEnd: import("@angular/core").OutputEmitterRef<ConnectEndEvent>;
|
|
9
|
+
readonly reconnectStart: import("@angular/core").OutputEmitterRef<ReconnectStartEvent>;
|
|
10
|
+
readonly reconnect: import("@angular/core").OutputEmitterRef<ReconnectEvent>;
|
|
11
|
+
readonly reconnectEnd: import("@angular/core").OutputEmitterRef<ReconnectEndEvent>;
|
|
10
12
|
startConnection(handle: HandleModel): void;
|
|
11
13
|
startReconnection(handle: HandleModel): void;
|
|
12
14
|
validateConnection(handle: HandleModel): void;
|
|
13
15
|
resetValidateConnection(targetHandle: HandleModel): void;
|
|
14
16
|
endConnection(): void;
|
|
15
17
|
static ɵfac: i0.ɵɵFactoryDeclaration<ConnectionControllerMockDirective, never>;
|
|
16
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerMockDirective, "[connect], [
|
|
18
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ConnectionControllerMockDirective, "[connectStart], [connect], [connectEnd], [reconnectStart], [reconnect], [reconnectEnd]", never, {}, { "connectStart": "connectStart"; "connect": "connect"; "connectEnd": "connectEnd"; "reconnectStart": "reconnectStart"; "reconnect": "reconnect"; "reconnectEnd": "reconnectEnd"; }, never, never, true, never>;
|
|
17
19
|
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';
|
|
2
|
-
import { nodeToRect } from '../../utils/nodes';
|
|
3
|
-
import { FlowStatusService, isNodeDragEndStatus, isNodeDragStartStatus } from '../../services/flow-status.service';
|
|
4
|
-
import { rectToRectWithSides } from '../../interfaces/rect';
|
|
5
|
-
import { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';
|
|
6
|
-
import { filter, map, tap } from 'rxjs';
|
|
7
|
-
import { extendedComputed } from '../../utils/signals/extended-computed';
|
|
8
|
-
import { NodeRenderingService } from '../../services/node-rendering.service';
|
|
9
|
-
import { getSpacePoints } from '../../utils/get-space-points';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
export class AlignmentHelperComponent {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.nodeRenderingService = inject(NodeRenderingService);
|
|
14
|
-
this.flowStatus = inject(FlowStatusService);
|
|
15
|
-
this.tolerance = input(10);
|
|
16
|
-
this.lineColor = input('#1b262c');
|
|
17
|
-
this.isNodeDragging = computed(() => isNodeDragStartStatus(this.flowStatus.status()));
|
|
18
|
-
this.intersections = extendedComputed((lastValue) => {
|
|
19
|
-
const status = this.flowStatus.status();
|
|
20
|
-
if (isNodeDragStartStatus(status)) {
|
|
21
|
-
const node = status.payload.node;
|
|
22
|
-
const d = rectToRectWithSides(nodeToRect(node));
|
|
23
|
-
const otherRects = this.nodeRenderingService
|
|
24
|
-
.viewportNodes()
|
|
25
|
-
.filter((n) => n !== node)
|
|
26
|
-
// do not check children of the dragged node
|
|
27
|
-
.filter((n) => !node.children().includes(n))
|
|
28
|
-
.map((n) => rectToRectWithSides(nodeToRect(n)));
|
|
29
|
-
const lines = [];
|
|
30
|
-
let snappedX = d.x;
|
|
31
|
-
let snappedY = d.y;
|
|
32
|
-
let closestXDiff = Infinity;
|
|
33
|
-
let closestYDiff = Infinity;
|
|
34
|
-
otherRects.forEach((o) => {
|
|
35
|
-
const dCenterX = d.left + d.width / 2;
|
|
36
|
-
const oCenterX = o.left + o.width / 2;
|
|
37
|
-
for (const [dX, oX, snapX, isCenter] of [
|
|
38
|
-
// center check
|
|
39
|
-
[dCenterX, oCenterX, oCenterX - d.width / 2, true],
|
|
40
|
-
[d.left, o.left, o.left, false],
|
|
41
|
-
[d.left, o.right, o.right, false],
|
|
42
|
-
[d.right, o.left, o.left - d.width, false],
|
|
43
|
-
[d.right, o.right, o.right - d.width, false],
|
|
44
|
-
]) {
|
|
45
|
-
const diff = Math.abs(dX - oX);
|
|
46
|
-
if (diff <= this.tolerance()) {
|
|
47
|
-
const y = Math.min(d.top, o.top);
|
|
48
|
-
const y2 = Math.max(d.bottom, o.bottom);
|
|
49
|
-
lines.push({ x: oX, y, x2: oX, y2, isCenter });
|
|
50
|
-
if (diff < closestXDiff) {
|
|
51
|
-
closestXDiff = diff;
|
|
52
|
-
snappedX = snapX;
|
|
53
|
-
}
|
|
54
|
-
if (isCenter)
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const dCenterY = d.top + d.height / 2;
|
|
59
|
-
const oCenterY = o.top + o.height / 2;
|
|
60
|
-
for (const [dY, oY, snapY, isCenter] of [
|
|
61
|
-
// center check
|
|
62
|
-
[dCenterY, oCenterY, oCenterY - d.height / 2, true],
|
|
63
|
-
[d.top, o.top, o.top, false],
|
|
64
|
-
[d.top, o.bottom, o.bottom, false],
|
|
65
|
-
[d.bottom, o.top, o.top - d.height, false],
|
|
66
|
-
[d.bottom, o.bottom, o.bottom - d.height, false],
|
|
67
|
-
]) {
|
|
68
|
-
const diff = Math.abs(dY - oY);
|
|
69
|
-
if (diff <= this.tolerance()) {
|
|
70
|
-
const x = Math.min(d.left, o.left);
|
|
71
|
-
const x2 = Math.max(d.right, o.right);
|
|
72
|
-
lines.push({ x, y: oY, x2, y2: oY, isCenter });
|
|
73
|
-
if (diff < closestYDiff) {
|
|
74
|
-
closestYDiff = diff;
|
|
75
|
-
snappedY = snapY;
|
|
76
|
-
}
|
|
77
|
-
if (isCenter)
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
return { lines, snappedX, snappedY };
|
|
83
|
-
}
|
|
84
|
-
return lastValue;
|
|
85
|
-
});
|
|
86
|
-
toObservable(this.flowStatus.status)
|
|
87
|
-
.pipe(filter(isNodeDragEndStatus), map((status) => status.payload.node), map((node) => [node, this.intersections()]), tap(([node, intersections]) => {
|
|
88
|
-
if (intersections) {
|
|
89
|
-
const snapped = { x: intersections.snappedX, y: intersections.snappedY };
|
|
90
|
-
const parentIfExists = node.parent() ? [node.parent()] : [];
|
|
91
|
-
node.setPoint(getSpacePoints(snapped, parentIfExists)[0]);
|
|
92
|
-
}
|
|
93
|
-
}), takeUntilDestroyed())
|
|
94
|
-
.subscribe();
|
|
95
|
-
}
|
|
96
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlignmentHelperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
97
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AlignmentHelperComponent, isStandalone: true, selector: "g[alignmentHelper]", inputs: { tolerance: { classPropertyName: "tolerance", publicName: "tolerance", isSignal: true, isRequired: false, transformFunction: null }, lineColor: { classPropertyName: "lineColor", publicName: "lineColor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isNodeDragging()) {\n @if (intersections(); as intersections) {\n @for (intersection of intersections.lines; track $index) {\n <svg:line\n [attr.stroke]=\"lineColor()\"\n [attr.stroke-dasharray]=\"intersection.isCenter ? 4 : null\"\n [attr.x1]=\"intersection.x\"\n [attr.y1]=\"intersection.y\"\n [attr.x2]=\"intersection.x2\"\n [attr.y2]=\"intersection.y2\" />\n }\n }\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
98
|
-
}
|
|
99
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlignmentHelperComponent, decorators: [{
|
|
100
|
-
type: Component,
|
|
101
|
-
args: [{ selector: 'g[alignmentHelper]', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "@if (isNodeDragging()) {\n @if (intersections(); as intersections) {\n @for (intersection of intersections.lines; track $index) {\n <svg:line\n [attr.stroke]=\"lineColor()\"\n [attr.stroke-dasharray]=\"intersection.isCenter ? 4 : null\"\n [attr.x1]=\"intersection.x\"\n [attr.y1]=\"intersection.y\"\n [attr.x2]=\"intersection.x2\"\n [attr.y2]=\"intersection.y2\" />\n }\n }\n}\n" }]
|
|
102
|
-
}], ctorParameters: () => [] });
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ25tZW50LWhlbHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9hbGlnbm1lbnQtaGVscGVyL2FsaWdubWVudC1oZWxwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvYWxpZ25tZW50LWhlbHBlci9hbGlnbm1lbnQtaGVscGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25ILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQWM5RCxNQUFNLE9BQU8sd0JBQXdCO0lBOEZuQztRQTdGUSx5QkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMs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U3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG5vZGVUb1JlY3QgfSBmcm9tICcuLi8uLi91dGlscy9ub2Rlcyc7XG5pbXBvcnQgeyBGbG93U3RhdHVzU2VydmljZSwgaXNOb2RlRHJhZ0VuZFN0YXR1cywgaXNOb2RlRHJhZ1N0YXJ0U3RhdHVzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyByZWN0VG9SZWN0V2l0aFNpZGVzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZWN0JztcbmltcG9ydCB7IEJveCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYm94JztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZXh0ZW5kZWRDb21wdXRlZCB9IGZyb20gJy4uLy4uL3V0aWxzL3NpZ25hbHMvZXh0ZW5kZWQtY29tcHV0ZWQnO1xuaW1wb3J0IHsgTm9kZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFNwYWNlUG9pbnRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LXNwYWNlLXBvaW50cyc7XG5cbmludGVyZmFjZSBJbnRlcnNlY3Rpb24ge1xuICBsaW5lczogKEJveCAmIHsgaXNDZW50ZXI6IGJvb2xlYW4gfSlbXTtcbiAgc25hcHBlZFg6IG51bWJlcjtcbiAgc25hcHBlZFk6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ1thbGlnbm1lbnRIZWxwZXJdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsaWdubWVudC1oZWxwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQWxpZ25tZW50SGVscGVyQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBub2RlUmVuZGVyaW5nU2VydmljZSA9IGluamVjdChOb2RlUmVuZGVyaW5nU2VydmljZSk7XG4gIHByaXZhdGUgZmxvd1N0YXR1cyA9IGluamVjdChGbG93U3RhdHVzU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgdG9sZXJhbmNlID0gaW5wdXQoMTApO1xuICByZWFkb25seSBsaW5lQ29sb3IgPSBpbnB1dCgnIzFiMjYyYycpO1xuXG4gIHByb3RlY3RlZCBpc05vZGVEcmFnZ2luZyA9IGNvbXB1dGVkKCgpID0+IGlzTm9kZURyYWdTdGFydFN0YXR1cyh0aGlzLmZsb3dTdGF0dXMuc3RhdHVzKCkpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW50ZXJzZWN0aW9ucyA9IGV4dGVuZGVkQ29tcHV0ZWQ8SW50ZXJzZWN0aW9uPigobGFzdFZhbHVlKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5mbG93U3RhdHVzLnN0YXR1cygpO1xuXG4gICAgaWYgKGlzTm9kZURyYWdTdGFydFN0YXR1cyhzdGF0dXMpKSB7XG4gICAgICBjb25zdCBub2RlID0gc3RhdHVzLnBheWxvYWQubm9kZTtcblxuICAgICAgY29uc3QgZCA9IHJlY3RUb1JlY3RXaXRoU2lkZXMobm9kZVRvUmVjdChub2RlKSk7XG4gICAgICBjb25zdCBvdGhlclJlY3RzID0gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZVxuICAgICAgICAudmlld3BvcnROb2RlcygpXG4gICAgICAgIC5maWx0ZXIoKG4pID0+IG4gIT09IG5vZGUpXG4gICAgICAgIC8vIGRvIG5vdCBjaGVjayBjaGlsZHJlbiBvZiB0aGUgZHJhZ2dlZCBub2RlXG4gICAgICAgIC5maWx0ZXIoKG4pID0+ICFub2RlLmNoaWxkcmVuKCkuaW5jbHVkZXMobikpXG4gICAgICAgIC5tYXAoKG4pID0+IHJlY3RUb1JlY3RXaXRoU2lkZXMobm9kZVRvUmVjdChuKSkpO1xuXG4gICAgICBjb25zdCBsaW5lczogSW50ZXJzZWN0aW9uWydsaW5lcyddID0gW107XG5cbiAgICAgIGxldCBzbmFwcGVkWCA9IGQueDtcbiAgICAgIGxldCBzbmFwcGVkWSA9IGQueTtcbiAgICAgIGxldCBjbG9zZXN0WERpZmYgPSBJbmZpbml0eTtcbiAgICAgIGxldCBjbG9zZXN0WURpZmYgPSBJbmZpbml0eTtcblxuICAgICAgb3RoZXJSZWN0cy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgIGNvbnN0IGRDZW50ZXJYID0gZC5sZWZ0ICsgZC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IG9DZW50ZXJYID0gby5sZWZ0ICsgby53aWR0aCAvIDI7XG5cbiAgICAgICAgZm9yIChjb25zdCBbZFgsIG9YLCBzbmFwWCwgaXNDZW50ZXJdIG9mIFtcbiAgICAgICAgICAvLyBjZW50ZXIgY2hlY2tcbiAgICAgICAgICBbZENlbnRlclgsIG9DZW50ZXJYLCBvQ2VudGVyWCAtIGQud2lkdGggLyAyLCB0cnVlXSBhcyBjb25zdCxcbiAgICAgICAgICBbZC5sZWZ0LCBvLmxlZnQsIG8ubGVmdCwgZmFsc2VdIGFzIGNvbnN0LFxuICAgICAgICAgIFtkLmxlZnQsIG8ucmlnaHQsIG8ucmlnaHQsIGZhbHNlXSBhcyBjb25zdCxcbiAgICAgICAgICBbZC5yaWdodCwgby5sZWZ0LCBvLmxlZnQgLSBkLndpZHRoLCBmYWxzZV0gYXMgY29uc3QsXG4gICAgICAgICAgW2QucmlnaHQsIG8ucmlnaHQsIG8ucmlnaHQgLSBkLndpZHRoLCBmYWxzZV0gYXMgY29uc3QsXG4gICAgICAgIF0pIHtcbiAgICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5hYnMoZFggLSBvWCk7XG5cbiAgICAgICAgICBpZiAoZGlmZiA8PSB0aGlzLnRvbGVyYW5jZSgpKSB7XG4gICAgICAgICAgICBjb25zdCB5ID0gTWF0aC5taW4oZC50b3AsIG8udG9wKTtcbiAgICAgICAgICAgIGNvbnN0IHkyID0gTWF0aC5tYXgoZC5ib3R0b20sIG8uYm90dG9tKTtcblxuICAgICAgICAgICAgbGluZXMucHVzaCh7IHg6IG9YLCB5LCB4Mjogb1gsIHkyLCBpc0NlbnRlciB9KTtcblxuICAgICAgICAgICAgaWYgKGRpZmYgPCBjbG9zZXN0WERpZmYpIHtcbiAgICAgICAgICAgICAgY2xvc2VzdFhEaWZmID0gZGlmZjtcbiAgICAgICAgICAgICAgc25hcHBlZFggPSBzbmFwWDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzQ2VudGVyKSBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkQ2VudGVyWSA9IGQudG9wICsgZC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBvQ2VudGVyWSA9IG8udG9wICsgby5oZWlnaHQgLyAyO1xuXG4gICAgICAgIGZvciAoY29uc3QgW2RZLCBvWSwgc25hcFksIGlzQ2VudGVyXSBvZiBbXG4gICAgICAgICAgLy8gY2VudGVyIGNoZWNrXG4gICAgICAgICAgW2RDZW50ZXJZLCBvQ2VudGVyWSwgb0NlbnRlclkgLSBkLmhlaWdodCAvIDIsIHRydWVdIGFzIGNvbnN0LFxuICAgICAgICAgIFtkLnRvcCwgby50b3AsIG8udG9wLCBmYWxzZV0gYXMgY29uc3QsXG4gICAgICAgICAgW2QudG9wLCBvLmJvdHRvbSwgby5ib3R0b20sIGZhbHNlXSBhcyBjb25zdCxcbiAgICAgICAgICBbZC5ib3R0b20sIG8udG9wLCBvLnRvcCAtIGQuaGVpZ2h0LCBmYWxzZV0gYXMgY29uc3QsXG4gICAgICAgICAgW2QuYm90dG9tLCBvLmJvdHRvbSwgby5ib3R0b20gLSBkLmhlaWdodCwgZmFsc2VdIGFzIGNvbnN0LFxuICAgICAgICBdKSB7XG4gICAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGRZIC0gb1kpO1xuXG4gICAgICAgICAgaWYgKGRpZmYgPD0gdGhpcy50b2xlcmFuY2UoKSkge1xuICAgICAgICAgICAgY29uc3QgeCA9IE1hdGgubWluKGQubGVmdCwgby5sZWZ0KTtcbiAgICAgICAgICAgIGNvbnN0IHgyID0gTWF0aC5tYXgoZC5yaWdodCwgby5yaWdodCk7XG5cbiAgICAgICAgICAgIGxpbmVzLnB1c2goeyB4LCB5OiBvWSwgeDIsIHkyOiBvWSwgaXNDZW50ZXIgfSk7XG5cbiAgICAgICAgICAgIGlmIChkaWZmIDwgY2xvc2VzdFlEaWZmKSB7XG4gICAgICAgICAgICAgIGNsb3Nlc3RZRGlmZiA9IGRpZmY7XG4gICAgICAgICAgICAgIHNuYXBwZWRZID0gc25hcFk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpc0NlbnRlcikgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHsgbGluZXMsIHNuYXBwZWRYLCBzbmFwcGVkWSB9O1xuICAgIH1cblxuICAgIHJldHVybiBsYXN0VmFsdWU7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmZsb3dTdGF0dXMuc3RhdHVzKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcihpc05vZGVEcmFnRW5kU3RhdHVzKSxcbiAgICAgICAgbWFwKChzdGF0dXMpID0+IHN0YXR1cy5wYXlsb2FkLm5vZGUpLFxuICAgICAgICBtYXAoKG5vZGUpID0+IFtub2RlLCB0aGlzLmludGVyc2VjdGlvbnMoKV0gYXMgY29uc3QpLFxuICAgICAgICB0YXAoKFtub2RlLCBpbnRlcnNlY3Rpb25zXSkgPT4ge1xuICAgICAgICAgIGlmIChpbnRlcnNlY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBzbmFwcGVkID0geyB4OiBpbnRlcnNlY3Rpb25zLnNuYXBwZWRYLCB5OiBpbnRlcnNlY3Rpb25zLnNuYXBwZWRZIH07XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRJZkV4aXN0cyA9IG5vZGUucGFyZW50KCkgPyBbbm9kZS5wYXJlbnQoKSFdIDogW107XG5cbiAgICAgICAgICAgIG5vZGUuc2V0UG9pbnQoZ2V0U3BhY2VQb2ludHMoc25hcHBlZCwgcGFyZW50SWZFeGlzdHMpWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiQGlmIChpc05vZGVEcmFnZ2luZygpKSB7XG4gIEBpZiAoaW50ZXJzZWN0aW9ucygpOyBhcyBpbnRlcnNlY3Rpb25zKSB7XG4gICAgQGZvciAoaW50ZXJzZWN0aW9uIG9mIGludGVyc2VjdGlvbnMubGluZXM7IHRyYWNrICRpbmRleCkge1xuICAgICAgPHN2ZzpsaW5lXG4gICAgICAgIFthdHRyLnN0cm9rZV09XCJsaW5lQ29sb3IoKVwiXG4gICAgICAgIFthdHRyLnN0cm9rZS1kYXNoYXJyYXldPVwiaW50ZXJzZWN0aW9uLmlzQ2VudGVyID8gNCA6IG51bGxcIlxuICAgICAgICBbYXR0ci54MV09XCJpbnRlcnNlY3Rpb24ueFwiXG4gICAgICAgIFthdHRyLnkxXT1cImludGVyc2VjdGlvbi55XCJcbiAgICAgICAgW2F0dHIueDJdPVwiaW50ZXJzZWN0aW9uLngyXCJcbiAgICAgICAgW2F0dHIueTJdPVwiaW50ZXJzZWN0aW9uLnkyXCIgLz5cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, effect, inject } from '@angular/core';
|
|
2
|
-
import { ViewportService } from '../../services/viewport.service';
|
|
3
|
-
import { RootSvgReferenceDirective } from '../../directives/reference.directive';
|
|
4
|
-
import { id } from '../../utils/id';
|
|
5
|
-
import { FlowSettingsService } from '../../services/flow-settings.service';
|
|
6
|
-
import { toObservable } from '@angular/core/rxjs-interop';
|
|
7
|
-
import { map, switchMap } from 'rxjs';
|
|
8
|
-
import { toLazySignal } from '../../utils/signals/to-lazy-signal';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
const defaultBg = '#fff';
|
|
11
|
-
const defaultGap = 20;
|
|
12
|
-
const defaultDotSize = 2;
|
|
13
|
-
const defaultDotColor = 'rgb(177, 177, 183)';
|
|
14
|
-
const defaultImageScale = 0.1;
|
|
15
|
-
const defaultRepeated = true;
|
|
16
|
-
export class BackgroundComponent {
|
|
17
|
-
constructor() {
|
|
18
|
-
this.viewportService = inject(ViewportService);
|
|
19
|
-
this.rootSvg = inject(RootSvgReferenceDirective).element;
|
|
20
|
-
this.settingsService = inject(FlowSettingsService);
|
|
21
|
-
this.backgroundSignal = this.settingsService.background;
|
|
22
|
-
// DOTS PATTERN
|
|
23
|
-
this.scaledGap = computed(() => {
|
|
24
|
-
const background = this.backgroundSignal();
|
|
25
|
-
if (background.type === 'dots') {
|
|
26
|
-
const zoom = this.viewportService.readableViewport().zoom;
|
|
27
|
-
return zoom * (background.gap ?? defaultGap);
|
|
28
|
-
}
|
|
29
|
-
return 0;
|
|
30
|
-
});
|
|
31
|
-
this.x = computed(() => this.viewportService.readableViewport().x % this.scaledGap());
|
|
32
|
-
this.y = computed(() => this.viewportService.readableViewport().y % this.scaledGap());
|
|
33
|
-
this.patternColor = computed(() => {
|
|
34
|
-
const bg = this.backgroundSignal();
|
|
35
|
-
if (bg.type === 'dots') {
|
|
36
|
-
return bg.color ?? defaultDotColor;
|
|
37
|
-
}
|
|
38
|
-
return defaultDotColor;
|
|
39
|
-
});
|
|
40
|
-
this.patternSize = computed(() => {
|
|
41
|
-
const background = this.backgroundSignal();
|
|
42
|
-
if (background.type === 'dots') {
|
|
43
|
-
return (this.viewportService.readableViewport().zoom * (background.size ?? defaultDotSize)) / 2;
|
|
44
|
-
}
|
|
45
|
-
return 0;
|
|
46
|
-
});
|
|
47
|
-
// IMAGE PATTERN
|
|
48
|
-
this.bgImageSrc = computed(() => {
|
|
49
|
-
const background = this.backgroundSignal();
|
|
50
|
-
return background.type === 'image' ? background.src : '';
|
|
51
|
-
});
|
|
52
|
-
this.imageSize = toLazySignal(toObservable(this.backgroundSignal).pipe(switchMap(() => createImage(this.bgImageSrc())), map((image) => ({ width: image.naturalWidth, height: image.naturalHeight }))), { initialValue: { width: 0, height: 0 } });
|
|
53
|
-
this.scaledImageWidth = computed(() => {
|
|
54
|
-
const background = this.backgroundSignal();
|
|
55
|
-
if (background.type === 'image') {
|
|
56
|
-
const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;
|
|
57
|
-
return this.imageSize().width * zoom * (background.scale ?? defaultImageScale);
|
|
58
|
-
}
|
|
59
|
-
return 0;
|
|
60
|
-
});
|
|
61
|
-
this.scaledImageHeight = computed(() => {
|
|
62
|
-
const background = this.backgroundSignal();
|
|
63
|
-
if (background.type === 'image') {
|
|
64
|
-
const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;
|
|
65
|
-
return this.imageSize().height * zoom * (background.scale ?? defaultImageScale);
|
|
66
|
-
}
|
|
67
|
-
return 0;
|
|
68
|
-
});
|
|
69
|
-
this.imageX = computed(() => {
|
|
70
|
-
const background = this.backgroundSignal();
|
|
71
|
-
if (background.type === 'image') {
|
|
72
|
-
if (!background.repeat) {
|
|
73
|
-
return background.fixed ? 0 : this.viewportService.readableViewport().x;
|
|
74
|
-
}
|
|
75
|
-
return background.fixed ? 0 : this.viewportService.readableViewport().x % this.scaledImageWidth();
|
|
76
|
-
}
|
|
77
|
-
return 0;
|
|
78
|
-
});
|
|
79
|
-
this.imageY = computed(() => {
|
|
80
|
-
const background = this.backgroundSignal();
|
|
81
|
-
if (background.type === 'image') {
|
|
82
|
-
if (!background.repeat) {
|
|
83
|
-
return background.fixed ? 0 : this.viewportService.readableViewport().y;
|
|
84
|
-
}
|
|
85
|
-
return background.fixed ? 0 : this.viewportService.readableViewport().y % this.scaledImageHeight();
|
|
86
|
-
}
|
|
87
|
-
return 0;
|
|
88
|
-
});
|
|
89
|
-
this.repeated = computed(() => {
|
|
90
|
-
const background = this.backgroundSignal();
|
|
91
|
-
return background.type === 'image' && (background.repeat ?? defaultRepeated);
|
|
92
|
-
});
|
|
93
|
-
// Without ID there will be pattern collision for several flows on the page
|
|
94
|
-
// Later pattern ID may be exposed to API
|
|
95
|
-
this.patternId = id();
|
|
96
|
-
this.patternUrl = `url(#${this.patternId})`;
|
|
97
|
-
effect(() => {
|
|
98
|
-
const background = this.backgroundSignal();
|
|
99
|
-
if (background.type === 'dots') {
|
|
100
|
-
this.rootSvg.style.backgroundColor = background.backgroundColor ?? defaultBg;
|
|
101
|
-
}
|
|
102
|
-
if (background.type === 'solid') {
|
|
103
|
-
this.rootSvg.style.backgroundColor = background.color;
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BackgroundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
108
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BackgroundComponent, isStandalone: true, selector: "g[background]", ngImport: i0, template: "@if (backgroundSignal().type === 'dots') {\n <svg:pattern\n patternUnits=\"userSpaceOnUse\"\n [attr.id]=\"patternId\"\n [attr.x]=\"x()\"\n [attr.y]=\"y()\"\n [attr.width]=\"scaledGap()\"\n [attr.height]=\"scaledGap()\">\n <svg:circle\n [attr.cx]=\"patternSize()\"\n [attr.cy]=\"patternSize()\"\n [attr.r]=\"patternSize()\"\n [attr.fill]=\"patternColor()\" />\n </svg:pattern>\n\n <svg:rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" [attr.fill]=\"patternUrl\" />\n}\n\n@if (backgroundSignal().type === 'image') {\n @if (repeated()) {\n <svg:pattern\n patternUnits=\"userSpaceOnUse\"\n [attr.id]=\"patternId\"\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\">\n <svg:image [attr.href]=\"bgImageSrc()\" [attr.width]=\"scaledImageWidth()\" [attr.height]=\"scaledImageHeight()\" />\n </svg:pattern>\n\n <svg:rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" [attr.fill]=\"patternUrl\" />\n }\n\n @if (!repeated()) {\n <svg:image\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n [attr.href]=\"bgImageSrc()\" />\n }\n}\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
109
|
-
}
|
|
110
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BackgroundComponent, decorators: [{
|
|
111
|
-
type: Component,
|
|
112
|
-
args: [{ standalone: true, selector: 'g[background]', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (backgroundSignal().type === 'dots') {\n <svg:pattern\n patternUnits=\"userSpaceOnUse\"\n [attr.id]=\"patternId\"\n [attr.x]=\"x()\"\n [attr.y]=\"y()\"\n [attr.width]=\"scaledGap()\"\n [attr.height]=\"scaledGap()\">\n <svg:circle\n [attr.cx]=\"patternSize()\"\n [attr.cy]=\"patternSize()\"\n [attr.r]=\"patternSize()\"\n [attr.fill]=\"patternColor()\" />\n </svg:pattern>\n\n <svg:rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" [attr.fill]=\"patternUrl\" />\n}\n\n@if (backgroundSignal().type === 'image') {\n @if (repeated()) {\n <svg:pattern\n patternUnits=\"userSpaceOnUse\"\n [attr.id]=\"patternId\"\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\">\n <svg:image [attr.href]=\"bgImageSrc()\" [attr.width]=\"scaledImageWidth()\" [attr.height]=\"scaledImageHeight()\" />\n </svg:pattern>\n\n <svg:rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" [attr.fill]=\"patternUrl\" />\n }\n\n @if (!repeated()) {\n <svg:image\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n [attr.href]=\"bgImageSrc()\" />\n }\n}\n" }]
|
|
113
|
-
}], ctorParameters: () => [] });
|
|
114
|
-
function createImage(url) {
|
|
115
|
-
const image = new Image();
|
|
116
|
-
image.src = url;
|
|
117
|
-
return new Promise((resolve) => {
|
|
118
|
-
image.onload = () => resolve(image);
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2dyb3VuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9iYWNrZ3JvdW5kL2JhY2tncm91bmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvYmFja2dyb3VuZC9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQUVsRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDekIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQztBQUM3QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUM5QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFRN0IsTUFBTSxPQUFPLG1CQUFtQjtJQTBIOUI7UUF6SFEsb0JBQWUsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsWUFBTyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNwRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTVDLHFCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1FBRTdELGVBQWU7UUFDTCxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUUzQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBRTFELE9BQU8sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBRUQsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztRQUVPLE1BQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUVqRixNQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFakYsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRW5DLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxFQUFFLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQztZQUNyQyxDQUFDO1lBRUQsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFTyxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFM0MsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEcsQ0FBQztZQUVELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQkFBZ0I7UUFDTixlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUUzQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFTyxjQUFTLEdBQUcsWUFBWSxDQUNoQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUM3RSxFQUNELEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDMUMsQ0FBQztRQUVRLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFM0MsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUM7Z0JBRWpGLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLGlCQUFpQixDQUFDLENBQUM7WUFDakYsQ0FBQztZQUVELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFTyxzQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRTNDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUVqRixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7WUFFRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO1FBRU8sV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFM0MsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN2QixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDMUUsQ0FBQztnQkFFRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNwRyxDQUFDO1lBRUQsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztRQUVPLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQy9CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBRTNDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdkIsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFFLENBQUM7Z0JBRUQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDckcsQ0FBQztZQUVELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFTyxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUUzQyxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxlQUFlLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztRQUVILDJFQUEyRTtRQUMzRSx5Q0FBeUM7UUFDL0IsY0FBUyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQztRQUcvQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFM0MsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUM7WUFDL0UsQ0FBQztZQUVELElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDeEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F0SVUsbUJBQW1CO21HQUFuQixtQkFBbUIseUVDdEJoQyxreENBMENBOzs0RkRwQmEsbUJBQW1CO2tCQU4vQixTQUFTO2lDQUNJLElBQUksWUFDTixlQUFlLG1CQUVSLHVCQUF1QixDQUFDLE1BQU07O0FBMklqRCxTQUFTLFdBQVcsQ0FBQyxHQUFXO0lBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFFMUIsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFFaEIsT0FBTyxJQUFJLE9BQU8sQ0FBbUIsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUMvQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVmZXJlbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBpZCB9IGZyb20gJy4uLy4uL3V0aWxzL2lkJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRvTGF6eVNpZ25hbCB9IGZyb20gJy4uLy4uL3V0aWxzL3NpZ25hbHMvdG8tbGF6eS1zaWduYWwnO1xuXG5jb25zdCBkZWZhdWx0QmcgPSAnI2ZmZic7XG5jb25zdCBkZWZhdWx0R2FwID0gMjA7XG5jb25zdCBkZWZhdWx0RG90U2l6ZSA9IDI7XG5jb25zdCBkZWZhdWx0RG90Q29sb3IgPSAncmdiKDE3NywgMTc3LCAxODMpJztcbmNvbnN0IGRlZmF1bHRJbWFnZVNjYWxlID0gMC4xO1xuY29uc3QgZGVmYXVsdFJlcGVhdGVkID0gdHJ1ZTtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnZ1tiYWNrZ3JvdW5kXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9iYWNrZ3JvdW5kLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEJhY2tncm91bmRDb21wb25lbnQge1xuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIHJvb3RTdmcgPSBpbmplY3QoUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSkuZWxlbWVudDtcbiAgcHJpdmF0ZSBzZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoRmxvd1NldHRpbmdzU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIGJhY2tncm91bmRTaWduYWwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5iYWNrZ3JvdW5kO1xuXG4gIC8vIERPVFMgUEFUVEVSTlxuICBwcm90ZWN0ZWQgc2NhbGVkR2FwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdkb3RzJykge1xuICAgICAgY29uc3Qgem9vbSA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS56b29tO1xuXG4gICAgICByZXR1cm4gem9vbSAqIChiYWNrZ3JvdW5kLmdhcCA/PyBkZWZhdWx0R2FwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueCAlIHRoaXMuc2NhbGVkR2FwKCkpO1xuXG4gIHByb3RlY3RlZCB5ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnkgJSB0aGlzLnNjYWxlZEdhcCgpKTtcblxuICBwcm90ZWN0ZWQgcGF0dGVybkNvbG9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJnID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICBpZiAoYmcudHlwZSA9PT0gJ2RvdHMnKSB7XG4gICAgICByZXR1cm4gYmcuY29sb3IgPz8gZGVmYXVsdERvdENvbG9yO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0RG90Q29sb3I7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBwYXR0ZXJuU2l6ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnZG90cycpIHtcbiAgICAgIHJldHVybiAodGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb20gKiAoYmFja2dyb3VuZC5zaXplID8/IGRlZmF1bHREb3RTaXplKSkgLyAyO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KTtcblxuICAvLyBJTUFHRSBQQVRURVJOXG4gIHByb3RlY3RlZCBiZ0ltYWdlU3JjID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIHJldHVybiBiYWNrZ3JvdW5kLnR5cGUgPT09ICdpbWFnZScgPyBiYWNrZ3JvdW5kLnNyYyA6ICcnO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgaW1hZ2VTaXplID0gdG9MYXp5U2lnbmFsKFxuICAgIHRvT2JzZXJ2YWJsZSh0aGlzLmJhY2tncm91bmRTaWduYWwpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gY3JlYXRlSW1hZ2UodGhpcy5iZ0ltYWdlU3JjKCkpKSxcbiAgICAgIG1hcCgoaW1hZ2UpID0+ICh7IHdpZHRoOiBpbWFnZS5uYXR1cmFsV2lkdGgsIGhlaWdodDogaW1hZ2UubmF0dXJhbEhlaWdodCB9KSksXG4gICAgKSxcbiAgICB7IGluaXRpYWxWYWx1ZTogeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0gfSxcbiAgKTtcblxuICBwcm90ZWN0ZWQgc2NhbGVkSW1hZ2VXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICBjb25zdCB6b29tID0gYmFja2dyb3VuZC5maXhlZCA/IDEgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkuem9vbTtcblxuICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VTaXplKCkud2lkdGggKiB6b29tICogKGJhY2tncm91bmQuc2NhbGUgPz8gZGVmYXVsdEltYWdlU2NhbGUpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgc2NhbGVkSW1hZ2VIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgY29uc3Qgem9vbSA9IGJhY2tncm91bmQuZml4ZWQgPyAxIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnpvb207XG5cbiAgICAgIHJldHVybiB0aGlzLmltYWdlU2l6ZSgpLmhlaWdodCAqIHpvb20gKiAoYmFja2dyb3VuZC5zY2FsZSA/PyBkZWZhdWx0SW1hZ2VTY2FsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBpbWFnZVggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYmFja2dyb3VuZCA9IHRoaXMuYmFja2dyb3VuZFNpZ25hbCgpO1xuXG4gICAgaWYgKGJhY2tncm91bmQudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgaWYgKCFiYWNrZ3JvdW5kLnJlcGVhdCkge1xuICAgICAgICByZXR1cm4gYmFja2dyb3VuZC5maXhlZCA/IDAgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJhY2tncm91bmQuZml4ZWQgPyAwIDogdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpLnggJSB0aGlzLnNjYWxlZEltYWdlV2lkdGgoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGltYWdlWSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICBpZiAoIWJhY2tncm91bmQucmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBiYWNrZ3JvdW5kLmZpeGVkID8gMCA6IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQoKS55O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFja2dyb3VuZC5maXhlZCA/IDAgOiB0aGlzLnZpZXdwb3J0U2VydmljZS5yZWFkYWJsZVZpZXdwb3J0KCkueSAlIHRoaXMuc2NhbGVkSW1hZ2VIZWlnaHQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJlcGVhdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGJhY2tncm91bmQgPSB0aGlzLmJhY2tncm91bmRTaWduYWwoKTtcblxuICAgIHJldHVybiBiYWNrZ3JvdW5kLnR5cGUgPT09ICdpbWFnZScgJiYgKGJhY2tncm91bmQucmVwZWF0ID8/IGRlZmF1bHRSZXBlYXRlZCk7XG4gIH0pO1xuXG4gIC8vIFdpdGhvdXQgSUQgdGhlcmUgd2lsbCBiZSBwYXR0ZXJuIGNvbGxpc2lvbiBmb3Igc2V2ZXJhbCBmbG93cyBvbiB0aGUgcGFnZVxuICAvLyBMYXRlciBwYXR0ZXJuIElEIG1heSBiZSBleHBvc2VkIHRvIEFQSVxuICBwcm90ZWN0ZWQgcGF0dGVybklkID0gaWQoKTtcbiAgcHJvdGVjdGVkIHBhdHRlcm5VcmwgPSBgdXJsKCMke3RoaXMucGF0dGVybklkfSlgO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gdGhpcy5iYWNrZ3JvdW5kU2lnbmFsKCk7XG5cbiAgICAgIGlmIChiYWNrZ3JvdW5kLnR5cGUgPT09ICdkb3RzJykge1xuICAgICAgICB0aGlzLnJvb3RTdmcuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZC5iYWNrZ3JvdW5kQ29sb3IgPz8gZGVmYXVsdEJnO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmFja2dyb3VuZC50eXBlID09PSAnc29saWQnKSB7XG4gICAgICAgIHRoaXMucm9vdFN2Zy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kLmNvbG9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUltYWdlKHVybDogc3RyaW5nKSB7XG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG5cbiAgaW1hZ2Uuc3JjID0gdXJsO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PigocmVzb2x2ZSkgPT4ge1xuICAgIGltYWdlLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoaW1hZ2UpO1xuICB9KTtcbn1cbiIsIkBpZiAoYmFja2dyb3VuZFNpZ25hbCgpLnR5cGUgPT09ICdkb3RzJykge1xuICA8c3ZnOnBhdHRlcm5cbiAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgW2F0dHIuaWRdPVwicGF0dGVybklkXCJcbiAgICBbYXR0ci54XT1cIngoKVwiXG4gICAgW2F0dHIueV09XCJ5KClcIlxuICAgIFthdHRyLndpZHRoXT1cInNjYWxlZEdhcCgpXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwic2NhbGVkR2FwKClcIj5cbiAgICA8c3ZnOmNpcmNsZVxuICAgICAgW2F0dHIuY3hdPVwicGF0dGVyblNpemUoKVwiXG4gICAgICBbYXR0ci5jeV09XCJwYXR0ZXJuU2l6ZSgpXCJcbiAgICAgIFthdHRyLnJdPVwicGF0dGVyblNpemUoKVwiXG4gICAgICBbYXR0ci5maWxsXT1cInBhdHRlcm5Db2xvcigpXCIgLz5cbiAgPC9zdmc6cGF0dGVybj5cblxuICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBbYXR0ci5maWxsXT1cInBhdHRlcm5VcmxcIiAvPlxufVxuXG5AaWYgKGJhY2tncm91bmRTaWduYWwoKS50eXBlID09PSAnaW1hZ2UnKSB7XG4gIEBpZiAocmVwZWF0ZWQoKSkge1xuICAgIDxzdmc6cGF0dGVyblxuICAgICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIlxuICAgICAgW2F0dHIuaWRdPVwicGF0dGVybklkXCJcbiAgICAgIFthdHRyLnhdPVwiaW1hZ2VYKClcIlxuICAgICAgW2F0dHIueV09XCJpbWFnZVkoKVwiXG4gICAgICBbYXR0ci53aWR0aF09XCJzY2FsZWRJbWFnZVdpZHRoKClcIlxuICAgICAgW2F0dHIuaGVpZ2h0XT1cInNjYWxlZEltYWdlSGVpZ2h0KClcIj5cbiAgICAgIDxzdmc6aW1hZ2UgW2F0dHIuaHJlZl09XCJiZ0ltYWdlU3JjKClcIiBbYXR0ci53aWR0aF09XCJzY2FsZWRJbWFnZVdpZHRoKClcIiBbYXR0ci5oZWlnaHRdPVwic2NhbGVkSW1hZ2VIZWlnaHQoKVwiIC8+XG4gICAgPC9zdmc6cGF0dGVybj5cblxuICAgIDxzdmc6cmVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiIFthdHRyLmZpbGxdPVwicGF0dGVyblVybFwiIC8+XG4gIH1cblxuICBAaWYgKCFyZXBlYXRlZCgpKSB7XG4gICAgPHN2ZzppbWFnZVxuICAgICAgW2F0dHIueF09XCJpbWFnZVgoKVwiXG4gICAgICBbYXR0ci55XT1cImltYWdlWSgpXCJcbiAgICAgIFthdHRyLndpZHRoXT1cInNjYWxlZEltYWdlV2lkdGgoKVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwic2NhbGVkSW1hZ2VIZWlnaHQoKVwiXG4gICAgICBbYXR0ci5ocmVmXT1cImJnSW1hZ2VTcmMoKVwiIC8+XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';
|
|
2
|
-
import { FlowStatusService } from '../../services/flow-status.service';
|
|
3
|
-
import { straightPath } from '../../math/edge-path/straigh-path';
|
|
4
|
-
import { SpacePointContextDirective } from '../../directives/space-point-context.directive';
|
|
5
|
-
import { bezierPath } from '../../math/edge-path/bezier-path';
|
|
6
|
-
import { hashCode } from '../../utils/hash';
|
|
7
|
-
import { smoothStepPath } from '../../math/edge-path/smooth-step-path';
|
|
8
|
-
import { NgTemplateOutlet } from '@angular/common';
|
|
9
|
-
import { FlowEntitiesService } from '../../services/flow-entities.service';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
export class ConnectionComponent {
|
|
12
|
-
constructor() {
|
|
13
|
-
this.flowStatusService = inject(FlowStatusService);
|
|
14
|
-
this.spacePointContext = inject(SpacePointContextDirective);
|
|
15
|
-
this.flowEntitiesService = inject(FlowEntitiesService);
|
|
16
|
-
this.model = input.required();
|
|
17
|
-
this.template = input();
|
|
18
|
-
this.path = computed(() => {
|
|
19
|
-
const status = this.flowStatusService.status();
|
|
20
|
-
const curve = this.model().curve;
|
|
21
|
-
if (status.state === 'connection-start' || status.state === 'reconnection-start') {
|
|
22
|
-
const sourceHandle = status.payload.sourceHandle;
|
|
23
|
-
const sourcePoint = sourceHandle.pointAbsolute();
|
|
24
|
-
const sourcePosition = sourceHandle.rawHandle.position;
|
|
25
|
-
const targetPoint = this.spacePointContext.svgCurrentSpacePoint();
|
|
26
|
-
const targetPosition = getOppositePostion(sourceHandle.rawHandle.position);
|
|
27
|
-
const params = this.getPathFactoryParams(sourcePoint, targetPoint, sourcePosition, targetPosition);
|
|
28
|
-
switch (curve) {
|
|
29
|
-
case 'straight':
|
|
30
|
-
return straightPath(params).path;
|
|
31
|
-
case 'bezier':
|
|
32
|
-
return bezierPath(params).path;
|
|
33
|
-
case 'smooth-step':
|
|
34
|
-
return smoothStepPath(params).path;
|
|
35
|
-
case 'step':
|
|
36
|
-
return smoothStepPath(params, 0).path;
|
|
37
|
-
default:
|
|
38
|
-
return curve(params).path;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (status.state === 'connection-validation' || status.state === 'reconnection-validation') {
|
|
42
|
-
const sourceHandle = status.payload.sourceHandle;
|
|
43
|
-
const sourcePoint = sourceHandle.pointAbsolute();
|
|
44
|
-
const sourcePosition = sourceHandle.rawHandle.position;
|
|
45
|
-
const targetHandle = status.payload.targetHandle;
|
|
46
|
-
// ignore magnet if validation failed
|
|
47
|
-
const targetPoint = status.payload.valid
|
|
48
|
-
? targetHandle.pointAbsolute()
|
|
49
|
-
: this.spacePointContext.svgCurrentSpacePoint();
|
|
50
|
-
const targetPosition = status.payload.valid
|
|
51
|
-
? targetHandle.rawHandle.position
|
|
52
|
-
: getOppositePostion(sourceHandle.rawHandle.position);
|
|
53
|
-
const params = this.getPathFactoryParams(sourcePoint, targetPoint, sourcePosition, targetPosition);
|
|
54
|
-
switch (curve) {
|
|
55
|
-
case 'straight':
|
|
56
|
-
return straightPath(params).path;
|
|
57
|
-
case 'bezier':
|
|
58
|
-
return bezierPath(params).path;
|
|
59
|
-
case 'smooth-step':
|
|
60
|
-
return smoothStepPath(params).path;
|
|
61
|
-
case 'step':
|
|
62
|
-
return smoothStepPath(params, 0).path;
|
|
63
|
-
default:
|
|
64
|
-
return curve(params).path;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return null;
|
|
68
|
-
});
|
|
69
|
-
this.markerUrl = computed(() => {
|
|
70
|
-
const marker = this.model().settings.marker;
|
|
71
|
-
if (marker) {
|
|
72
|
-
return `url(#${hashCode(JSON.stringify(marker))})`;
|
|
73
|
-
}
|
|
74
|
-
return '';
|
|
75
|
-
});
|
|
76
|
-
this.defaultColor = 'rgb(177, 177, 183)';
|
|
77
|
-
}
|
|
78
|
-
// TODO: move context to model
|
|
79
|
-
getContext() {
|
|
80
|
-
return {
|
|
81
|
-
$implicit: {
|
|
82
|
-
path: this.path,
|
|
83
|
-
marker: this.markerUrl,
|
|
84
|
-
},
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
getPathFactoryParams(sourcePoint, targetPoint, sourcePosition, targetPosition) {
|
|
88
|
-
return {
|
|
89
|
-
mode: 'connection',
|
|
90
|
-
sourcePoint,
|
|
91
|
-
targetPoint,
|
|
92
|
-
sourcePosition,
|
|
93
|
-
targetPosition,
|
|
94
|
-
allEdges: this.flowEntitiesService.rawEdges(),
|
|
95
|
-
allNodes: this.flowEntitiesService.rawNodes(),
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConnectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
99
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ConnectionComponent, isStandalone: true, selector: "g[connection]", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
100
|
-
@if (model().type === 'default') {
|
|
101
|
-
@if (path(); as path) {
|
|
102
|
-
<svg:path
|
|
103
|
-
fill="none"
|
|
104
|
-
stroke-width="2"
|
|
105
|
-
[attr.d]="path"
|
|
106
|
-
[attr.marker-end]="markerUrl()"
|
|
107
|
-
[attr.stroke]="defaultColor" />
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
@if (model().type === 'template') {
|
|
112
|
-
@if (template(); as template) {
|
|
113
|
-
<ng-container *ngTemplateOutlet="template; context: getContext()" />
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
117
|
-
}
|
|
118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConnectionComponent, decorators: [{
|
|
119
|
-
type: Component,
|
|
120
|
-
args: [{
|
|
121
|
-
standalone: true,
|
|
122
|
-
selector: 'g[connection]',
|
|
123
|
-
template: `
|
|
124
|
-
@if (model().type === 'default') {
|
|
125
|
-
@if (path(); as path) {
|
|
126
|
-
<svg:path
|
|
127
|
-
fill="none"
|
|
128
|
-
stroke-width="2"
|
|
129
|
-
[attr.d]="path"
|
|
130
|
-
[attr.marker-end]="markerUrl()"
|
|
131
|
-
[attr.stroke]="defaultColor" />
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
@if (model().type === 'template') {
|
|
136
|
-
@if (template(); as template) {
|
|
137
|
-
<ng-container *ngTemplateOutlet="template; context: getContext()" />
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
`,
|
|
141
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
142
|
-
imports: [NgTemplateOutlet],
|
|
143
|
-
}]
|
|
144
|
-
}] });
|
|
145
|
-
function getOppositePostion(position) {
|
|
146
|
-
switch (position) {
|
|
147
|
-
case 'top':
|
|
148
|
-
return 'bottom';
|
|
149
|
-
case 'bottom':
|
|
150
|
-
return 'top';
|
|
151
|
-
case 'left':
|
|
152
|
-
return 'right';
|
|
153
|
-
case 'right':
|
|
154
|
-
return 'left';
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmZsb3ctbGliL3NyYy9saWIvdmZsb3cvY29tcG9uZW50cy9jb25uZWN0aW9uL2Nvbm5lY3Rpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQWUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSW5ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQTBCM0UsTUFBTSxPQUFPLG1CQUFtQjtJQXhCaEM7UUF5Qm1CLHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlDLHNCQUFpQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZELHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTVELFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFtQixDQUFDO1FBRTFDLGFBQVEsR0FBRyxLQUFLLEVBQW9CLENBQUM7UUFFbEMsU0FBSSxHQUFHLFFBQVEs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R1UsbUJBQW1CO21HQUFuQixtQkFBbUIsNlVBckJwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQsNERBRVMsZ0JBQWdCOzs0RkFFZixtQkFBbUI7a0JBeEIvQixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQzVCOztBQStHRCxTQUFTLGtCQUFrQixDQUFDLFFBQWtCO0lBQzVDLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxRQUFRLENBQUM7UUFDbEIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxLQUFLLENBQUM7UUFDZixLQUFLLE1BQU07WUFDVCxPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLE9BQU87WUFDVixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFRlbXBsYXRlUmVmLCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmxvd1N0YXR1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXN0YXR1cy5zZXJ2aWNlJztcbmltcG9ydCB7IHN0cmFpZ2h0UGF0aCB9IGZyb20gJy4uLy4uL21hdGgvZWRnZS1wYXRoL3N0cmFpZ2gtcGF0aCc7XG5pbXBvcnQgeyBTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvc3BhY2UtcG9pbnQtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nvbm5lY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgYmV6aWVyUGF0aCB9IGZyb20gJy4uLy4uL21hdGgvZWRnZS1wYXRoL2Jlemllci1wYXRoJztcbmltcG9ydCB7IGhhc2hDb2RlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFzaCc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL3Bvc2l0aW9uLnR5cGUnO1xuaW1wb3J0IHsgc21vb3RoU3RlcFBhdGggfSBmcm9tICcuLi8uLi9tYXRoL2VkZ2UtcGF0aC9zbW9vdGgtc3RlcC1wYXRoJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3RlbXBsYXRlLWNvbnRleHQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ3VydmVGYWN0b3J5UGFyYW1zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jdXJ2ZS1mYWN0b3J5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGbG93RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnZ1tjb25uZWN0aW9uXScsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChtb2RlbCgpLnR5cGUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgQGlmIChwYXRoKCk7IGFzIHBhdGgpIHtcbiAgICAgICAgPHN2ZzpwYXRoXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxuICAgICAgICAgIFthdHRyLmRdPVwicGF0aFwiXG4gICAgICAgICAgW2F0dHIubWFya2VyLWVuZF09XCJtYXJrZXJVcmwoKVwiXG4gICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cImRlZmF1bHRDb2xvclwiIC8+XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmIChtb2RlbCgpLnR5cGUgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgIEBpZiAodGVtcGxhdGUoKTsgYXMgdGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiBnZXRDb250ZXh0KClcIiAvPlxuICAgICAgfVxuICAgIH1cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmxvd1N0YXR1c1NlcnZpY2UgPSBpbmplY3QoRmxvd1N0YXR1c1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNwYWNlUG9pbnRDb250ZXh0ID0gaW5qZWN0KFNwYWNlUG9pbnRDb250ZXh0RGlyZWN0aXZlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmbG93RW50aXRpZXNTZXJ2aWNlID0gaW5qZWN0KEZsb3dFbnRpdGllc1NlcnZpY2UpO1xuXG4gIHB1YmxpYyBtb2RlbCA9IGlucHV0LnJlcXVpcmVkPENvbm5lY3Rpb25Nb2RlbD4oKTtcblxuICBwdWJsaWMgdGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuXG4gIHByb3RlY3RlZCBwYXRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZmxvd1N0YXR1c1NlcnZpY2Uuc3RhdHVzKCk7XG4gICAgY29uc3QgY3VydmUgPSB0aGlzLm1vZGVsKCkuY3VydmU7XG5cbiAgICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY29ubmVjdGlvbi1zdGFydCcgfHwgc3RhdHVzLnN0YXRlID09PSAncmVjb25uZWN0aW9uLXN0YXJ0Jykge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlO1xuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VIYW5kbGUucG9pbnRBYnNvbHV0ZSgpO1xuICAgICAgY29uc3Qgc291cmNlUG9zaXRpb24gPSBzb3VyY2VIYW5kbGUucmF3SGFuZGxlLnBvc2l0aW9uO1xuXG4gICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRoaXMuc3BhY2VQb2ludENvbnRleHQuc3ZnQ3VycmVudFNwYWNlUG9pbnQoKTtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gZ2V0T3Bwb3NpdGVQb3N0aW9uKHNvdXJjZUhhbmRsZS5yYXdIYW5kbGUucG9zaXRpb24pO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldFBhdGhGYWN0b3J5UGFyYW1zKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCwgc291cmNlUG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKTtcblxuICAgICAgc3dpdGNoIChjdXJ2ZSkge1xuICAgICAgICBjYXNlICdzdHJhaWdodCc6XG4gICAgICAgICAgcmV0dXJuIHN0cmFpZ2h0UGF0aChwYXJhbXMpLnBhdGg7XG4gICAgICAgIGNhc2UgJ2Jlemllcic6XG4gICAgICAgICAgcmV0dXJuIGJlemllclBhdGgocGFyYW1zKS5wYXRoO1xuICAgICAgICBjYXNlICdzbW9vdGgtc3RlcCc6XG4gICAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKHBhcmFtcykucGF0aDtcbiAgICAgICAgY2FzZSAnc3RlcCc6XG4gICAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKHBhcmFtcywgMCkucGF0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gY3VydmUocGFyYW1zKS5wYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0dXMuc3RhdGUgPT09ICdjb25uZWN0aW9uLXZhbGlkYXRpb24nIHx8IHN0YXR1cy5zdGF0ZSA9PT0gJ3JlY29ubmVjdGlvbi12YWxpZGF0aW9uJykge1xuICAgICAgY29uc3Qgc291cmNlSGFuZGxlID0gc3RhdHVzLnBheWxvYWQuc291cmNlSGFuZGxlO1xuICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VIYW5kbGUucG9pbnRBYnNvbHV0ZSgpO1xuICAgICAgY29uc3Qgc291cmNlUG9zaXRpb24gPSBzb3VyY2VIYW5kbGUucmF3SGFuZGxlLnBvc2l0aW9uO1xuXG4gICAgICBjb25zdCB0YXJnZXRIYW5kbGUgPSBzdGF0dXMucGF5bG9hZC50YXJnZXRIYW5kbGU7XG4gICAgICAvLyBpZ25vcmUgbWFnbmV0IGlmIHZhbGlkYXRpb24gZmFpbGVkXG4gICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHN0YXR1cy5wYXlsb2FkLnZhbGlkXG4gICAgICAgID8gdGFyZ2V0SGFuZGxlLnBvaW50QWJzb2x1dGUoKVxuICAgICAgICA6IHRoaXMuc3BhY2VQb2ludENvbnRleHQuc3ZnQ3VycmVudFNwYWNlUG9pbnQoKTtcbiAgICAgIGNvbnN0IHRhcmdldFBvc2l0aW9uID0gc3RhdHVzLnBheWxvYWQudmFsaWRcbiAgICAgICAgPyB0YXJnZXRIYW5kbGUucmF3SGFuZGxlLnBvc2l0aW9uXG4gICAgICAgIDogZ2V0T3Bwb3NpdGVQb3N0aW9uKHNvdXJjZUhhbmRsZS5yYXdIYW5kbGUucG9zaXRpb24pO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldFBhdGhGYWN0b3J5UGFyYW1zKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCwgc291cmNlUG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKTtcblxuICAgICAgc3dpdGNoIChjdXJ2ZSkge1xuICAgICAgICBjYXNlICdzdHJhaWdodCc6XG4gICAgICAgICAgcmV0dXJuIHN0cmFpZ2h0UGF0aChwYXJhbXMpLnBhdGg7XG4gICAgICAgIGNhc2UgJ2Jlemllcic6XG4gICAgICAgICAgcmV0dXJuIGJlemllclBhdGgocGFyYW1zKS5wYXRoO1xuICAgICAgICBjYXNlICdzbW9vdGgtc3RlcCc6XG4gICAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKHBhcmFtcykucGF0aDtcbiAgICAgICAgY2FzZSAnc3RlcCc6XG4gICAgICAgICAgcmV0dXJuIHNtb290aFN0ZXBQYXRoKHBhcmFtcywgMCkucGF0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gY3VydmUocGFyYW1zKS5wYXRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgbWFya2VyVXJsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlciA9IHRoaXMubW9kZWwoKS5zZXR0aW5ncy5tYXJrZXI7XG5cbiAgICBpZiAobWFya2VyKSB7XG4gICAgICByZXR1cm4gYHVybCgjJHtoYXNoQ29kZShKU09OLnN0cmluZ2lmeShtYXJrZXIpKX0pYDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0Q29sb3IgPSAncmdiKDE3NywgMTc3LCAxODMpJztcblxuICAvLyBUT0RPOiBtb3ZlIGNvbnRleHQgdG8gbW9kZWxcbiAgcHJvdGVjdGVkIGdldENvbnRleHQoKTogQ29ubmVjdGlvbkNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICBtYXJrZXI6IHRoaXMubWFya2VyVXJsLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXRoRmFjdG9yeVBhcmFtcyhcbiAgICBzb3VyY2VQb2ludDogUG9pbnQsXG4gICAgdGFyZ2V0UG9pbnQ6IFBvaW50LFxuICAgIHNvdXJjZVBvc2l0aW9uOiBQb3NpdGlvbixcbiAgICB0YXJnZXRQb3NpdGlvbjogUG9zaXRpb24sXG4gICk6IEN1cnZlRmFjdG9yeVBhcmFtcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6ICdjb25uZWN0aW9uJyxcbiAgICAgIHNvdXJjZVBvaW50LFxuICAgICAgdGFyZ2V0UG9pbnQsXG4gICAgICBzb3VyY2VQb3NpdGlvbixcbiAgICAgIHRhcmdldFBvc2l0aW9uLFxuICAgICAgYWxsRWRnZXM6IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5yYXdFZGdlcygpLFxuICAgICAgYWxsTm9kZXM6IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5yYXdOb2RlcygpLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQb3N0aW9uKHBvc2l0aW9uOiBQb3NpdGlvbik6IFBvc2l0aW9uIHtcbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgICByZXR1cm4gJ2JvdHRvbSc7XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIHJldHVybiAndG9wJztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gIH1cbn1cbiJdfQ==
|