@skyux/core 5.1.3 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,33 +1,105 @@
1
1
  import { Injectable } from "@angular/core";
2
- import { BehaviorSubject } from "rxjs";
3
- import { take } from "rxjs/operators";
2
+ import { fromEvent, Observable, Subject } from "rxjs";
3
+ import { takeUntil } from "rxjs/operators";
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "../mutation/mutation-observer-service";
6
6
  import * as i2 from "../window/window-ref";
7
+ function notifySubscribers(subscribers, item) {
8
+ for (const subscriber of subscribers) {
9
+ subscriber.next(item);
10
+ }
11
+ }
7
12
  export class SkyScrollableHostService {
8
13
  constructor(mutationObserverSvc, windowRef) {
9
14
  this.mutationObserverSvc = mutationObserverSvc;
10
15
  this.windowRef = windowRef;
11
16
  }
12
- getScrollabeHost(elementRef) {
17
+ /**
18
+ * Returns the given element's current scrollable host
19
+ * @param elementRef The element whose scrollable host is being requested
20
+ * @returns The current scrollable host
21
+ */
22
+ getScrollableHost(elementRef) {
13
23
  return this.findScrollableHost(elementRef.nativeElement);
14
24
  }
15
- watchScrollableHost(elementRef, completionObservable) {
16
- let scrollableHost = this.findScrollableHost(elementRef.nativeElement);
17
- let behaviorSubject = new BehaviorSubject(scrollableHost);
18
- const mutationObserver = this.mutationObserverSvc.create(() => {
19
- let newScrollableHost = this.findScrollableHost(elementRef.nativeElement);
20
- if (newScrollableHost !== scrollableHost) {
21
- scrollableHost = newScrollableHost;
25
+ /**
26
+ * Returns an observable which emits the given element's current scrollable host
27
+ * @param elementRef The element whose scrollable host is being requested
28
+ * @param completionObservable An observable which alerts the internal observers that they should complete
29
+ * @returns An observable which emits the current scrollable host
30
+ * @internal
31
+ */
32
+ watchScrollableHost(elementRef) {
33
+ let subscribers = [];
34
+ let mutationObserver;
35
+ return new Observable((subscriber) => {
36
+ subscribers.push(subscriber);
37
+ let scrollableHost = this.findScrollableHost(elementRef.nativeElement);
38
+ if (subscribers.length === 1) {
39
+ mutationObserver = this.mutationObserverSvc.create(() => {
40
+ let newScrollableHost = this.findScrollableHost(elementRef.nativeElement);
41
+ if (newScrollableHost !== scrollableHost) {
42
+ scrollableHost = newScrollableHost;
43
+ this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
44
+ notifySubscribers(subscribers, scrollableHost);
45
+ }
46
+ });
22
47
  this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
23
- behaviorSubject.next(scrollableHost);
24
48
  }
49
+ subscriber.next(scrollableHost);
50
+ subscriber.add(() => {
51
+ const subIndex = subscribers.indexOf(subscriber);
52
+ /* sanity check */
53
+ /* istanbul ignore else */
54
+ if (subIndex >= 0) {
55
+ subscribers.splice(subIndex, 1);
56
+ }
57
+ if (subscribers.length === 0) {
58
+ mutationObserver.disconnect();
59
+ }
60
+ });
25
61
  });
26
- this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
27
- completionObservable.pipe(take(1)).subscribe(() => {
28
- mutationObserver.disconnect();
62
+ }
63
+ /**
64
+ * Returns an observable which emits whenever the element's scrollable host emits a scroll event. The observable will always emit the scroll events from the elements current scrollable host and will update based on any scrollable host changes. The observable will also emit once whenever the scrollable host changes.
65
+ * @param elementRef The element whose scrollable host scroll events are being requested
66
+ * @param completionObservable An observable which alerts the internal observers that they should complete
67
+ * @returns An observable which emits the scroll events from the given element's scrollable host
68
+ */
69
+ watchScrollableHostScrollEvents(elementRef) {
70
+ let subscribers = [];
71
+ let newScrollableHostObservable = new Subject();
72
+ let scrollableHostSubscription;
73
+ let scrollEventSubscription;
74
+ return new Observable((subscriber) => {
75
+ subscribers.push(subscriber);
76
+ if (subscribers.length === 1) {
77
+ scrollableHostSubscription = this.watchScrollableHost(elementRef)
78
+ .subscribe((scrollableHost) => {
79
+ newScrollableHostObservable.next();
80
+ newScrollableHostObservable.complete();
81
+ newScrollableHostObservable = new Subject();
82
+ scrollEventSubscription = fromEvent(scrollableHost, 'scroll')
83
+ .pipe(takeUntil(newScrollableHostObservable))
84
+ .subscribe(() => {
85
+ notifySubscribers(subscribers);
86
+ });
87
+ });
88
+ }
89
+ subscriber.add(() => {
90
+ const subIndex = subscribers.indexOf(subscriber);
91
+ /* sanity check */
92
+ /* istanbul ignore else */
93
+ if (subIndex >= 0) {
94
+ subscribers.splice(subIndex, 1);
95
+ }
96
+ if (subscribers.length === 0) {
97
+ scrollableHostSubscription.unsubscribe();
98
+ scrollEventSubscription.unsubscribe();
99
+ newScrollableHostObservable.complete();
100
+ }
101
+ });
29
102
  });
30
- return behaviorSubject;
31
103
  }
32
104
  findScrollableHost(element) {
33
105
  const regex = /(auto|scroll)/;
@@ -80,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
80
152
  providedIn: 'root'
81
153
  }]
82
154
  }], ctorParameters: function () { return [{ type: i1.MutationObserverService }, { type: i2.SkyAppWindowRef }]; } });
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS1ob3N0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9tb2R1bGVzL3Njcm9sbGFibGUtaG9zdC9zY3JvbGxhYmxlLWhvc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBT3RDLE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsWUFDVSxtQkFBNEMsRUFDNUMsU0FBMEI7UUFEMUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF5QjtRQUM1QyxjQUFTLEdBQVQsU0FBUyxDQUFpQjtJQUNoQyxDQUFDO0lBRUUsZ0JBQWdCLENBQUMsVUFBc0I7UUFDNUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxVQUFzQixFQUFFLG9CQUFzQztRQUN2RixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTFELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDNUQsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRTFFLElBQUksaUJBQWlCLEtBQUssY0FBYyxFQUFFO2dCQUN4QyxjQUFjLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ25DLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDdkUsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN0QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLCtCQUErQixDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXZFLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hELGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQW9CO1FBQzdDLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQztRQUM5QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztRQUM5QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUV4QyxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksTUFBTSxHQUFnQixPQUFPLENBQUM7UUFFbEMsR0FBRztZQUNELE1BQU0sR0FBaUIsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUV6QyxvR0FBb0c7WUFDcEcsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLFdBQVcsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLFNBQVMsQ0FBQTthQUNqQjtZQUVELEtBQUssR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUMsUUFDQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMzQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUM1QixNQUFNLEtBQUssT0FBTyxFQUNsQjtRQUVGLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRTtZQUN0QixPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTywrQkFBK0IsQ0FBQyxPQUE2QixFQUFFLGdCQUFrQztRQUN2RyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7WUFDbEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDaEMsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQztnQkFDaEUsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7Z0JBQ2pELFVBQVUsRUFBRSxJQUFJO2dCQUNoQixlQUFlLEVBQUUsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUM7Z0JBQ2hFLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOztzSEFuRlUsd0JBQXdCOzBIQUF4Qix3QkFBd0IsY0FGdkIsTUFBTTs0RkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgTXV0YXRpb25PYnNlcnZlclNlcnZpY2UgfSBmcm9tIFwiLi4vbXV0YXRpb24vbXV0YXRpb24tb2JzZXJ2ZXItc2VydmljZVwiO1xuaW1wb3J0IHsgU2t5QXBwV2luZG93UmVmIH0gZnJvbSBcIi4uL3dpbmRvdy93aW5kb3ctcmVmXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNreVNjcm9sbGFibGVIb3N0U2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyU3ZjOiBNdXRhdGlvbk9ic2VydmVyU2VydmljZSxcbiAgICBwcml2YXRlIHdpbmRvd1JlZjogU2t5QXBwV2luZG93UmVmXG4gICkgeyB9XG5cbiAgcHVibGljIGdldFNjcm9sbGFiZUhvc3QoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IEhUTUxFbGVtZW50IHwgV2luZG93IHtcbiAgICByZXR1cm4gdGhpcy5maW5kU2Nyb2xsYWJsZUhvc3QoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyB3YXRjaFNjcm9sbGFibGVIb3N0KGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGNvbXBsZXRpb25PYnNlcnZhYmxlOiBPYnNlcnZhYmxlPHZvaWQ+KTogT2JzZXJ2YWJsZTxIVE1MRWxlbWVudCB8IFdpbmRvdz4ge1xuICAgIGxldCBzY3JvbGxhYmxlSG9zdCA9IHRoaXMuZmluZFNjcm9sbGFibGVIb3N0KGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgbGV0IGJlaGF2aW9yU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Qoc2Nyb2xsYWJsZUhvc3QpO1xuXG4gICAgY29uc3QgbXV0YXRpb25PYnNlcnZlciA9IHRoaXMubXV0YXRpb25PYnNlcnZlclN2Yy5jcmVhdGUoKCkgPT4ge1xuICAgICAgbGV0IG5ld1Njcm9sbGFibGVIb3N0ID0gdGhpcy5maW5kU2Nyb2xsYWJsZUhvc3QoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgaWYgKG5ld1Njcm9sbGFibGVIb3N0ICE9PSBzY3JvbGxhYmxlSG9zdCkge1xuICAgICAgICBzY3JvbGxhYmxlSG9zdCA9IG5ld1Njcm9sbGFibGVIb3N0O1xuICAgICAgICB0aGlzLm9ic2VydmVGb3JTY3JvbGxhYmxlSG9zdENoYW5nZXMoc2Nyb2xsYWJsZUhvc3QsIG11dGF0aW9uT2JzZXJ2ZXIpO1xuICAgICAgICBiZWhhdmlvclN1YmplY3QubmV4dChzY3JvbGxhYmxlSG9zdCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vYnNlcnZlRm9yU2Nyb2xsYWJsZUhvc3RDaGFuZ2VzKHNjcm9sbGFibGVIb3N0LCBtdXRhdGlvbk9ic2VydmVyKTtcblxuICAgIGNvbXBsZXRpb25PYnNlcnZhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH0pXG5cbiAgICByZXR1cm4gYmVoYXZpb3JTdWJqZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kU2Nyb2xsYWJsZUhvc3QoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IFdpbmRvdyB7XG4gICAgY29uc3QgcmVnZXggPSAvKGF1dG98c2Nyb2xsKS87XG4gICAgY29uc3Qgd2luZG93T2JqID0gdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93O1xuICAgIGNvbnN0IGJvZHlPYmogPSB3aW5kb3dPYmouZG9jdW1lbnQuYm9keTtcblxuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHdpbmRvd09iajtcbiAgICB9XG5cbiAgICBsZXQgc3R5bGUgPSB3aW5kb3dPYmouZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICBsZXQgcGFyZW50OiBIVE1MRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICBkbyB7XG4gICAgICBwYXJlbnQgPSA8SFRNTEVsZW1lbnQ+IHBhcmVudC5wYXJlbnROb2RlO1xuXG4gICAgICAvKiBTYW5pdHkgY2hlY2sgZm9yIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhbiBlbGVtZW50IHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgRE9NICovXG4gICAgICBpZiAoIShwYXJlbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvd09ialxuICAgICAgfVxuXG4gICAgICBzdHlsZSA9IHdpbmRvd09iai5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCk7XG4gICAgfSB3aGlsZSAoXG4gICAgICAhcmVnZXgudGVzdChzdHlsZS5vdmVyZmxvdykgJiZcbiAgICAgICFyZWdleC50ZXN0KHN0eWxlLm92ZXJmbG93WSkgJiZcbiAgICAgIHBhcmVudCAhPT0gYm9keU9ialxuICAgICk7XG5cbiAgICBpZiAocGFyZW50ID09PSBib2R5T2JqKSB7XG4gICAgICByZXR1cm4gd2luZG93T2JqO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnQ7XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVGb3JTY3JvbGxhYmxlSG9zdENoYW5nZXMoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBXaW5kb3csIG11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICBtdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCIsIFwic3R5bGUub3ZlcmZsb3dcIiwgXCJzdHlsZS5vdmVyZmxvdy15XCJdLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImNsYXNzXCIsIFwic3R5bGUub3ZlcmZsb3dcIiwgXCJzdHlsZS5vdmVyZmxvdy15XCJdLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuIl19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsYWJsZS1ob3N0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9tb2R1bGVzL3Njcm9sbGFibGUtaG9zdC9zY3JvbGxhYmxlLWhvc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBNEIsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSTNDLFNBQVMsaUJBQWlCLENBQUMsV0FBa0MsRUFBRSxJQUFjO0lBQzNFLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1FBQ3BDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdkI7QUFDSCxDQUFDO0FBS0QsTUFBTSxPQUFPLHdCQUF3QjtJQUVuQyxZQUNVLG1CQUE0QyxFQUM1QyxTQUEwQjtRQUQxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXlCO1FBQzVDLGNBQVMsR0FBVCxTQUFTLENBQWlCO0lBQ2hDLENBQUM7SUFFTDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsVUFBc0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQkFBbUIsQ0FBQyxVQUFzQjtRQUMvQyxJQUFJLFdBQVcsR0FBdUMsRUFBRSxDQUFDO1FBQ3pELElBQUksZ0JBQWtDLENBQUM7UUFFdkMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQ25DLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFN0IsSUFBSSxjQUFjLEdBQUcsSUFBSSxD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RyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7WUFDbEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDaEMsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQztnQkFDaEUsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUU7Z0JBQ2pELFVBQVUsRUFBRSxJQUFJO2dCQUNoQixlQUFlLEVBQUUsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLENBQUM7Z0JBQ2hFLE9BQU8sRUFBRSxJQUFJO2FBQ2QsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOztzSEFsS1Usd0JBQXdCOzBIQUF4Qix3QkFBd0IsY0FGdkIsTUFBTTs0RkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmliZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IE11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL211dGF0aW9uL211dGF0aW9uLW9ic2VydmVyLXNlcnZpY2VcIjtcbmltcG9ydCB7IFNreUFwcFdpbmRvd1JlZiB9IGZyb20gXCIuLi93aW5kb3cvd2luZG93LXJlZlwiO1xuXG5mdW5jdGlvbiBub3RpZnlTdWJzY3JpYmVycyhzdWJzY3JpYmVyczogU3Vic2NyaWJlcjx1bmtub3duPltdLCBpdGVtPzogdW5rbm93bikge1xuICBmb3IgKGNvbnN0IHN1YnNjcmliZXIgb2Ygc3Vic2NyaWJlcnMpIHtcbiAgICBzdWJzY3JpYmVyLm5leHQoaXRlbSk7XG4gIH1cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2t5U2Nyb2xsYWJsZUhvc3RTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXJTdmM6IE11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2luZG93UmVmOiBTa3lBcHBXaW5kb3dSZWZcbiAgKSB7IH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZ2l2ZW4gZWxlbWVudCdzIGN1cnJlbnQgc2Nyb2xsYWJsZSBob3N0XG4gICAqIEBwYXJhbSBlbGVtZW50UmVmIFRoZSBlbGVtZW50IHdob3NlIHNjcm9sbGFibGUgaG9zdCBpcyBiZWluZyByZXF1ZXN0ZWRcbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgc2Nyb2xsYWJsZSBob3N0XG4gICAqL1xuICBwdWJsaWMgZ2V0U2Nyb2xsYWJsZUhvc3QoZWxlbWVudFJlZjogRWxlbWVudFJlZik6IEhUTUxFbGVtZW50IHwgV2luZG93IHtcbiAgICByZXR1cm4gdGhpcy5maW5kU2Nyb2xsYWJsZUhvc3QoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgd2hpY2ggZW1pdHMgdGhlIGdpdmVuIGVsZW1lbnQncyBjdXJyZW50IHNjcm9sbGFibGUgaG9zdFxuICAgKiBAcGFyYW0gZWxlbWVudFJlZiBUaGUgZWxlbWVudCB3aG9zZSBzY3JvbGxhYmxlIGhvc3QgaXMgYmVpbmcgcmVxdWVzdGVkXG4gICAqIEBwYXJhbSBjb21wbGV0aW9uT2JzZXJ2YWJsZSBBbiBvYnNlcnZhYmxlIHdoaWNoIGFsZXJ0cyB0aGUgaW50ZXJuYWwgb2JzZXJ2ZXJzIHRoYXQgdGhleSBzaG91bGQgY29tcGxldGVcbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB0aGUgY3VycmVudCBzY3JvbGxhYmxlIGhvc3RcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgd2F0Y2hTY3JvbGxhYmxlSG9zdChlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogT2JzZXJ2YWJsZTxIVE1MRWxlbWVudCB8IFdpbmRvdz4ge1xuICAgIGxldCBzdWJzY3JpYmVyczogU3Vic2NyaWJlcjxIVE1MRWxlbWVudCB8IFdpbmRvdz5bXSA9IFtdO1xuICAgIGxldCBtdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBzdWJzY3JpYmVycy5wdXNoKHN1YnNjcmliZXIpO1xuXG4gICAgICBsZXQgc2Nyb2xsYWJsZUhvc3QgPSB0aGlzLmZpbmRTY3JvbGxhYmxlSG9zdChlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMSkge1xuXG4gICAgICAgIG11dGF0aW9uT2JzZXJ2ZXIgPSB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJTdmMuY3JlYXRlKCgpID0+IHtcbiAgICAgICAgICBsZXQgbmV3U2Nyb2xsYWJsZUhvc3QgPSB0aGlzLmZpbmRTY3JvbGxhYmxlSG9zdChlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgaWYgKG5ld1Njcm9sbGFibGVIb3N0ICE9PSBzY3JvbGxhYmxlSG9zdCkge1xuICAgICAgICAgICAgc2Nyb2xsYWJsZUhvc3QgPSBuZXdTY3JvbGxhYmxlSG9zdDtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZUZvclNjcm9sbGFibGVIb3N0Q2hhbmdlcyhzY3JvbGxhYmxlSG9zdCwgbXV0YXRpb25PYnNlcnZlcik7XG5cbiAgICAgICAgICAgIG5vdGlmeVN1YnNjcmliZXJzKHN1YnNjcmliZXJzLCBzY3JvbGxhYmxlSG9zdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vYnNlcnZlRm9yU2Nyb2xsYWJsZUhvc3RDaGFuZ2VzKHNjcm9sbGFibGVIb3N0LCBtdXRhdGlvbk9ic2VydmVyKTtcbiAgICAgIH1cbiAgICAgIHN1YnNjcmliZXIubmV4dChzY3JvbGxhYmxlSG9zdCk7XG5cbiAgICAgIHN1YnNjcmliZXIuYWRkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViSW5kZXggPSBzdWJzY3JpYmVycy5pbmRleE9mKHN1YnNjcmliZXIpO1xuXG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoc3ViSW5kZXggPj0gMCkge1xuICAgICAgICAgIHN1YnNjcmliZXJzLnNwbGljZShzdWJJbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgbXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHdoaWNoIGVtaXRzIHdoZW5ldmVyIHRoZSBlbGVtZW50J3Mgc2Nyb2xsYWJsZSBob3N0IGVtaXRzIGEgc2Nyb2xsIGV2ZW50LiBUaGUgb2JzZXJ2YWJsZSB3aWxsIGFsd2F5cyBlbWl0IHRoZSBzY3JvbGwgZXZlbnRzIGZyb20gdGhlIGVsZW1lbnRzIGN1cnJlbnQgc2Nyb2xsYWJsZSBob3N0IGFuZCB3aWxsIHVwZGF0ZSBiYXNlZCBvbiBhbnkgc2Nyb2xsYWJsZSBob3N0IGNoYW5nZXMuIFRoZSBvYnNlcnZhYmxlIHdpbGwgYWxzbyBlbWl0IG9uY2Ugd2hlbmV2ZXIgdGhlIHNjcm9sbGFibGUgaG9zdCBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gZWxlbWVudFJlZiBUaGUgZWxlbWVudCB3aG9zZSBzY3JvbGxhYmxlIGhvc3Qgc2Nyb2xsIGV2ZW50cyBhcmUgYmVpbmcgcmVxdWVzdGVkXG4gICAqIEBwYXJhbSBjb21wbGV0aW9uT2JzZXJ2YWJsZSBBbiBvYnNlcnZhYmxlIHdoaWNoIGFsZXJ0cyB0aGUgaW50ZXJuYWwgb2JzZXJ2ZXJzIHRoYXQgdGhleSBzaG91bGQgY29tcGxldGVcbiAgICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB3aGljaCBlbWl0cyB0aGUgc2Nyb2xsIGV2ZW50cyBmcm9tIHRoZSBnaXZlbiBlbGVtZW50J3Mgc2Nyb2xsYWJsZSBob3N0XG4gICAqL1xuICBwdWJsaWMgd2F0Y2hTY3JvbGxhYmxlSG9zdFNjcm9sbEV2ZW50cyhlbGVtZW50UmVmOiBFbGVtZW50UmVmKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgbGV0IHN1YnNjcmliZXJzOiBTdWJzY3JpYmVyPHZvaWQ+W10gPSBbXTtcblxuICAgIGxldCBuZXdTY3JvbGxhYmxlSG9zdE9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIGxldCBzY3JvbGxhYmxlSG9zdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIGxldCBzY3JvbGxFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgc3Vic2NyaWJlcnMucHVzaChzdWJzY3JpYmVyKTtcblxuICAgICAgaWYgKHN1YnNjcmliZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBzY3JvbGxhYmxlSG9zdFN1YnNjcmlwdGlvbiA9IHRoaXMud2F0Y2hTY3JvbGxhYmxlSG9zdChlbGVtZW50UmVmKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHNjcm9sbGFibGVIb3N0KSA9PiB7XG4gICAgICAgICAgICBuZXdTY3JvbGxhYmxlSG9zdE9ic2VydmFibGUubmV4dCgpO1xuICAgICAgICAgICAgbmV3U2Nyb2xsYWJsZUhvc3RPYnNlcnZhYmxlLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBuZXdTY3JvbGxhYmxlSG9zdE9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAgICAgc2Nyb2xsRXZlbnRTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoc2Nyb2xsYWJsZUhvc3QsICdzY3JvbGwnKVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwobmV3U2Nyb2xsYWJsZUhvc3RPYnNlcnZhYmxlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5vdGlmeVN1YnNjcmliZXJzKHN1YnNjcmliZXJzKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHN1YnNjcmliZXIuYWRkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViSW5kZXggPSBzdWJzY3JpYmVycy5pbmRleE9mKHN1YnNjcmliZXIpO1xuXG4gICAgICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoc3ViSW5kZXggPj0gMCkge1xuICAgICAgICAgIHN1YnNjcmliZXJzLnNwbGljZShzdWJJbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3Vic2NyaWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgc2Nyb2xsYWJsZUhvc3RTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBzY3JvbGxFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIG5ld1Njcm9sbGFibGVIb3N0T2JzZXJ2YWJsZS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kU2Nyb2xsYWJsZUhvc3QoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IFdpbmRvdyB7XG4gICAgY29uc3QgcmVnZXggPSAvKGF1dG98c2Nyb2xsKS87XG4gICAgY29uc3Qgd2luZG93T2JqID0gdGhpcy53aW5kb3dSZWYubmF0aXZlV2luZG93O1xuICAgIGNvbnN0IGJvZHlPYmogPSB3aW5kb3dPYmouZG9jdW1lbnQuYm9keTtcblxuICAgIC8qIFNhbml0eSBjaGVjayAqL1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHdpbmRvd09iajtcbiAgICB9XG5cbiAgICBsZXQgc3R5bGUgPSB3aW5kb3dPYmouZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICBsZXQgcGFyZW50OiBIVE1MRWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICBkbyB7XG4gICAgICBwYXJlbnQgPSA8SFRNTEVsZW1lbnQ+cGFyZW50LnBhcmVudE5vZGU7XG5cbiAgICAgIC8qIFNhbml0eSBjaGVjayBmb3IgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGFuIGVsZW1lbnQgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBET00gKi9cbiAgICAgIGlmICghKHBhcmVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gd2luZG93T2JqXG4gICAgICB9XG5cbiAgICAgIHN0eWxlID0gd2luZG93T2JqLmdldENvbXB1dGVkU3R5bGUocGFyZW50KTtcbiAgICB9IHdoaWxlIChcbiAgICAgICFyZWdleC50ZXN0KHN0eWxlLm92ZXJmbG93KSAmJlxuICAgICAgIXJlZ2V4LnRlc3Qoc3R5bGUub3ZlcmZsb3dZKSAmJlxuICAgICAgcGFyZW50ICE9PSBib2R5T2JqXG4gICAgKTtcblxuICAgIGlmIChwYXJlbnQgPT09IGJvZHlPYmopIHtcbiAgICAgIHJldHVybiB3aW5kb3dPYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZUZvclNjcm9sbGFibGVIb3N0Q2hhbmdlcyhlbGVtZW50OiBIVE1MRWxlbWVudCB8IFdpbmRvdywgbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcikge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIG11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJzdHlsZS5vdmVyZmxvd1wiLCBcInN0eWxlLm92ZXJmbG93LXlcIl0sXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIiwgXCJzdHlsZS5vdmVyZmxvd1wiLCBcInN0eWxlLm92ZXJmbG93LXlcIl0sXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
@@ -75,7 +75,7 @@ export class SkyViewkeeperDirective {
75
75
  else {
76
76
  this.scrollableHostWatchUnsubscribe = new Subject();
77
77
  }
78
- this.scrollableHostService.watchScrollableHost(this.el, this.scrollableHostWatchUnsubscribe)
78
+ this.scrollableHostService.watchScrollableHost(this.el)
79
79
  .pipe(takeUntil(this.scrollableHostWatchUnsubscribe))
80
80
  .subscribe(scrollableHost => {
81
81
  this.destroyViewkeepers();
@@ -107,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
107
107
  }] }]; }, propDecorators: { skyViewkeeper: [{
108
108
  type: Input
109
109
  }] } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2tlZXBlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9tb2R1bGVzL3ZpZXdrZWVwZXIvdmlld2tlZXBlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBR0wsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQWtCM0MsTUFBTSxPQUFPLHNCQUFzQjtJQXVCakMsWUFDVSxFQUFjLEVBQ2QsbUJBQTRDLEVBQzVDLGFBQW1DLEVBQ3ZCLHFCQUErQztRQUgzRCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF5QjtRQUM1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDdkIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEwQjtRQVo3RCxnQkFBVyxHQUFvQixFQUFFLENBQUM7UUFNbEMsbUNBQThCLEdBQThCLFNBQVMsQ0FBQztJQU8xRSxDQUFDO0lBMUJMLElBQ1csYUFBYSxDQUFDLEtBQWU7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFtQk0sUUFBUTtRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDbkIsSUFB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Q0UsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYTt3QkFDakMsY0FBYyxFQUFFLGNBQWMsWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsU0FBUzt3QkFDbEYsRUFBRSxFQUFFLFlBQVk7d0JBQ2hCLFFBQVEsRUFBRSxJQUFJO3dCQUNkLGdCQUFnQixFQUFFLG9CQUFvQjtxQkFDdkMsQ0FDRixDQUNGLENBQUM7b0JBRUYsb0JBQW9CLEdBQUcsWUFBWSxDQUFDO2lCQUNyQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBR0wsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztTQUMzQztJQUNILENBQUM7O29IQXJJVSxzQkFBc0I7d0dBQXRCLHNCQUFzQjs0RkFBdEIsc0JBQXNCO2tCQUhsQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCOzswQkE0QkksUUFBUTs0Q0F4QkEsYUFBYTtzQkFEdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgTXV0YXRpb25PYnNlcnZlclNlcnZpY2Vcbn0gZnJvbSAnLi4vbXV0YXRpb24vbXV0YXRpb24tb2JzZXJ2ZXItc2VydmljZSc7XG5pbXBvcnQgeyBTa3lTY3JvbGxhYmxlSG9zdFNlcnZpY2UgfSBmcm9tICcuLi9zY3JvbGxhYmxlLWhvc3Qvc2Nyb2xsYWJsZS1ob3N0LnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBTa3lWaWV3a2VlcGVyXG59IGZyb20gJy4vdmlld2tlZXBlcic7XG5cbmltcG9ydCB7XG4gIFNreVZpZXdrZWVwZXJTZXJ2aWNlXG59IGZyb20gJy4vdmlld2tlZXBlci5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3NreVZpZXdrZWVwZXJdJ1xufSlcbmV4cG9ydCBjbGFzcyBTa3lWaWV3a2VlcGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2t5Vmlld2tlZXBlcih2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9za3lWaWV3a2VlcGVyID0gdmFsdWU7XG5cbiAgICB0aGlzLmRldGVjdEVsZW1lbnRzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNreVZpZXdrZWVwZXIoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9za3lWaWV3a2VlcGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2t5Vmlld2tlZXBlcjogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSB2aWV3a2VlcGVyczogU2t5Vmlld2tlZXBlcltdID0gW107XG5cbiAgcHJpdmF0ZSBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICBwcml2YXRlIGN1cnJlbnRWaWV3a2VlcGVyRWxzOiBIVE1MRWxlbWVudFtdO1xuXG4gIHByaXZhdGUgc2Nyb2xsYWJsZUhvc3RXYXRjaFVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyU3ZjOiBNdXRhdGlvbk9ic2VydmVyU2VydmljZSxcbiAgICBwcml2YXRlIHZpZXdrZWVwZXJTdmM6IFNreVZpZXdrZWVwZXJTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgc2Nyb2xsYWJsZUhvc3RTZXJ2aWNlOiBTa3lTY3JvbGxhYmxlSG9zdFNlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vYnNlcnZlciA9IHRoaXMubXV0YXRpb25PYnNlcnZlclN2Yy5jcmVhdGUoKCkgPT4gdGhpcy5kZXRlY3RFbGVtZW50cygpKTtcblxuICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblxuICAgIHRoaXMuZGVzdHJveVZpZXdrZWVwZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lWaWV3a2VlcGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHZpZXdrZWVwZXIgb2YgdGhpcy52aWV3a2VlcGVycykge1xuICAgICAgdGhpcy52aWV3a2VlcGVyU3ZjLmRlc3Ryb3kodmlld2tlZXBlcik7XG4gICAgfVxuXG4gICAgdGhpcy52aWV3a2VlcGVycyA9IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRWaWV3a2VlcGVyRWxzKCk6IEhUTUxFbGVtZW50W10ge1xuICAgIGxldCB2aWV3a2VlcGVyRWxzOiBIVE1MRWxlbWVudFtdO1xuXG4gICAgaWYgKHRoaXMuc2t5Vmlld2tlZXBlcikge1xuICAgICAgdmlld2tlZXBlckVscyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5za3lWaWV3a2VlcGVyKSB7XG4gICAgICAgIGxldCBtYXRjaGluZ0VscyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgKHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvckFsbChpdGVtKVxuICAgICAgICApIGFzIEhUTUxFbGVtZW50W107XG5cbiAgICAgICAgdmlld2tlZXBlckVscyA9IFsuLi52aWV3a2VlcGVyRWxzLCAuLi5tYXRjaGluZ0Vsc107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpZXdrZWVwZXJFbHM7XG4gIH1cblxuICBwcml2YXRlIHZpZXdrZWVwZXJFbHNDaGFuZ2VkKHZpZXdrZWVwZXJFbHM6IEhUTUxFbGVtZW50W10pOiBib29sZWFuIHtcbiAgICBpZiAoIXZpZXdrZWVwZXJFbHMgIT09ICF0aGlzLmN1cnJlbnRWaWV3a2VlcGVyRWxzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmlld2tlZXBlckVscyAmJiB0aGlzLmN1cnJlbnRWaWV3a2VlcGVyRWxzKSB7XG4gICAgICBpZiAodmlld2tlZXBlckVscy5sZW5ndGggIT09IHRoaXMuY3VycmVudFZpZXdrZWVwZXJFbHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgbiA9IHZpZXdrZWVwZXJFbHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGlmICh2aWV3a2VlcGVyRWxzW2ldICE9PSB0aGlzLmN1cnJlbnRWaWV3a2VlcGVyRWxzW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdEVsZW1lbnRzKCk6IHZvaWQge1xuICAgIGxldCB2aWV3a2VlcGVyRWxzID0gdGhpcy5nZXRWaWV3a2VlcGVyRWxzKCk7XG5cbiAgICBpZiAodGhpcy52aWV3a2VlcGVyRWxzQ2hhbmdlZCh2aWV3a2VlcGVyRWxzKSkge1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgICAgICB0aGlzLnNjcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsYWJsZUhvc3RTZXJ2aWNlLndhdGNoU2Nyb2xsYWJsZUhvc3QodGhpcy5lbCwgdGhpcy5zY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmUpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnNjcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoc2Nyb2xsYWJsZUhvc3QgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzdHJveVZpZXdrZWVwZXJzKCk7XG5cbiAgICAgICAgICBsZXQgcHJldmlvdXNWaWV3a2VlcGVyRWw6IEhUTUxFbGVtZW50O1xuXG4gICAgICAgICAgZm9yIChjb25zdCB2aWV3a2VlcGVyRWwgb2Ygdmlld2tlZXBlckVscykge1xuICAgICAgICAgICAgdGhpcy52aWV3a2VlcGVycy5wdXNoKFxuICAgICAgICAgICAgICB0aGlzLnZpZXdrZWVwZXJTdmMuY3JlYXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5RWw6IHRoaXMuZWwubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbGFibGVIb3N0OiBzY3JvbGxhYmxlSG9zdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gc2Nyb2xsYWJsZUhvc3QgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBlbDogdmlld2tlZXBlckVsLFxuICAgICAgICAgICAgICAgICAgc2V0V2lkdGg6IHRydWUsXG4gICAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldEVsOiBwcmV2aW91c1ZpZXdrZWVwZXJFbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcHJldmlvdXNWaWV3a2VlcGVyRWwgPSB2aWV3a2VlcGVyRWw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICB0aGlzLmN1cnJlbnRWaWV3a2VlcGVyRWxzID0gdmlld2tlZXBlckVscztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2tlZXBlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9tb2R1bGVzL3ZpZXdrZWVwZXIvdmlld2tlZXBlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBR0wsUUFBUSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQWtCM0MsTUFBTSxPQUFPLHNCQUFzQjtJQXVCakMsWUFDVSxFQUFjLEVBQ2QsbUJBQTRDLEVBQzVDLGFBQW1DLEVBQ3ZCLHFCQUErQztRQUgzRCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2Qsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF5QjtRQUM1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDdkIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUEwQjtRQVo3RCxnQkFBVyxHQUFvQixFQUFFLENBQUM7UUFNbEMsbUNBQThCLEdBQThCLFNBQVMsQ0FBQztJQU8xRSxDQUFDO0lBMUJMLElBQ1csYUFBYSxDQUFDLEtBQWU7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFFNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFtQk0sUUFBUTtRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDbkIsSUFB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LEVBQUUsQ0FBQyxhQUFhO3dCQUNqQyxjQUFjLEVBQUUsY0FBYyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxTQUFTO3dCQUNsRixFQUFFLEVBQUUsWUFBWTt3QkFDaEIsUUFBUSxFQUFFLElBQUk7d0JBQ2QsZ0JBQWdCLEVBQUUsb0JBQW9CO3FCQUN2QyxDQUNGLENBQ0YsQ0FBQztvQkFFRixvQkFBb0IsR0FBRyxZQUFZLENBQUM7aUJBQ3JDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFHTCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO1NBQzNDO0lBQ0gsQ0FBQzs7b0hBcklVLHNCQUFzQjt3R0FBdEIsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSGxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7OzBCQTRCSSxRQUFROzRDQXhCQSxhQUFhO3NCQUR2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBNdXRhdGlvbk9ic2VydmVyU2VydmljZVxufSBmcm9tICcuLi9tdXRhdGlvbi9tdXRhdGlvbi1vYnNlcnZlci1zZXJ2aWNlJztcbmltcG9ydCB7IFNreVNjcm9sbGFibGVIb3N0U2VydmljZSB9IGZyb20gJy4uL3Njcm9sbGFibGUtaG9zdC9zY3JvbGxhYmxlLWhvc3Quc2VydmljZSc7XG5cbmltcG9ydCB7XG4gIFNreVZpZXdrZWVwZXJcbn0gZnJvbSAnLi92aWV3a2VlcGVyJztcblxuaW1wb3J0IHtcbiAgU2t5Vmlld2tlZXBlclNlcnZpY2Vcbn0gZnJvbSAnLi92aWV3a2VlcGVyLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbc2t5Vmlld2tlZXBlcl0nXG59KVxuZXhwb3J0IGNsYXNzIFNreVZpZXdrZWVwZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBza3lWaWV3a2VlcGVyKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX3NreVZpZXdrZWVwZXIgPSB2YWx1ZTtcblxuICAgIHRoaXMuZGV0ZWN0RWxlbWVudHMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2t5Vmlld2tlZXBlcigpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NreVZpZXdrZWVwZXI7XG4gIH1cblxuICBwcml2YXRlIF9za3lWaWV3a2VlcGVyOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIHZpZXdrZWVwZXJzOiBTa3lWaWV3a2VlcGVyW10gPSBbXTtcblxuICBwcml2YXRlIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuXG4gIHByaXZhdGUgY3VycmVudFZpZXdrZWVwZXJFbHM6IEhUTUxFbGVtZW50W107XG5cbiAgcHJpdmF0ZSBzY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIG11dGF0aW9uT2JzZXJ2ZXJTdmM6IE11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdmlld2tlZXBlclN2YzogU2t5Vmlld2tlZXBlclNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzY3JvbGxhYmxlSG9zdFNlcnZpY2U6IFNreVNjcm9sbGFibGVIb3N0U2VydmljZVxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9ic2VydmVyID0gdGhpcy5tdXRhdGlvbk9ic2VydmVyU3ZjLmNyZWF0ZSgoKSA9PiB0aGlzLmRldGVjdEVsZW1lbnRzKCkpO1xuXG4gICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKFxuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LFxuICAgICAge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgIHN1YnRyZWU6IHRydWVcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5kZXN0cm95Vmlld2tlZXBlcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVZpZXdrZWVwZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgdmlld2tlZXBlciBvZiB0aGlzLnZpZXdrZWVwZXJzKSB7XG4gICAgICB0aGlzLnZpZXdrZWVwZXJTdmMuZGVzdHJveSh2aWV3a2VlcGVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnZpZXdrZWVwZXJzID0gW107XG4gIH1cblxuICBwcml2YXRlIGdldFZpZXdrZWVwZXJFbHMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgbGV0IHZpZXdrZWVwZXJFbHM6IEhUTUxFbGVtZW50W107XG5cbiAgICBpZiAodGhpcy5za3lWaWV3a2VlcGVyKSB7XG4gICAgICB2aWV3a2VlcGVyRWxzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNreVZpZXdrZWVwZXIpIHtcbiAgICAgICAgbGV0IG1hdGNoaW5nRWxzID0gQXJyYXkuZnJvbShcbiAgICAgICAgICAodGhpcy5lbC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yQWxsKGl0ZW0pXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnRbXTtcblxuICAgICAgICB2aWV3a2VlcGVyRWxzID0gWy4uLnZpZXdrZWVwZXJFbHMsIC4uLm1hdGNoaW5nRWxzXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmlld2tlZXBlckVscztcbiAgfVxuXG4gIHByaXZhdGUgdmlld2tlZXBlckVsc0NoYW5nZWQodmlld2tlZXBlckVsczogSFRNTEVsZW1lbnRbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghdmlld2tlZXBlckVscyAhPT0gIXRoaXMuY3VycmVudFZpZXdrZWVwZXJFbHMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2aWV3a2VlcGVyRWxzICYmIHRoaXMuY3VycmVudFZpZXdrZWVwZXJFbHMpIHtcbiAgICAgIGlmICh2aWV3a2VlcGVyRWxzLmxlbmd0aCAhPT0gdGhpcy5jdXJyZW50Vmlld2tlZXBlckVscy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBuID0gdmlld2tlZXBlckVscy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgaWYgKHZpZXdrZWVwZXJFbHNbaV0gIT09IHRoaXMuY3VycmVudFZpZXdrZWVwZXJFbHNbaV0pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0RWxlbWVudHMoKTogdm9pZCB7XG4gICAgbGV0IHZpZXdrZWVwZXJFbHMgPSB0aGlzLmdldFZpZXdrZWVwZXJFbHMoKTtcblxuICAgIGlmICh0aGlzLnZpZXdrZWVwZXJFbHNDaGFuZ2VkKHZpZXdrZWVwZXJFbHMpKSB7XG5cbiAgICAgIGlmICh0aGlzLnNjcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZSkge1xuICAgICAgICB0aGlzLnNjcm9sbGFibGVIb3N0V2F0Y2hVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZUhvc3RXYXRjaFVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZUhvc3RXYXRjaFVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxhYmxlSG9zdFNlcnZpY2Uud2F0Y2hTY3JvbGxhYmxlSG9zdCh0aGlzLmVsKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5zY3JvbGxhYmxlSG9zdFdhdGNoVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKHNjcm9sbGFibGVIb3N0ID0+IHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3lWaWV3a2VlcGVycygpO1xuXG4gICAgICAgICAgbGV0IHByZXZpb3VzVmlld2tlZXBlckVsOiBIVE1MRWxlbWVudDtcblxuICAgICAgICAgIGZvciAoY29uc3Qgdmlld2tlZXBlckVsIG9mIHZpZXdrZWVwZXJFbHMpIHtcbiAgICAgICAgICAgIHRoaXMudmlld2tlZXBlcnMucHVzaChcbiAgICAgICAgICAgICAgdGhpcy52aWV3a2VlcGVyU3ZjLmNyZWF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBib3VuZGFyeUVsOiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlSG9zdDogc2Nyb2xsYWJsZUhvc3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IHNjcm9sbGFibGVIb3N0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgZWw6IHZpZXdrZWVwZXJFbCxcbiAgICAgICAgICAgICAgICAgIHNldFdpZHRoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdmVydGljYWxPZmZzZXRFbDogcHJldmlvdXNWaWV3a2VlcGVyRWxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHByZXZpb3VzVmlld2tlZXBlckVsID0gdmlld2tlZXBlckVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cblxuICAgICAgdGhpcy5jdXJyZW50Vmlld2tlZXBlckVscyA9IHZpZXdrZWVwZXJFbHM7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
2
2
  import { NgModule, Injectable, EventEmitter, Directive, Input, Output, Injector, ViewContainerRef, Component, ChangeDetectionStrategy, ViewChild, Pipe, ElementRef, Optional } from '@angular/core';
3
3
  import * as i4 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
- import { Subject, fromEvent, BehaviorSubject, of } from 'rxjs';
6
- import { takeUntil, debounceTime, take } from 'rxjs/operators';
5
+ import { Subject, fromEvent, BehaviorSubject, Observable, of } from 'rxjs';
6
+ import { takeUntil, debounceTime } from 'rxjs/operators';
7
7
  import * as i1 from '@skyux/i18n';
8
8
  import { getLibStringForLocale, SkyI18nModule, SKY_LIB_RESOURCES_PROVIDERS, SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';
9
9
  import * as i3 from '@angular/router';
@@ -2456,30 +2456,102 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
2456
2456
  }]
2457
2457
  }] });
2458
2458
 
2459
+ function notifySubscribers(subscribers, item) {
2460
+ for (const subscriber of subscribers) {
2461
+ subscriber.next(item);
2462
+ }
2463
+ }
2459
2464
  class SkyScrollableHostService {
2460
2465
  constructor(mutationObserverSvc, windowRef) {
2461
2466
  this.mutationObserverSvc = mutationObserverSvc;
2462
2467
  this.windowRef = windowRef;
2463
2468
  }
2464
- getScrollabeHost(elementRef) {
2469
+ /**
2470
+ * Returns the given element's current scrollable host
2471
+ * @param elementRef The element whose scrollable host is being requested
2472
+ * @returns The current scrollable host
2473
+ */
2474
+ getScrollableHost(elementRef) {
2465
2475
  return this.findScrollableHost(elementRef.nativeElement);
2466
2476
  }
2467
- watchScrollableHost(elementRef, completionObservable) {
2468
- let scrollableHost = this.findScrollableHost(elementRef.nativeElement);
2469
- let behaviorSubject = new BehaviorSubject(scrollableHost);
2470
- const mutationObserver = this.mutationObserverSvc.create(() => {
2471
- let newScrollableHost = this.findScrollableHost(elementRef.nativeElement);
2472
- if (newScrollableHost !== scrollableHost) {
2473
- scrollableHost = newScrollableHost;
2477
+ /**
2478
+ * Returns an observable which emits the given element's current scrollable host
2479
+ * @param elementRef The element whose scrollable host is being requested
2480
+ * @param completionObservable An observable which alerts the internal observers that they should complete
2481
+ * @returns An observable which emits the current scrollable host
2482
+ * @internal
2483
+ */
2484
+ watchScrollableHost(elementRef) {
2485
+ let subscribers = [];
2486
+ let mutationObserver;
2487
+ return new Observable((subscriber) => {
2488
+ subscribers.push(subscriber);
2489
+ let scrollableHost = this.findScrollableHost(elementRef.nativeElement);
2490
+ if (subscribers.length === 1) {
2491
+ mutationObserver = this.mutationObserverSvc.create(() => {
2492
+ let newScrollableHost = this.findScrollableHost(elementRef.nativeElement);
2493
+ if (newScrollableHost !== scrollableHost) {
2494
+ scrollableHost = newScrollableHost;
2495
+ this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
2496
+ notifySubscribers(subscribers, scrollableHost);
2497
+ }
2498
+ });
2474
2499
  this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
2475
- behaviorSubject.next(scrollableHost);
2476
2500
  }
2501
+ subscriber.next(scrollableHost);
2502
+ subscriber.add(() => {
2503
+ const subIndex = subscribers.indexOf(subscriber);
2504
+ /* sanity check */
2505
+ /* istanbul ignore else */
2506
+ if (subIndex >= 0) {
2507
+ subscribers.splice(subIndex, 1);
2508
+ }
2509
+ if (subscribers.length === 0) {
2510
+ mutationObserver.disconnect();
2511
+ }
2512
+ });
2477
2513
  });
2478
- this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
2479
- completionObservable.pipe(take(1)).subscribe(() => {
2480
- mutationObserver.disconnect();
2514
+ }
2515
+ /**
2516
+ * Returns an observable which emits whenever the element's scrollable host emits a scroll event. The observable will always emit the scroll events from the elements current scrollable host and will update based on any scrollable host changes. The observable will also emit once whenever the scrollable host changes.
2517
+ * @param elementRef The element whose scrollable host scroll events are being requested
2518
+ * @param completionObservable An observable which alerts the internal observers that they should complete
2519
+ * @returns An observable which emits the scroll events from the given element's scrollable host
2520
+ */
2521
+ watchScrollableHostScrollEvents(elementRef) {
2522
+ let subscribers = [];
2523
+ let newScrollableHostObservable = new Subject();
2524
+ let scrollableHostSubscription;
2525
+ let scrollEventSubscription;
2526
+ return new Observable((subscriber) => {
2527
+ subscribers.push(subscriber);
2528
+ if (subscribers.length === 1) {
2529
+ scrollableHostSubscription = this.watchScrollableHost(elementRef)
2530
+ .subscribe((scrollableHost) => {
2531
+ newScrollableHostObservable.next();
2532
+ newScrollableHostObservable.complete();
2533
+ newScrollableHostObservable = new Subject();
2534
+ scrollEventSubscription = fromEvent(scrollableHost, 'scroll')
2535
+ .pipe(takeUntil(newScrollableHostObservable))
2536
+ .subscribe(() => {
2537
+ notifySubscribers(subscribers);
2538
+ });
2539
+ });
2540
+ }
2541
+ subscriber.add(() => {
2542
+ const subIndex = subscribers.indexOf(subscriber);
2543
+ /* sanity check */
2544
+ /* istanbul ignore else */
2545
+ if (subIndex >= 0) {
2546
+ subscribers.splice(subIndex, 1);
2547
+ }
2548
+ if (subscribers.length === 0) {
2549
+ scrollableHostSubscription.unsubscribe();
2550
+ scrollEventSubscription.unsubscribe();
2551
+ newScrollableHostObservable.complete();
2552
+ }
2553
+ });
2481
2554
  });
2482
- return behaviorSubject;
2483
2555
  }
2484
2556
  findScrollableHost(element) {
2485
2557
  const regex = /(auto|scroll)/;
@@ -2923,7 +2995,7 @@ class SkyViewkeeperDirective {
2923
2995
  else {
2924
2996
  this.scrollableHostWatchUnsubscribe = new Subject();
2925
2997
  }
2926
- this.scrollableHostService.watchScrollableHost(this.el, this.scrollableHostWatchUnsubscribe)
2998
+ this.scrollableHostService.watchScrollableHost(this.el)
2927
2999
  .pipe(takeUntil(this.scrollableHostWatchUnsubscribe))
2928
3000
  .subscribe(scrollableHost => {
2929
3001
  this.destroyViewkeepers();