@fundamental-ngx/core 0.43.13 → 0.43.15

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,12 +1,12 @@
1
- import { Directive, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';
1
+ import { Directive, ElementRef, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';
2
+ import { DestroyedService, resizeObservable } from '@fundamental-ngx/cdk/utils';
3
+ import { debounceTime, takeUntil } from 'rxjs';
2
4
  import * as i0 from "@angular/core";
3
5
  /**
4
6
  * A directive designed to help navigation elements determine the element currently in view of the user.
5
7
  */
6
8
  export class ScrollSpyDirective {
7
- /** @hidden */
8
- constructor(_elRef) {
9
- this._elRef = _elRef;
9
+ constructor() {
10
10
  /**
11
11
  * An array of tags to track.
12
12
  */
@@ -35,14 +35,18 @@ export class ScrollSpyDirective {
35
35
  * The returned value is the HTMLElement itself.
36
36
  */
37
37
  this.spyChange = new EventEmitter();
38
+ /** @hidden */
39
+ this._elRef = inject(ElementRef);
40
+ /** @hidden */
41
+ this._destroyRef = inject(DestroyedService);
38
42
  }
39
43
  /** @hidden */
40
- onScroll(event) {
44
+ onScroll(event, forced = false) {
41
45
  if (this.scrollSpyDisabled) {
42
46
  return;
43
47
  }
44
48
  let spiedTag;
45
- const target = event.target;
49
+ const target = (event?.target || this._elRef.nativeElement);
46
50
  const children = this._elRef.nativeElement.children;
47
51
  const [firstChild] = children;
48
52
  const childrenLength = children.length;
@@ -56,20 +60,31 @@ export class ScrollSpyDirective {
56
60
  }
57
61
  }
58
62
  }
59
- if ((spiedTag || this.fireEmpty) && spiedTag !== this._currentActive) {
63
+ if (forced || ((spiedTag || this.fireEmpty) && spiedTag !== this._currentActive)) {
60
64
  this._currentActive = spiedTag;
61
65
  this.spyChange.emit(this._currentActive);
62
66
  }
63
67
  }
68
+ /** @hidden */
69
+ ngOnInit() {
70
+ // When the spy container being resized, re-evaluate scroll position.
71
+ resizeObservable(this._elRef.nativeElement)
72
+ .pipe(debounceTime(30), takeUntil(this._destroyRef))
73
+ .subscribe(() => {
74
+ this.onScroll(undefined, true);
75
+ });
76
+ }
64
77
  }
65
- ScrollSpyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ScrollSpyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
66
- ScrollSpyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: ScrollSpyDirective, selector: "[fdScrollSpy]", inputs: { trackedTags: "trackedTags", fireEmpty: "fireEmpty", targetPercent: "targetPercent", targetOffset: "targetOffset", scrollSpyDisabled: "scrollSpyDisabled" }, outputs: { spyChange: "spyChange" }, host: { listeners: { "scroll": "onScroll($event)" } }, ngImport: i0 });
78
+ ScrollSpyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ScrollSpyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
79
+ ScrollSpyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: ScrollSpyDirective, selector: "[fdScrollSpy]", inputs: { trackedTags: "trackedTags", fireEmpty: "fireEmpty", targetPercent: "targetPercent", targetOffset: "targetOffset", scrollSpyDisabled: "scrollSpyDisabled" }, outputs: { spyChange: "spyChange" }, host: { listeners: { "scroll": "onScroll($event)" } }, providers: [DestroyedService], exportAs: ["fdScrollSpy"], ngImport: i0 });
67
80
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ScrollSpyDirective, decorators: [{
68
81
  type: Directive,
69
82
  args: [{
70
- selector: '[fdScrollSpy]'
83
+ selector: '[fdScrollSpy]',
84
+ providers: [DestroyedService],
85
+ exportAs: 'fdScrollSpy'
71
86
  }]
72
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { trackedTags: [{
87
+ }], propDecorators: { trackedTags: [{
73
88
  type: Input
74
89
  }], fireEmpty: [{
75
90
  type: Input
@@ -85,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
85
100
  type: HostListener,
86
101
  args: ['scroll', ['$event']]
87
102
  }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNweS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zY3JvbGwtc3B5L3Njcm9sbC1zcHkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFakc7O0dBRUc7QUFJSCxNQUFNLE9BQU8sa0JBQWtCO0lBNEMzQixjQUFjO0lBQ2QsWUFBNkIsTUFBa0I7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQTVDL0M7O1dBRUc7UUFFSCxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUUzQjs7V0FFRztRQUVILGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEI7Ozs7V0FJRztRQUVILGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRWxCOzs7V0FHRztRQUVILGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRWpCOztXQUVHO1FBRUgsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRTFCOzs7V0FHRztRQUVNLGNBQVMsR0FBOEIsSUFBSSxZQUFZLEVBQWUsQ0FBQztJQU05QixDQUFDO0lBRW5ELGNBQWM7SUFFZCxRQUFRLENBQUMsS0FBWTtRQUNqQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUN4QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLFFBQWlDLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQWtCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNuRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzlCLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUN6QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6RyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRTtnQkFDakcsSUFBSSxPQUFPLENBQUMsU0FBUyxHQUFHLGVBQWUsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNuRyxRQUFRLEdBQUcsT0FBTyxDQUFDO2lCQUN0QjthQUNKO1NBQ0o7UUFFRCxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNsRSxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDOzsrR0EzRVEsa0JBQWtCO21HQUFsQixrQkFBa0I7MkZBQWxCLGtCQUFrQjtrQkFIOUIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZUFBZTtpQkFDNUI7aUdBTUcsV0FBVztzQkFEVixLQUFLO2dCQU9OLFNBQVM7c0JBRFIsS0FBSztnQkFTTixhQUFhO3NCQURaLEtBQUs7Z0JBUU4sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFRRyxTQUFTO3NCQURqQixNQUFNO2dCQVdQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgZGVzaWduZWQgdG8gaGVscCBuYXZpZ2F0aW9uIGVsZW1lbnRzIGRldGVybWluZSB0aGUgZWxlbWVudCBjdXJyZW50bHkgaW4gdmlldyBvZiB0aGUgdXNlci5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmRTY3JvbGxTcHldJ1xufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxTcHlEaXJlY3RpdmUge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRhZ3MgdG8gdHJhY2suXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0cmFja2VkVGFnczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZXZlbnRzIGFyZSBzdGlsbCBmaXJlZCBpZiB0aGVyZSBpcyBubyB0YWcgcHJlc2VudCBvbiB0aGUgdXNlcidzIHNjcmVlbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpcmVFbXB0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBudW1iZXIgdGhhdCByZXByZXNlbnQgYXQgd2hhdCBsb2NhdGlvbiBpbiB0aGUgY29udGFpbmVyIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiAwLjUgd291bGQgZmlyZSB0aGUgZXZlbnRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGNvbnRhaW5lcixcbiAgICAgKiAwIGZvciB0aGUgdG9wIGFuZCAxIGZvciB0aGUgYm90dG9tLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFyZ2V0UGVyY2VudCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSBvZmZzZXQgaW4gcGl4ZWxzIGZvciBmaXJlZCB0YXJnZXQuIGAxMDBgIHZhbHVlIG1lYW5zIHRoYXQgdGhlIGV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yXG4gICAgICogdGFyZ2V0IHRoYXQgaXMgMTAwIHBpeGVscyBiZWxvdyB0aGUgc3B5IGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRhcmdldE9mZnNldCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgc2Nyb2xsIHNweVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Nyb2xsU3B5RGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGZpcmVkIG9uIHRoZSBzY3JvbGwgZWxlbWVudCB3aGVuIGEgbmV3IGl0ZW0gYmVjb21lcyBhY3RpdmF0ZWQgYnkgdGhlIHNjcm9sbHNweSAuXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIGlzIHRoZSBIVE1MRWxlbWVudCBpdHNlbGYuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc3B5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudEFjdGl2ZTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2VsUmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdzY3JvbGwnLCBbJyRldmVudCddKVxuICAgIG9uU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxTcHlEaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNwaWVkVGFnOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBjaGlsZHJlbjogSFRNTEVsZW1lbnRbXSA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IFtmaXJzdENoaWxkXSA9IGNoaWxkcmVuO1xuICAgICAgICBjb25zdCBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gdGFyZ2V0LnNjcm9sbFRvcDtcbiAgICAgICAgY29uc3QgdGFyZ2V0T2Zmc2V0VG9wID0gdGFyZ2V0Lm9mZnNldFRvcCArIHRoaXMudGFyZ2V0T2Zmc2V0IC0gKHRhcmdldC5vZmZzZXRUb3AgLSBmaXJzdENoaWxkLm9mZnNldFRvcCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY2hpbGRyZW5baV07XG4gICAgICAgICAgICBpZiAodGhpcy50cmFja2VkVGFncy5zb21lKCh0YWcpID0+IHRhZy50b0xvY2FsZVVwcGVyQ2FzZSgpID09PSBlbGVtZW50LnRhZ05hbWUudG9Mb2NhbGVVcHBlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5vZmZzZXRUb3AgLSB0YXJnZXRPZmZzZXRUb3AgPD0gdGFyZ2V0U2Nyb2xsVG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCAqIHRoaXMudGFyZ2V0UGVyY2VudCkge1xuICAgICAgICAgICAgICAgICAgICBzcGllZFRhZyA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKChzcGllZFRhZyB8fCB0aGlzLmZpcmVFbXB0eSkgJiYgc3BpZWRUYWcgIT09IHRoaXMuX2N1cnJlbnRBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRBY3RpdmUgPSBzcGllZFRhZztcbiAgICAgICAgICAgIHRoaXMuc3B5Q2hhbmdlLmVtaXQodGhpcy5fY3VycmVudEFjdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXNweS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zY3JvbGwtc3B5L3Njcm9sbC1zcHkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRS9DOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQUwvQjtRQU1JOztXQUVHO1FBRUgsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFFM0I7O1dBRUc7UUFFSCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCOzs7O1dBSUc7UUFFSCxrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUVsQjs7O1dBR0c7UUFFSCxpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUVqQjs7V0FFRztRQUVILHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQjs7O1dBR0c7UUFFTSxjQUFTLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7UUFLaEYsY0FBYztRQUNHLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFN0MsY0FBYztRQUNHLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0F5QzNEO0lBdkNHLGNBQWM7SUFFZCxRQUFRLENBQUMsS0FBYSxFQUFFLE1BQU0sR0FBRyxLQUFLO1FBQ2xDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQ3hCLE9BQU87U0FDVjtRQUVELElBQUksUUFBaUMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQWdCLENBQUM7UUFDM0UsTUFBTSxRQUFRLEdBQWtCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztRQUNuRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQzlCLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUN6QyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6RyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRTtnQkFDakcsSUFBSSxPQUFPLENBQUMsU0FBUyxHQUFHLGVBQWUsSUFBSSxlQUFlLEdBQUcsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNuRyxRQUFRLEdBQUcsT0FBTyxDQUFDO2lCQUN0QjthQUNKO1NBQ0o7UUFFRCxJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlFLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM1QztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLHFFQUFxRTtRQUNyRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQzthQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbkQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7K0dBeEZRLGtCQUFrQjttR0FBbEIsa0JBQWtCLDBTQUhoQixDQUFDLGdCQUFnQixDQUFDOzJGQUdwQixrQkFBa0I7a0JBTDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFNBQVMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUM3QixRQUFRLEVBQUUsYUFBYTtpQkFDMUI7OEJBTUcsV0FBVztzQkFEVixLQUFLO2dCQU9OLFNBQVM7c0JBRFIsS0FBSztnQkFTTixhQUFhO3NCQURaLEtBQUs7Z0JBUU4sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFRRyxTQUFTO3NCQURqQixNQUFNO2dCQWNQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGVzdHJveWVkU2VydmljZSwgcmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgZGVzaWduZWQgdG8gaGVscCBuYXZpZ2F0aW9uIGVsZW1lbnRzIGRldGVybWluZSB0aGUgZWxlbWVudCBjdXJyZW50bHkgaW4gdmlldyBvZiB0aGUgdXNlci5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbZmRTY3JvbGxTcHldJyxcbiAgICBwcm92aWRlcnM6IFtEZXN0cm95ZWRTZXJ2aWNlXSxcbiAgICBleHBvcnRBczogJ2ZkU2Nyb2xsU3B5J1xufSlcbmV4cG9ydCBjbGFzcyBTY3JvbGxTcHlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRhZ3MgdG8gdHJhY2suXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0cmFja2VkVGFnczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgZXZlbnRzIGFyZSBzdGlsbCBmaXJlZCBpZiB0aGVyZSBpcyBubyB0YWcgcHJlc2VudCBvbiB0aGUgdXNlcidzIHNjcmVlbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpcmVFbXB0eSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQSBudW1iZXIgdGhhdCByZXByZXNlbnQgYXQgd2hhdCBsb2NhdGlvbiBpbiB0aGUgY29udGFpbmVyIHRoZSBldmVudCBpcyBmaXJlZC5cbiAgICAgKiAwLjUgd291bGQgZmlyZSB0aGUgZXZlbnRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGNvbnRhaW5lcixcbiAgICAgKiAwIGZvciB0aGUgdG9wIGFuZCAxIGZvciB0aGUgYm90dG9tLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFyZ2V0UGVyY2VudCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBOdW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSBvZmZzZXQgaW4gcGl4ZWxzIGZvciBmaXJlZCB0YXJnZXQuIGAxMDBgIHZhbHVlIG1lYW5zIHRoYXQgdGhlIGV2ZW50IHdpbGwgYmUgZmlyZWQgZm9yXG4gICAgICogdGFyZ2V0IHRoYXQgaXMgMTAwIHBpeGVscyBiZWxvdyB0aGUgc3B5IGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRhcmdldE9mZnNldCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgc2Nyb2xsIHNweVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Nyb2xsU3B5RGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGZpcmVkIG9uIHRoZSBzY3JvbGwgZWxlbWVudCB3aGVuIGEgbmV3IGl0ZW0gYmVjb21lcyBhY3RpdmF0ZWQgYnkgdGhlIHNjcm9sbHNweSAuXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIGlzIHRoZSBIVE1MRWxlbWVudCBpdHNlbGYuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgc3B5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY3VycmVudEFjdGl2ZTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsUmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3llZFNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdzY3JvbGwnLCBbJyRldmVudCddKVxuICAgIG9uU2Nyb2xsKGV2ZW50PzogRXZlbnQsIGZvcmNlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFNweURpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3BpZWRUYWc6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSAoZXZlbnQ/LnRhcmdldCB8fCB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50KSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICBjb25zdCBbZmlyc3RDaGlsZF0gPSBjaGlsZHJlbjtcbiAgICAgICAgY29uc3QgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IHRhcmdldC5zY3JvbGxUb3A7XG4gICAgICAgIGNvbnN0IHRhcmdldE9mZnNldFRvcCA9IHRhcmdldC5vZmZzZXRUb3AgKyB0aGlzLnRhcmdldE9mZnNldCAtICh0YXJnZXQub2Zmc2V0VG9wIC0gZmlyc3RDaGlsZC5vZmZzZXRUb3ApO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tlZFRhZ3Muc29tZSgodGFnKSA9PiB0YWcudG9Mb2NhbGVVcHBlckNhc2UoKSA9PT0gZWxlbWVudC50YWdOYW1lLnRvTG9jYWxlVXBwZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQub2Zmc2V0VG9wIC0gdGFyZ2V0T2Zmc2V0VG9wIDw9IHRhcmdldFNjcm9sbFRvcCArIHRhcmdldC5vZmZzZXRIZWlnaHQgKiB0aGlzLnRhcmdldFBlcmNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BpZWRUYWcgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JjZWQgfHwgKChzcGllZFRhZyB8fCB0aGlzLmZpcmVFbXB0eSkgJiYgc3BpZWRUYWcgIT09IHRoaXMuX2N1cnJlbnRBY3RpdmUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50QWN0aXZlID0gc3BpZWRUYWc7XG4gICAgICAgICAgICB0aGlzLnNweUNoYW5nZS5lbWl0KHRoaXMuX2N1cnJlbnRBY3RpdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gV2hlbiB0aGUgc3B5IGNvbnRhaW5lciBiZWluZyByZXNpemVkLCByZS1ldmFsdWF0ZSBzY3JvbGwgcG9zaXRpb24uXG4gICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgzMCksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25TY3JvbGwodW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==