@foblex/flow 17.9.3 → 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.
@@ -1,50 +1,56 @@
1
1
  import { __decorate } from "tslib";
2
- import { booleanAttribute, Directive, inject, Input, numberAttribute, Renderer2, } from "@angular/core";
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
- _fMediator = inject(FMediator);
12
- _rendered = inject(Renderer2);
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 _fHost() {
22
- return this._fMediator.execute(new GetFlowHostElementRequest());
22
+ get _hostElement() {
23
+ return this._mediator.execute(new GetFlowHostElementRequest());
23
24
  }
24
- get _fCanvas() {
25
- return this._fMediator.execute(new GetCanvasRequest());
25
+ get _canvas() {
26
+ return this._mediator.execute(new GetCanvasRequest());
26
27
  }
27
28
  ngOnInit() {
28
- this._fMediator.execute(new AddZoomToStoreRequest(this));
29
+ this._mediator.execute(new AddZoomToStoreRequest(this));
29
30
  }
30
31
  ngAfterViewInit() {
31
- this._listenTriggers();
32
+ this._listenZoomEnabledChanges();
32
33
  }
33
- ngOnChanges(changes) {
34
- if (changes['isEnabled']) {
35
- this._listenTriggers();
36
- }
34
+ _listenZoomEnabledChanges() {
35
+ effect(() => {
36
+ this.isEnabled();
37
+ untracked(() => this._listenTriggers());
38
+ }, { injector: this._injector });
37
39
  }
38
40
  _listenTriggers() {
39
- if (!this._fHost) {
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._triggersListener.push(this._rendered.listen(this._fHost, 'wheel', this._onWheel));
47
- this._triggersListener.push(this._rendered.listen(this._fHost, 'dblclick', this._onDoubleClick));
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._fHost)), this.step, direction, false);
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._fMediator.execute(new SetZoomRequest(position, step, direction, animated));
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._fCanvas.transform.scale || 1;
108
+ return this._canvas.transform.scale || 1;
103
109
  }
104
110
  reset() {
105
- this._fMediator.execute(new ResetZoomRequest());
111
+ this._mediator.execute(new ResetZoomRequest());
106
112
  }
107
113
  _disposeListeners() {
108
- this._triggersListener.forEach((listener) => listener());
109
- this._triggersListener = [];
114
+ this._triggersListener();
115
+ this._triggersListener = EventExtensions.emptyListener();
110
116
  }
111
117
  ngOnDestroy() {
112
118
  this._disposeListeners();
113
- this._fMediator.execute(new RemoveZoomFromStoreRequest());
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: "16.1.0", version: "18.2.13", type: FZoomDirective, isStandalone: true, selector: "f-canvas[fZoom]", inputs: { isEnabled: ["fZoom", "isEnabled", booleanAttribute], fWheelTrigger: "fWheelTrigger", fDblClickTrigger: "fDblClickTrigger", minimum: ["fZoomMinimum", "minimum", numberAttribute], maximum: ["fZoomMaximum", "maximum", numberAttribute], step: ["fZoomStep", "step", numberAttribute], dblClickStep: ["fZoomDblClickStep", "dblClickStep", numberAttribute] }, host: { classAttribute: "f-zoom f-component" }, providers: [{ provide: F_ZOOM, useExisting: FZoomDirective }], exportAs: ["fComponent"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
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: "f-canvas[fZoom]",
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: { isEnabled: [{
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 FConnectionTextPathDirective | typeof FConnectionTextComponent | typeof FConnectionDragHandleStartComponent | typeof FConnectionDragHandleEndComponent | typeof FConnectionGradientComponent | typeof FConnectionPathComponent | typeof FConnectionSelectionComponent | typeof FConnectionCenterDirective | typeof FConnectionForCreateComponent | typeof FConnectionComponent | typeof FMarkerDirective | typeof FSnapConnectionComponent)[];
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, OnChanges, OnDestroy, OnInit, SimpleChanges } from "@angular/core";
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, OnChanges, OnDestroy {
8
- private _fMediator;
9
- private _rendered;
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 _fHost();
19
- private get _fCanvas();
18
+ private get _hostElement();
19
+ private get _canvas();
20
20
  ngOnInit(): void;
21
21
  ngAfterViewInit(): void;
22
- ngOnChanges(changes: SimpleChanges): void;
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;
@@ -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.required(CONNECTION_TEXT);
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().redraw(this.line);
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\n xmlns=\"http://www.w3.org/2000/svg\"\n style=\"display: block; vertical-align: middle;\"\n>\n <defs #defs></defs>\n <ng-content></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 <text f-connection-text></text>\n </g>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\"></ng-content>\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 });
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\n xmlns=\"http://www.w3.org/2000/svg\"\n style=\"display: block; vertical-align: middle;\"\n>\n <defs #defs></defs>\n <ng-content></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 <text f-connection-text></text>\n </g>\n</svg>\n@if (fConnectionCenters().length) {\n <div #fConnectionCenter class=\"f-connection-center\">\n <ng-content select=\"[fConnectionCenter]\"></ng-content>\n </div>\n}\n\n@if (fConnectionContents().length) {\n <ng-content select=\"[fConnectionContent]\"></ng-content>\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"] }]
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 (e) {
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]\"></ng-content>\n </div>\n <div #fConnectionsContainer>\n <ng-content select=\"f-snap-connection\"></ng-content>\n <ng-content select=\"f-connection\"></ng-content>\n <ng-content select=\"f-connection-for-create\"></ng-content>\n </div>\n\n <div #fNodesContainer>\n <ng-content select=\"[fNode]\"></ng-content>\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 });
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]\"></ng-content>\n </div>\n <div #fConnectionsContainer>\n <ng-content select=\"f-snap-connection\"></ng-content>\n <ng-content select=\"f-connection\"></ng-content>\n <ng-content select=\"f-connection-for-create\"></ng-content>\n </div>\n\n <div #fNodesContainer>\n <ng-content select=\"[fNode]\"></ng-content>\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"] }]
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%;will-change:transform;z-index:1}::ng-deep .f-node,::ng-deep .f-group{z-index:2;position:absolute!important;transform-origin:center;-webkit-user-select:none;user-select:none;pointer-events:all;left:0!important;top:0!important}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
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%;will-change:transform;z-index:1}::ng-deep .f-node,::ng-deep .f-group{z-index:2;position:absolute!important;transform-origin:center;-webkit-user-select:none;user-select:none;pointer-events:all;left:0!important;top:0!important}\n"] }]
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
- _fMediator = inject(FMediator);
12817
- _rendered = inject(Renderer2);
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 _fHost() {
12827
- return this._fMediator.execute(new GetFlowHostElementRequest());
12826
+ get _hostElement() {
12827
+ return this._mediator.execute(new GetFlowHostElementRequest());
12828
12828
  }
12829
- get _fCanvas() {
12830
- return this._fMediator.execute(new GetCanvasRequest());
12829
+ get _canvas() {
12830
+ return this._mediator.execute(new GetCanvasRequest());
12831
12831
  }
12832
12832
  ngOnInit() {
12833
- this._fMediator.execute(new AddZoomToStoreRequest(this));
12833
+ this._mediator.execute(new AddZoomToStoreRequest(this));
12834
12834
  }
12835
12835
  ngAfterViewInit() {
12836
- this._listenTriggers();
12836
+ this._listenZoomEnabledChanges();
12837
12837
  }
12838
- ngOnChanges(changes) {
12839
- if (changes['isEnabled']) {
12840
- this._listenTriggers();
12841
- }
12838
+ _listenZoomEnabledChanges() {
12839
+ effect(() => {
12840
+ this.isEnabled();
12841
+ untracked(() => this._listenTriggers());
12842
+ }, { injector: this._injector });
12842
12843
  }
12843
12844
  _listenTriggers() {
12844
- if (!this._fHost) {
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._triggersListener.push(this._rendered.listen(this._fHost, 'wheel', this._onWheel));
12852
- this._triggersListener.push(this._rendered.listen(this._fHost, 'dblclick', this._onDoubleClick));
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._fHost)), this.step, direction, false);
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._fMediator.execute(new SetZoomRequest(position, step, direction, animated));
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._fCanvas.transform.scale || 1;
12912
+ return this._canvas.transform.scale || 1;
12908
12913
  }
12909
12914
  reset() {
12910
- this._fMediator.execute(new ResetZoomRequest());
12915
+ this._mediator.execute(new ResetZoomRequest());
12911
12916
  }
12912
12917
  _disposeListeners() {
12913
- this._triggersListener.forEach((listener) => listener());
12914
- this._triggersListener = [];
12918
+ this._triggersListener();
12919
+ this._triggersListener = EventExtensions.emptyListener();
12915
12920
  }
12916
12921
  ngOnDestroy() {
12917
12922
  this._disposeListeners();
12918
- this._fMediator.execute(new RemoveZoomFromStoreRequest());
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: "16.1.0", version: "18.2.13", type: FZoomDirective, isStandalone: true, selector: "f-canvas[fZoom]", inputs: { isEnabled: ["fZoom", "isEnabled", booleanAttribute], fWheelTrigger: "fWheelTrigger", fDblClickTrigger: "fDblClickTrigger", minimum: ["fZoomMinimum", "minimum", numberAttribute], maximum: ["fZoomMaximum", "maximum", numberAttribute], step: ["fZoomStep", "step", numberAttribute], dblClickStep: ["fZoomDblClickStep", "dblClickStep", numberAttribute] }, host: { classAttribute: "f-zoom f-component" }, providers: [{ provide: F_ZOOM, useExisting: FZoomDirective }], exportAs: ["fComponent"], usesInheritance: true, usesOnChanges: true, ngImport: i0 });
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: "f-canvas[fZoom]",
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: { isEnabled: [{
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