@skyux/core 9.13.0 → 9.13.1

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,82 +1,107 @@
1
- import { Injectable, NgZone, inject, } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { finalize } from 'rxjs/operators';
1
+ import { ApplicationRef, Injectable, NgZone, inject, } from '@angular/core';
2
+ import { Observable, Subject, animationFrames, distinctUntilChanged, filter, map, shareReplay, take, takeUntil, throttle, } from 'rxjs';
4
3
  import { SkyAppWindowRef } from '../window/window-ref';
5
4
  import * as i0 from "@angular/core";
5
+ const errorTest = /ResizeObserver loop completed with undelivered notifications/i;
6
+ let errorLogRegistered = false;
7
+ let originalOnError = undefined;
8
+ const errorHandler = (event) => {
9
+ if (errorTest.test(event.message)) {
10
+ event.stopImmediatePropagation();
11
+ event.stopPropagation();
12
+ event.preventDefault();
13
+ return false;
14
+ }
15
+ return undefined;
16
+ };
17
+ const onError = (event) => {
18
+ const message = typeof event === 'string' ? event : event.message;
19
+ // This is necessary to prevent the test runner from failing on errors, but challenging to reliably test.
20
+ /* istanbul ignore next */
21
+ if (errorTest.test(message)) {
22
+ if (event instanceof ErrorEvent) {
23
+ event.stopImmediatePropagation();
24
+ event.stopPropagation();
25
+ event.preventDefault();
26
+ }
27
+ return false;
28
+ }
29
+ return originalOnError?.call(window, event);
30
+ };
6
31
  /**
7
32
  * Service to create rxjs observables for changes to the content box dimensions of elements.
8
33
  */
9
34
  export class SkyResizeObserverService {
10
- #next = new Map();
11
- #resizeObserver = new ResizeObserver((entries) => {
12
- entries.forEach((entry) => this.#callback(entry));
13
- });
14
- #tracking = [];
35
+ #ngUnsubscribe = new Subject();
36
+ #resizeObserver = new ResizeObserver((entries) => this.#resizeSubject.next(entries));
37
+ #resizeSubject = new Subject();
38
+ #tracking = new Map();
15
39
  #window = inject(SkyAppWindowRef);
16
40
  #zone = inject(NgZone);
41
+ constructor() {
42
+ this.#expectWindowError();
43
+ // Because the resize observer is a native browser API, it does not shut down
44
+ // synchronously when the service is destroyed. Leave the error handling
45
+ // accommodation in place until the application is destroyed. This also works
46
+ // for the test runner.
47
+ inject(ApplicationRef).onDestroy(() => this.#resetWindowError());
48
+ }
17
49
  ngOnDestroy() {
18
- this.#next.forEach((value) => this.#window.nativeWindow.cancelAnimationFrame(value));
19
- this.#tracking.forEach((value) => {
20
- value.subject.complete();
21
- this.#resizeObserver.unobserve(value.element);
22
- });
50
+ this.#ngUnsubscribe.next();
51
+ this.#ngUnsubscribe.complete();
23
52
  this.#resizeObserver.disconnect();
24
53
  }
25
54
  /**
26
55
  * Create rxjs observable to get size changes for an element ref.
27
56
  */
28
57
  observe(element) {
29
- return this.#observeAndTrack(element).subjectObservable;
58
+ const checkTracking = this.#tracking.has(element.nativeElement);
59
+ if (!checkTracking) {
60
+ this.#tracking.set(element.nativeElement, new Observable((observer) => {
61
+ const subscription = this.#resizeSubject.subscribe(observer);
62
+ this.#resizeObserver?.observe(element.nativeElement);
63
+ return () => {
64
+ this.#resizeObserver?.unobserve(element.nativeElement);
65
+ subscription.unsubscribe();
66
+ this.#tracking.delete(element.nativeElement);
67
+ };
68
+ }).pipe(filter(Boolean), filter((entries) => entries.some((entry) => entry.target === element.nativeElement)), map((entries) => entries.find((entry) => entry.target === element.nativeElement)),
69
+ // Ignore subpixel changes.
70
+ distinctUntilChanged((a, b) => Math.round(a.contentRect.width) ===
71
+ Math.round(b.contentRect.width) &&
72
+ Math.round(a.contentRect.height) ===
73
+ Math.round(b.contentRect.height)),
74
+ // Emit the last value for late subscribers. Track references so it
75
+ // un-observes when all subscribers are gone.
76
+ shareReplay({ bufferSize: 1, refCount: true }),
77
+ // Only emit prior to an animation frame to prevent layout thrashing.
78
+ throttle(() => animationFrames().pipe(take(1)), {
79
+ leading: false,
80
+ trailing: true,
81
+ }), takeUntil(this.#ngUnsubscribe)));
82
+ }
83
+ return this.#tracking.get(element.nativeElement);
30
84
  }
31
- #observeAndTrack(element) {
32
- const checkTracking = this.#tracking.findIndex((value) => {
33
- return !value.subject.closed && value.element === element.nativeElement;
34
- });
35
- if (checkTracking === -1) {
36
- this.#resizeObserver.observe(element.nativeElement);
85
+ #expectWindowError() {
86
+ if (!errorLogRegistered) {
87
+ errorLogRegistered = true;
88
+ // ResizeObserver throws an error when it is disconnected while it is
89
+ // still observing an element. When an element is no longer observed, this
90
+ // is not a concern.
91
+ this.#zone.runOutsideAngular(() => this.#window.nativeWindow.addEventListener('error', errorHandler));
92
+ }
93
+ if (this.#window.nativeWindow.onerror !== onError) {
94
+ originalOnError = this.#window.nativeWindow.onerror;
95
+ this.#window.nativeWindow.onerror = onError;
37
96
  }
38
- const subject = new Subject();
39
- const subjectObservable = subject.pipe(finalize(() => {
40
- // Are there any other tracking entries still watching this element?
41
- const checkTracking = this.#tracking.findIndex((value) => {
42
- return (value.subject !== subject &&
43
- !value.subject.closed &&
44
- value.element === element.nativeElement);
45
- });
46
- if (checkTracking === -1) {
47
- this.#resizeObserver.unobserve(element.nativeElement);
48
- const deleteTracking = this.#tracking.findIndex((value) => value.subject === subject);
49
- if (deleteTracking > -1) {
50
- this.#tracking.splice(deleteTracking, 1);
51
- }
52
- }
53
- }));
54
- const tracking = {
55
- element: element.nativeElement,
56
- subject,
57
- subjectObservable,
58
- };
59
- this.#tracking.push(tracking);
60
- return tracking;
61
97
  }
62
- #callback(entry) {
63
- this.#tracking
64
- .filter((value) => !value.subject.closed)
65
- .forEach((value) => {
66
- /* istanbul ignore else */
67
- if (value.element === entry.target) {
68
- // Execute the callback within NgZone because Angular does not "monkey patch"
69
- // ResizeObserver like it does for other features in the DOM.
70
- if (this.#next.has(value.subject)) {
71
- this.#window.nativeWindow.cancelAnimationFrame(this.#next.get(value.subject));
72
- }
73
- this.#next.set(value.subject, this.#window.nativeWindow.requestAnimationFrame(() => {
74
- this.#zone.run(() => {
75
- value.subject.next(entry);
76
- });
77
- }));
78
- }
79
- });
98
+ #resetWindowError() {
99
+ this.#window.nativeWindow.removeEventListener('error', errorHandler);
100
+ if (originalOnError) {
101
+ this.#window.nativeWindow.onerror = originalOnError;
102
+ originalOnError = undefined;
103
+ }
104
+ errorLogRegistered = false;
80
105
  }
81
106
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SkyResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
82
107
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SkyResizeObserverService, providedIn: 'root' }); }
@@ -86,5 +111,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
86
111
  args: [{
87
112
  providedIn: 'root',
88
113
  }]
89
- }] });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEVBQ1YsTUFBTSxFQUVOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBUXZEOztHQUVHO0FBSUgsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQXdDLENBQUM7SUFDeEQsZUFBZSxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDL0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0gsU0FBUyxHQUE2QixFQUFFLENBQUM7SUFDekMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWhCLFdBQVc7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FDdEQsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FB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QVksQ0FBQyxvQkFBb0IsQ0FDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUM5QixDQUFDO2lCQUNIO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUNaLEtBQUssQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUF1QixDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtvQkFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNsQixLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQTlGVSx3QkFBd0I7a0hBQXhCLHdCQUF3QixjQUZ2QixNQUFNOzsyRkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lBcHBXaW5kb3dSZWYgfSBmcm9tICcuLi93aW5kb3cvd2luZG93LXJlZic7XG5cbnR5cGUgUmVzaXplT2JzZXJ2ZXJUcmFja2luZyA9IHtcbiAgZWxlbWVudDogRWxlbWVudDtcbiAgc3ViamVjdDogU3ViamVjdDxSZXNpemVPYnNlcnZlckVudHJ5PjtcbiAgc3ViamVjdE9ic2VydmFibGU6IE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeT47XG59O1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gY3JlYXRlIHJ4anMgb2JzZXJ2YWJsZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGNvbnRlbnQgYm94IGRpbWVuc2lvbnMgb2YgZWxlbWVudHMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lSZXNpemVPYnNlcnZlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAjbmV4dCA9IG5ldyBNYXA8U3ViamVjdDxSZXNpemVPYnNlcnZlckVudHJ5PiwgbnVtYmVyPigpO1xuICAjcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB0aGlzLiNjYWxsYmFjayhlbnRyeSkpO1xuICB9KTtcbiAgI3RyYWNraW5nOiBSZXNpemVPYnNlcnZlclRyYWNraW5nW10gPSBbXTtcbiAgI3dpbmRvdyA9IGluamVjdChTa3lBcHBXaW5kb3dSZWYpO1xuICAjem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZXh0LmZvckVhY2goKHZhbHVlKSA9PlxuICAgICAgdGhpcy4jd2luZG93Lm5hdGl2ZVdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh2YWx1ZSlcbiAgICApO1xuICAgIHRoaXMuI3RyYWNraW5nLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICB2YWx1ZS5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLiNyZXNpemVPYnNlcnZlci51bm9ic2VydmUodmFsdWUuZWxlbWVudCk7XG4gICAgfSk7XG4gICAgdGhpcy4jcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSByeGpzIG9ic2VydmFibGUgdG8gZ2V0IHNpemUgY2hhbmdlcyBmb3IgYW4gZWxlbWVudCByZWYuXG4gICAqL1xuICBwdWJsaWMgb2JzZXJ2ZShlbGVtZW50OiBFbGVtZW50UmVmKTogT2JzZXJ2YWJsZTxSZXNpemVPYnNlcnZlckVudHJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuI29ic2VydmVBbmRUcmFjayhlbGVtZW50KS5zdWJqZWN0T2JzZXJ2YWJsZTtcbiAgfVxuXG4gICNvYnNlcnZlQW5kVHJhY2soZWxlbWVudDogRWxlbWVudFJlZik6IFJlc2l6ZU9ic2VydmVyVHJhY2tpbmcge1xuICAgIGNvbnN0IGNoZWNrVHJhY2tpbmcgPSB0aGlzLiN0cmFja2luZy5maW5kSW5kZXgoKHZhbHVlKSA9PiB7XG4gICAgICByZXR1cm4gIXZhbHVlLnN1YmplY3QuY2xvc2VkICYmIHZhbHVlLmVsZW1lbnQgPT09IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB9KTtcblxuICAgIGlmIChjaGVja1RyYWNraW5nID09PSAtMSkge1xuICAgICAgdGhpcy4jcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxSZXNpemVPYnNlcnZlckVudHJ5PigpO1xuICAgIGNvbnN0IHN1YmplY3RPYnNlcnZhYmxlID0gc3ViamVjdC5waXBlKFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAvLyBBcmUgdGhlcmUgYW55IG90aGVyIHRyYWNraW5nIGVudHJpZXMgc3RpbGwgd2F0Y2hpbmcgdGhpcyBlbGVtZW50P1xuICAgICAgICBjb25zdCBjaGVja1RyYWNraW5nID0gdGhpcy4jdHJhY2tpbmcuZmluZEluZGV4KCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB2YWx1ZS5zdWJqZWN0ICE9PSBzdWJqZWN0ICYmXG4gICAgICAgICAgICAhdmFsdWUuc3ViamVjdC5jbG9zZWQgJiZcbiAgICAgICAgICAgIHZhbHVlLmVsZW1lbnQgPT09IGVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjaGVja1RyYWNraW5nID09PSAtMSkge1xuICAgICAgICAgIHRoaXMuI3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZVRyYWNraW5nID0gdGhpcy4jdHJhY2tpbmcuZmluZEluZGV4KFxuICAgICAgICAgICAgKHZhbHVlKSA9PiB2YWx1ZS5zdWJqZWN0ID09PSBzdWJqZWN0XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZGVsZXRlVHJhY2tpbmcgPiAtMSkge1xuICAgICAgICAgICAgdGhpcy4jdHJhY2tpbmcuc3BsaWNlKGRlbGV0ZVRyYWNraW5nLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYWNraW5nID0ge1xuICAgICAgZWxlbWVudDogZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgc3ViamVjdCxcbiAgICAgIHN1YmplY3RPYnNlcnZhYmxlLFxuICAgIH07XG5cbiAgICB0aGlzLiN0cmFja2luZy5wdXNoKHRyYWNraW5nKTtcblxuICAgIHJldHVybiB0cmFja2luZztcbiAgfVxuXG4gICNjYWxsYmFjayhlbnRyeTogUmVzaXplT2JzZXJ2ZXJFbnRyeSk6IHZvaWQge1xuICAgIHRoaXMuI3RyYWNraW5nXG4gICAgICAuZmlsdGVyKCh2YWx1ZSkgPT4gIXZhbHVlLnN1YmplY3QuY2xvc2VkKVxuICAgICAgLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh2YWx1ZS5lbGVtZW50ID09PSBlbnRyeS50YXJnZXQpIHtcbiAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBjYWxsYmFjayB3aXRoaW4gTmdab25lIGJlY2F1c2UgQW5ndWxhciBkb2VzIG5vdCBcIm1vbmtleSBwYXRjaFwiXG4gICAgICAgICAgLy8gUmVzaXplT2JzZXJ2ZXIgbGlrZSBpdCBkb2VzIGZvciBvdGhlciBmZWF0dXJlcyBpbiB0aGUgRE9NLlxuICAgICAgICAgIGlmICh0aGlzLiNuZXh0Lmhhcyh2YWx1ZS5zdWJqZWN0KSkge1xuICAgICAgICAgICAgdGhpcy4jd2luZG93Lm5hdGl2ZVdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShcbiAgICAgICAgICAgICAgdGhpcy4jbmV4dC5nZXQodmFsdWUuc3ViamVjdClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuI25leHQuc2V0KFxuICAgICAgICAgICAgdmFsdWUuc3ViamVjdCxcbiAgICAgICAgICAgICh0aGlzLiN3aW5kb3cubmF0aXZlV2luZG93IGFzIFdpbmRvdykucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy4jem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlLnN1YmplY3QubmV4dChlbnRyeSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuIl19
114
+ }], ctorParameters: function () { return []; } });
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvY29yZS9zcmMvbGliL21vZHVsZXMvcmVzaXplLW9ic2VydmVyL3Jlc2l6ZS1vYnNlcnZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBRWQsVUFBVSxFQUNWLE1BQU0sRUFFTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sR0FBRyxFQUNILFdBQVcsRUFDWCxJQUFJLEVBQ0osU0FBUyxFQUNULFFBQVEsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFdkQsTUFBTSxTQUFTLEdBQ2IsK0RBQStELENBQUM7QUFDbEUsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDL0IsSUFBSSxlQUFlLEdBRUgsU0FBUyxDQUFDO0FBRTFCLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBdUIsRUFBRTtJQUM5RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ2pDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBMEIsRUFBdUIsRUFBRTtJQUNsRSxNQUFNLE9BQU8sR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUNsRSx5R0FBeUc7SUFDekcsMEJBQTBCO0lBQzFCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMzQixJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDL0IsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDakMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxPQUFPLGVBQWUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBSUgsTUFBTSxPQUFPLHdCQUF3QjtJQUMxQixjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNyQyxlQUFlLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDbEMsQ0FBQztJQUNPLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBeUIsQ0FBQztJQUN0RCxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQTRDLENBQUM7SUFDaEUsT0FBTyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWhDO1FBQ0UsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsNkVBQTZFO1FBQzdFLHdFQUF3RTtRQUN4RSw2RUFBNkU7UUFDN0UsdUJBQXVCO1FBQ3ZCLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPLENBQUMsT0FBbUI7UUFDaEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ2hCLE9BQU8sQ0FBQyxhQUFhLEVBQ3JCLElBQUksVUFBVSxDQUF3QixDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNqRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3ZELFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ0wsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUNmLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUNoRSxFQUNELEdBQUcsQ0FDRCxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsT0FBTyxDQUFDLElBQUksQ0FDVixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsYUFBYSxDQUMzQixDQUMzQjtZQUNELDJCQUEyQjtZQUMzQixvQkFBb0IsQ0FDbEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDUCxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO29CQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQ3JDO1lBQ0QsbUVBQW1FO1lBQ25FLDZDQUE2QztZQUM3QyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxxRUFBcUU7WUFDckUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDOUMsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FDL0IsQ0FDRixDQUFDO1NBQ0g7UUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUN2QixPQUFPLENBQUMsYUFBYSxDQUNhLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdkIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQzFCLHFFQUFxRTtZQUNyRSwwRUFBMEU7WUFDMUUsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FDbEUsQ0FBQztTQUNIO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ2pELGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUM3QztJQUNILENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDckUsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQztZQUNwRCxlQUFlLEdBQUcsU0FBUyxDQUFDO1NBQzdCO1FBQ0Qsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7OEdBdEdVLHdCQUF3QjtrSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzJGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIGFuaW1hdGlvbkZyYW1lcyxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0aHJvdHRsZSxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNreUFwcFdpbmRvd1JlZiB9IGZyb20gJy4uL3dpbmRvdy93aW5kb3ctcmVmJztcblxuY29uc3QgZXJyb3JUZXN0ID1cbiAgL1Jlc2l6ZU9ic2VydmVyIGxvb3AgY29tcGxldGVkIHdpdGggdW5kZWxpdmVyZWQgbm90aWZpY2F0aW9ucy9pO1xubGV0IGVycm9yTG9nUmVnaXN0ZXJlZCA9IGZhbHNlO1xubGV0IG9yaWdpbmFsT25FcnJvcjpcbiAgfCAoKGV2ZW50OiBzdHJpbmcgfCBFdmVudCkgPT4gYm9vbGVhbiB8IHVuZGVmaW5lZClcbiAgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbmNvbnN0IGVycm9ySGFuZGxlciA9IChldmVudDogRXJyb3JFdmVudCk6IGJvb2xlYW4gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZXJyb3JUZXN0LnRlc3QoZXZlbnQubWVzc2FnZSkpIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3Qgb25FcnJvciA9IChldmVudDogc3RyaW5nIHwgRXJyb3JFdmVudCk6IGJvb2xlYW4gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJyA/IGV2ZW50IDogZXZlbnQubWVzc2FnZTtcbiAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCB0aGUgdGVzdCBydW5uZXIgZnJvbSBmYWlsaW5nIG9uIGVycm9ycywgYnV0IGNoYWxsZW5naW5nIHRvIHJlbGlhYmx5IHRlc3QuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChlcnJvclRlc3QudGVzdChtZXNzYWdlKSkge1xuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEVycm9yRXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG9yaWdpbmFsT25FcnJvcj8uY2FsbCh3aW5kb3csIGV2ZW50KTtcbn07XG5cbi8qKlxuICogU2VydmljZSB0byBjcmVhdGUgcnhqcyBvYnNlcnZhYmxlcyBmb3IgY2hhbmdlcyB0byB0aGUgY29udGVudCBib3ggZGltZW5zaW9ucyBvZiBlbGVtZW50cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreVJlc2l6ZU9ic2VydmVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5ICNuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgI3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PlxuICAgIHRoaXMuI3Jlc2l6ZVN1YmplY3QubmV4dChlbnRyaWVzKVxuICApO1xuICByZWFkb25seSAjcmVzaXplU3ViamVjdCA9IG5ldyBTdWJqZWN0PFJlc2l6ZU9ic2VydmVyRW50cnlbXT4oKTtcbiAgcmVhZG9ubHkgI3RyYWNraW5nID0gbmV3IE1hcDxFbGVtZW50LCBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnk+PigpO1xuICByZWFkb25seSAjd2luZG93ID0gaW5qZWN0KFNreUFwcFdpbmRvd1JlZik7XG4gIHJlYWRvbmx5ICN6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy4jZXhwZWN0V2luZG93RXJyb3IoKTtcbiAgICAvLyBCZWNhdXNlIHRoZSByZXNpemUgb2JzZXJ2ZXIgaXMgYSBuYXRpdmUgYnJvd3NlciBBUEksIGl0IGRvZXMgbm90IHNodXQgZG93blxuICAgIC8vIHN5bmNocm9ub3VzbHkgd2hlbiB0aGUgc2VydmljZSBpcyBkZXN0cm95ZWQuIExlYXZlIHRoZSBlcnJvciBoYW5kbGluZ1xuICAgIC8vIGFjY29tbW9kYXRpb24gaW4gcGxhY2UgdW50aWwgdGhlIGFwcGxpY2F0aW9uIGlzIGRlc3Ryb3llZC4gVGhpcyBhbHNvIHdvcmtzXG4gICAgLy8gZm9yIHRoZSB0ZXN0IHJ1bm5lci5cbiAgICBpbmplY3QoQXBwbGljYXRpb25SZWYpLm9uRGVzdHJveSgoKSA9PiB0aGlzLiNyZXNldFdpbmRvd0Vycm9yKCkpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLiNyZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHJ4anMgb2JzZXJ2YWJsZSB0byBnZXQgc2l6ZSBjaGFuZ2VzIGZvciBhbiBlbGVtZW50IHJlZi5cbiAgICovXG4gIHB1YmxpYyBvYnNlcnZlKGVsZW1lbnQ6IEVsZW1lbnRSZWYpOiBPYnNlcnZhYmxlPFJlc2l6ZU9ic2VydmVyRW50cnk+IHtcbiAgICBjb25zdCBjaGVja1RyYWNraW5nID0gdGhpcy4jdHJhY2tpbmcuaGFzKGVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG5cbiAgICBpZiAoIWNoZWNrVHJhY2tpbmcpIHtcbiAgICAgIHRoaXMuI3RyYWNraW5nLnNldChcbiAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICBuZXcgT2JzZXJ2YWJsZTxSZXNpemVPYnNlcnZlckVudHJ5W10+KChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuI3Jlc2l6ZVN1YmplY3Quc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgICAgICB0aGlzLiNyZXNpemVPYnNlcnZlcj8ub2JzZXJ2ZShlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNyZXNpemVPYnNlcnZlcj8udW5vYnNlcnZlKGVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuI3RyYWNraW5nLmRlbGV0ZShlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICAgIGZpbHRlcigoZW50cmllcykgPT5cbiAgICAgICAgICAgIGVudHJpZXMuc29tZSgoZW50cnkpID0+IGVudHJ5LnRhcmdldCA9PT0gZWxlbWVudC5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICksXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKGVudHJpZXMpID0+XG4gICAgICAgICAgICAgIGVudHJpZXMuZmluZChcbiAgICAgICAgICAgICAgICAoZW50cnkpID0+IGVudHJ5LnRhcmdldCA9PT0gZWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICkgYXMgUmVzaXplT2JzZXJ2ZXJFbnRyeVxuICAgICAgICAgICksXG4gICAgICAgICAgLy8gSWdub3JlIHN1YnBpeGVsIGNoYW5nZXMuXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICAgICAgTWF0aC5yb3VuZChhLmNvbnRlbnRSZWN0LndpZHRoKSA9PT1cbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGIuY29udGVudFJlY3Qud2lkdGgpICYmXG4gICAgICAgICAgICAgIE1hdGgucm91bmQoYS5jb250ZW50UmVjdC5oZWlnaHQpID09PVxuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoYi5jb250ZW50UmVjdC5oZWlnaHQpXG4gICAgICAgICAgKSxcbiAgICAgICAgICAvLyBFbWl0IHRoZSBsYXN0IHZhbHVlIGZvciBsYXRlIHN1YnNjcmliZXJzLiBUcmFjayByZWZlcmVuY2VzIHNvIGl0XG4gICAgICAgICAgLy8gdW4tb2JzZXJ2ZXMgd2hlbiBhbGwgc3Vic2NyaWJlcnMgYXJlIGdvbmUuXG4gICAgICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICAgICAgICAvLyBPbmx5IGVtaXQgcHJpb3IgdG8gYW4gYW5pbWF0aW9uIGZyYW1lIHRvIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICAgICAgICB0aHJvdHRsZSgoKSA9PiBhbmltYXRpb25GcmFtZXMoKS5waXBlKHRha2UoMSkpLCB7XG4gICAgICAgICAgICBsZWFkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHRyYWlsaW5nOiB0cnVlLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiN0cmFja2luZy5nZXQoXG4gICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnRcbiAgICApIGFzIE9ic2VydmFibGU8UmVzaXplT2JzZXJ2ZXJFbnRyeT47XG4gIH1cblxuICAjZXhwZWN0V2luZG93RXJyb3IoKTogdm9pZCB7XG4gICAgaWYgKCFlcnJvckxvZ1JlZ2lzdGVyZWQpIHtcbiAgICAgIGVycm9yTG9nUmVnaXN0ZXJlZCA9IHRydWU7XG4gICAgICAvLyBSZXNpemVPYnNlcnZlciB0aHJvd3MgYW4gZXJyb3Igd2hlbiBpdCBpcyBkaXNjb25uZWN0ZWQgd2hpbGUgaXQgaXNcbiAgICAgIC8vIHN0aWxsIG9ic2VydmluZyBhbiBlbGVtZW50LiBXaGVuIGFuIGVsZW1lbnQgaXMgbm8gbG9uZ2VyIG9ic2VydmVkLCB0aGlzXG4gICAgICAvLyBpcyBub3QgYSBjb25jZXJuLlxuICAgICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICB0aGlzLiN3aW5kb3cubmF0aXZlV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JIYW5kbGVyKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuI3dpbmRvdy5uYXRpdmVXaW5kb3cub25lcnJvciAhPT0gb25FcnJvcikge1xuICAgICAgb3JpZ2luYWxPbkVycm9yID0gdGhpcy4jd2luZG93Lm5hdGl2ZVdpbmRvdy5vbmVycm9yO1xuICAgICAgdGhpcy4jd2luZG93Lm5hdGl2ZVdpbmRvdy5vbmVycm9yID0gb25FcnJvcjtcbiAgICB9XG4gIH1cblxuICAjcmVzZXRXaW5kb3dFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLiN3aW5kb3cubmF0aXZlV2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JIYW5kbGVyKTtcbiAgICBpZiAob3JpZ2luYWxPbkVycm9yKSB7XG4gICAgICB0aGlzLiN3aW5kb3cubmF0aXZlV2luZG93Lm9uZXJyb3IgPSBvcmlnaW5hbE9uRXJyb3I7XG4gICAgICBvcmlnaW5hbE9uRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVycm9yTG9nUmVnaXN0ZXJlZCA9IGZhbHNlO1xuICB9XG59XG4iXX0=
@@ -15,5 +15,5 @@ export class Version {
15
15
  /**
16
16
  * Represents the version of @skyux/core.
17
17
  */
18
- export const VERSION = new Version('9.13.0');
18
+ export const VERSION = new Version('9.13.1');
19
19
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdDQUF3QztBQUN4QyxtRkFBbUY7QUFFbkY7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLE9BQU87SUFLbEIsWUFBNEIsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7UUFDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVGFrZW4gZnJvbSBBbmd1bGFyJ3MgdmVyc2lvbi50cyBmaWxlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvMTYuMi54L3BhY2thZ2VzL2NvcmUvc3JjL3ZlcnNpb24udHNcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB2ZXJzaW9uIG9mIGEgcGFja2FnZS5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgVmVyc2lvbiB7XG4gIHB1YmxpYyByZWFkb25seSBtYWpvcjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbWlub3I6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhdGNoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGZ1bGw6IHN0cmluZykge1xuICAgIHRoaXMubWFqb3IgPSBmdWxsLnNwbGl0KCcuJylbMF07XG4gICAgdGhpcy5taW5vciA9IGZ1bGwuc3BsaXQoJy4nKVsxXTtcbiAgICB0aGlzLnBhdGNoID0gZnVsbC5zcGxpdCgnLicpLnNsaWNlKDIpLmpvaW4oJy4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHZlcnNpb24gb2YgQHNreXV4L2NvcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gbmV3IFZlcnNpb24oJzAuMC4wLVBMQUNFSE9MREVSJyk7XG4iXX0=
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
2
2
  import { NgModule, Injectable, inject, RendererFactory2, NgZone, EventEmitter, Directive, Input, Output, EnvironmentInjector, createEnvironmentInjector, createComponent, ChangeDetectorRef, ElementRef, ViewContainerRef, Component, ChangeDetectionStrategy, ViewChild, InjectionToken, Optional, Inject, Pipe, HostBinding, ApplicationRef, Renderer2 } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { DOCUMENT, CommonModule } from '@angular/common';
5
- import { Subject, Subscription, ReplaySubject, fromEvent, BehaviorSubject, Observable, of, concat, animationFrameScheduler } from 'rxjs';
6
- import { takeUntil, debounceTime, finalize, switchMap, map } from 'rxjs/operators';
5
+ import { Subject, Subscription, ReplaySubject, fromEvent, BehaviorSubject, Observable, filter, map, distinctUntilChanged, shareReplay, throttle, animationFrames, take, takeUntil as takeUntil$1, of, concat, animationFrameScheduler } from 'rxjs';
6
+ import { takeUntil, debounceTime, switchMap, map as map$1 } from 'rxjs/operators';
7
7
  import { ViewportRuler } from '@angular/cdk/overlay';
8
8
  import * as i1 from '@skyux/i18n';
9
9
  import { SkyLibResourcesService, getLibStringForLocale, SkyI18nModule, SKY_LIB_RESOURCES_PROVIDERS, SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';
@@ -2990,80 +2990,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
2990
2990
  }]
2991
2991
  }] });
2992
2992
 
2993
+ const errorTest = /ResizeObserver loop completed with undelivered notifications/i;
2994
+ let errorLogRegistered = false;
2995
+ let originalOnError = undefined;
2996
+ const errorHandler = (event) => {
2997
+ if (errorTest.test(event.message)) {
2998
+ event.stopImmediatePropagation();
2999
+ event.stopPropagation();
3000
+ event.preventDefault();
3001
+ return false;
3002
+ }
3003
+ return undefined;
3004
+ };
3005
+ const onError = (event) => {
3006
+ const message = typeof event === 'string' ? event : event.message;
3007
+ // This is necessary to prevent the test runner from failing on errors, but challenging to reliably test.
3008
+ /* istanbul ignore next */
3009
+ if (errorTest.test(message)) {
3010
+ if (event instanceof ErrorEvent) {
3011
+ event.stopImmediatePropagation();
3012
+ event.stopPropagation();
3013
+ event.preventDefault();
3014
+ }
3015
+ return false;
3016
+ }
3017
+ return originalOnError?.call(window, event);
3018
+ };
2993
3019
  /**
2994
3020
  * Service to create rxjs observables for changes to the content box dimensions of elements.
2995
3021
  */
2996
3022
  class SkyResizeObserverService {
2997
- #next = new Map();
2998
- #resizeObserver = new ResizeObserver((entries) => {
2999
- entries.forEach((entry) => this.#callback(entry));
3000
- });
3001
- #tracking = [];
3023
+ #ngUnsubscribe = new Subject();
3024
+ #resizeObserver = new ResizeObserver((entries) => this.#resizeSubject.next(entries));
3025
+ #resizeSubject = new Subject();
3026
+ #tracking = new Map();
3002
3027
  #window = inject(SkyAppWindowRef);
3003
3028
  #zone = inject(NgZone);
3029
+ constructor() {
3030
+ this.#expectWindowError();
3031
+ // Because the resize observer is a native browser API, it does not shut down
3032
+ // synchronously when the service is destroyed. Leave the error handling
3033
+ // accommodation in place until the application is destroyed. This also works
3034
+ // for the test runner.
3035
+ inject(ApplicationRef).onDestroy(() => this.#resetWindowError());
3036
+ }
3004
3037
  ngOnDestroy() {
3005
- this.#next.forEach((value) => this.#window.nativeWindow.cancelAnimationFrame(value));
3006
- this.#tracking.forEach((value) => {
3007
- value.subject.complete();
3008
- this.#resizeObserver.unobserve(value.element);
3009
- });
3038
+ this.#ngUnsubscribe.next();
3039
+ this.#ngUnsubscribe.complete();
3010
3040
  this.#resizeObserver.disconnect();
3011
3041
  }
3012
3042
  /**
3013
3043
  * Create rxjs observable to get size changes for an element ref.
3014
3044
  */
3015
3045
  observe(element) {
3016
- return this.#observeAndTrack(element).subjectObservable;
3017
- }
3018
- #observeAndTrack(element) {
3019
- const checkTracking = this.#tracking.findIndex((value) => {
3020
- return !value.subject.closed && value.element === element.nativeElement;
3021
- });
3022
- if (checkTracking === -1) {
3023
- this.#resizeObserver.observe(element.nativeElement);
3024
- }
3025
- const subject = new Subject();
3026
- const subjectObservable = subject.pipe(finalize(() => {
3027
- // Are there any other tracking entries still watching this element?
3028
- const checkTracking = this.#tracking.findIndex((value) => {
3029
- return (value.subject !== subject &&
3030
- !value.subject.closed &&
3031
- value.element === element.nativeElement);
3032
- });
3033
- if (checkTracking === -1) {
3034
- this.#resizeObserver.unobserve(element.nativeElement);
3035
- const deleteTracking = this.#tracking.findIndex((value) => value.subject === subject);
3036
- if (deleteTracking > -1) {
3037
- this.#tracking.splice(deleteTracking, 1);
3038
- }
3039
- }
3040
- }));
3041
- const tracking = {
3042
- element: element.nativeElement,
3043
- subject,
3044
- subjectObservable,
3045
- };
3046
- this.#tracking.push(tracking);
3047
- return tracking;
3048
- }
3049
- #callback(entry) {
3050
- this.#tracking
3051
- .filter((value) => !value.subject.closed)
3052
- .forEach((value) => {
3053
- /* istanbul ignore else */
3054
- if (value.element === entry.target) {
3055
- // Execute the callback within NgZone because Angular does not "monkey patch"
3056
- // ResizeObserver like it does for other features in the DOM.
3057
- if (this.#next.has(value.subject)) {
3058
- this.#window.nativeWindow.cancelAnimationFrame(this.#next.get(value.subject));
3059
- }
3060
- this.#next.set(value.subject, this.#window.nativeWindow.requestAnimationFrame(() => {
3061
- this.#zone.run(() => {
3062
- value.subject.next(entry);
3063
- });
3064
- }));
3065
- }
3066
- });
3046
+ const checkTracking = this.#tracking.has(element.nativeElement);
3047
+ if (!checkTracking) {
3048
+ this.#tracking.set(element.nativeElement, new Observable((observer) => {
3049
+ const subscription = this.#resizeSubject.subscribe(observer);
3050
+ this.#resizeObserver?.observe(element.nativeElement);
3051
+ return () => {
3052
+ this.#resizeObserver?.unobserve(element.nativeElement);
3053
+ subscription.unsubscribe();
3054
+ this.#tracking.delete(element.nativeElement);
3055
+ };
3056
+ }).pipe(filter(Boolean), filter((entries) => entries.some((entry) => entry.target === element.nativeElement)), map((entries) => entries.find((entry) => entry.target === element.nativeElement)),
3057
+ // Ignore subpixel changes.
3058
+ distinctUntilChanged((a, b) => Math.round(a.contentRect.width) ===
3059
+ Math.round(b.contentRect.width) &&
3060
+ Math.round(a.contentRect.height) ===
3061
+ Math.round(b.contentRect.height)),
3062
+ // Emit the last value for late subscribers. Track references so it
3063
+ // un-observes when all subscribers are gone.
3064
+ shareReplay({ bufferSize: 1, refCount: true }),
3065
+ // Only emit prior to an animation frame to prevent layout thrashing.
3066
+ throttle(() => animationFrames().pipe(take(1)), {
3067
+ leading: false,
3068
+ trailing: true,
3069
+ }), takeUntil$1(this.#ngUnsubscribe)));
3070
+ }
3071
+ return this.#tracking.get(element.nativeElement);
3072
+ }
3073
+ #expectWindowError() {
3074
+ if (!errorLogRegistered) {
3075
+ errorLogRegistered = true;
3076
+ // ResizeObserver throws an error when it is disconnected while it is
3077
+ // still observing an element. When an element is no longer observed, this
3078
+ // is not a concern.
3079
+ this.#zone.runOutsideAngular(() => this.#window.nativeWindow.addEventListener('error', errorHandler));
3080
+ }
3081
+ if (this.#window.nativeWindow.onerror !== onError) {
3082
+ originalOnError = this.#window.nativeWindow.onerror;
3083
+ this.#window.nativeWindow.onerror = onError;
3084
+ }
3085
+ }
3086
+ #resetWindowError() {
3087
+ this.#window.nativeWindow.removeEventListener('error', errorHandler);
3088
+ if (originalOnError) {
3089
+ this.#window.nativeWindow.onerror = originalOnError;
3090
+ originalOnError = undefined;
3091
+ }
3092
+ errorLogRegistered = false;
3067
3093
  }
3068
3094
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SkyResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3069
3095
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: SkyResizeObserverService, providedIn: 'root' }); }
@@ -3073,7 +3099,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
3073
3099
  args: [{
3074
3100
  providedIn: 'root',
3075
3101
  }]
3076
- }] });
3102
+ }], ctorParameters: function () { return []; } });
3077
3103
 
3078
3104
  const DEFAULT_BREAKPOINT = SkyMediaBreakpoints.md;
3079
3105
  /**
@@ -3409,7 +3435,7 @@ class SkyScrollableHostService {
3409
3435
  return concat([
3410
3436
  of(undefined),
3411
3437
  this.#resizeObserverSvc.observe({ nativeElement: scrollableHost }),
3412
- ]).pipe(debounceTime(0, animationFrameScheduler), map(() => {
3438
+ ]).pipe(debounceTime(0, animationFrameScheduler), map$1(() => {
3413
3439
  const viewportSize = this.#getViewportSize();
3414
3440
  const { top, left, width, height } = scrollableHost.getBoundingClientRect();
3415
3441
  const right = Math.max(viewportSize.width - left - width, 0);
@@ -4087,7 +4113,7 @@ class Version {
4087
4113
  /**
4088
4114
  * Represents the version of @skyux/core.
4089
4115
  */
4090
- const VERSION = new Version('9.13.0');
4116
+ const VERSION = new Version('9.13.1');
4091
4117
 
4092
4118
  /**
4093
4119
  * Generated bundle index. Do not edit.