@foblex/flow 17.9.2 → 17.9.5
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/esm2022/drag-toolkit/event.extensions.mjs +2 -2
- package/esm2022/f-canvas/f-canvas.component.mjs +3 -3
- package/esm2022/f-connection/common/f-connection-base.mjs +3 -3
- package/esm2022/f-connection/f-connection/f-connection.component.mjs +3 -3
- package/esm2022/f-draggable/f-draggable.directive.mjs +1 -1
- package/esm2022/f-flow/f-flow.component.mjs +2 -2
- package/esm2022/f-zoom/f-zoom.directive.mjs +42 -33
- package/f-canvas/f-canvas.component.d.ts +1 -1
- package/f-connection/common/f-connection-base.d.ts +1 -1
- package/f-connection/providers.d.ts +1 -1
- package/f-zoom/f-zoom.directive.d.ts +11 -10
- package/fesm2022/foblex-flow.mjs +48 -40
- package/fesm2022/foblex-flow.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/collection.json +6 -1
|
@@ -1,50 +1,56 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { booleanAttribute, Directive, inject, Input, numberAttribute,
|
|
2
|
+
import { booleanAttribute, Directive, effect, inject, Injector, input, Input, numberAttribute, untracked, } from '@angular/core';
|
|
3
3
|
import { F_ZOOM, FZoomBase } from './f-zoom-base';
|
|
4
4
|
import { FMediator } from '@foblex/mediator';
|
|
5
5
|
import { AddZoomToStoreRequest, defaultEventTrigger, Deprecated, GetCanvasRequest, GetFlowHostElementRequest, isValidEventTrigger, RemoveZoomFromStoreRequest, ResetZoomRequest, SetZoomRequest, } from '../domain';
|
|
6
6
|
import { PointExtensions, RectExtensions } from '@foblex/2d';
|
|
7
7
|
import { isNode } from '../f-node';
|
|
8
8
|
import { EFZoomDirection } from './e-f-zoom-direction';
|
|
9
|
+
import { EventExtensions } from '../drag-toolkit';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
export class FZoomDirective extends FZoomBase {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
_triggersListener =
|
|
14
|
-
isEnabled = false;
|
|
12
|
+
_mediator = inject(FMediator);
|
|
13
|
+
_injector = inject(Injector);
|
|
14
|
+
_triggersListener = EventExtensions.emptyListener();
|
|
15
|
+
isEnabled = input(false, { alias: 'fZoom', transform: booleanAttribute });
|
|
15
16
|
fWheelTrigger = defaultEventTrigger;
|
|
16
17
|
fDblClickTrigger = defaultEventTrigger;
|
|
17
18
|
minimum = 0.1;
|
|
18
19
|
maximum = 4;
|
|
19
20
|
step = 0.1;
|
|
20
21
|
dblClickStep = 0.5;
|
|
21
|
-
get
|
|
22
|
-
return this.
|
|
22
|
+
get _hostElement() {
|
|
23
|
+
return this._mediator.execute(new GetFlowHostElementRequest());
|
|
23
24
|
}
|
|
24
|
-
get
|
|
25
|
-
return this.
|
|
25
|
+
get _canvas() {
|
|
26
|
+
return this._mediator.execute(new GetCanvasRequest());
|
|
26
27
|
}
|
|
27
28
|
ngOnInit() {
|
|
28
|
-
this.
|
|
29
|
+
this._mediator.execute(new AddZoomToStoreRequest(this));
|
|
29
30
|
}
|
|
30
31
|
ngAfterViewInit() {
|
|
31
|
-
this.
|
|
32
|
+
this._listenZoomEnabledChanges();
|
|
32
33
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
this.
|
|
36
|
-
|
|
34
|
+
_listenZoomEnabledChanges() {
|
|
35
|
+
effect(() => {
|
|
36
|
+
this.isEnabled();
|
|
37
|
+
untracked(() => this._listenTriggers());
|
|
38
|
+
}, { injector: this._injector });
|
|
37
39
|
}
|
|
38
40
|
_listenTriggers() {
|
|
39
|
-
if (!this.
|
|
41
|
+
if (!this._hostElement) {
|
|
40
42
|
return;
|
|
41
43
|
}
|
|
42
44
|
this._disposeListeners();
|
|
43
|
-
if (!this.isEnabled) {
|
|
45
|
+
if (!this.isEnabled()) {
|
|
44
46
|
return;
|
|
45
47
|
}
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
+
this._listen('wheel', this._onWheel, EventExtensions.activeListener());
|
|
49
|
+
this._listen('dblclick', this._onDoubleClick);
|
|
50
|
+
this._triggersListener = () => {
|
|
51
|
+
this._unlisten('wheel', this._onWheel, EventExtensions.activeListener());
|
|
52
|
+
this._unlisten('dblclick', this._onDoubleClick);
|
|
53
|
+
};
|
|
48
54
|
}
|
|
49
55
|
_onWheel = (event) => {
|
|
50
56
|
if (!isValidEventTrigger(event, this.fWheelTrigger)) {
|
|
@@ -87,10 +93,10 @@ export class FZoomDirective extends FZoomBase {
|
|
|
87
93
|
this._onZoomToCenter(EFZoomDirection.ZOOM_OUT, position);
|
|
88
94
|
}
|
|
89
95
|
_onZoomToCenter(direction, position) {
|
|
90
|
-
this.setZoom(this._getToCenterPosition(position, RectExtensions.fromElement(this.
|
|
96
|
+
this.setZoom(this._getToCenterPosition(position, RectExtensions.fromElement(this._hostElement)), this.step, direction, false);
|
|
91
97
|
}
|
|
92
98
|
setZoom(position, step, direction, animated) {
|
|
93
|
-
this.
|
|
99
|
+
this._mediator.execute(new SetZoomRequest(position, step, direction, animated));
|
|
94
100
|
}
|
|
95
101
|
/**
|
|
96
102
|
* @deprecated Method "getScale" is deprecated. Use "getZoomValue" instead. This method will be removed in version 18.0.0.`,
|
|
@@ -99,21 +105,27 @@ export class FZoomDirective extends FZoomBase {
|
|
|
99
105
|
return this.getZoomValue();
|
|
100
106
|
}
|
|
101
107
|
getZoomValue() {
|
|
102
|
-
return this.
|
|
108
|
+
return this._canvas.transform.scale || 1;
|
|
103
109
|
}
|
|
104
110
|
reset() {
|
|
105
|
-
this.
|
|
111
|
+
this._mediator.execute(new ResetZoomRequest());
|
|
106
112
|
}
|
|
107
113
|
_disposeListeners() {
|
|
108
|
-
this._triggersListener
|
|
109
|
-
this._triggersListener =
|
|
114
|
+
this._triggersListener();
|
|
115
|
+
this._triggersListener = EventExtensions.emptyListener();
|
|
110
116
|
}
|
|
111
117
|
ngOnDestroy() {
|
|
112
118
|
this._disposeListeners();
|
|
113
|
-
this.
|
|
119
|
+
this._mediator.execute(new RemoveZoomFromStoreRequest());
|
|
120
|
+
}
|
|
121
|
+
_listen(type, listener, options) {
|
|
122
|
+
this._hostElement.addEventListener(type, listener, options);
|
|
123
|
+
}
|
|
124
|
+
_unlisten(type, listener, options) {
|
|
125
|
+
this._hostElement.removeEventListener(type, listener, options);
|
|
114
126
|
}
|
|
115
127
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FZoomDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
116
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
128
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: FZoomDirective, isStandalone: true, selector: "f-canvas[fZoom]", inputs: { isEnabled: { classPropertyName: "isEnabled", publicName: "fZoom", isSignal: true, isRequired: false, transformFunction: null }, fWheelTrigger: { classPropertyName: "fWheelTrigger", publicName: "fWheelTrigger", isSignal: false, isRequired: false, transformFunction: null }, fDblClickTrigger: { classPropertyName: "fDblClickTrigger", publicName: "fDblClickTrigger", isSignal: false, isRequired: false, transformFunction: null }, minimum: { classPropertyName: "minimum", publicName: "fZoomMinimum", isSignal: false, isRequired: false, transformFunction: numberAttribute }, maximum: { classPropertyName: "maximum", publicName: "fZoomMaximum", isSignal: false, isRequired: false, transformFunction: numberAttribute }, step: { classPropertyName: "step", publicName: "fZoomStep", isSignal: false, isRequired: false, transformFunction: numberAttribute }, dblClickStep: { classPropertyName: "dblClickStep", publicName: "fZoomDblClickStep", isSignal: false, isRequired: false, transformFunction: numberAttribute } }, host: { classAttribute: "f-zoom f-component" }, providers: [{ provide: F_ZOOM, useExisting: FZoomDirective }], exportAs: ["fComponent"], usesInheritance: true, ngImport: i0 });
|
|
117
129
|
}
|
|
118
130
|
__decorate([
|
|
119
131
|
Deprecated('getZoomValue')
|
|
@@ -121,7 +133,7 @@ __decorate([
|
|
|
121
133
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FZoomDirective, decorators: [{
|
|
122
134
|
type: Directive,
|
|
123
135
|
args: [{
|
|
124
|
-
selector:
|
|
136
|
+
selector: 'f-canvas[fZoom]',
|
|
125
137
|
exportAs: 'fComponent',
|
|
126
138
|
standalone: true,
|
|
127
139
|
host: {
|
|
@@ -129,10 +141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
129
141
|
},
|
|
130
142
|
providers: [{ provide: F_ZOOM, useExisting: FZoomDirective }],
|
|
131
143
|
}]
|
|
132
|
-
}], propDecorators: {
|
|
133
|
-
type: Input,
|
|
134
|
-
args: [{ alias: 'fZoom', transform: booleanAttribute }]
|
|
135
|
-
}], fWheelTrigger: [{
|
|
144
|
+
}], propDecorators: { fWheelTrigger: [{
|
|
136
145
|
type: Input
|
|
137
146
|
}], fDblClickTrigger: [{
|
|
138
147
|
type: Input
|
|
@@ -149,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
149
158
|
type: Input,
|
|
150
159
|
args: [{ alias: 'fZoomDblClickStep', transform: numberAttribute }]
|
|
151
160
|
}], getScale: [] } });
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi16b29tLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZi16b29tL2Ytem9vbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUlmLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUNMLHFCQUFxQixFQUFFLG1CQUFtQixFQUMxQyxVQUFVLEVBRVYsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUFFLG1CQUFtQixFQUM5QywwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FDZixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQWlCLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBV3ZELE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUVuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFOUIsaUJBQWlCLEdBQW1CLEVBQUUsQ0FBQztJQUd4QyxTQUFTLEdBQVksS0FBSyxDQUFDO0lBRzNCLGFBQWEsR0FBa0IsbUJBQW1CLENBQUM7SUFHbkQsZ0JBQWdCLEdBQWtCLG1CQUFtQixDQUFDO0lBRzdDLE9BQU8sR0FBVyxHQUFHLENBQUM7SUFHdEIsT0FBTyxHQUFXLENBQUMsQ0FBQztJ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RUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFFOztBQStJeEQ7SUFETixVQUFVLENBQUMsY0FBYyxDQUFDOzhDQUcxQjs0RkEvSVUsY0FBYztrQkFUMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsb0JBQW9CO3FCQUM5QjtvQkFDRCxTQUFTLEVBQUUsQ0FBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxnQkFBZ0IsRUFBRSxDQUFFO2lCQUNoRTs4QkFTUSxTQUFTO3NCQURmLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJL0MsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBSVUsT0FBTztzQkFEdEIsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJNUMsT0FBTztzQkFEdEIsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJNUMsSUFBSTtzQkFEbkIsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJekMsWUFBWTtzQkFEM0IsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQW9IMUQsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIERpcmVjdGl2ZSxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGX1pPT00sIEZab29tQmFzZSB9IGZyb20gJy4vZi16b29tLWJhc2UnO1xuaW1wb3J0IHsgRk1lZGlhdG9yIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQge1xuICBBZGRab29tVG9TdG9yZVJlcXVlc3QsIGRlZmF1bHRFdmVudFRyaWdnZXIsXG4gIERlcHJlY2F0ZWQsXG4gIEZFdmVudFRyaWdnZXIsXG4gIEdldENhbnZhc1JlcXVlc3QsXG4gIEdldEZsb3dIb3N0RWxlbWVudFJlcXVlc3QsIGlzVmFsaWRFdmVudFRyaWdnZXIsXG4gIFJlbW92ZVpvb21Gcm9tU3RvcmVSZXF1ZXN0LFxuICBSZXNldFpvb21SZXF1ZXN0LFxuICBTZXRab29tUmVxdWVzdCxcbn0gZnJvbSAnLi4vZG9tYWluJztcbmltcG9ydCB7IEZDYW52YXNCYXNlIH0gZnJvbSAnLi4vZi1jYW52YXMnO1xuaW1wb3J0IHsgSVBvaW50LCBJUmVjdCwgUG9pbnRFeHRlbnNpb25zLCBSZWN0RXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSAnLi4vZi1ub2RlJztcbmltcG9ydCB7IEVGWm9vbURpcmVjdGlvbiB9IGZyb20gJy4vZS1mLXpvb20tZGlyZWN0aW9uJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBcImYtY2FudmFzW2Zab29tXVwiLFxuICBleHBvcnRBczogJ2ZDb21wb25lbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ2Ytem9vbSBmLWNvbXBvbmVudCcsXG4gIH0sXG4gIHByb3ZpZGVyczogWyB7IHByb3ZpZGU6IEZfWk9PTSwgdXNlRXhpc3Rpbmc6IEZab29tRGlyZWN0aXZlIH0gXSxcbn0pXG5leHBvcnQgY2xhc3MgRlpvb21EaXJlY3RpdmUgZXh0ZW5kcyBGWm9vbUJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBwcml2YXRlIF9mTWVkaWF0b3IgPSBpbmplY3QoRk1lZGlhdG9yKTtcbiAgcHJpdmF0ZSBfcmVuZGVyZWQgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICBwcml2YXRlIF90cmlnZ2Vyc0xpc3RlbmVyOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnZlpvb20nLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgcHVibGljIGlzRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmV2hlZWxUcmlnZ2VyOiBGRXZlbnRUcmlnZ2VyID0gZGVmYXVsdEV2ZW50VHJpZ2dlcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZkRibENsaWNrVHJpZ2dlcjogRkV2ZW50VHJpZ2dlciA9IGRlZmF1bHRFdmVudFRyaWdnZXI7XG5cbiAgQElucHV0KHsgYWxpYXM6ICdmWm9vbU1pbmltdW0nLCB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgbWluaW11bTogbnVtYmVyID0gMC4xO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnZlpvb21NYXhpbXVtJywgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgcHVibGljIG92ZXJyaWRlIG1heGltdW06IG51bWJlciA9IDQ7XG5cbiAgQElucHV0KHsgYWxpYXM6ICdmWm9vbVN0ZXAnLCB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgc3RlcDogbnVtYmVyID0gMC4xO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnZlpvb21EYmxDbGlja1N0ZXAnLCB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZGJsQ2xpY2tTdGVwOiBudW1iZXIgPSAwLjU7XG5cbiAgcHJpdmF0ZSBnZXQgX2ZIb3N0KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUobmV3IEdldEZsb3dIb3N0RWxlbWVudFJlcXVlc3QoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZkNhbnZhcygpOiBGQ2FudmFzQmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlKG5ldyBHZXRDYW52YXNSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2ZNZWRpYXRvci5leGVjdXRlKG5ldyBBZGRab29tVG9TdG9yZVJlcXVlc3QodGhpcykpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5UcmlnZ2VycygpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sgJ2lzRW5hYmxlZCcgXSkge1xuICAgICAgdGhpcy5fbGlzdGVuVHJpZ2dlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5UcmlnZ2VycygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2ZIb3N0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZUxpc3RlbmVycygpO1xuICAgIGlmICghdGhpcy5pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl90cmlnZ2Vyc0xpc3RlbmVyLnB1c2godGhpcy5fcmVuZGVyZWQubGlzdGVuKHRoaXMuX2ZIb3N0LCAnd2hlZWwnLCB0aGlzLl9vbldoZWVsKSk7XG4gICAgdGhpcy5fdHJpZ2dlcnNMaXN0ZW5lci5wdXNoKHRoaXMuX3JlbmRlcmVkLmxpc3Rlbih0aGlzLl9mSG9zdCwgJ2RibGNsaWNrJywgdGhpcy5fb25Eb3VibGVDbGljaykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25XaGVlbCA9IChldmVudDogV2hlZWxFdmVudCkgPT4ge1xuICAgIGlmICghaXNWYWxpZEV2ZW50VHJpZ2dlcihldmVudCwgdGhpcy5mV2hlZWxUcmlnZ2VyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAodGFyZ2V0RWxlbWVudD8uY2xvc2VzdCgnW2ZMb2NrZWRDb250ZXh0XScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuX25vcm1hbGl6ZVdoZWVsU3RlcChldmVudC5kZWx0YVkpO1xuICAgIHRoaXMuc2V0Wm9vbShcbiAgICAgIFBvaW50RXh0ZW5zaW9ucy5pbml0aWFsaXplKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpLFxuICAgICAgc3RlcCxcbiAgICAgIHRoaXMuX2NhbGN1bGF0ZURpcmVjdGlvbihldmVudC5kZWx0YVkpLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX25vcm1hbGl6ZVdoZWVsU3RlcChkZWx0YVk6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgaW50ZW5zaXR5ID0gTWF0aC5hYnMoZGVsdGFZKSAvIDEwMDtcbiAgICBjb25zdCBub3JtYWxpemVkID0gTWF0aC5tYXgoMC4xLCBNYXRoLm1pbihpbnRlbnNpdHksIDEpKTtcblxuICAgIHJldHVybiB0aGlzLnN0ZXAgKiBub3JtYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsY3VsYXRlRGlyZWN0aW9uKGRlbHRhWTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZGVsdGFZID4gMCA/IEVGWm9vbURpcmVjdGlvbi5aT09NX09VVCA6IEVGWm9vbURpcmVjdGlvbi5aT09NX0lOO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Eb3VibGVDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghaXNWYWxpZEV2ZW50VHJpZ2dlcihldmVudCwgdGhpcy5mRGJsQ2xpY2tUcmlnZ2VyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoaXNOb2RlKHRhcmdldEVsZW1lbnQpIHx8IHRhcmdldEVsZW1lbnQ/LmNsb3Nlc3QoJ1tmTG9ja2VkQ29udGV4dF0nKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Wm9vbShcbiAgICAgIFBvaW50RXh0ZW5zaW9ucy5pbml0aWFsaXplKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpLFxuICAgICAgdGhpcy5kYmxDbGlja1N0ZXAsIEVGWm9vbURpcmVjdGlvbi5aT09NX0lOLCB0cnVlLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRUb0NlbnRlclBvc2l0aW9uKHBvc2l0aW9uOiBJUG9pbnQgfCB1bmRlZmluZWQsIHJlY3Q6IElSZWN0KTogSVBvaW50IHtcbiAgICByZXR1cm4gUG9pbnRFeHRlbnNpb25zLmluaXRpYWxpemUocG9zaXRpb24/LnggfHwgcmVjdC5ncmF2aXR5Q2VudGVyLngsIHBvc2l0aW9uPy55IHx8IHJlY3QuZ3Jhdml0eUNlbnRlci55KTtcbiAgfVxuXG4gIHB1YmxpYyB6b29tSW4ocG9zaXRpb24/OiBJUG9pbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblpvb21Ub0NlbnRlcihFRlpvb21EaXJlY3Rpb24uWk9PTV9JTiwgcG9zaXRpb24pO1xuICB9XG5cbiAgcHVibGljIHpvb21PdXQocG9zaXRpb24/OiBJUG9pbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblpvb21Ub0NlbnRlcihFRlpvb21EaXJlY3Rpb24uWk9PTV9PVVQsIHBvc2l0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uWm9vbVRvQ2VudGVyKGRpcmVjdGlvbjogRUZab29tRGlyZWN0aW9uLCBwb3NpdGlvbj86IElQb2ludCk6IHZvaWQge1xuICAgIHRoaXMuc2V0Wm9vbShcbiAgICAgIHRoaXMuX2dldFRvQ2VudGVyUG9zaXRpb24ocG9zaXRpb24sIFJlY3RFeHRlbnNpb25zLmZyb21FbGVtZW50KHRoaXMuX2ZIb3N0KSksXG4gICAgICB0aGlzLnN0ZXAsIGRpcmVjdGlvbiwgZmFsc2UsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRab29tKHBvc2l0aW9uOiBJUG9pbnQsIHN0ZXA6IG51bWJlciwgZGlyZWN0aW9uOiBFRlpvb21EaXJlY3Rpb24sIGFuaW1hdGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUoXG4gICAgICBuZXcgU2V0Wm9vbVJlcXVlc3QocG9zaXRpb24sIHN0ZXAsIGRpcmVjdGlvbiwgYW5pbWF0ZWQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogIEBkZXByZWNhdGVkIE1ldGhvZCBcImdldFNjYWxlXCIgaXMgZGVwcmVjYXRlZC4gVXNlIFwiZ2V0Wm9vbVZhbHVlXCIgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gMTguMC4wLmAsXG4gICAqL1xuICBARGVwcmVjYXRlZCgnZ2V0Wm9vbVZhbHVlJylcbiAgcHVibGljIGdldFNjYWxlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Wm9vbVZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Wm9vbVZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2ZDYW52YXMudHJhbnNmb3JtLnNjYWxlIHx8IDE7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUobmV3IFJlc2V0Wm9vbVJlcXVlc3QoKSk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNwb3NlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyaWdnZXJzTGlzdGVuZXIuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKCkpO1xuICAgIHRoaXMuX3RyaWdnZXJzTGlzdGVuZXIgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5fZk1lZGlhdG9yLmV4ZWN1dGUobmV3IFJlbW92ZVpvb21Gcm9tU3RvcmVSZXF1ZXN0KCkpO1xuICB9XG59XG4iXX0=
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi16b29tLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvZi16b29tL2Ytem9vbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxLQUFLLEVBQ0wsZUFBZSxFQUdmLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsVUFBVSxFQUVWLGdCQUFnQixFQUNoQix5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixnQkFBZ0IsRUFDaEIsY0FBYyxHQUNmLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBaUIsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBV2xELE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQUMxQixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlCLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFdEMsaUJBQWlCLEdBQUcsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRTVDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFF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SVUsT0FBTztzQkFEdEIsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJNUMsT0FBTztzQkFEdEIsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJNUMsSUFBSTtzQkFEbkIsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJekMsWUFBWTtzQkFEM0IsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQWlJMUQsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBpbnB1dCxcbiAgSW5wdXQsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGX1pPT00sIEZab29tQmFzZSB9IGZyb20gJy4vZi16b29tLWJhc2UnO1xuaW1wb3J0IHsgRk1lZGlhdG9yIH0gZnJvbSAnQGZvYmxleC9tZWRpYXRvcic7XG5pbXBvcnQge1xuICBBZGRab29tVG9TdG9yZVJlcXVlc3QsXG4gIGRlZmF1bHRFdmVudFRyaWdnZXIsXG4gIERlcHJlY2F0ZWQsXG4gIEZFdmVudFRyaWdnZXIsXG4gIEdldENhbnZhc1JlcXVlc3QsXG4gIEdldEZsb3dIb3N0RWxlbWVudFJlcXVlc3QsXG4gIGlzVmFsaWRFdmVudFRyaWdnZXIsXG4gIFJlbW92ZVpvb21Gcm9tU3RvcmVSZXF1ZXN0LFxuICBSZXNldFpvb21SZXF1ZXN0LFxuICBTZXRab29tUmVxdWVzdCxcbn0gZnJvbSAnLi4vZG9tYWluJztcbmltcG9ydCB7IEZDYW52YXNCYXNlIH0gZnJvbSAnLi4vZi1jYW52YXMnO1xuaW1wb3J0IHsgSVBvaW50LCBJUmVjdCwgUG9pbnRFeHRlbnNpb25zLCBSZWN0RXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSAnLi4vZi1ub2RlJztcbmltcG9ydCB7IEVGWm9vbURpcmVjdGlvbiB9IGZyb20gJy4vZS1mLXpvb20tZGlyZWN0aW9uJztcbmltcG9ydCB7IEV2ZW50RXh0ZW5zaW9ucyB9IGZyb20gJy4uL2RyYWctdG9vbGtpdCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ2YtY2FudmFzW2Zab29tXScsXG4gIGV4cG9ydEFzOiAnZkNvbXBvbmVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnZi16b29tIGYtY29tcG9uZW50JyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBGX1pPT00sIHVzZUV4aXN0aW5nOiBGWm9vbURpcmVjdGl2ZSB9XSxcbn0pXG5leHBvcnQgY2xhc3MgRlpvb21EaXJlY3RpdmUgZXh0ZW5kcyBGWm9vbUJhc2UgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21lZGlhdG9yID0gaW5qZWN0KEZNZWRpYXRvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICBwcml2YXRlIF90cmlnZ2Vyc0xpc3RlbmVyID0gRXZlbnRFeHRlbnNpb25zLmVtcHR5TGlzdGVuZXIoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgaXNFbmFibGVkID0gaW5wdXQoZmFsc2UsIHsgYWxpYXM6ICdmWm9vbScsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZldoZWVsVHJpZ2dlcjogRkV2ZW50VHJpZ2dlciA9IGRlZmF1bHRFdmVudFRyaWdnZXI7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZEYmxDbGlja1RyaWdnZXI6IEZFdmVudFRyaWdnZXIgPSBkZWZhdWx0RXZlbnRUcmlnZ2VyO1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnZlpvb21NaW5pbXVtJywgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgcHVibGljIG92ZXJyaWRlIG1pbmltdW06IG51bWJlciA9IDAuMTtcblxuICBASW5wdXQoeyBhbGlhczogJ2Zab29tTWF4aW11bScsIHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBtYXhpbXVtOiBudW1iZXIgPSA0O1xuXG4gIEBJbnB1dCh7IGFsaWFzOiAnZlpvb21TdGVwJywgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgcHVibGljIG92ZXJyaWRlIHN0ZXA6IG51bWJlciA9IDAuMTtcblxuICBASW5wdXQoeyBhbGlhczogJ2Zab29tRGJsQ2xpY2tTdGVwJywgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgcHVibGljIG92ZXJyaWRlIGRibENsaWNrU3RlcDogbnVtYmVyID0gMC41O1xuXG4gIHByaXZhdGUgZ2V0IF9ob3N0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUobmV3IEdldEZsb3dIb3N0RWxlbWVudFJlcXVlc3QoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfY2FudmFzKCk6IEZDYW52YXNCYXNlIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWF0b3IuZXhlY3V0ZShuZXcgR2V0Q2FudmFzUmVxdWVzdCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBBZGRab29tVG9TdG9yZVJlcXVlc3QodGhpcykpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0ZW5ab29tRW5hYmxlZENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3Rlblpvb21FbmFibGVkQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNFbmFibGVkKCk7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLl9saXN0ZW5UcmlnZ2VycygpKTtcbiAgICAgIH0sXG4gICAgICB7IGluamVjdG9yOiB0aGlzLl9pbmplY3RvciB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5UcmlnZ2VycygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2hvc3RFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZUxpc3RlbmVycygpO1xuICAgIGlmICghdGhpcy5pc0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9saXN0ZW4oJ3doZWVsJywgdGhpcy5fb25XaGVlbCwgRXZlbnRFeHRlbnNpb25zLmFjdGl2ZUxpc3RlbmVyKCkpO1xuICAgIHRoaXMuX2xpc3RlbignZGJsY2xpY2snLCB0aGlzLl9vbkRvdWJsZUNsaWNrKTtcblxuICAgIHRoaXMuX3RyaWdnZXJzTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLl91bmxpc3Rlbignd2hlZWwnLCB0aGlzLl9vbldoZWVsLCBFdmVudEV4dGVuc2lvbnMuYWN0aXZlTGlzdGVuZXIoKSk7XG4gICAgICB0aGlzLl91bmxpc3RlbignZGJsY2xpY2snLCB0aGlzLl9vbkRvdWJsZUNsaWNrKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfb25XaGVlbCA9IChldmVudDogV2hlZWxFdmVudCkgPT4ge1xuICAgIGlmICghaXNWYWxpZEV2ZW50VHJpZ2dlcihldmVudCwgdGhpcy5mV2hlZWxUcmlnZ2VyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAodGFyZ2V0RWxlbWVudD8uY2xvc2VzdCgnW2ZMb2NrZWRDb250ZXh0XScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcCA9IHRoaXMuX25vcm1hbGl6ZVdoZWVsU3RlcChldmVudC5kZWx0YVkpO1xuICAgIHRoaXMuc2V0Wm9vbShcbiAgICAgIFBvaW50RXh0ZW5zaW9ucy5pbml0aWFsaXplKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpLFxuICAgICAgc3RlcCxcbiAgICAgIHRoaXMuX2NhbGN1bGF0ZURpcmVjdGlvbihldmVudC5kZWx0YVkpLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIF9ub3JtYWxpemVXaGVlbFN0ZXAoZGVsdGFZOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGludGVuc2l0eSA9IE1hdGguYWJzKGRlbHRhWSkgLyAxMDA7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IE1hdGgubWF4KDAuMSwgTWF0aC5taW4oaW50ZW5zaXR5LCAxKSk7XG5cbiAgICByZXR1cm4gdGhpcy5zdGVwICogbm9ybWFsaXplZDtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZURpcmVjdGlvbihkZWx0YVk6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGRlbHRhWSA+IDAgPyBFRlpvb21EaXJlY3Rpb24uWk9PTV9PVVQgOiBFRlpvb21EaXJlY3Rpb24uWk9PTV9JTjtcbiAgfVxuXG4gIHByaXZhdGUgX29uRG91YmxlQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoIWlzVmFsaWRFdmVudFRyaWdnZXIoZXZlbnQsIHRoaXMuZkRibENsaWNrVHJpZ2dlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKGlzTm9kZSh0YXJnZXRFbGVtZW50KSB8fCB0YXJnZXRFbGVtZW50Py5jbG9zZXN0KCdbZkxvY2tlZENvbnRleHRdJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFpvb20oXG4gICAgICBQb2ludEV4dGVuc2lvbnMuaW5pdGlhbGl6ZShldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKSxcbiAgICAgIHRoaXMuZGJsQ2xpY2tTdGVwLFxuICAgICAgRUZab29tRGlyZWN0aW9uLlpPT01fSU4sXG4gICAgICB0cnVlLFxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBfZ2V0VG9DZW50ZXJQb3NpdGlvbihwb3NpdGlvbjogSVBvaW50IHwgdW5kZWZpbmVkLCByZWN0OiBJUmVjdCk6IElQb2ludCB7XG4gICAgcmV0dXJuIFBvaW50RXh0ZW5zaW9ucy5pbml0aWFsaXplKFxuICAgICAgcG9zaXRpb24/LnggfHwgcmVjdC5ncmF2aXR5Q2VudGVyLngsXG4gICAgICBwb3NpdGlvbj8ueSB8fCByZWN0LmdyYXZpdHlDZW50ZXIueSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHpvb21Jbihwb3NpdGlvbj86IElQb2ludCk6IHZvaWQge1xuICAgIHRoaXMuX29uWm9vbVRvQ2VudGVyKEVGWm9vbURpcmVjdGlvbi5aT09NX0lOLCBwb3NpdGlvbik7XG4gIH1cblxuICBwdWJsaWMgem9vbU91dChwb3NpdGlvbj86IElQb2ludCk6IHZvaWQge1xuICAgIHRoaXMuX29uWm9vbVRvQ2VudGVyKEVGWm9vbURpcmVjdGlvbi5aT09NX09VVCwgcG9zaXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25ab29tVG9DZW50ZXIoZGlyZWN0aW9uOiBFRlpvb21EaXJlY3Rpb24sIHBvc2l0aW9uPzogSVBvaW50KTogdm9pZCB7XG4gICAgdGhpcy5zZXRab29tKFxuICAgICAgdGhpcy5fZ2V0VG9DZW50ZXJQb3NpdGlvbihwb3NpdGlvbiwgUmVjdEV4dGVuc2lvbnMuZnJvbUVsZW1lbnQodGhpcy5faG9zdEVsZW1lbnQpKSxcbiAgICAgIHRoaXMuc3RlcCxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0Wm9vbShwb3NpdGlvbjogSVBvaW50LCBzdGVwOiBudW1iZXIsIGRpcmVjdGlvbjogRUZab29tRGlyZWN0aW9uLCBhbmltYXRlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUobmV3IFNldFpvb21SZXF1ZXN0KHBvc2l0aW9uLCBzdGVwLCBkaXJlY3Rpb24sIGFuaW1hdGVkKSk7XG4gIH1cblxuICAvKipcbiAgICogIEBkZXByZWNhdGVkIE1ldGhvZCBcImdldFNjYWxlXCIgaXMgZGVwcmVjYXRlZC4gVXNlIFwiZ2V0Wm9vbVZhbHVlXCIgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gMTguMC4wLmAsXG4gICAqL1xuICBARGVwcmVjYXRlZCgnZ2V0Wm9vbVZhbHVlJylcbiAgcHVibGljIGdldFNjYWxlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Wm9vbVZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Wm9vbVZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbnZhcy50cmFuc2Zvcm0uc2NhbGUgfHwgMTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tZWRpYXRvci5leGVjdXRlKG5ldyBSZXNldFpvb21SZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzcG9zZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLl90cmlnZ2Vyc0xpc3RlbmVyKCk7XG4gICAgdGhpcy5fdHJpZ2dlcnNMaXN0ZW5lciA9IEV2ZW50RXh0ZW5zaW9ucy5lbXB0eUxpc3RlbmVyKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zZUxpc3RlbmVycygpO1xuICAgIHRoaXMuX21lZGlhdG9yLmV4ZWN1dGUobmV3IFJlbW92ZVpvb21Gcm9tU3RvcmVSZXF1ZXN0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuPEsgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudEV2ZW50TWFwPihcbiAgICB0eXBlOiBLLFxuICAgIGxpc3RlbmVyOiAodGhpczogSFRNTEVsZW1lbnQsIGV2OiBIVE1MRWxlbWVudEV2ZW50TWFwW0tdKSA9PiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2hvc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5saXN0ZW48SyBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50RXZlbnRNYXA+KFxuICAgIHR5cGU6IEssXG4gICAgbGlzdGVuZXI6ICh0aGlzOiBIVE1MRWxlbWVudCwgZXY6IEhUTUxFbGVtZW50RXZlbnRNYXBbS10pID0+IHVua25vd24sXG4gICAgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5faG9zdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -87,5 +87,5 @@ export declare class FCanvasComponent extends FCanvasBase implements OnInit, OnD
|
|
|
87
87
|
resetScale(): void;
|
|
88
88
|
ngOnDestroy(): void;
|
|
89
89
|
static ɵfac: i0.ɵɵFactoryDeclaration<FCanvasComponent, never>;
|
|
90
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FCanvasComponent, "f-canvas", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "scale": { "alias": "scale"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; }, { "fCanvasChange": "fCanvasChange"; }, never, ["[fGroup]", "f-snap-connection", "f-connection", "f-connection-for-create", "[fNode]"], true, never>;
|
|
90
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FCanvasComponent, "f-canvas", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "scale": { "alias": "scale"; "required": false; "isSignal": true; }; "debounceTime": { "alias": "debounceTime"; "required": false; "isSignal": true; }; }, { "fCanvasChange": "fCanvasChange"; }, never, ["[fGroup], [fGroups]", "f-snap-connection", "f-connection, [fConnections]", "f-connection-for-create", "[fNode], [fNodes]"], true, never>;
|
|
91
91
|
}
|
|
@@ -45,7 +45,7 @@ export declare abstract class FConnectionBase extends MIXIN_BASE implements IHas
|
|
|
45
45
|
readonly fDragHandleStart: Signal<FConnectionDragHandleStartComponent | undefined>;
|
|
46
46
|
readonly fDragHandleEnd: Signal<FConnectionDragHandleEndComponent>;
|
|
47
47
|
readonly fSelection: Signal<FConnectionSelectionComponent>;
|
|
48
|
-
readonly fTextComponent: Signal<IConnectionText>;
|
|
48
|
+
readonly fTextComponent: Signal<IConnectionText | undefined>;
|
|
49
49
|
abstract fText: string;
|
|
50
50
|
abstract fTextStartOffset: string;
|
|
51
51
|
readonly fConnectionCenter: Signal<ElementRef<HTMLDivElement> | undefined>;
|
|
@@ -4,4 +4,4 @@ import { FConnectionCenterDirective } from './f-connection-center';
|
|
|
4
4
|
import { FConnectionForCreateComponent } from './f-connection-for-create';
|
|
5
5
|
import { FMarkerDirective } from './f-marker';
|
|
6
6
|
import { FSnapConnectionComponent } from './f-snap-connection';
|
|
7
|
-
export declare const F_CONNECTION_PROVIDERS: (typeof
|
|
7
|
+
export declare const F_CONNECTION_PROVIDERS: (typeof FConnectionDragHandleStartComponent | typeof FConnectionDragHandleEndComponent | typeof FConnectionSelectionComponent | typeof FConnectionCenterDirective | typeof FSnapConnectionComponent | typeof FConnectionComponent | typeof FConnectionForCreateComponent | typeof FConnectionTextPathDirective | typeof FConnectionTextComponent | typeof FConnectionGradientComponent | typeof FConnectionPathComponent | typeof FMarkerDirective)[];
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { AfterViewInit,
|
|
1
|
+
import { AfterViewInit, OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { FZoomBase } from './f-zoom-base';
|
|
3
3
|
import { FEventTrigger } from '../domain';
|
|
4
4
|
import { IPoint } from '@foblex/2d';
|
|
5
5
|
import { EFZoomDirection } from './e-f-zoom-direction';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class FZoomDirective extends FZoomBase implements OnInit, AfterViewInit,
|
|
8
|
-
private
|
|
9
|
-
private
|
|
7
|
+
export declare class FZoomDirective extends FZoomBase implements OnInit, AfterViewInit, OnDestroy {
|
|
8
|
+
private readonly _mediator;
|
|
9
|
+
private readonly _injector;
|
|
10
10
|
private _triggersListener;
|
|
11
|
-
isEnabled: boolean
|
|
11
|
+
readonly isEnabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
12
12
|
fWheelTrigger: FEventTrigger;
|
|
13
13
|
fDblClickTrigger: FEventTrigger;
|
|
14
14
|
minimum: number;
|
|
15
15
|
maximum: number;
|
|
16
16
|
step: number;
|
|
17
17
|
dblClickStep: number;
|
|
18
|
-
private get
|
|
19
|
-
private get
|
|
18
|
+
private get _hostElement();
|
|
19
|
+
private get _canvas();
|
|
20
20
|
ngOnInit(): void;
|
|
21
21
|
ngAfterViewInit(): void;
|
|
22
|
-
|
|
22
|
+
private _listenZoomEnabledChanges;
|
|
23
23
|
private _listenTriggers;
|
|
24
24
|
private _onWheel;
|
|
25
25
|
private _normalizeWheelStep;
|
|
@@ -38,9 +38,10 @@ export declare class FZoomDirective extends FZoomBase implements OnInit, AfterVi
|
|
|
38
38
|
reset(): void;
|
|
39
39
|
private _disposeListeners;
|
|
40
40
|
ngOnDestroy(): void;
|
|
41
|
+
private _listen;
|
|
42
|
+
private _unlisten;
|
|
41
43
|
static ɵfac: i0.ɵɵFactoryDeclaration<FZoomDirective, never>;
|
|
42
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<FZoomDirective, "f-canvas[fZoom]", ["fComponent"], { "isEnabled": { "alias": "fZoom"; "required": false; }; "fWheelTrigger": { "alias": "fWheelTrigger"; "required": false; }; "fDblClickTrigger": { "alias": "fDblClickTrigger"; "required": false; }; "minimum": { "alias": "fZoomMinimum"; "required": false; }; "maximum": { "alias": "fZoomMaximum"; "required": false; }; "step": { "alias": "fZoomStep"; "required": false; }; "dblClickStep": { "alias": "fZoomDblClickStep"; "required": false; }; }, {}, never, never, true, never>;
|
|
43
|
-
static ngAcceptInputType_isEnabled: unknown;
|
|
44
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<FZoomDirective, "f-canvas[fZoom]", ["fComponent"], { "isEnabled": { "alias": "fZoom"; "required": false; "isSignal": true; }; "fWheelTrigger": { "alias": "fWheelTrigger"; "required": false; }; "fDblClickTrigger": { "alias": "fDblClickTrigger"; "required": false; }; "minimum": { "alias": "fZoomMinimum"; "required": false; }; "maximum": { "alias": "fZoomMaximum"; "required": false; }; "step": { "alias": "fZoomStep"; "required": false; }; "dblClickStep": { "alias": "fZoomDblClickStep"; "required": false; }; }, {}, never, never, true, never>;
|
|
44
45
|
static ngAcceptInputType_minimum: unknown;
|
|
45
46
|
static ngAcceptInputType_maximum: unknown;
|
|
46
47
|
static ngAcceptInputType_step: unknown;
|
package/fesm2022/foblex-flow.mjs
CHANGED
|
@@ -3120,7 +3120,7 @@ class FConnectionBase extends MIXIN_BASE {
|
|
|
3120
3120
|
fDragHandleStart = viewChild(FConnectionDragHandleStartComponent);
|
|
3121
3121
|
fDragHandleEnd = viewChild.required(FConnectionDragHandleEndComponent);
|
|
3122
3122
|
fSelection = viewChild.required(FConnectionSelectionComponent);
|
|
3123
|
-
fTextComponent = viewChild
|
|
3123
|
+
fTextComponent = viewChild(CONNECTION_TEXT);
|
|
3124
3124
|
fConnectionCenter = viewChild('fConnectionCenter');
|
|
3125
3125
|
fConnectionCenters = contentChildren(FConnectionCenterDirective, {
|
|
3126
3126
|
descendants: true,
|
|
@@ -3187,7 +3187,7 @@ class FConnectionBase extends MIXIN_BASE {
|
|
|
3187
3187
|
this.fGradient().redraw(this.line);
|
|
3188
3188
|
this.fDragHandleEnd().redraw(this._penultimatePoint, this.line.point2);
|
|
3189
3189
|
this.fDragHandleStart()?.redraw(this._secondPoint, this.line.point1);
|
|
3190
|
-
this.fTextComponent()
|
|
3190
|
+
this.fTextComponent()?.redraw(this.line);
|
|
3191
3191
|
}
|
|
3192
3192
|
/**
|
|
3193
3193
|
* Applies the resolved sides to the connection. Don't call this method directly; it's used internally.
|
|
@@ -3326,7 +3326,7 @@ class FConnectionComponent extends FConnectionBase {
|
|
|
3326
3326
|
this._mediator.execute(new RemoveConnectionFromStoreRequest(this));
|
|
3327
3327
|
}
|
|
3328
3328
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
3329
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FConnectionComponent, selector: "f-connection", inputs: { fId: { classPropertyName: "fId", publicName: "fConnectionId", isSignal: true, isRequired: false, transformFunction: null }, fText: { classPropertyName: "fText", publicName: "fText", isSignal: false, isRequired: false, transformFunction: null }, fTextStartOffset: { classPropertyName: "fTextStartOffset", publicName: "fTextStartOffset", isSignal: false, isRequired: false, transformFunction: null }, fOutputId: { classPropertyName: "fOutputId", publicName: "fOutputId", isSignal: true, isRequired: false, transformFunction: null }, fInputId: { classPropertyName: "fInputId", publicName: "fInputId", isSignal: true, isRequired: false, transformFunction: null }, fRadius: { classPropertyName: "fRadius", publicName: "fRadius", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fOffset: { classPropertyName: "fOffset", publicName: "fOffset", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fBehavior: { classPropertyName: "fBehavior", publicName: "fBehavior", isSignal: false, isRequired: false, transformFunction: (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior) }, fType: { classPropertyName: "fType", publicName: "fType", isSignal: false, isRequired: false, transformFunction: null }, fSelectionDisabled: { classPropertyName: "fSelectionDisabled", publicName: "fSelectionDisabled", isSignal: true, isRequired: false, transformFunction: null }, fReassignableStart: { classPropertyName: "fReassignableStart", publicName: "fReassignableStart", isSignal: true, isRequired: false, transformFunction: null }, fDraggingDisabled: { classPropertyName: "fDraggingDisabled", publicName: "fReassignDisabled", isSignal: true, isRequired: false, transformFunction: null }, fInputSide: { classPropertyName: "fInputSide", publicName: "fInputSide", isSignal: true, isRequired: false, transformFunction: null }, fOutputSide: { classPropertyName: "fOutputSide", publicName: "fOutputSide", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "fId()", "class.f-connection-selection-disabled": "fSelectionDisabled()", "class.f-connection-reassign-disabled": "fDraggingDisabled()" }, classAttribute: "f-component f-connection" }, providers: [{ provide: F_CONNECTION, useExisting: FConnectionComponent }], exportAs: ["fComponent"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg
|
|
3329
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FConnectionComponent, selector: "f-connection", inputs: { fId: { classPropertyName: "fId", publicName: "fConnectionId", isSignal: true, isRequired: false, transformFunction: null }, fText: { classPropertyName: "fText", publicName: "fText", isSignal: false, isRequired: false, transformFunction: null }, fTextStartOffset: { classPropertyName: "fTextStartOffset", publicName: "fTextStartOffset", isSignal: false, isRequired: false, transformFunction: null }, fOutputId: { classPropertyName: "fOutputId", publicName: "fOutputId", isSignal: true, isRequired: false, transformFunction: null }, fInputId: { classPropertyName: "fInputId", publicName: "fInputId", isSignal: true, isRequired: false, transformFunction: null }, fRadius: { classPropertyName: "fRadius", publicName: "fRadius", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fOffset: { classPropertyName: "fOffset", publicName: "fOffset", isSignal: false, isRequired: false, transformFunction: numberAttribute }, fBehavior: { classPropertyName: "fBehavior", publicName: "fBehavior", isSignal: false, isRequired: false, transformFunction: (value) => castToEnum(value, 'fBehavior', EFConnectionBehavior) }, fType: { classPropertyName: "fType", publicName: "fType", isSignal: false, isRequired: false, transformFunction: null }, fSelectionDisabled: { classPropertyName: "fSelectionDisabled", publicName: "fSelectionDisabled", isSignal: true, isRequired: false, transformFunction: null }, fReassignableStart: { classPropertyName: "fReassignableStart", publicName: "fReassignableStart", isSignal: true, isRequired: false, transformFunction: null }, fDraggingDisabled: { classPropertyName: "fDraggingDisabled", publicName: "fReassignDisabled", isSignal: true, isRequired: false, transformFunction: null }, fInputSide: { classPropertyName: "fInputSide", publicName: "fInputSide", isSignal: true, isRequired: false, transformFunction: null }, fOutputSide: { classPropertyName: "fOutputSide", publicName: "fOutputSide", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "fId()", "class.f-connection-selection-disabled": "fSelectionDisabled()", "class.f-connection-reassign-disabled": "fDraggingDisabled()" }, classAttribute: "f-component f-connection" }, providers: [{ provide: F_CONNECTION, useExisting: FConnectionComponent }], exportAs: ["fComponent"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: block; vertical-align: middle;\">\n <defs #defs></defs>\n <ng-content />\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path [attr.d]=\"path\"></path>\n @if (fReassignableStart()) {\n <circle f-connection-drag-handle-start r=\"8\"></circle>\n }\n <circle f-connection-drag-handle-end r=\"8\"></circle>\n </g>\n @if (fText) {\n <text f-connection-text></text>\n }\n </g>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\" />\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\" />\n}\n", styles: [":host{pointer-events:none}:host svg{overflow:visible!important;position:absolute}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center,:host .f-connection-content{pointer-events:all}\n"], dependencies: [{ kind: "component", type: FConnectionTextComponent, selector: "text[f-connection-text]" }, { kind: "component", type: FConnectionDragHandleStartComponent, selector: "circle[f-connection-drag-handle-start]" }, { kind: "component", type: FConnectionDragHandleEndComponent, selector: "circle[f-connection-drag-handle-end]" }, { kind: "component", type: FConnectionGradientComponent, selector: "linearGradient[fConnectionGradient]" }, { kind: "component", type: FConnectionPathComponent, selector: "path[f-connection-path]" }, { kind: "component", type: FConnectionSelectionComponent, selector: "path[fConnectionSelection]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3330
3330
|
}
|
|
3331
3331
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FConnectionComponent, decorators: [{
|
|
3332
3332
|
type: Component,
|
|
@@ -3335,7 +3335,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
3335
3335
|
class: 'f-component f-connection',
|
|
3336
3336
|
'[class.f-connection-selection-disabled]': 'fSelectionDisabled()',
|
|
3337
3337
|
'[class.f-connection-reassign-disabled]': 'fDraggingDisabled()',
|
|
3338
|
-
}, providers: [{ provide: F_CONNECTION, useExisting: FConnectionComponent }], template: "<svg
|
|
3338
|
+
}, providers: [{ provide: F_CONNECTION, useExisting: FConnectionComponent }], template: "<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display: block; vertical-align: middle;\">\n <defs #defs></defs>\n <ng-content />\n <g class=\"f-connection-group\">\n <linearGradient fConnectionGradient></linearGradient>\n <path fConnectionSelection [attr.d]=\"path\"></path>\n <g>\n <path f-connection-path [attr.d]=\"path\"></path>\n @if (fReassignableStart()) {\n <circle f-connection-drag-handle-start r=\"8\"></circle>\n }\n <circle f-connection-drag-handle-end r=\"8\"></circle>\n </g>\n @if (fText) {\n <text f-connection-text></text>\n }\n </g>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\" />\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\" />\n}\n", styles: [":host{pointer-events:none}:host svg{overflow:visible!important;position:absolute}:host svg .f-connection-group{pointer-events:all}:host .f-connection-center,:host .f-connection-content{pointer-events:all}\n"] }]
|
|
3339
3339
|
}], propDecorators: { fText: [{
|
|
3340
3340
|
type: Input
|
|
3341
3341
|
}], fTextStartOffset: [{
|
|
@@ -8862,7 +8862,7 @@ class EventExtensions {
|
|
|
8862
8862
|
window.addEventListener('test', EventExtensions.emptyListener, { passive: true });
|
|
8863
8863
|
EventExtensions._isSupported = true;
|
|
8864
8864
|
}
|
|
8865
|
-
catch
|
|
8865
|
+
catch {
|
|
8866
8866
|
EventExtensions._isSupported = false;
|
|
8867
8867
|
}
|
|
8868
8868
|
}
|
|
@@ -12529,7 +12529,7 @@ class FCanvasComponent extends FCanvasBase {
|
|
|
12529
12529
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FCanvasComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
12530
12530
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.13", type: FCanvasComponent, isStandalone: true, selector: "f-canvas", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null }, debounceTime: { classPropertyName: "debounceTime", publicName: "debounceTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { fCanvasChange: "fCanvasChange" }, host: { classAttribute: "f-component f-canvas" }, providers: [
|
|
12531
12531
|
{ provide: F_CANVAS, useExisting: FCanvasComponent },
|
|
12532
|
-
], viewQueries: [{ propertyName: "fGroupsContainer", first: true, predicate: ["fGroupsContainer"], descendants: true, isSignal: true }, { propertyName: "fNodesContainer", first: true, predicate: ["fNodesContainer"], descendants: true, isSignal: true }, { propertyName: "fConnectionsContainer", first: true, predicate: ["fConnectionsContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <div #fGroupsContainer>\n <ng-content select=\"[fGroup]\"
|
|
12532
|
+
], viewQueries: [{ propertyName: "fGroupsContainer", first: true, predicate: ["fGroupsContainer"], descendants: true, isSignal: true }, { propertyName: "fNodesContainer", first: true, predicate: ["fNodesContainer"], descendants: true, isSignal: true }, { propertyName: "fConnectionsContainer", first: true, predicate: ["fConnectionsContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <div #fGroupsContainer>\n <ng-content select=\"[fGroup], [fGroups]\" />\n </div>\n <div #fConnectionsContainer>\n <ng-content select=\"f-snap-connection\" />\n <ng-content select=\"f-connection, [fConnections]\" />\n <ng-content select=\"f-connection-for-create\" />\n </div>\n\n <div #fNodesContainer>\n <ng-content select=\"[fNode], [fNodes]\" />\n </div>\n</ng-container>\n", styles: [":host{position:absolute;overflow:visible;width:100%;height:100%;left:0;top:0;transform-origin:0 0;pointer-events:none}:host.canvas-dragging{will-change:transform;transform:translateZ(0)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
12533
12533
|
}
|
|
12534
12534
|
__decorate([
|
|
12535
12535
|
Deprecated('setScale')
|
|
@@ -12543,7 +12543,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
12543
12543
|
'class': 'f-component f-canvas',
|
|
12544
12544
|
}, providers: [
|
|
12545
12545
|
{ provide: F_CANVAS, useExisting: FCanvasComponent },
|
|
12546
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <div #fGroupsContainer>\n <ng-content select=\"[fGroup]\"
|
|
12546
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <div #fGroupsContainer>\n <ng-content select=\"[fGroup], [fGroups]\" />\n </div>\n <div #fConnectionsContainer>\n <ng-content select=\"f-snap-connection\" />\n <ng-content select=\"f-connection, [fConnections]\" />\n <ng-content select=\"f-connection-for-create\" />\n </div>\n\n <div #fNodesContainer>\n <ng-content select=\"[fNode], [fNodes]\" />\n </div>\n</ng-container>\n", styles: [":host{position:absolute;overflow:visible;width:100%;height:100%;left:0;top:0;transform-origin:0 0;pointer-events:none}:host.canvas-dragging{will-change:transform;transform:translateZ(0)}\n"] }]
|
|
12547
12547
|
}], propDecorators: { setZoom: [], resetZoom: [] } });
|
|
12548
12548
|
|
|
12549
12549
|
const F_CANVAS_PROVIDERS = [
|
|
@@ -12780,7 +12780,7 @@ class FFlowComponent extends FFlowBase {
|
|
|
12780
12780
|
...COMMON_PROVIDERS,
|
|
12781
12781
|
...F_DRAGGABLE_PROVIDERS,
|
|
12782
12782
|
{ provide: F_FLOW, useExisting: FFlowComponent },
|
|
12783
|
-
], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}::ng-deep .f-connection-content{position:absolute;left:0;top:0;pointer-events:all;transform-origin:50% 50
|
|
12783
|
+
], usesInheritance: true, ngImport: i0, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}::ng-deep .f-connection-content{position:absolute;left:0;top:0;pointer-events:all;transform-origin:50% 50%}::ng-deep .f-node,::ng-deep .f-group{position:absolute!important;transform-origin:center;-webkit-user-select:none;user-select:none;pointer-events:all;left:0!important;top:0!important}::ng-deep .f-group{z-index:1}::ng-deep .f-connection-center,::ng-deep .f-connection-content{z-index:2}::ng-deep .f-node{z-index:3}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
12784
12784
|
}
|
|
12785
12785
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FFlowComponent, decorators: [{
|
|
12786
12786
|
type: Component,
|
|
@@ -12795,7 +12795,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
12795
12795
|
...COMMON_PROVIDERS,
|
|
12796
12796
|
...F_DRAGGABLE_PROVIDERS,
|
|
12797
12797
|
{ provide: F_FLOW, useExisting: FFlowComponent },
|
|
12798
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}::ng-deep .f-connection-content{position:absolute;left:0;top:0;pointer-events:all;transform-origin:50% 50
|
|
12798
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container>\n <ng-content select=\"[fDefinitions]\"></ng-content>\n\n <ng-content select=\"f-background\"></ng-content>\n\n <ng-content select=\"f-line-alignment\"></ng-content>\n\n <ng-content select=\"f-canvas\"></ng-content>\n\n <ng-content select=\"f-selection-area\"></ng-content>\n\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host{display:block;position:relative;width:100%;height:100%;overflow:hidden;pointer-events:all;-webkit-user-select:none;user-select:none;touch-action:none}::ng-deep .f-connection-content{position:absolute;left:0;top:0;pointer-events:all;transform-origin:50% 50%}::ng-deep .f-node,::ng-deep .f-group{position:absolute!important;transform-origin:center;-webkit-user-select:none;user-select:none;pointer-events:all;left:0!important;top:0!important}::ng-deep .f-group{z-index:1}::ng-deep .f-connection-center,::ng-deep .f-connection-content{z-index:2}::ng-deep .f-node{z-index:3}\n"] }]
|
|
12799
12799
|
}] });
|
|
12800
12800
|
|
|
12801
12801
|
const F_FLOW_PROVIDERS = [
|
|
@@ -12813,43 +12813,48 @@ class FZoomBase {
|
|
|
12813
12813
|
}
|
|
12814
12814
|
|
|
12815
12815
|
class FZoomDirective extends FZoomBase {
|
|
12816
|
-
|
|
12817
|
-
|
|
12818
|
-
_triggersListener =
|
|
12819
|
-
isEnabled = false;
|
|
12816
|
+
_mediator = inject(FMediator);
|
|
12817
|
+
_injector = inject(Injector);
|
|
12818
|
+
_triggersListener = EventExtensions.emptyListener();
|
|
12819
|
+
isEnabled = input(false, { alias: 'fZoom', transform: booleanAttribute });
|
|
12820
12820
|
fWheelTrigger = defaultEventTrigger;
|
|
12821
12821
|
fDblClickTrigger = defaultEventTrigger;
|
|
12822
12822
|
minimum = 0.1;
|
|
12823
12823
|
maximum = 4;
|
|
12824
12824
|
step = 0.1;
|
|
12825
12825
|
dblClickStep = 0.5;
|
|
12826
|
-
get
|
|
12827
|
-
return this.
|
|
12826
|
+
get _hostElement() {
|
|
12827
|
+
return this._mediator.execute(new GetFlowHostElementRequest());
|
|
12828
12828
|
}
|
|
12829
|
-
get
|
|
12830
|
-
return this.
|
|
12829
|
+
get _canvas() {
|
|
12830
|
+
return this._mediator.execute(new GetCanvasRequest());
|
|
12831
12831
|
}
|
|
12832
12832
|
ngOnInit() {
|
|
12833
|
-
this.
|
|
12833
|
+
this._mediator.execute(new AddZoomToStoreRequest(this));
|
|
12834
12834
|
}
|
|
12835
12835
|
ngAfterViewInit() {
|
|
12836
|
-
this.
|
|
12836
|
+
this._listenZoomEnabledChanges();
|
|
12837
12837
|
}
|
|
12838
|
-
|
|
12839
|
-
|
|
12840
|
-
this.
|
|
12841
|
-
|
|
12838
|
+
_listenZoomEnabledChanges() {
|
|
12839
|
+
effect(() => {
|
|
12840
|
+
this.isEnabled();
|
|
12841
|
+
untracked(() => this._listenTriggers());
|
|
12842
|
+
}, { injector: this._injector });
|
|
12842
12843
|
}
|
|
12843
12844
|
_listenTriggers() {
|
|
12844
|
-
if (!this.
|
|
12845
|
+
if (!this._hostElement) {
|
|
12845
12846
|
return;
|
|
12846
12847
|
}
|
|
12847
12848
|
this._disposeListeners();
|
|
12848
|
-
if (!this.isEnabled) {
|
|
12849
|
+
if (!this.isEnabled()) {
|
|
12849
12850
|
return;
|
|
12850
12851
|
}
|
|
12851
|
-
this.
|
|
12852
|
-
this.
|
|
12852
|
+
this._listen('wheel', this._onWheel, EventExtensions.activeListener());
|
|
12853
|
+
this._listen('dblclick', this._onDoubleClick);
|
|
12854
|
+
this._triggersListener = () => {
|
|
12855
|
+
this._unlisten('wheel', this._onWheel, EventExtensions.activeListener());
|
|
12856
|
+
this._unlisten('dblclick', this._onDoubleClick);
|
|
12857
|
+
};
|
|
12853
12858
|
}
|
|
12854
12859
|
_onWheel = (event) => {
|
|
12855
12860
|
if (!isValidEventTrigger(event, this.fWheelTrigger)) {
|
|
@@ -12892,10 +12897,10 @@ class FZoomDirective extends FZoomBase {
|
|
|
12892
12897
|
this._onZoomToCenter(EFZoomDirection.ZOOM_OUT, position);
|
|
12893
12898
|
}
|
|
12894
12899
|
_onZoomToCenter(direction, position) {
|
|
12895
|
-
this.setZoom(this._getToCenterPosition(position, RectExtensions.fromElement(this.
|
|
12900
|
+
this.setZoom(this._getToCenterPosition(position, RectExtensions.fromElement(this._hostElement)), this.step, direction, false);
|
|
12896
12901
|
}
|
|
12897
12902
|
setZoom(position, step, direction, animated) {
|
|
12898
|
-
this.
|
|
12903
|
+
this._mediator.execute(new SetZoomRequest(position, step, direction, animated));
|
|
12899
12904
|
}
|
|
12900
12905
|
/**
|
|
12901
12906
|
* @deprecated Method "getScale" is deprecated. Use "getZoomValue" instead. This method will be removed in version 18.0.0.`,
|
|
@@ -12904,21 +12909,27 @@ class FZoomDirective extends FZoomBase {
|
|
|
12904
12909
|
return this.getZoomValue();
|
|
12905
12910
|
}
|
|
12906
12911
|
getZoomValue() {
|
|
12907
|
-
return this.
|
|
12912
|
+
return this._canvas.transform.scale || 1;
|
|
12908
12913
|
}
|
|
12909
12914
|
reset() {
|
|
12910
|
-
this.
|
|
12915
|
+
this._mediator.execute(new ResetZoomRequest());
|
|
12911
12916
|
}
|
|
12912
12917
|
_disposeListeners() {
|
|
12913
|
-
this._triggersListener
|
|
12914
|
-
this._triggersListener =
|
|
12918
|
+
this._triggersListener();
|
|
12919
|
+
this._triggersListener = EventExtensions.emptyListener();
|
|
12915
12920
|
}
|
|
12916
12921
|
ngOnDestroy() {
|
|
12917
12922
|
this._disposeListeners();
|
|
12918
|
-
this.
|
|
12923
|
+
this._mediator.execute(new RemoveZoomFromStoreRequest());
|
|
12924
|
+
}
|
|
12925
|
+
_listen(type, listener, options) {
|
|
12926
|
+
this._hostElement.addEventListener(type, listener, options);
|
|
12927
|
+
}
|
|
12928
|
+
_unlisten(type, listener, options) {
|
|
12929
|
+
this._hostElement.removeEventListener(type, listener, options);
|
|
12919
12930
|
}
|
|
12920
12931
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FZoomDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
12921
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
12932
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: FZoomDirective, isStandalone: true, selector: "f-canvas[fZoom]", inputs: { isEnabled: { classPropertyName: "isEnabled", publicName: "fZoom", isSignal: true, isRequired: false, transformFunction: null }, fWheelTrigger: { classPropertyName: "fWheelTrigger", publicName: "fWheelTrigger", isSignal: false, isRequired: false, transformFunction: null }, fDblClickTrigger: { classPropertyName: "fDblClickTrigger", publicName: "fDblClickTrigger", isSignal: false, isRequired: false, transformFunction: null }, minimum: { classPropertyName: "minimum", publicName: "fZoomMinimum", isSignal: false, isRequired: false, transformFunction: numberAttribute }, maximum: { classPropertyName: "maximum", publicName: "fZoomMaximum", isSignal: false, isRequired: false, transformFunction: numberAttribute }, step: { classPropertyName: "step", publicName: "fZoomStep", isSignal: false, isRequired: false, transformFunction: numberAttribute }, dblClickStep: { classPropertyName: "dblClickStep", publicName: "fZoomDblClickStep", isSignal: false, isRequired: false, transformFunction: numberAttribute } }, host: { classAttribute: "f-zoom f-component" }, providers: [{ provide: F_ZOOM, useExisting: FZoomDirective }], exportAs: ["fComponent"], usesInheritance: true, ngImport: i0 });
|
|
12922
12933
|
}
|
|
12923
12934
|
__decorate([
|
|
12924
12935
|
Deprecated('getZoomValue')
|
|
@@ -12926,7 +12937,7 @@ __decorate([
|
|
|
12926
12937
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FZoomDirective, decorators: [{
|
|
12927
12938
|
type: Directive,
|
|
12928
12939
|
args: [{
|
|
12929
|
-
selector:
|
|
12940
|
+
selector: 'f-canvas[fZoom]',
|
|
12930
12941
|
exportAs: 'fComponent',
|
|
12931
12942
|
standalone: true,
|
|
12932
12943
|
host: {
|
|
@@ -12934,10 +12945,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
12934
12945
|
},
|
|
12935
12946
|
providers: [{ provide: F_ZOOM, useExisting: FZoomDirective }],
|
|
12936
12947
|
}]
|
|
12937
|
-
}], propDecorators: {
|
|
12938
|
-
type: Input,
|
|
12939
|
-
args: [{ alias: 'fZoom', transform: booleanAttribute }]
|
|
12940
|
-
}], fWheelTrigger: [{
|
|
12948
|
+
}], propDecorators: { fWheelTrigger: [{
|
|
12941
12949
|
type: Input
|
|
12942
12950
|
}], fDblClickTrigger: [{
|
|
12943
12951
|
type: Input
|