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
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, Renderer2 } from '@angular/core';
|
|
2
|
-
import { ViewportService } from '../../services/viewport.service';
|
|
3
|
-
import { PreviewFlowRenderStrategyService } from '../../services/preview-flow-render-strategy.service';
|
|
4
|
-
import { drawNode } from './draw-node';
|
|
5
|
-
import { NodeRenderingService } from '../../services/node-rendering.service';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class PreviewFlowComponent {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.viewportService = inject(ViewportService);
|
|
10
|
-
this.renderStrategy = inject(PreviewFlowRenderStrategyService);
|
|
11
|
-
this.nodeRenderingService = inject(NodeRenderingService);
|
|
12
|
-
this.renderer2 = inject(Renderer2);
|
|
13
|
-
this.element = inject(ElementRef).nativeElement;
|
|
14
|
-
this.ctx = this.element.getContext('2d');
|
|
15
|
-
this.width = input(0);
|
|
16
|
-
this.height = input(0);
|
|
17
|
-
this.dpr = window.devicePixelRatio;
|
|
18
|
-
effect(() => {
|
|
19
|
-
// Set the "actual" size of the canvas
|
|
20
|
-
this.renderer2.setProperty(this.element, 'width', this.width() * this.dpr);
|
|
21
|
-
this.renderer2.setProperty(this.element, 'height', this.height() * this.dpr);
|
|
22
|
-
// Set the "drawn" size of the canvas
|
|
23
|
-
this.renderer2.setStyle(this.element, 'width', `${this.width()}px`);
|
|
24
|
-
this.renderer2.setStyle(this.element, 'height', `${this.height()}px`);
|
|
25
|
-
// Scale the context to match device pixel ratio
|
|
26
|
-
this.ctx.scale(this.dpr, this.dpr);
|
|
27
|
-
});
|
|
28
|
-
effect(() => {
|
|
29
|
-
const viewport = this.viewportService.readableViewport();
|
|
30
|
-
this.ctx.clearRect(0, 0, this.width(), this.height());
|
|
31
|
-
// Save the current context state
|
|
32
|
-
this.ctx.save();
|
|
33
|
-
// Apply viewport transformations (zoom and pan)
|
|
34
|
-
this.ctx.setTransform(viewport.zoom * this.dpr, // horizontal scaling with DPR
|
|
35
|
-
0, // horizontal skewing
|
|
36
|
-
0, // vertical skewing
|
|
37
|
-
viewport.zoom * this.dpr, // vertical scaling with DPR
|
|
38
|
-
viewport.x * this.dpr, // horizontal translation with DPR
|
|
39
|
-
viewport.y * this.dpr);
|
|
40
|
-
for (let i = 0; i < this.nodeRenderingService.viewportNodes().length; i++) {
|
|
41
|
-
const node = this.nodeRenderingService.viewportNodes()[i];
|
|
42
|
-
if (this.renderStrategy.shouldRenderNode(node)) {
|
|
43
|
-
drawNode(this.ctx, node);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
// Restore the context state
|
|
47
|
-
this.ctx.restore();
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PreviewFlowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: PreviewFlowComponent, isStandalone: true, selector: "canvas[previewFlow]", inputs: { width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
52
|
-
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PreviewFlowComponent, decorators: [{
|
|
54
|
-
type: Component,
|
|
55
|
-
args: [{
|
|
56
|
-
standalone: true,
|
|
57
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
58
|
-
selector: 'canvas[previewFlow]',
|
|
59
|
-
template: '',
|
|
60
|
-
}]
|
|
61
|
-
}], ctorParameters: () => [] });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC12Zmxvdy1saWIvc3JjL2xpYi92Zmxvdy9jb21wb25lbnRzL3ByZXZpZXctZmxvdy9wcmV2aWV3LWZsb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFRN0UsTUFBTSxPQUFPLG9CQUFvQjtJQWMvQjtRQWJRLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFDMUQseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDcEQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QixZQUFPLEdBQUcsTUFBTSxDQUFnQyxVQUFVLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFDMUUsUUFBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBRSxDQUFDO1FBRXBDLFVBQUssR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekIsV0FBTSxHQUFHLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUVsQixRQUFHLEdBQUcsTUFB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ZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXZpZXctZmxvdy1yZW5kZXItc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQgeyBkcmF3Tm9kZSB9IGZyb20gJy4vZHJhdy1ub2RlJztcbmltcG9ydCB7IE5vZGVSZW5kZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm9kZS1yZW5kZXJpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc2VsZWN0b3I6ICdjYW52YXNbcHJldmlld0Zsb3ddJyxcbiAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3Rmxvd0NvbXBvbmVudCB7XG4gIHByaXZhdGUgdmlld3BvcnRTZXJ2aWNlID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSk7XG4gIHByaXZhdGUgcmVuZGVyU3RyYXRlZ3kgPSBpbmplY3QoUHJldmlld0Zsb3dSZW5kZXJTdHJhdGVneVNlcnZpY2UpO1xuICBwcml2YXRlIG5vZGVSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KE5vZGVSZW5kZXJpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICBwcml2YXRlIGVsZW1lbnQgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD4+KEVsZW1lbnRSZWYpLm5hdGl2ZUVsZW1lbnQ7XG4gIHByaXZhdGUgY3R4ID0gdGhpcy5lbGVtZW50LmdldENvbnRleHQoJzJkJykhO1xuXG4gIHJlYWRvbmx5IHdpZHRoID0gaW5wdXQ8bnVtYmVyPigwKTtcbiAgcmVhZG9ubHkgaGVpZ2h0ID0gaW5wdXQ8bnVtYmVyPigwKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRwciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBTZXQgdGhlIFwiYWN0dWFsXCIgc2l6ZSBvZiB0aGUgY2FudmFzXG4gICAgICB0aGlzLnJlbmRlcmVyMi5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnQsICd3aWR0aCcsIHRoaXMud2lkdGgoKSAqIHRoaXMuZHByKTtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFByb3BlcnR5KHRoaXMuZWxlbWVudCwgJ2hlaWdodCcsIHRoaXMuaGVpZ2h0KCkgKiB0aGlzLmRwcik7XG5cbiAgICAgIC8vIFNldCB0aGUgXCJkcmF3blwiIHNpemUgb2YgdGhlIGNhbnZhc1xuICAgICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50LCAnd2lkdGgnLCBgJHt0aGlzLndpZHRoKCl9cHhgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudCwgJ2hlaWdodCcsIGAke3RoaXMuaGVpZ2h0KCl9cHhgKTtcblxuICAgICAgLy8gU2NhbGUgdGhlIGNvbnRleHQgdG8gbWF0Y2ggZGV2aWNlIHBpeGVsIHJhdGlvXG4gICAgICB0aGlzLmN0eC5zY2FsZSh0aGlzLmRwciwgdGhpcy5kcHIpO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHZpZXdwb3J0ID0gdGhpcy52aWV3cG9ydFNlcnZpY2UucmVhZGFibGVWaWV3cG9ydCgpO1xuXG4gICAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTtcblxuICAgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBjb250ZXh0IHN0YXRlXG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG5cbiAgICAgIC8vIEFwcGx5IHZpZXdwb3J0IHRyYW5zZm9ybWF0aW9ucyAoem9vbSBhbmQgcGFuKVxuICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtKFxuICAgICAgICB2aWV3cG9ydC56b29tICogdGhpcy5kcHIsIC8vIGhvcml6b250YWwgc2NhbGluZyB3aXRoIERQUlxuICAgICAgICAwLCAvLyBob3Jpem9udGFsIHNrZXdpbmdcbiAgICAgICAgMCwgLy8gdmVydGljYWwgc2tld2luZ1xuICAgICAgICB2aWV3cG9ydC56b29tICogdGhpcy5kcHIsIC8vIHZlcnRpY2FsIHNjYWxpbmcgd2l0aCBEUFJcbiAgICAgICAgdmlld3BvcnQueCAqIHRoaXMuZHByLCAvLyBob3Jpem9udGFsIHRyYW5zbGF0aW9uIHdpdGggRFBSXG4gICAgICAgIHZpZXdwb3J0LnkgKiB0aGlzLmRwciwgLy8gdmVydGljYWwgdHJhbnNsYXRpb24gd2l0aCBEUFJcbiAgICAgICk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS52aWV3cG9ydE5vZGVzKCkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZVJlbmRlcmluZ1NlcnZpY2Uudmlld3BvcnROb2RlcygpW2ldO1xuXG4gICAgICAgIGlmICh0aGlzLnJlbmRlclN0cmF0ZWd5LnNob3VsZFJlbmRlck5vZGUobm9kZSkpIHtcbiAgICAgICAgICBkcmF3Tm9kZSh0aGlzLmN0eCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVzdG9yZSB0aGUgY29udGV4dCBzdGF0ZVxuICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,437 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Injector, Input, inject, runInInjectionContext, contentChild, viewChild, input, } from '@angular/core';
|
|
2
|
-
import { MapContextDirective } from '../../directives/map-context.directive';
|
|
3
|
-
import { DraggableService } from '../../services/draggable.service';
|
|
4
|
-
import { ViewportService } from '../../services/viewport.service';
|
|
5
|
-
import { toObservable, outputFromObservable } from '@angular/core/rxjs-interop';
|
|
6
|
-
import { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, GroupNodeTemplateDirective, NodeHtmlTemplateDirective, NodeSvgTemplateDirective, } from '../../directives/template.directive';
|
|
7
|
-
import { addNodesToEdges } from '../../utils/add-nodes-to-edges';
|
|
8
|
-
import { skip } from 'rxjs';
|
|
9
|
-
import { FlowStatusService } from '../../services/flow-status.service';
|
|
10
|
-
import { FlowEntitiesService } from '../../services/flow-entities.service';
|
|
11
|
-
import { ConnectionModel } from '../../models/connection.model';
|
|
12
|
-
import { ReferenceIdentityChecker } from '../../utils/identity-checker/reference-identity-checker';
|
|
13
|
-
import { NodesChangeService } from '../../services/node-changes.service';
|
|
14
|
-
import { EdgeChangesService } from '../../services/edge-changes.service';
|
|
15
|
-
import { ChangesControllerDirective } from '../../directives/changes-controller.directive';
|
|
16
|
-
import { NodeRenderingService } from '../../services/node-rendering.service';
|
|
17
|
-
import { SelectionService } from '../../services/selection.service';
|
|
18
|
-
import { FlowSettingsService } from '../../services/flow-settings.service';
|
|
19
|
-
import { ComponentEventBusService } from '../../services/component-event-bus.service';
|
|
20
|
-
import { SpacePointContextDirective } from '../../directives/space-point-context.directive';
|
|
21
|
-
import { KeyboardService } from '../../services/keyboard.service';
|
|
22
|
-
import { transformBackground } from '../../utils/transform-background';
|
|
23
|
-
import { OverlaysService } from '../../services/overlays.service';
|
|
24
|
-
import { NgTemplateOutlet } from '@angular/common';
|
|
25
|
-
import { EdgeComponent } from '../edge/edge.component';
|
|
26
|
-
import { NodeComponent } from '../node/node.component';
|
|
27
|
-
import { ConnectionComponent } from '../connection/connection.component';
|
|
28
|
-
import { BackgroundComponent } from '../background/background.component';
|
|
29
|
-
import { DefsComponent } from '../defs/defs.component';
|
|
30
|
-
import { FlowSizeControllerDirective } from '../../directives/flow-size-controller.directive';
|
|
31
|
-
import { RootPointerDirective } from '../../directives/root-pointer.directive';
|
|
32
|
-
import { RootSvgContextDirective } from '../../directives/root-svg-context.directive';
|
|
33
|
-
import { RootSvgReferenceDirective } from '../../directives/reference.directive';
|
|
34
|
-
import { EdgeRenderingService } from '../../services/edge-rendering.service';
|
|
35
|
-
import { getSpacePoints } from '../../utils/get-space-points';
|
|
36
|
-
import { getIntesectingNodes } from '../../utils/nodes';
|
|
37
|
-
import { PreviewFlowComponent } from '../preview-flow/preview-flow.component';
|
|
38
|
-
import { PreviewFlowRenderStrategyService, ViewportPreviewFlowRenderStrategyService, } from '../../services/preview-flow-render-strategy.service';
|
|
39
|
-
import { toLazySignal } from '../../utils/signals/to-lazy-signal';
|
|
40
|
-
import { FlowRenderingService } from '../../services/flow-rendering.service';
|
|
41
|
-
import { AlignmentHelperComponent } from '../alignment-helper/alignment-helper.component';
|
|
42
|
-
import * as i0 from "@angular/core";
|
|
43
|
-
import * as i1 from "../../directives/changes-controller.directive";
|
|
44
|
-
const changesControllerHostDirective = {
|
|
45
|
-
directive: ChangesControllerDirective,
|
|
46
|
-
outputs: [
|
|
47
|
-
'onNodesChange',
|
|
48
|
-
'onNodesChange.position',
|
|
49
|
-
'onNodesChange.position.single',
|
|
50
|
-
'onNodesChange.position.many',
|
|
51
|
-
'onNodesChange.size',
|
|
52
|
-
'onNodesChange.size.single',
|
|
53
|
-
'onNodesChange.size.many',
|
|
54
|
-
'onNodesChange.add',
|
|
55
|
-
'onNodesChange.add.single',
|
|
56
|
-
'onNodesChange.add.many',
|
|
57
|
-
'onNodesChange.remove',
|
|
58
|
-
'onNodesChange.remove.single',
|
|
59
|
-
'onNodesChange.remove.many',
|
|
60
|
-
'onNodesChange.select',
|
|
61
|
-
'onNodesChange.select.single',
|
|
62
|
-
'onNodesChange.select.many',
|
|
63
|
-
'onEdgesChange',
|
|
64
|
-
'onEdgesChange.detached',
|
|
65
|
-
'onEdgesChange.detached.single',
|
|
66
|
-
'onEdgesChange.detached.many',
|
|
67
|
-
'onEdgesChange.add',
|
|
68
|
-
'onEdgesChange.add.single',
|
|
69
|
-
'onEdgesChange.add.many',
|
|
70
|
-
'onEdgesChange.remove',
|
|
71
|
-
'onEdgesChange.remove.single',
|
|
72
|
-
'onEdgesChange.remove.many',
|
|
73
|
-
'onEdgesChange.select',
|
|
74
|
-
'onEdgesChange.select.single',
|
|
75
|
-
'onEdgesChange.select.many',
|
|
76
|
-
],
|
|
77
|
-
};
|
|
78
|
-
export class VflowComponent {
|
|
79
|
-
constructor() {
|
|
80
|
-
// #region DI
|
|
81
|
-
this.viewportService = inject(ViewportService);
|
|
82
|
-
this.flowEntitiesService = inject(FlowEntitiesService);
|
|
83
|
-
this.nodesChangeService = inject(NodesChangeService);
|
|
84
|
-
this.edgesChangeService = inject(EdgeChangesService);
|
|
85
|
-
this.nodeRenderingService = inject(NodeRenderingService);
|
|
86
|
-
this.edgeRenderingService = inject(EdgeRenderingService);
|
|
87
|
-
this.flowSettingsService = inject(FlowSettingsService);
|
|
88
|
-
this.componentEventBusService = inject(ComponentEventBusService);
|
|
89
|
-
this.keyboardService = inject(KeyboardService);
|
|
90
|
-
this.injector = inject(Injector);
|
|
91
|
-
this.flowRenderingService = inject(FlowRenderingService);
|
|
92
|
-
this.alignmentHelper = input(false);
|
|
93
|
-
this.nodeModels = this.nodeRenderingService.nodes;
|
|
94
|
-
this.groups = this.nodeRenderingService.groups;
|
|
95
|
-
this.nonGroups = this.nodeRenderingService.nonGroups;
|
|
96
|
-
this.edgeModels = this.edgeRenderingService.edges;
|
|
97
|
-
// #endregion
|
|
98
|
-
// #region OUTPUTS
|
|
99
|
-
/**
|
|
100
|
-
* Event that accumulates all custom node events
|
|
101
|
-
*
|
|
102
|
-
* @experimental
|
|
103
|
-
*/
|
|
104
|
-
this.onComponentNodeEvent = outputFromObservable(this.componentEventBusService.event$); // TODO: research how to remove any
|
|
105
|
-
// #endregion
|
|
106
|
-
// #region TEMPLATES
|
|
107
|
-
this.nodeTemplateDirective = contentChild(NodeHtmlTemplateDirective);
|
|
108
|
-
this.nodeSvgTemplateDirective = contentChild(NodeSvgTemplateDirective);
|
|
109
|
-
this.groupNodeTemplateDirective = contentChild(GroupNodeTemplateDirective);
|
|
110
|
-
this.edgeTemplateDirective = contentChild(EdgeTemplateDirective);
|
|
111
|
-
this.edgeLabelHtmlDirective = contentChild(EdgeLabelHtmlTemplateDirective);
|
|
112
|
-
this.connectionTemplateDirective = contentChild(ConnectionTemplateDirective);
|
|
113
|
-
// #endregion
|
|
114
|
-
// #region DIRECTIVES
|
|
115
|
-
this.mapContext = viewChild(MapContextDirective);
|
|
116
|
-
this.spacePointContext = viewChild.required(SpacePointContextDirective);
|
|
117
|
-
// #endregion
|
|
118
|
-
// #region SIGNAL_API
|
|
119
|
-
/**
|
|
120
|
-
* Signal for reading viewport change
|
|
121
|
-
*/
|
|
122
|
-
this.viewport = this.viewportService.readableViewport.asReadonly();
|
|
123
|
-
/**
|
|
124
|
-
* Signal for reading nodes change
|
|
125
|
-
*/
|
|
126
|
-
this.nodesChange = toLazySignal(this.nodesChangeService.changes$, {
|
|
127
|
-
initialValue: [],
|
|
128
|
-
});
|
|
129
|
-
/**
|
|
130
|
-
* Signal to reading edges change
|
|
131
|
-
*/
|
|
132
|
-
this.edgesChange = toLazySignal(this.edgesChangeService.changes$, {
|
|
133
|
-
initialValue: [],
|
|
134
|
-
});
|
|
135
|
-
this.initialized = this.flowRenderingService.flowInitialized.asReadonly();
|
|
136
|
-
// #endregion
|
|
137
|
-
// #region RX_API
|
|
138
|
-
/**
|
|
139
|
-
* Observable with viewport change
|
|
140
|
-
*/
|
|
141
|
-
this.viewportChange$ = toObservable(this.viewportService.readableViewport).pipe(skip(1)); // skip default value that set by signal
|
|
142
|
-
/**
|
|
143
|
-
* Observable with nodes change
|
|
144
|
-
*/
|
|
145
|
-
this.nodesChange$ = this.nodesChangeService.changes$;
|
|
146
|
-
/**
|
|
147
|
-
* Observable with edges change
|
|
148
|
-
*/
|
|
149
|
-
this.edgesChange$ = this.edgesChangeService.changes$;
|
|
150
|
-
this.initialized$ = toObservable(this.flowRenderingService.flowInitialized);
|
|
151
|
-
// #endregion
|
|
152
|
-
this.markers = this.flowEntitiesService.markers;
|
|
153
|
-
this.minimap = this.flowEntitiesService.minimap;
|
|
154
|
-
this.flowOptimization = this.flowSettingsService.optimization;
|
|
155
|
-
this.flowWidth = this.flowSettingsService.computedFlowWidth;
|
|
156
|
-
this.flowHeight = this.flowSettingsService.computedFlowHeight;
|
|
157
|
-
}
|
|
158
|
-
// #endregion
|
|
159
|
-
// #region SETTINGS
|
|
160
|
-
/**
|
|
161
|
-
* Size for flow view
|
|
162
|
-
*
|
|
163
|
-
* accepts
|
|
164
|
-
* - absolute size in format [width, height] or
|
|
165
|
-
* - 'auto' to compute size based on parent element size
|
|
166
|
-
*/
|
|
167
|
-
set view(view) {
|
|
168
|
-
this.flowSettingsService.view.set(view);
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Minimum zoom value
|
|
172
|
-
*/
|
|
173
|
-
set minZoom(value) {
|
|
174
|
-
this.flowSettingsService.minZoom.set(value);
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Maximum zoom value
|
|
178
|
-
*/
|
|
179
|
-
set maxZoom(value) {
|
|
180
|
-
this.flowSettingsService.maxZoom.set(value);
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Background for flow
|
|
184
|
-
*/
|
|
185
|
-
set background(value) {
|
|
186
|
-
this.flowSettingsService.background.set(transformBackground(value));
|
|
187
|
-
}
|
|
188
|
-
set optimization(newOptimization) {
|
|
189
|
-
this.flowSettingsService.optimization.update((optimization) => ({
|
|
190
|
-
...optimization,
|
|
191
|
-
...newOptimization,
|
|
192
|
-
}));
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Global rule if you can or can't select entities
|
|
196
|
-
*/
|
|
197
|
-
set entitiesSelectable(value) {
|
|
198
|
-
this.flowSettingsService.entitiesSelectable.set(value);
|
|
199
|
-
}
|
|
200
|
-
set keyboardShortcuts(value) {
|
|
201
|
-
this.keyboardService.setShortcuts(value);
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Settings for connection (it renders when user tries to create edge between nodes)
|
|
205
|
-
*
|
|
206
|
-
* You need to pass `ConnectionSettings` in this input.
|
|
207
|
-
*/
|
|
208
|
-
set connection(connection) {
|
|
209
|
-
this.flowEntitiesService.connection.set(connection);
|
|
210
|
-
}
|
|
211
|
-
get connection() {
|
|
212
|
-
return this.flowEntitiesService.connection();
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Snap grid for node movement. Passes as [x, y]
|
|
216
|
-
*/
|
|
217
|
-
set snapGrid(value) {
|
|
218
|
-
this.flowSettingsService.snapGrid.set(value);
|
|
219
|
-
}
|
|
220
|
-
/**
|
|
221
|
-
* Raizing z-index for selected node
|
|
222
|
-
*/
|
|
223
|
-
set elevateNodesOnSelect(value) {
|
|
224
|
-
this.flowSettingsService.elevateNodesOnSelect.set(value);
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Raizing z-index for selected edge
|
|
228
|
-
*/
|
|
229
|
-
set elevateEdgesOnSelect(value) {
|
|
230
|
-
this.flowSettingsService.elevateEdgesOnSelect.set(value);
|
|
231
|
-
}
|
|
232
|
-
// #endregion
|
|
233
|
-
// #region MAIN_INPUTS
|
|
234
|
-
/**
|
|
235
|
-
* Nodes to render
|
|
236
|
-
*/
|
|
237
|
-
set nodes(newNodes) {
|
|
238
|
-
const models = runInInjectionContext(this.injector, () => ReferenceIdentityChecker.nodes(newNodes, this.flowEntitiesService.nodes()));
|
|
239
|
-
// TODO: consider calling only fo new nodes
|
|
240
|
-
// quick and dirty binding nodes to edges
|
|
241
|
-
addNodesToEdges(models, this.flowEntitiesService.edges());
|
|
242
|
-
this.flowEntitiesService.nodes.set(models);
|
|
243
|
-
models.forEach((model) => this.nodeRenderingService.pullNode(model));
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Edges to render
|
|
247
|
-
*/
|
|
248
|
-
set edges(newEdges) {
|
|
249
|
-
const newModels = runInInjectionContext(this.injector, () => ReferenceIdentityChecker.edges(newEdges, this.flowEntitiesService.edges()));
|
|
250
|
-
// quick and dirty binding nodes to edges
|
|
251
|
-
addNodesToEdges(this.flowEntitiesService.nodes(), newModels);
|
|
252
|
-
this.flowEntitiesService.edges.set(newModels);
|
|
253
|
-
}
|
|
254
|
-
// #region METHODS_API
|
|
255
|
-
/**
|
|
256
|
-
* Change viewport to specified state
|
|
257
|
-
*
|
|
258
|
-
* @param viewport viewport state
|
|
259
|
-
*/
|
|
260
|
-
viewportTo(viewport) {
|
|
261
|
-
this.viewportService.writableViewport.set({
|
|
262
|
-
changeType: 'absolute',
|
|
263
|
-
state: viewport,
|
|
264
|
-
duration: 0,
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Change zoom
|
|
269
|
-
*
|
|
270
|
-
* @param zoom zoom value
|
|
271
|
-
*/
|
|
272
|
-
zoomTo(zoom) {
|
|
273
|
-
this.viewportService.writableViewport.set({
|
|
274
|
-
changeType: 'absolute',
|
|
275
|
-
state: { zoom },
|
|
276
|
-
duration: 0,
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* Move to specified coordinate
|
|
281
|
-
*
|
|
282
|
-
* @param point point where to move
|
|
283
|
-
*/
|
|
284
|
-
panTo(point) {
|
|
285
|
-
this.viewportService.writableViewport.set({
|
|
286
|
-
changeType: 'absolute',
|
|
287
|
-
state: point,
|
|
288
|
-
duration: 0,
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
fitView(options) {
|
|
292
|
-
this.viewportService.fitView(options);
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* Get node by id
|
|
296
|
-
*
|
|
297
|
-
* @param id node id
|
|
298
|
-
*/
|
|
299
|
-
getNode(id) {
|
|
300
|
-
return this.flowEntitiesService.getNode(id)?.rawNode;
|
|
301
|
-
}
|
|
302
|
-
/**
|
|
303
|
-
* Sync method to get detached edges
|
|
304
|
-
*/
|
|
305
|
-
getDetachedEdges() {
|
|
306
|
-
return this.flowEntitiesService.getDetachedEdges().map((e) => e.edge);
|
|
307
|
-
}
|
|
308
|
-
documentPointToFlowPoint(point, options) {
|
|
309
|
-
const transformedPoint = this.spacePointContext().documentPointToFlowPoint(point);
|
|
310
|
-
if (options?.spaces) {
|
|
311
|
-
return getSpacePoints(transformedPoint, this.nodeRenderingService.groups());
|
|
312
|
-
}
|
|
313
|
-
return transformedPoint;
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Gets nodes that intersect with the specified node
|
|
317
|
-
*
|
|
318
|
-
* @template T - The type of data associated with the nodes
|
|
319
|
-
* @param nodeId - The ID of the node to check intersections for
|
|
320
|
-
* @param options.partially - If true, returns nodes that partially intersect. If false, only returns fully intersecting nodes
|
|
321
|
-
* @returns An array of nodes that intersect with the specified node
|
|
322
|
-
*/
|
|
323
|
-
getIntesectingNodes(nodeId, options = { partially: true }) {
|
|
324
|
-
return getIntesectingNodes(nodeId, this.nodeModels(), options).map((n) => n.rawNode);
|
|
325
|
-
}
|
|
326
|
-
/**
|
|
327
|
-
* Converts a node's position to the coordinate space of another node
|
|
328
|
-
*
|
|
329
|
-
* @param nodeId - The ID of the node whose position should be converted
|
|
330
|
-
* @param spaceNodeId - The ID of the node that defines the target coordinate space.
|
|
331
|
-
* If null, returns the position in global coordinates
|
|
332
|
-
* @returns {Point} The converted position. Returns {x: Infinity, y: Infinity} if either node is not found
|
|
333
|
-
*/
|
|
334
|
-
toNodeSpace(nodeId, spaceNodeId) {
|
|
335
|
-
const node = this.nodeModels().find((n) => n.rawNode.id === nodeId);
|
|
336
|
-
if (!node)
|
|
337
|
-
return { x: Infinity, y: Infinity };
|
|
338
|
-
if (spaceNodeId === null) {
|
|
339
|
-
return node.globalPoint();
|
|
340
|
-
}
|
|
341
|
-
const coordinateSpaceNode = this.nodeModels().find((n) => n.rawNode.id === spaceNodeId);
|
|
342
|
-
if (!coordinateSpaceNode)
|
|
343
|
-
return { x: Infinity, y: Infinity };
|
|
344
|
-
return getSpacePoints(node.globalPoint(), [coordinateSpaceNode])[0];
|
|
345
|
-
}
|
|
346
|
-
// #endregion
|
|
347
|
-
trackNodes(idx, { rawNode: node }) {
|
|
348
|
-
return node;
|
|
349
|
-
}
|
|
350
|
-
trackEdges(idx, { edge }) {
|
|
351
|
-
return edge;
|
|
352
|
-
}
|
|
353
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
354
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VflowComponent, isStandalone: true, selector: "vflow", inputs: { view: { classPropertyName: "view", publicName: "view", isSignal: false, isRequired: false, transformFunction: null }, minZoom: { classPropertyName: "minZoom", publicName: "minZoom", isSignal: false, isRequired: false, transformFunction: null }, maxZoom: { classPropertyName: "maxZoom", publicName: "maxZoom", isSignal: false, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: false, isRequired: false, transformFunction: null }, optimization: { classPropertyName: "optimization", publicName: "optimization", isSignal: false, isRequired: false, transformFunction: null }, entitiesSelectable: { classPropertyName: "entitiesSelectable", publicName: "entitiesSelectable", isSignal: false, isRequired: false, transformFunction: null }, keyboardShortcuts: { classPropertyName: "keyboardShortcuts", publicName: "keyboardShortcuts", isSignal: false, isRequired: false, transformFunction: null }, connection: { classPropertyName: "connection", publicName: "connection", isSignal: false, isRequired: false, transformFunction: (settings) => new ConnectionModel(settings) }, snapGrid: { classPropertyName: "snapGrid", publicName: "snapGrid", isSignal: false, isRequired: false, transformFunction: null }, elevateNodesOnSelect: { classPropertyName: "elevateNodesOnSelect", publicName: "elevateNodesOnSelect", isSignal: false, isRequired: false, transformFunction: null }, elevateEdgesOnSelect: { classPropertyName: "elevateEdgesOnSelect", publicName: "elevateEdgesOnSelect", isSignal: false, isRequired: false, transformFunction: null }, nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: false, isRequired: true, transformFunction: null }, alignmentHelper: { classPropertyName: "alignmentHelper", publicName: "alignmentHelper", isSignal: true, isRequired: false, transformFunction: null }, edges: { classPropertyName: "edges", publicName: "edges", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, providers: [
|
|
355
|
-
DraggableService,
|
|
356
|
-
ViewportService,
|
|
357
|
-
FlowStatusService,
|
|
358
|
-
FlowEntitiesService,
|
|
359
|
-
NodesChangeService,
|
|
360
|
-
EdgeChangesService,
|
|
361
|
-
NodeRenderingService,
|
|
362
|
-
EdgeRenderingService,
|
|
363
|
-
SelectionService,
|
|
364
|
-
FlowSettingsService,
|
|
365
|
-
ComponentEventBusService,
|
|
366
|
-
KeyboardService,
|
|
367
|
-
OverlaysService,
|
|
368
|
-
{ provide: PreviewFlowRenderStrategyService, useClass: ViewportPreviewFlowRenderStrategyService },
|
|
369
|
-
FlowRenderingService,
|
|
370
|
-
], queries: [{ propertyName: "nodeTemplateDirective", first: true, predicate: NodeHtmlTemplateDirective, descendants: true, isSignal: true }, { propertyName: "nodeSvgTemplateDirective", first: true, predicate: NodeSvgTemplateDirective, descendants: true, isSignal: true }, { propertyName: "groupNodeTemplateDirective", first: true, predicate: GroupNodeTemplateDirective, descendants: true, isSignal: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateDirective, descendants: true, isSignal: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateDirective, descendants: true, isSignal: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "mapContext", first: true, predicate: MapContextDirective, descendants: true, isSignal: true }, { propertyName: "spacePointContext", first: true, predicate: SpacePointContextDirective, descendants: true, isSignal: true }], hostDirectives: [{ directive: i1.ChangesControllerDirective, outputs: ["onNodesChange", "onNodesChange", "onNodesChange.position", "onNodesChange.position", "onNodesChange.position.single", "onNodesChange.position.single", "onNodesChange.position.many", "onNodesChange.position.many", "onNodesChange.size", "onNodesChange.size", "onNodesChange.size.single", "onNodesChange.size.single", "onNodesChange.size.many", "onNodesChange.size.many", "onNodesChange.add", "onNodesChange.add", "onNodesChange.add.single", "onNodesChange.add.single", "onNodesChange.add.many", "onNodesChange.add.many", "onNodesChange.remove", "onNodesChange.remove", "onNodesChange.remove.single", "onNodesChange.remove.single", "onNodesChange.remove.many", "onNodesChange.remove.many", "onNodesChange.select", "onNodesChange.select", "onNodesChange.select.single", "onNodesChange.select.single", "onNodesChange.select.many", "onNodesChange.select.many", "onEdgesChange", "onEdgesChange", "onEdgesChange.detached", "onEdgesChange.detached", "onEdgesChange.detached.single", "onEdgesChange.detached.single", "onEdgesChange.detached.many", "onEdgesChange.detached.many", "onEdgesChange.add", "onEdgesChange.add", "onEdgesChange.add.single", "onEdgesChange.add.single", "onEdgesChange.add.many", "onEdgesChange.add.many", "onEdgesChange.remove", "onEdgesChange.remove", "onEdgesChange.remove.single", "onEdgesChange.remove.single", "onEdgesChange.remove.many", "onEdgesChange.remove.many", "onEdgesChange.select", "onEdgesChange.select", "onEdgesChange.select.single", "onEdgesChange.select.single", "onEdgesChange.select.many", "onEdgesChange.select.many"] }], ngImport: i0, template: "<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n @if (alignmentHelper(); as alignmentHelper) {\n @if (alignmentHelper === true) {\n <svg:g alignmentHelper />\n } @else {\n <svg:g alignmentHelper [tolerance]=\"alignmentHelper.tolerance\" [lineColor]=\"alignmentHelper.lineColor\" />\n }\n }\n\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n", styles: [":host{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}.root-svg{grid-row-start:1;grid-column-start:1}.preview-flow{pointer-events:none;grid-row-start:1;grid-column-start:1}\n"], dependencies: [{ kind: "directive", type: RootSvgReferenceDirective, selector: "svg[rootSvgRef]" }, { kind: "directive", type: RootSvgContextDirective, selector: "svg[rootSvgContext]" }, { kind: "directive", type: RootPointerDirective, selector: "svg[rootPointer]" }, { kind: "directive", type: FlowSizeControllerDirective, selector: "svg[flowSizeController]" }, { kind: "component", type: DefsComponent, selector: "defs[flowDefs]", inputs: ["markers"] }, { kind: "component", type: BackgroundComponent, selector: "g[background]" }, { kind: "directive", type: MapContextDirective, selector: "g[mapContext]" }, { kind: "directive", type: SpacePointContextDirective, selector: "g[spacePointContext]" }, { kind: "component", type: ConnectionComponent, selector: "g[connection]", inputs: ["model", "template"] }, { kind: "component", type: NodeComponent, selector: "g[node]", inputs: ["model", "nodeTemplate", "nodeSvgTemplate", "groupNodeTemplate"] }, { kind: "component", type: EdgeComponent, selector: "g[edge]", inputs: ["model", "edgeTemplate", "edgeLabelHtmlTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PreviewFlowComponent, selector: "canvas[previewFlow]", inputs: ["width", "height"] }, { kind: "component", type: AlignmentHelperComponent, selector: "g[alignmentHelper]", inputs: ["tolerance", "lineColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
371
|
-
}
|
|
372
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowComponent, decorators: [{
|
|
373
|
-
type: Component,
|
|
374
|
-
args: [{ standalone: true, selector: 'vflow', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
375
|
-
DraggableService,
|
|
376
|
-
ViewportService,
|
|
377
|
-
FlowStatusService,
|
|
378
|
-
FlowEntitiesService,
|
|
379
|
-
NodesChangeService,
|
|
380
|
-
EdgeChangesService,
|
|
381
|
-
NodeRenderingService,
|
|
382
|
-
EdgeRenderingService,
|
|
383
|
-
SelectionService,
|
|
384
|
-
FlowSettingsService,
|
|
385
|
-
ComponentEventBusService,
|
|
386
|
-
KeyboardService,
|
|
387
|
-
OverlaysService,
|
|
388
|
-
{ provide: PreviewFlowRenderStrategyService, useClass: ViewportPreviewFlowRenderStrategyService },
|
|
389
|
-
FlowRenderingService,
|
|
390
|
-
], hostDirectives: [changesControllerHostDirective], imports: [
|
|
391
|
-
RootSvgReferenceDirective,
|
|
392
|
-
RootSvgContextDirective,
|
|
393
|
-
RootPointerDirective,
|
|
394
|
-
FlowSizeControllerDirective,
|
|
395
|
-
DefsComponent,
|
|
396
|
-
BackgroundComponent,
|
|
397
|
-
MapContextDirective,
|
|
398
|
-
SpacePointContextDirective,
|
|
399
|
-
ConnectionComponent,
|
|
400
|
-
NodeComponent,
|
|
401
|
-
EdgeComponent,
|
|
402
|
-
NgTemplateOutlet,
|
|
403
|
-
PreviewFlowComponent,
|
|
404
|
-
AlignmentHelperComponent,
|
|
405
|
-
], template: "<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n @if (alignmentHelper(); as alignmentHelper) {\n @if (alignmentHelper === true) {\n <svg:g alignmentHelper />\n } @else {\n <svg:g alignmentHelper [tolerance]=\"alignmentHelper.tolerance\" [lineColor]=\"alignmentHelper.lineColor\" />\n }\n }\n\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n", styles: [":host{display:grid;grid-template-columns:1fr;width:100%;height:100%;-webkit-user-select:none;user-select:none}:host ::ng-deep *{box-sizing:border-box}.root-svg{grid-row-start:1;grid-column-start:1}.preview-flow{pointer-events:none;grid-row-start:1;grid-column-start:1}\n"] }]
|
|
406
|
-
}], propDecorators: { view: [{
|
|
407
|
-
type: Input
|
|
408
|
-
}], minZoom: [{
|
|
409
|
-
type: Input
|
|
410
|
-
}], maxZoom: [{
|
|
411
|
-
type: Input
|
|
412
|
-
}], background: [{
|
|
413
|
-
type: Input
|
|
414
|
-
}], optimization: [{
|
|
415
|
-
type: Input
|
|
416
|
-
}], entitiesSelectable: [{
|
|
417
|
-
type: Input
|
|
418
|
-
}], keyboardShortcuts: [{
|
|
419
|
-
type: Input
|
|
420
|
-
}], connection: [{
|
|
421
|
-
type: Input,
|
|
422
|
-
args: [{
|
|
423
|
-
transform: (settings) => new ConnectionModel(settings),
|
|
424
|
-
}]
|
|
425
|
-
}], snapGrid: [{
|
|
426
|
-
type: Input
|
|
427
|
-
}], elevateNodesOnSelect: [{
|
|
428
|
-
type: Input
|
|
429
|
-
}], elevateEdgesOnSelect: [{
|
|
430
|
-
type: Input
|
|
431
|
-
}], nodes: [{
|
|
432
|
-
type: Input,
|
|
433
|
-
args: [{ required: true }]
|
|
434
|
-
}], edges: [{
|
|
435
|
-
type: Input
|
|
436
|
-
}] } });
|
|
437
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmZsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbXBvbmVudHMvdmZsb3cvdmZsb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLFlBQVksRUFDWixTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHaEYsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw4QkFBOEIsRUFDOUIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsd0JBQXdCLEdBQ3pCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFM0UsT0FBTyxFQUFF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QzNFO2dCQWFVLFFBQVE7c0JBRGxCLEtBQUs7Z0JBU0ssb0JBQW9CO3NCQUQ5QixLQUFLO2dCQVNLLG9CQUFvQjtzQkFEOUIsS0FBSztnQkFXSyxLQUFLO3NCQURmLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQXlCZCxLQUFLO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBjb250ZW50Q2hpbGQsXG4gIHZpZXdDaGlsZCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY05vZGUsIE5vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL25vZGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hcENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL21hcC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEcmFnZ2FibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJhZ2dhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm9kZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vZGUubW9kZWwnO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdmlld3BvcnQuc2VydmljZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUsIG91dHB1dEZyb21PYnNlcnZhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRnZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWRnZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRWRnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VkZ2UubW9kZWwnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvblRlbXBsYXRlRGlyZWN0aXZlLFxuICBFZGdlTGFiZWxIdG1sVGVtcGxhdGVEaXJlY3RpdmUsXG4gIEVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgR3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUsXG4gIE5vZGVIdG1sVGVtcGxhdGVEaXJlY3RpdmUsXG4gIE5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy90ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgYWRkTm9kZXNUb0VkZ2VzIH0gZnJvbSAnLi4vLi4vdXRpbHMvYWRkLW5vZGVzLXRvLWVkZ2VzJztcbmltcG9ydCB7IHNraXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNwYWNlUG9pbnQsIFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVmlld3BvcnRTdGF0ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdmlld3BvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZsb3dTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1zdGF0dXMuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93RW50aXRpZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1lbnRpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbm5lY3Rpb25TZXR0aW5ncyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29ubmVjdGlvbi1zZXR0aW5ncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nvbm5lY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVmZXJlbmNlSWRlbnRpdHlDaGVja2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaWRlbnRpdHktY2hlY2tlci9yZWZlcmVuY2UtaWRlbnRpdHktY2hlY2tlcic7XG5pbXBvcnQgeyBOb2Rlc0NoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub2RlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGdlLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQgeyBOb2RlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvbm9kZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBDaGFuZ2VzQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2hhbmdlcy1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFZGdlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZWRnZS1jaGFuZ2UudHlwZSc7XG5pbXBvcnQgeyBOb2RlUmVuZGVyaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vZGUtcmVuZGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcG9uZW50LWV2ZW50LWJ1cy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhY2tncm91bmQgfSBmcm9tICcuLi8uLi90eXBlcy9iYWNrZ3JvdW5kLnR5cGUnO1xuaW1wb3J0IHsgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3NwYWNlLXBvaW50LWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpdFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9maXQtdmlldy1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPcHRpbWl6YXRpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL29wdGltaXphdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dHMgfSBmcm9tICcuLi8uLi90eXBlcy9rZXlib2FyZC1hY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBLZXlib2FyZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9rZXlib2FyZC5zZXJ2aWNlJztcbmltcG9ydCB7IHRyYW5zZm9ybUJhY2tncm91bmQgfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2Zvcm0tYmFja2dyb3VuZCc7XG5pbXBvcnQgeyBPdmVybGF5c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdmVybGF5cy5zZXJ2aWNlJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2VkZ2UvZWRnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uL25vZGUvbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nvbm5lY3Rpb24vY29ubmVjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFja2dyb3VuZENvbXBvbmVudCB9IGZyb20gJy4uL2JhY2tncm91bmQvYmFja2dyb3VuZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmc0NvbXBvbmVudCB9IGZyb20gJy4uL2RlZnMvZGVmcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmxvd1NpemVDb250cm9sbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9mbG93LXNpemUtY29udHJvbGxlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUm9vdFBvaW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvb3QtcG9pbnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUm9vdFN2Z0NvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvb3Qtc3ZnLWNvbnRleHQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJvb3RTdmdSZWZlcmVuY2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3JlZmVyZW5jZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZVJlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGdlLXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFNwYWNlUG9pbnRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LXNwYWNlLXBvaW50cyc7XG5pbXBvcnQgeyBnZXRJbnRlc2VjdGluZ05vZGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvbm9kZXMnO1xuaW1wb3J0IHsgSW50ZXJzZWN0aW5nTm9kZXNPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbnRlcnNlY3Rpbmctbm9kZXMtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJldmlld0Zsb3dDb21wb25lbnQgfSBmcm9tICcuLi9wcmV2aWV3LWZsb3cvcHJldmlldy1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSxcbiAgVmlld3BvcnRQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJldmlldy1mbG93LXJlbmRlci1zdHJhdGVneS5zZXJ2aWNlJztcbmltcG9ydCB7IHRvTGF6eVNpZ25hbCB9IGZyb20gJy4uLy4uL3V0aWxzL3NpZ25hbHMvdG8tbGF6eS1zaWduYWwnO1xuaW1wb3J0IHsgRmxvd1JlbmRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LXJlbmRlcmluZy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsaWdubWVudEhlbHBlckNvbXBvbmVudCB9IGZyb20gJy4uL2FsaWdubWVudC1oZWxwZXIvYWxpZ25tZW50LWhlbHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxpZ25tZW50SGVscGVyU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FsaWdubWVudC1oZWxwZXItc2V0dGluZ3MuaW50ZXJmYWNlJztcblxuY29uc3QgY2hhbmdlc0NvbnRyb2xsZXJIb3N0RGlyZWN0aXZlID0ge1xuICBkaXJlY3RpdmU6IENoYW5nZXNDb250cm9sbGVyRGlyZWN0aXZlLFxuICBvdXRwdXRzOiBbXG4gICAgJ29uTm9kZXNDaGFuZ2UnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5wb3NpdGlvbi5zaW5nbGUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnBvc2l0aW9uLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUnLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNpemUuc2luZ2xlJyxcbiAgICAnb25Ob2Rlc0NoYW5nZS5zaXplLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLmFkZCcsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UuYWRkLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnJlbW92ZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlLnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2UucmVtb3ZlLm1hbnknLFxuICAgICdvbk5vZGVzQ2hhbmdlLnNlbGVjdCcsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0LnNpbmdsZScsXG4gICAgJ29uTm9kZXNDaGFuZ2Uuc2VsZWN0Lm1hbnknLFxuICAgICdvbkVkZ2VzQ2hhbmdlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZCcsXG4gICAgJ29uRWRnZXNDaGFuZ2UuZGV0YWNoZWQuc2luZ2xlJyxcbiAgICAnb25FZGdlc0NoYW5nZS5kZXRhY2hlZC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5hZGQnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLmFkZC5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5yZW1vdmUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnJlbW92ZS5tYW55JyxcbiAgICAnb25FZGdlc0NoYW5nZS5zZWxlY3QnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdC5zaW5nbGUnLFxuICAgICdvbkVkZ2VzQ2hhbmdlLnNlbGVjdC5tYW55JyxcbiAgXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3ZmbG93JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZmbG93LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdmZsb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIERyYWdnYWJsZVNlcnZpY2UsXG4gICAgVmlld3BvcnRTZXJ2aWNlLFxuICAgIEZsb3dTdGF0dXNTZXJ2aWNlLFxuICAgIEZsb3dFbnRpdGllc1NlcnZpY2UsXG4gICAgTm9kZXNDaGFuZ2VTZXJ2aWNlLFxuICAgIEVkZ2VDaGFuZ2VzU2VydmljZSxcbiAgICBOb2RlUmVuZGVyaW5nU2VydmljZSxcbiAgICBFZGdlUmVuZGVyaW5nU2VydmljZSxcbiAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIEZsb3dTZXR0aW5nc1NlcnZpY2UsXG4gICAgQ29tcG9uZW50RXZlbnRCdXNTZXJ2aWNlLFxuICAgIEtleWJvYXJkU2VydmljZSxcbiAgICBPdmVybGF5c1NlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBQcmV2aWV3Rmxvd1JlbmRlclN0cmF0ZWd5U2VydmljZSwgdXNlQ2xhc3M6IFZpZXdwb3J0UHJldmlld0Zsb3dSZW5kZXJTdHJhdGVneVNlcnZpY2UgfSxcbiAgICBGbG93UmVuZGVyaW5nU2VydmljZSxcbiAgXSxcbiAgaG9zdERpcmVjdGl2ZXM6IFtjaGFuZ2VzQ29udHJvbGxlckhvc3REaXJlY3RpdmVdLFxuICBpbXBvcnRzOiBbXG4gICAgUm9vdFN2Z1JlZmVyZW5jZURpcmVjdGl2ZSxcbiAgICBSb290U3ZnQ29udGV4dERpcmVjdGl2ZSxcbiAgICBSb290UG9pbnRlckRpcmVjdGl2ZSxcbiAgICBGbG93U2l6ZUNvbnRyb2xsZXJEaXJlY3RpdmUsXG4gICAgRGVmc0NvbXBvbmVudCxcbiAgICBCYWNrZ3JvdW5kQ29tcG9uZW50LFxuICAgIE1hcENvbnRleHREaXJlY3RpdmUsXG4gICAgU3BhY2VQb2ludENvbnRleHREaXJlY3RpdmUsXG4gICAgQ29ubmVjdGlvbkNvbXBvbmVudCxcbiAgICBOb2RlQ29tcG9uZW50LFxuICAgIEVkZ2VDb21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBQcmV2aWV3Rmxvd0NvbXBvbmVudCxcbiAgICBBbGlnbm1lbnRIZWxwZXJDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFZmbG93Q29tcG9uZW50IHtcbiAgLy8gI3JlZ2lvbiBESVxuICBwcml2YXRlIHZpZXdwb3J0U2VydmljZSA9IGluamVjdChWaWV3cG9ydFNlcnZpY2UpO1xuICBwcml2YXRlIGZsb3dFbnRpdGllc1NlcnZpY2UgPSBpbmplY3QoRmxvd0VudGl0aWVzU2VydmljZSk7XG4gIHByaXZhdGUgbm9kZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KE5vZGVzQ2hhbmdlU2VydmljZSk7XG4gIHByaXZhdGUgZWRnZXNDaGFuZ2VTZXJ2aWNlID0gaW5qZWN0KEVkZ2VDaGFuZ2VzU2VydmljZSk7XG4gIHByaXZhdGUgbm9kZVJlbmRlcmluZ1NlcnZpY2UgPSBpbmplY3QoTm9kZVJlbmRlcmluZ1NlcnZpY2UpO1xuICBwcml2YXRlIGVkZ2VSZW5kZXJpbmdTZXJ2aWNlID0gaW5qZWN0KEVkZ2VSZW5kZXJpbmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBmbG93U2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEZsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICBwcml2YXRlIGNvbXBvbmVudEV2ZW50QnVzU2VydmljZSA9IGluamVjdChDb21wb25lbnRFdmVudEJ1c1NlcnZpY2UpO1xuICBwcml2YXRlIGtleWJvYXJkU2VydmljZSA9IGluamVjdChLZXlib2FyZFNlcnZpY2UpO1xuICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSBmbG93UmVuZGVyaW5nU2VydmljZSA9IGluamVjdChGbG93UmVuZGVyaW5nU2VydmljZSk7XG5cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gU0VUVElOR1NcblxuICAvKipcbiAgICogU2l6ZSBmb3IgZmxvdyB2aWV3XG4gICAqXG4gICAqIGFjY2VwdHNcbiAgICogLSBhYnNvbHV0ZSBzaXplIGluIGZvcm1hdCBbd2lkdGgsIGhlaWdodF0gb3JcbiAgICogLSAnYXV0bycgdG8gY29tcHV0ZSBzaXplIGJhc2VkIG9uIHBhcmVudCBlbGVtZW50IHNpemVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdmlldyh2aWV3OiBbbnVtYmVyLCBudW1iZXJdIHwgJ2F1dG8nKSB7XG4gICAgdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLnZpZXcuc2V0KHZpZXcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gem9vbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtaW5ab29tKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWluWm9vbS5zZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0gem9vbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBtYXhab29tKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UubWF4Wm9vbS5zZXQodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhY2tncm91bmQgZm9yIGZsb3dcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYmFja2dyb3VuZCh2YWx1ZTogQmFja2dyb3VuZCB8IHN0cmluZykge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5iYWNrZ3JvdW5kLnNldCh0cmFuc2Zvcm1CYWNrZ3JvdW5kKHZhbHVlKSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG9wdGltaXphdGlvbihuZXdPcHRpbWl6YXRpb246IE9wdGltaXphdGlvbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5vcHRpbWl6YXRpb24udXBkYXRlKChvcHRpbWl6YXRpb24pID0+ICh7XG4gICAgICAuLi5vcHRpbWl6YXRpb24sXG4gICAgICAuLi5uZXdPcHRpbWl6YXRpb24sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBydWxlIGlmIHlvdSBjYW4gb3IgY2FuJ3Qgc2VsZWN0IGVudGl0aWVzXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVudGl0aWVzU2VsZWN0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5lbnRpdGllc1NlbGVjdGFibGUuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQga2V5Ym9hcmRTaG9ydGN1dHModmFsdWU6IEtleWJvYXJkU2hvcnRjdXRzKSB7XG4gICAgdGhpcy5rZXlib2FyZFNlcnZpY2Uuc2V0U2hvcnRjdXRzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyBmb3IgY29ubmVjdGlvbiAoaXQgcmVuZGVycyB3aGVuIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGVkZ2UgYmV0d2VlbiBub2RlcylcbiAgICpcbiAgICogWW91IG5lZWQgdG8gcGFzcyBgQ29ubmVjdGlvblNldHRpbmdzYCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KHtcbiAgICB0cmFuc2Zvcm06IChzZXR0aW5nczogQ29ubmVjdGlvblNldHRpbmdzKSA9PiBuZXcgQ29ubmVjdGlvbk1vZGVsKHNldHRpbmdzKSxcbiAgfSlcbiAgcHVibGljIHNldCBjb25uZWN0aW9uKGNvbm5lY3Rpb246IENvbm5lY3Rpb25Nb2RlbCkge1xuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5jb25uZWN0aW9uLnNldChjb25uZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmNvbm5lY3Rpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbmFwIGdyaWQgZm9yIG5vZGUgbW92ZW1lbnQuIFBhc3NlcyBhcyBbeCwgeV1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc25hcEdyaWQodmFsdWU6IFtudW1iZXIsIG51bWJlcl0pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2Uuc25hcEdyaWQuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWl6aW5nIHotaW5kZXggZm9yIHNlbGVjdGVkIG5vZGVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWxldmF0ZU5vZGVzT25TZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZWxldmF0ZU5vZGVzT25TZWxlY3Quc2V0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSYWl6aW5nIHotaW5kZXggZm9yIHNlbGVjdGVkIGVkZ2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZWxldmF0ZUVkZ2VzT25TZWxlY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuZWxldmF0ZUVkZ2VzT25TZWxlY3Quc2V0KHZhbHVlKTtcbiAgfVxuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBNQUlOX0lOUFVUU1xuICAvKipcbiAgICogTm9kZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICBwdWJsaWMgc2V0IG5vZGVzKG5ld05vZGVzOiBOb2RlW10gfCBEeW5hbWljTm9kZVtdKSB7XG4gICAgY29uc3QgbW9kZWxzID0gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+XG4gICAgICBSZWZlcmVuY2VJZGVudGl0eUNoZWNrZXIubm9kZXMobmV3Tm9kZXMsIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5ub2RlcygpKSxcbiAgICApO1xuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgY2FsbGluZyBvbmx5IGZvIG5ldyBub2Rlc1xuICAgIC8vIHF1aWNrIGFuZCBkaXJ0eSBiaW5kaW5nIG5vZGVzIHRvIGVkZ2VzXG4gICAgYWRkTm9kZXNUb0VkZ2VzKG1vZGVscywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpO1xuXG4gICAgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLm5vZGVzLnNldChtb2RlbHMpO1xuXG4gICAgbW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLnB1bGxOb2RlKG1vZGVsKSk7XG4gIH1cblxuICBwdWJsaWMgYWxpZ25tZW50SGVscGVyID0gaW5wdXQ8QWxpZ25tZW50SGVscGVyU2V0dGluZ3MgfCBib29sZWFuPihmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVNb2RlbHMgPSB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vZGVzO1xuICBwcm90ZWN0ZWQgZ3JvdXBzID0gdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ncm91cHM7XG4gIHByb3RlY3RlZCBub25Hcm91cHMgPSB0aGlzLm5vZGVSZW5kZXJpbmdTZXJ2aWNlLm5vbkdyb3VwcztcblxuICAvKipcbiAgICogRWRnZXMgdG8gcmVuZGVyXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGVkZ2VzKG5ld0VkZ2VzOiBFZGdlW10pIHtcbiAgICBjb25zdCBuZXdNb2RlbHMgPSBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT5cbiAgICAgIFJlZmVyZW5jZUlkZW50aXR5Q2hlY2tlci5lZGdlcyhuZXdFZGdlcywgdGhpcy5mbG93RW50aXRpZXNTZXJ2aWNlLmVkZ2VzKCkpLFxuICAgICk7XG5cbiAgICAvLyBxdWljayBhbmQgZGlydHkgYmluZGluZyBub2RlcyB0byBlZGdlc1xuICAgIGFkZE5vZGVzVG9FZGdlcyh0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2Uubm9kZXMoKSwgbmV3TW9kZWxzKTtcblxuICAgIHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5lZGdlcy5zZXQobmV3TW9kZWxzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGdlTW9kZWxzID0gdGhpcy5lZGdlUmVuZGVyaW5nU2VydmljZS5lZGdlcztcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gT1VUUFVUU1xuICAvKipcbiAgICogRXZlbnQgdGhhdCBhY2N1bXVsYXRlcyBhbGwgY3VzdG9tIG5vZGUgZXZlbnRzXG4gICAqXG4gICAqIEBleHBlcmltZW50YWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvbkNvbXBvbmVudE5vZGVFdmVudCA9IG91dHB1dEZyb21PYnNlcnZhYmxlPGFueT4odGhpcy5jb21wb25lbnRFdmVudEJ1c1NlcnZpY2UuZXZlbnQkKTsgLy8gVE9ETzogcmVzZWFyY2ggaG93IHRvIHJlbW92ZSBhbnlcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gVEVNUExBVEVTXG4gIHByb3RlY3RlZCBub2RlVGVtcGxhdGVEaXJlY3RpdmUgPSBjb250ZW50Q2hpbGQoTm9kZUh0bWxUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIG5vZGVTdmdUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChOb2RlU3ZnVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChHcm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGVkZ2VUZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChFZGdlVGVtcGxhdGVEaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBlZGdlTGFiZWxIdG1sRGlyZWN0aXZlID0gY29udGVudENoaWxkKEVkZ2VMYWJlbEh0bWxUZW1wbGF0ZURpcmVjdGl2ZSk7XG5cbiAgcHJvdGVjdGVkIGNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSA9IGNvbnRlbnRDaGlsZChDb25uZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBESVJFQ1RJVkVTXG4gIHByb3RlY3RlZCBtYXBDb250ZXh0ID0gdmlld0NoaWxkKE1hcENvbnRleHREaXJlY3RpdmUpO1xuXG4gIHByb3RlY3RlZCBzcGFjZVBvaW50Q29udGV4dCA9IHZpZXdDaGlsZC5yZXF1aXJlZChTcGFjZVBvaW50Q29udGV4dERpcmVjdGl2ZSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFNJR05BTF9BUElcbiAgLyoqXG4gICAqIFNpZ25hbCBmb3IgcmVhZGluZyB2aWV3cG9ydCBjaGFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQuYXNSZWFkb25seSgpO1xuXG4gIC8qKlxuICAgKiBTaWduYWwgZm9yIHJlYWRpbmcgbm9kZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXNDaGFuZ2UgPSB0b0xhenlTaWduYWwodGhpcy5ub2Rlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQsIHtcbiAgICBpbml0aWFsVmFsdWU6IFtdIGFzIE5vZGVDaGFuZ2VbXSxcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFNpZ25hbCB0byByZWFkaW5nIGVkZ2VzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVkZ2VzQ2hhbmdlID0gdG9MYXp5U2lnbmFsKHRoaXMuZWRnZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkLCB7XG4gICAgaW5pdGlhbFZhbHVlOiBbXSBhcyBFZGdlQ2hhbmdlW10sXG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbml0aWFsaXplZCA9IHRoaXMuZmxvd1JlbmRlcmluZ1NlcnZpY2UuZmxvd0luaXRpYWxpemVkLmFzUmVhZG9ubHkoKTtcbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gUlhfQVBJXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggdmlld3BvcnQgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmlld3BvcnRDaGFuZ2UkID0gdG9PYnNlcnZhYmxlKHRoaXMudmlld3BvcnRTZXJ2aWNlLnJlYWRhYmxlVmlld3BvcnQpLnBpcGUoc2tpcCgxKSk7IC8vIHNraXAgZGVmYXVsdCB2YWx1ZSB0aGF0IHNldCBieSBzaWduYWxcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB3aXRoIG5vZGVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5vZGVzQ2hhbmdlJCA9IHRoaXMubm9kZXNDaGFuZ2VTZXJ2aWNlLmNoYW5nZXMkO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHdpdGggZWRnZXMgY2hhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZWRnZXNDaGFuZ2UkID0gdGhpcy5lZGdlc0NoYW5nZVNlcnZpY2UuY2hhbmdlcyQ7XG5cbiAgcHVibGljIHJlYWRvbmx5IGluaXRpYWxpemVkJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmZsb3dSZW5kZXJpbmdTZXJ2aWNlLmZsb3dJbml0aWFsaXplZCk7XG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgbWFya2VycyA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5tYXJrZXJzO1xuICBwcm90ZWN0ZWQgbWluaW1hcCA9IHRoaXMuZmxvd0VudGl0aWVzU2VydmljZS5taW5pbWFwO1xuXG4gIHByb3RlY3RlZCBmbG93T3B0aW1pemF0aW9uID0gdGhpcy5mbG93U2V0dGluZ3NTZXJ2aWNlLm9wdGltaXphdGlvbjtcbiAgcHJvdGVjdGVkIGZsb3dXaWR0aCA9IHRoaXMuZmxvd1NldHRpbmdzU2VydmljZS5jb21wdXRlZEZsb3dXaWR0aDtcbiAgcHJvdGVjdGVkIGZsb3dIZWlnaHQgPSB0aGlzLmZsb3dTZXR0aW5nc1NlcnZpY2UuY29tcHV0ZWRGbG93SGVpZ2h0O1xuXG4gIC8vICNyZWdpb24gTUVUSE9EU19BUElcbiAgLyoqXG4gICAqIENoYW5nZSB2aWV3cG9ydCB0byBzcGVjaWZpZWQgc3RhdGVcbiAgICpcbiAgICogQHBhcmFtIHZpZXdwb3J0IHZpZXdwb3J0IHN0YXRlXG4gICAqL1xuICBwdWJsaWMgdmlld3BvcnRUbyh2aWV3cG9ydDogVmlld3BvcnRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHtcbiAgICAgIGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICBzdGF0ZTogdmlld3BvcnQsXG4gICAgICBkdXJhdGlvbjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugem9vbVxuICAgKlxuICAgKiBAcGFyYW0gem9vbSB6b29tIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgem9vbVRvKHpvb206IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudmlld3BvcnRTZXJ2aWNlLndyaXRhYmxlVmlld3BvcnQuc2V0KHtcbiAgICAgIGNoYW5nZVR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICBzdGF0ZTogeyB6b29tIH0sXG4gICAgICBkdXJhdGlvbjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIHNwZWNpZmllZCBjb29yZGluYXRlXG4gICAqXG4gICAqIEBwYXJhbSBwb2ludCBwb2ludCB3aGVyZSB0byBtb3ZlXG4gICAqL1xuICBwdWJsaWMgcGFuVG8ocG9pbnQ6IFBvaW50KTogdm9pZCB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2Uud3JpdGFibGVWaWV3cG9ydC5zZXQoe1xuICAgICAgY2hhbmdlVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgIHN0YXRlOiBwb2ludCxcbiAgICAgIGR1cmF0aW9uOiAwLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGZpdFZpZXcob3B0aW9ucz86IEZpdFZpZXdPcHRpb25zKSB7XG4gICAgdGhpcy52aWV3cG9ydFNlcnZpY2UuZml0VmlldyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbm9kZSBieSBpZFxuICAgKlxuICAgKiBAcGFyYW0gaWQgbm9kZSBpZFxuICAgKi9cbiAgcHVibGljIGdldE5vZGU8VCA9IHVua25vd24+KGlkOiBzdHJpbmcpOiBOb2RlPFQ+IHwgRHluYW1pY05vZGU8VD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZ2V0Tm9kZTxUPihpZCk/LnJhd05vZGU7XG4gIH1cblxuICAvKipcbiAgICogU3luYyBtZXRob2QgdG8gZ2V0IGRldGFjaGVkIGVkZ2VzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGV0YWNoZWRFZGdlcygpOiBFZGdlW10ge1xuICAgIHJldHVybiB0aGlzLmZsb3dFbnRpdGllc1NlcnZpY2UuZ2V0RGV0YWNoZWRFZGdlcygpLm1hcCgoZSkgPT4gZS5lZGdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHBvaW50IHJlY2VpdmVkIGZyb20gZG9jdW1lbnQgdG8gcG9pbnQgb24gdGhlIGZsb3dcbiAgICovXG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50KTogUG9pbnQ7XG4gIHB1YmxpYyBkb2N1bWVudFBvaW50VG9GbG93UG9pbnQocG9pbnQ6IFBvaW50LCBvcHRpb25zPzogeyBzcGFjZXM6IGZhbHNlIH0pOiBQb2ludDtcbiAgLyoqXG4gICAqIENvbnZlcnQgcG9pbnQgcmVjZWl2ZWQgZnJvbSBkb2N1bWVudCB0byBhIHN0YWNrIG9mIHNwYWNlIHBvaW50cyBvbiB0aGUgZmxvd1xuICAgKiBTcGFjZSBwb2ludCBoYXMgYSBzcGFjZU5vZGVJZCwgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoaXMgbm9kZVxuICAgKi9cbiAgcHVibGljIGRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludDogUG9pbnQsIG9wdGlvbnM/OiB7IHNwYWNlczogdHJ1ZSB9KTogU3BhY2VQb2ludFtdO1xuICBwdWJsaWMgZG9jdW1lbnRQb2ludFRvRmxvd1BvaW50KHBvaW50OiBQb2ludCwgb3B0aW9ucz86IHsgc3BhY2VzOiBib29sZWFuIH0pOiB1bmtub3duIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFBvaW50ID0gdGhpcy5zcGFjZVBvaW50Q29udGV4dCgpLmRvY3VtZW50UG9pbnRUb0Zsb3dQb2ludChwb2ludCk7XG5cbiAgICBpZiAob3B0aW9ucz8uc3BhY2VzKSB7XG4gICAgICByZXR1cm4gZ2V0U3BhY2VQb2ludHModHJhbnNmb3JtZWRQb2ludCwgdGhpcy5ub2RlUmVuZGVyaW5nU2VydmljZS5ncm91cHMoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkUG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBub2RlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBzcGVjaWZpZWQgbm9kZVxuICAgKlxuICAgKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2Rlc1xuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHRvIGNoZWNrIGludGVyc2VjdGlvbnMgZm9yXG4gICAqIEBwYXJhbSBvcHRpb25zLnBhcnRpYWxseSAtIElmIHRydWUsIHJldHVybnMgbm9kZXMgdGhhdCBwYXJ0aWFsbHkgaW50ZXJzZWN0LiBJZiBmYWxzZSwgb25seSByZXR1cm5zIGZ1bGx5IGludGVyc2VjdGluZyBub2Rlc1xuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBub2RlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBzcGVjaWZpZWQgbm9kZVxuICAgKi9cbiAgcHVibGljIGdldEludGVzZWN0aW5nTm9kZXM8VD4oXG4gICAgbm9kZUlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSW50ZXJzZWN0aW5nTm9kZXNPcHRpb25zID0geyBwYXJ0aWFsbHk6IHRydWUgfSxcbiAgKTogTm9kZTxUPltdIHwgRHluYW1pY05vZGU8VD5bXSB7XG4gICAgcmV0dXJuIGdldEludGVzZWN0aW5nTm9kZXMobm9kZUlkLCB0aGlzLm5vZGVNb2RlbHMoKSwgb3B0aW9ucykubWFwKChuKSA9PiBuLnJhd05vZGUpIGFzXG4gICAgICB8IE5vZGU8VD5bXVxuICAgICAgfCBEeW5hbWljTm9kZTxUPltdO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgbm9kZSdzIHBvc2l0aW9uIHRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIGFub3RoZXIgbm9kZVxuICAgKlxuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHdob3NlIHBvc2l0aW9uIHNob3VsZCBiZSBjb252ZXJ0ZWRcbiAgICogQHBhcmFtIHNwYWNlTm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHRoYXQgZGVmaW5lcyB0aGUgdGFyZ2V0IGNvb3JkaW5hdGUgc3BhY2UuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIElmIG51bGwsIHJldHVybnMgdGhlIHBvc2l0aW9uIGluIGdsb2JhbCBjb29yZGluYXRlc1xuICAgKiBAcmV0dXJucyB7UG9pbnR9IFRoZSBjb252ZXJ0ZWQgcG9zaXRpb24uIFJldHVybnMge3g6IEluZmluaXR5LCB5OiBJbmZpbml0eX0gaWYgZWl0aGVyIG5vZGUgaXMgbm90IGZvdW5kXG4gICAqL1xuICBwdWJsaWMgdG9Ob2RlU3BhY2Uobm9kZUlkOiBzdHJpbmcsIHNwYWNlTm9kZUlkOiBzdHJpbmcgfCBudWxsKTogUG9pbnQge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5vZGVNb2RlbHMoKS5maW5kKChuKSA9PiBuLnJhd05vZGUuaWQgPT09IG5vZGVJZCk7XG5cbiAgICBpZiAoIW5vZGUpIHJldHVybiB7IHg6IEluZmluaXR5LCB5OiBJbmZpbml0eSB9O1xuXG4gICAgaWYgKHNwYWNlTm9kZUlkID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbm9kZS5nbG9iYWxQb2ludCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvb3JkaW5hdGVTcGFjZU5vZGUgPSB0aGlzLm5vZGVNb2RlbHMoKS5maW5kKChuKSA9PiBuLnJhd05vZGUuaWQgPT09IHNwYWNlTm9kZUlkKTtcblxuICAgIGlmICghY29vcmRpbmF0ZVNwYWNlTm9kZSkgcmV0dXJuIHsgeDogSW5maW5pdHksIHk6IEluZmluaXR5IH07XG5cbiAgICByZXR1cm4gZ2V0U3BhY2VQb2ludHMobm9kZS5nbG9iYWxQb2ludCgpLCBbY29vcmRpbmF0ZVNwYWNlTm9kZV0pWzBdO1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICBwcm90ZWN0ZWQgdHJhY2tOb2RlcyhpZHg6IG51bWJlciwgeyByYXdOb2RlOiBub2RlIH06IE5vZGVNb2RlbCkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrRWRnZXMoaWR4OiBudW1iZXIsIHsgZWRnZSB9OiBFZGdlTW9kZWwpIHtcbiAgICByZXR1cm4gZWRnZTtcbiAgfVxufVxuIiwiPHN2ZzpzdmcgI2Zsb3cgcm9vdFN2Z1JlZiByb290U3ZnQ29udGV4dCByb290UG9pbnRlciBmbG93U2l6ZUNvbnRyb2xsZXIgY2xhc3M9XCJyb290LXN2Z1wiPlxuICA8ZGVmcyBmbG93RGVmcyBbbWFya2Vyc109XCJtYXJrZXJzKClcIiAvPlxuXG4gIDxnIGJhY2tncm91bmQgLz5cblxuICA8c3ZnOmcgbWFwQ29udGV4dCBzcGFjZVBvaW50Q29udGV4dD5cbiAgICBAaWYgKGFsaWdubWVudEhlbHBlcigpOyBhcyBhbGlnbm1lbnRIZWxwZXIpIHtcbiAgICAgIEBpZiAoYWxpZ25tZW50SGVscGVyID09PSB0cnVlKSB7XG4gICAgICAgIDxzdmc6ZyBhbGlnbm1lbnRIZWxwZXIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8c3ZnOmcgYWxpZ25tZW50SGVscGVyIFt0b2xlcmFuY2VdPVwiYWxpZ25tZW50SGVscGVyLnRvbGVyYW5jZVwiIFtsaW5lQ29sb3JdPVwiYWxpZ25tZW50SGVscGVyLmxpbmVDb2xvclwiIC8+XG4gICAgICB9XG4gICAgfVxuXG4gICAgPCEtLSBDb25uZWN0aW9uIC0tPlxuICAgIDxzdmc6ZyBjb25uZWN0aW9uIFttb2RlbF09XCJjb25uZWN0aW9uXCIgW3RlbXBsYXRlXT1cImNvbm5lY3Rpb25UZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG5cbiAgICBAaWYgKGZsb3dPcHRpbWl6YXRpb24oKS5kZXRhY2hlZEdyb3Vwc0xheWVyKSB7XG4gICAgICA8IS0tIEdyb3VwcyAtLT5cbiAgICAgIEBmb3IgKG1vZGVsIG9mIGdyb3VwcygpOyB0cmFjayB0cmFja05vZGVzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIG5vZGVcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtncm91cE5vZGVUZW1wbGF0ZV09XCJncm91cE5vZGVUZW1wbGF0ZURpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgW2F0dHIudHJhbnNmb3JtXT1cIm1vZGVsLnBvaW50VHJhbnNmb3JtKClcIiAvPlxuICAgICAgfVxuICAgICAgPCEtLSBFZGdlcyAgLS0+XG4gICAgICBAZm9yIChtb2RlbCBvZiBlZGdlTW9kZWxzKCk7IHRyYWNrIHRyYWNrRWRnZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgZWRnZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW2VkZ2VUZW1wbGF0ZV09XCJlZGdlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtlZGdlTGFiZWxIdG1sVGVtcGxhdGVdPVwiZWRnZUxhYmVsSHRtbERpcmVjdGl2ZSgpPy50ZW1wbGF0ZVJlZlwiIC8+XG4gICAgICB9XG4gICAgICA8IS0tIE5vZGVzIC0tPlxuICAgICAgQGZvciAobW9kZWwgb2Ygbm9uR3JvdXBzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgbm9kZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbYXR0ci50cmFuc2Zvcm1dPVwibW9kZWwucG9pbnRUcmFuc2Zvcm0oKVwiIC8+XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICghZmxvd09wdGltaXphdGlvbigpLmRldGFjaGVkR3JvdXBzTGF5ZXIpIHtcbiAgICAgIDwhLS0gRWRnZXMgIC0tPlxuICAgICAgQGZvciAobW9kZWwgb2YgZWRnZU1vZGVscygpOyB0cmFjayB0cmFja0VkZ2VzKCRpbmRleCwgbW9kZWwpKSB7XG4gICAgICAgIDxzdmc6Z1xuICAgICAgICAgIGVkZ2VcbiAgICAgICAgICBbbW9kZWxdPVwibW9kZWxcIlxuICAgICAgICAgIFtlZGdlVGVtcGxhdGVdPVwiZWRnZVRlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbZWRnZUxhYmVsSHRtbFRlbXBsYXRlXT1cImVkZ2VMYWJlbEh0bWxEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIiAvPlxuICAgICAgfVxuXG4gICAgICBAZm9yIChtb2RlbCBvZiBub2RlTW9kZWxzKCk7IHRyYWNrIHRyYWNrTm9kZXMoJGluZGV4LCBtb2RlbCkpIHtcbiAgICAgICAgPHN2ZzpnXG4gICAgICAgICAgbm9kZVxuICAgICAgICAgIFttb2RlbF09XCJtb2RlbFwiXG4gICAgICAgICAgW25vZGVUZW1wbGF0ZV09XCJub2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFtub2RlU3ZnVGVtcGxhdGVdPVwibm9kZVN2Z1RlbXBsYXRlRGlyZWN0aXZlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICBbZ3JvdXBOb2RlVGVtcGxhdGVdPVwiZ3JvdXBOb2RlVGVtcGxhdGVEaXJlY3RpdmUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgIFthdHRyLnRyYW5zZm9ybV09XCJtb2RlbC5wb2ludFRyYW5zZm9ybSgpXCIgLz5cbiAgICAgIH1cbiAgICB9XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBNaW5pbWFwIC0tPlxuICBAaWYgKG1pbmltYXAoKTsgYXMgbWluaW1hcCkge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibWluaW1hcC50ZW1wbGF0ZSgpXCIgLz5cbiAgfVxuPC9zdmc6c3ZnPlxuXG5AaWYgKGZsb3dPcHRpbWl6YXRpb24oKS52aXJ0dWFsaXphdGlvbikge1xuICA8Y2FudmFzIHByZXZpZXdGbG93IGNsYXNzPVwicHJldmlldy1mbG93XCIgW3dpZHRoXT1cImZsb3dXaWR0aCgpXCIgW2hlaWdodF09XCJmbG93SGVpZ2h0KClcIj48L2NhbnZhcz5cbn1cbiJdfQ==
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
// this is a number to fix visual artifact in chrome.
|
|
2
|
-
// the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject
|
|
3
|
-
export const MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME = 2;
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFnaWMtbnVtYmVyLXRvLWZpeC1nbGl0Y2gtaW4tY2hyb21lLmNvbnN0YW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZmbG93LWxpYi9zcmMvbGliL3ZmbG93L2NvbnN0YW50cy9tYWdpYy1udW1iZXItdG8tZml4LWdsaXRjaC1pbi1jaHJvbWUuY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscURBQXFEO0FBQ3JELGdHQUFnRztBQUNoRyxNQUFNLENBQUMsTUFBTSxvQ0FBb0MsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0aGlzIGlzIGEgbnVtYmVyIHRvIGZpeCB2aXN1YWwgYXJ0aWZhY3QgaW4gY2hyb21lLlxuLy8gdGhlIGJ1ZyByZXByb2R1Y2VzIGlmIGVkZ2VMYWJlbFdyYXBwZXJSZWYgc2l6ZSBmdWxseSBtYXRjaGVkIHRoZSBzaXplIG9mIHBhcmVudCBmb3JlaWduT2JqZWN0XG5leHBvcnQgY29uc3QgTUFHSUNfTlVNQkVSX1RPX0ZJWF9HTElUQ0hfSU5fQ0hST01FID0gMjtcbiJdfQ==
|