@ngutil/style 0.0.80 → 0.0.82
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngutil-style.mjs +16 -16
- package/fesm2022/ngutil-style.mjs.map +1 -1
- package/package.json +5 -6
- package/esm2022/index.mjs +0 -12
- package/esm2022/ngutil-style.mjs +0 -5
- package/esm2022/sass/animation/vars/index.mjs +0 -24
- package/esm2022/sass/index.mjs +0 -2
- package/esm2022/services/color-scheme.service.mjs +0 -19
- package/esm2022/services/dimension-watcher.service.mjs +0 -120
- package/esm2022/services/media-watcher.service.mjs +0 -39
- package/esm2022/services/position-watcher.service.mjs +0 -52
- package/esm2022/services/rect-watcher.service.mjs +0 -26
- package/esm2022/util/alignment.mjs +0 -55
- package/esm2022/util/floating-position.mjs +0 -276
- package/esm2022/util/in-animation.mjs +0 -70
- package/esm2022/util/rect.mjs +0 -90
- package/esm2022/util/sides.mjs +0 -26
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from "@angular/common";
|
|
2
|
-
import { inject, Injectable, NgZone } from "@angular/core";
|
|
3
|
-
import { distinctUntilChanged, Observable, shareReplay } from "rxjs";
|
|
4
|
-
import { coerceElement } from "@ngutil/common";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class DimensionWatcher {
|
|
7
|
-
#zone = inject(NgZone);
|
|
8
|
-
#document = inject(DOCUMENT);
|
|
9
|
-
#watches = {};
|
|
10
|
-
watch(element, box) {
|
|
11
|
-
element = coerceElement(element);
|
|
12
|
-
let watches = this.#watches[box];
|
|
13
|
-
if (watches == null) {
|
|
14
|
-
watches = new Map();
|
|
15
|
-
this.#watches[box] = watches;
|
|
16
|
-
}
|
|
17
|
-
let watcher = watches.get(element);
|
|
18
|
-
if (watcher == null) {
|
|
19
|
-
if (element instanceof Window) {
|
|
20
|
-
watcher = this.#createWindowResizeWatcher();
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
if (box === "scroll-box") {
|
|
24
|
-
watcher = this.#createScollWatcher(watches, element);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
watcher = this.#createResizeWatcher(watches, element, box);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
watches.set(element, watcher);
|
|
31
|
-
}
|
|
32
|
-
return watcher;
|
|
33
|
-
}
|
|
34
|
-
#createResizeWatcher(watches, el, box) {
|
|
35
|
-
if (box !== "border-box") {
|
|
36
|
-
throw new Error(`Currently not implemented box mode: ${box}`);
|
|
37
|
-
}
|
|
38
|
-
return this.#zone.runOutsideAngular(() => new Observable((sub) => {
|
|
39
|
-
const observer = new ResizeObserver(entries => {
|
|
40
|
-
if (!this.#document.contains(el)) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
for (const entry of entries) {
|
|
44
|
-
if (entry.borderBoxSize) {
|
|
45
|
-
sub.next({
|
|
46
|
-
width: entry.borderBoxSize[0].inlineSize,
|
|
47
|
-
height: entry.borderBoxSize[0].blockSize
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
sub.next({
|
|
52
|
-
width: el.offsetWidth,
|
|
53
|
-
height: el.offsetHeight
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
observer.observe(el, { box: box });
|
|
59
|
-
return () => {
|
|
60
|
-
observer.disconnect();
|
|
61
|
-
watches.delete(el);
|
|
62
|
-
};
|
|
63
|
-
}).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1)));
|
|
64
|
-
}
|
|
65
|
-
#createScollWatcher(watches, el) {
|
|
66
|
-
const borderBox = this.watch(el, "border-box");
|
|
67
|
-
return this.#zone.runOutsideAngular(() => new Observable((sub) => {
|
|
68
|
-
let lastSw = NaN;
|
|
69
|
-
let lastSh = NaN;
|
|
70
|
-
const emit = () => {
|
|
71
|
-
const sw = el.scrollWidth;
|
|
72
|
-
const sh = el.scrollHeight;
|
|
73
|
-
if (lastSw !== sw || lastSh !== sh) {
|
|
74
|
-
lastSw = sw;
|
|
75
|
-
lastSh = sh;
|
|
76
|
-
sub.next({ width: lastSw, height: lastSh });
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
const dimSum = borderBox.subscribe(emit);
|
|
80
|
-
const mutation = new MutationObserver(emit);
|
|
81
|
-
mutation.observe(el, {
|
|
82
|
-
subtree: true,
|
|
83
|
-
childList: true,
|
|
84
|
-
attributes: true,
|
|
85
|
-
characterData: true
|
|
86
|
-
});
|
|
87
|
-
emit();
|
|
88
|
-
return () => {
|
|
89
|
-
dimSum.unsubscribe();
|
|
90
|
-
mutation.disconnect();
|
|
91
|
-
watches.delete(el);
|
|
92
|
-
};
|
|
93
|
-
}).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1)));
|
|
94
|
-
}
|
|
95
|
-
#createWindowResizeWatcher() {
|
|
96
|
-
return this.#zone.runOutsideAngular(() => new Observable((sub) => {
|
|
97
|
-
const onResize = () => {
|
|
98
|
-
sub.next({
|
|
99
|
-
width: window.innerWidth,
|
|
100
|
-
height: window.innerHeight
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
|
-
onResize();
|
|
104
|
-
window.addEventListener("resize", onResize);
|
|
105
|
-
return () => {
|
|
106
|
-
window.removeEventListener("resize", onResize);
|
|
107
|
-
};
|
|
108
|
-
}).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1)));
|
|
109
|
-
}
|
|
110
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DimensionWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
111
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DimensionWatcher, providedIn: "root" }); }
|
|
112
|
-
}
|
|
113
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DimensionWatcher, decorators: [{
|
|
114
|
-
type: Injectable,
|
|
115
|
-
args: [{ providedIn: "root" }]
|
|
116
|
-
}] });
|
|
117
|
-
function dimensionIsEq(a, b) {
|
|
118
|
-
return a && b && a.width === b.width && a.height === b.height;
|
|
119
|
-
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLXdhdGNoZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0eWxlL3NyYy9zZXJ2aWNlcy9kaW1lbnNpb24td2F0Y2hlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFFaEYsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQTs7QUFRNUQsTUFBTSxPQUFPLGdCQUFnQjtJQUNoQixLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RCLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDNUIsUUFBUSxHQUFvQyxFQUFFLENBQUE7SUFFdkQsS0FBSyxDQUFDLE9BQThCLEVBQUUsR0FBYTtRQUMvQyxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUE7UUFDaEMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbEMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBSSxPQUFPLFlBQVksTUFBTSxF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Q0FBQyxJQUFJLENBQUM7b0JBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVO29CQUN4QixNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVc7aUJBQzdCLENBQUMsQ0FBQTtZQUNOLENBQUMsQ0FBQTtZQUNELFFBQVEsRUFBRSxDQUFBO1lBQ1YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUMzQyxPQUFPLEdBQUcsRUFBRTtnQkFDUixNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQ2xELENBQUMsQ0FBQTtRQUNMLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0QsQ0FBQTtJQUNMLENBQUM7OEdBeEhRLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBREgsTUFBTTs7MkZBQ25CLGdCQUFnQjtrQkFENUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBNEhsQyxTQUFTLGFBQWEsQ0FBQyxDQUFZLEVBQUUsQ0FBWTtJQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQTtBQUNqRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCJcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IERpbWVuc2lvbiB9IGZyb20gXCIuLi91dGlsL3JlY3RcIlxuXG5leHBvcnQgdHlwZSBXYXRjaEJveCA9IFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB8IFwic2Nyb2xsLWJveFwiXG5leHBvcnQgdHlwZSBXYXRjaGVzID0gTWFwPEhUTUxFbGVtZW50IHwgV2luZG93LCBPYnNlcnZhYmxlPERpbWVuc2lvbj4+XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25XYXRjaGVyIHtcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpXG4gICAgcmVhZG9ubHkgI2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKVxuICAgIHJlYWRvbmx5ICN3YXRjaGVzOiB7IFtrZXkgaW4gV2F0Y2hCb3hdPzogV2F0Y2hlcyB9ID0ge31cblxuICAgIHdhdGNoKGVsZW1lbnQ6IEVsZW1lbnRJbnB1dCB8IFdpbmRvdywgYm94OiBXYXRjaEJveCk6IE9ic2VydmFibGU8RGltZW5zaW9uPiB7XG4gICAgICAgIGVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KGVsZW1lbnQpXG5cbiAgICAgICAgbGV0IHdhdGNoZXMgPSB0aGlzLiN3YXRjaGVzW2JveF1cbiAgICAgICAgaWYgKHdhdGNoZXMgPT0gbnVsbCkge1xuICAgICAgICAgICAgd2F0Y2hlcyA9IG5ldyBNYXAoKVxuICAgICAgICAgICAgdGhpcy4jd2F0Y2hlc1tib3hdID0gd2F0Y2hlc1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHdhdGNoZXIgPSB3YXRjaGVzLmdldChlbGVtZW50KVxuICAgICAgICBpZiAod2F0Y2hlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFdpbmRvdykge1xuICAgICAgICAgICAgICAgIHdhdGNoZXIgPSB0aGlzLiNjcmVhdGVXaW5kb3dSZXNpemVXYXRjaGVyKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGJveCA9PT0gXCJzY3JvbGwtYm94XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlciA9IHRoaXMuI2NyZWF0ZVNjb2xsV2F0Y2hlcih3YXRjaGVzLCBlbGVtZW50KVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHdhdGNoZXIgPSB0aGlzLiNjcmVhdGVSZXNpemVXYXRjaGVyKHdhdGNoZXMsIGVsZW1lbnQsIGJveClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdhdGNoZXMuc2V0KGVsZW1lbnQsIHdhdGNoZXIpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2F0Y2hlclxuICAgIH1cblxuICAgICNjcmVhdGVSZXNpemVXYXRjaGVyKHdhdGNoZXM6IFdhdGNoZXMsIGVsOiBIVE1MRWxlbWVudCwgYm94OiBXYXRjaEJveCk6IE9ic2VydmFibGU8RGltZW5zaW9uPiB7XG4gICAgICAgIGlmIChib3ggIT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQgYm94IG1vZGU6ICR7Ym94fWApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgbmV3IE9ic2VydmFibGUoKHN1YjogU3Vic2NyaWJlcjxEaW1lbnNpb24+KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy4jZG9jdW1lbnQuY29udGFpbnMoZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmJvcmRlckJveFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBlbnRyeS5ib3JkZXJCb3hTaXplWzBdLmlubGluZVNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogZW50cnkuYm9yZGVyQm94U2l6ZVswXS5ibG9ja1NpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBlbC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBlbC5vZmZzZXRIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVsLCB7IGJveDogYm94IGFzIFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICAgICAgICAgICAgICAgIHdhdGNoZXMuZGVsZXRlKGVsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoZGltZW5zaW9uSXNFcSksIHNoYXJlUmVwbGF5KDEpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI2NyZWF0ZVNjb2xsV2F0Y2hlcih3YXRjaGVzOiBXYXRjaGVzLCBlbDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgICAgICBjb25zdCBib3JkZXJCb3ggPSB0aGlzLndhdGNoKGVsLCBcImJvcmRlci1ib3hcIilcbiAgICAgICAgcmV0dXJuIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIG5ldyBPYnNlcnZhYmxlKChzdWI6IFN1YnNjcmliZXI8RGltZW5zaW9uPikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBsYXN0U3c6IG51bWJlciA9IE5hTlxuICAgICAgICAgICAgICAgIGxldCBsYXN0U2g6IG51bWJlciA9IE5hTlxuXG4gICAgICAgICAgICAgICAgY29uc3QgZW1pdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3cgPSBlbC5zY3JvbGxXaWR0aFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFN3ICE9PSBzdyB8fCBsYXN0U2ggIT09IHNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3cgPSBzd1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNoID0gc2hcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yi5uZXh0KHsgd2lkdGg6IGxhc3RTdywgaGVpZ2h0OiBsYXN0U2ggfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpbVN1bSA9IGJvcmRlckJveC5zdWJzY3JpYmUoZW1pdClcbiAgICAgICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGVtaXQpXG4gICAgICAgICAgICAgICAgbXV0YXRpb24ub2JzZXJ2ZShlbCwge1xuICAgICAgICAgICAgICAgICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGVtaXQoKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGltU3VtLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb24uZGlzY29ubmVjdCgpXG4gICAgICAgICAgICAgICAgICAgIHdhdGNoZXMuZGVsZXRlKGVsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoZGltZW5zaW9uSXNFcSksIHNoYXJlUmVwbGF5KDEpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI2NyZWF0ZVdpbmRvd1Jlc2l6ZVdhdGNoZXIoKTogT2JzZXJ2YWJsZTxEaW1lbnNpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIG5ldyBPYnNlcnZhYmxlKChzdWI6IFN1YnNjcmliZXI8RGltZW5zaW9uPikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9uUmVzaXplID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdWIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvblJlc2l6ZSgpXG4gICAgICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgb25SZXNpemUpXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgb25SZXNpemUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZChkaW1lbnNpb25Jc0VxKSwgc2hhcmVSZXBsYXkoMSkpXG4gICAgICAgIClcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRpbWVuc2lvbklzRXEoYTogRGltZW5zaW9uLCBiOiBEaW1lbnNpb24pIHtcbiAgICByZXR1cm4gYSAmJiBiICYmIGEud2lkdGggPT09IGIud2lkdGggJiYgYS5oZWlnaHQgPT09IGIuaGVpZ2h0XG59XG4iXX0=
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { inject, Injectable, NgZone } from "@angular/core";
|
|
2
|
-
import { distinctUntilChanged, Observable, shareReplay } from "rxjs";
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class MediaWatcher {
|
|
5
|
-
#zone = inject(NgZone);
|
|
6
|
-
#watches = {};
|
|
7
|
-
/**
|
|
8
|
-
* svc.watch("(display-mode: standalone)").subscribe(match => {})
|
|
9
|
-
*/
|
|
10
|
-
watch(query) {
|
|
11
|
-
let watcher = this.#watches[query];
|
|
12
|
-
if (!watcher) {
|
|
13
|
-
watcher = this.#newWatcher(query);
|
|
14
|
-
this.#watches[query] = watcher;
|
|
15
|
-
}
|
|
16
|
-
return watcher;
|
|
17
|
-
}
|
|
18
|
-
#newWatcher(query) {
|
|
19
|
-
return this.#zone.runOutsideAngular(() => new Observable((sub) => {
|
|
20
|
-
const queryWatcher = window.matchMedia(query);
|
|
21
|
-
const listener = (event) => {
|
|
22
|
-
sub.next(event.matches);
|
|
23
|
-
};
|
|
24
|
-
queryWatcher.addEventListener("change", listener);
|
|
25
|
-
sub.next(queryWatcher.matches);
|
|
26
|
-
return () => {
|
|
27
|
-
queryWatcher.removeEventListener("change", listener);
|
|
28
|
-
delete this.#watches[query];
|
|
29
|
-
};
|
|
30
|
-
}).pipe(distinctUntilChanged(), shareReplay(1)));
|
|
31
|
-
}
|
|
32
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: MediaWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
33
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: MediaWatcher, providedIn: "root" }); }
|
|
34
|
-
}
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: MediaWatcher, decorators: [{
|
|
36
|
-
type: Injectable,
|
|
37
|
-
args: [{ providedIn: "root" }]
|
|
38
|
-
}] });
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtd2F0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3R5bGUvc3JjL3NlcnZpY2VzL21lZGlhLXdhdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxNQUFNLENBQUE7O0FBR2hGLE1BQU0sT0FBTyxZQUFZO0lBQ1osS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMvQixRQUFRLEdBQTJDLEVBQUUsQ0FBQTtJQUVyRDs7T0FFRztJQUNILEtBQUssQ0FBQyxLQUFhO1FBQ2YsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDWCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQTtRQUNsQyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUE7SUFDbEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDckMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUF3QixFQUFFLEVBQUU7WUFDeEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUM3QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQTBCLEVBQUUsRUFBRTtnQkFDNUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDM0IsQ0FBQyxDQUFBO1lBQ0QsWUFBWSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUNqRCxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUM5QixPQUFPLEdBQUcsRUFBRTtnQkFDUixZQUFZLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO2dCQUNwRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDL0IsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2xELENBQUE7SUFDTCxDQUFDOzhHQS9CUSxZQUFZO2tIQUFaLFlBQVksY0FEQyxNQUFNOzsyRkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCBTdWJzY3JpYmVyIH0gZnJvbSBcInJ4anNcIlxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgTWVkaWFXYXRjaGVyIHtcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpXG4gICAgI3dhdGNoZXM6IHsgW2tleTogc3RyaW5nXTogT2JzZXJ2YWJsZTxib29sZWFuPiB9ID0ge31cblxuICAgIC8qKlxuICAgICAqIHN2Yy53YXRjaChcIihkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpXCIpLnN1YnNjcmliZShtYXRjaCA9PiB7fSlcbiAgICAgKi9cbiAgICB3YXRjaChxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGxldCB3YXRjaGVyID0gdGhpcy4jd2F0Y2hlc1txdWVyeV1cbiAgICAgICAgaWYgKCF3YXRjaGVyKSB7XG4gICAgICAgICAgICB3YXRjaGVyID0gdGhpcy4jbmV3V2F0Y2hlcihxdWVyeSlcbiAgICAgICAgICAgIHRoaXMuI3dhdGNoZXNbcXVlcnldID0gd2F0Y2hlclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3YXRjaGVyXG4gICAgfVxuXG4gICAgI25ld1dhdGNoZXIocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgbmV3IE9ic2VydmFibGUoKHN1YjogU3Vic2NyaWJlcjxib29sZWFuPikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5V2F0Y2hlciA9IHdpbmRvdy5tYXRjaE1lZGlhKHF1ZXJ5KVxuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKGV2ZW50OiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi5uZXh0KGV2ZW50Lm1hdGNoZXMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHF1ZXJ5V2F0Y2hlci5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGxpc3RlbmVyKVxuICAgICAgICAgICAgICAgIHN1Yi5uZXh0KHF1ZXJ5V2F0Y2hlci5tYXRjaGVzKVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5V2F0Y2hlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGxpc3RlbmVyKVxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy4jd2F0Y2hlc1txdWVyeV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHNoYXJlUmVwbGF5KDEpKVxuICAgICAgICApXG4gICAgfVxufVxuIl19
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { DOCUMENT } from "@angular/common";
|
|
2
|
-
import { inject, Injectable, NgZone } from "@angular/core";
|
|
3
|
-
import { distinctUntilChanged, Observable, of, shareReplay } from "rxjs";
|
|
4
|
-
import { isEqual } from "lodash-es";
|
|
5
|
-
import { coerceElement } from "@ngutil/common";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class PositionWatcher {
|
|
8
|
-
#zone = inject(NgZone);
|
|
9
|
-
#document = inject(DOCUMENT);
|
|
10
|
-
#watches = new Map();
|
|
11
|
-
watch(element) {
|
|
12
|
-
if (element instanceof Window) {
|
|
13
|
-
return of({ x: 0, y: 0 });
|
|
14
|
-
}
|
|
15
|
-
element = coerceElement(element);
|
|
16
|
-
let watcher = this.#watches.get(element);
|
|
17
|
-
if (watcher == null) {
|
|
18
|
-
watcher = this.#createWatcher(element);
|
|
19
|
-
this.#watches.set(element, watcher);
|
|
20
|
-
}
|
|
21
|
-
return watcher;
|
|
22
|
-
}
|
|
23
|
-
#createWatcher(element) {
|
|
24
|
-
return this.#zone.runOutsideAngular(() => new Observable((dest) => {
|
|
25
|
-
let rafId = undefined;
|
|
26
|
-
const emit = () => {
|
|
27
|
-
if (!this.#document.contains(element)) {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const rect = element.getBoundingClientRect();
|
|
31
|
-
dest.next({
|
|
32
|
-
x: rect.x,
|
|
33
|
-
y: rect.y
|
|
34
|
-
});
|
|
35
|
-
if (!dest.closed) {
|
|
36
|
-
rafId = requestAnimationFrame(emit);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
emit();
|
|
40
|
-
return () => {
|
|
41
|
-
rafId && cancelAnimationFrame(rafId);
|
|
42
|
-
};
|
|
43
|
-
}).pipe(distinctUntilChanged(isEqual), shareReplay(1)));
|
|
44
|
-
}
|
|
45
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PositionWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
46
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PositionWatcher, providedIn: "root" }); }
|
|
47
|
-
}
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: PositionWatcher, decorators: [{
|
|
49
|
-
type: Injectable,
|
|
50
|
-
args: [{ providedIn: "root" }]
|
|
51
|
-
}] });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24td2F0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3R5bGUvc3JjL3NlcnZpY2VzL3Bvc2l0aW9uLXdhdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUVwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRW5DLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7O0FBSzVELE1BQU0sT0FBTyxlQUFlO0lBQ2YsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN0QixTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLFFBQVEsR0FBMkMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUVyRSxLQUFLLENBQUMsT0FBOEI7UUFDaEMsSUFBSSxPQUFPLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDNUIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzdCLENBQUM7UUFFRCxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3hDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUE7SUFDbEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFvQjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQ3JDLElBQUksVUFBVSxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFO1lBQzFDLElBQUksS0FBSyxHQUF1QixTQUFTLENBQUE7WUFDekMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNwQyxPQUFNO2dCQUNWLENBQUM7Z0JBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUE7Z0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ04sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNULENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDWixDQUFDLENBQUE7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDZixLQUFLLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ3ZDLENBQUM7WUFDTCxDQUFDLENBQUE7WUFDRCxJQUFJLEVBQUUsQ0FBQTtZQUNOLE9BQU8sR0FBRyxFQUFFO2dCQUNSLEtBQUssSUFBSSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN4QyxDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3pELENBQUE7SUFDTCxDQUFDOzhHQTdDUSxlQUFlO2tIQUFmLGVBQWUsY0FERixNQUFNOzsyRkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIlxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCJcblxuaW1wb3J0IHsgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tIFwiLi4vdXRpbC9yZWN0XCJcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uV2F0Y2hlciB7XG4gICAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKVxuICAgIHJlYWRvbmx5ICNkb2N1bWVudCA9IGluamVjdChET0NVTUVOVClcbiAgICByZWFkb25seSAjd2F0Y2hlczogTWFwPEhUTUxFbGVtZW50LCBPYnNlcnZhYmxlPFBvc2l0aW9uPj4gPSBuZXcgTWFwKClcblxuICAgIHdhdGNoKGVsZW1lbnQ6IEVsZW1lbnRJbnB1dCB8IFdpbmRvdyk6IE9ic2VydmFibGU8UG9zaXRpb24+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBXaW5kb3cpIHtcbiAgICAgICAgICAgIHJldHVybiBvZih7IHg6IDAsIHk6IDAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQgPSBjb2VyY2VFbGVtZW50KGVsZW1lbnQpXG5cbiAgICAgICAgbGV0IHdhdGNoZXIgPSB0aGlzLiN3YXRjaGVzLmdldChlbGVtZW50KVxuICAgICAgICBpZiAod2F0Y2hlciA9PSBudWxsKSB7XG4gICAgICAgICAgICB3YXRjaGVyID0gdGhpcy4jY3JlYXRlV2F0Y2hlcihlbGVtZW50KVxuICAgICAgICAgICAgdGhpcy4jd2F0Y2hlcy5zZXQoZWxlbWVudCwgd2F0Y2hlcilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3YXRjaGVyXG4gICAgfVxuXG4gICAgI2NyZWF0ZVdhdGNoZXIoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPFBvc2l0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZSgoZGVzdDogU3Vic2NyaWJlcjxQb3NpdGlvbj4pID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmFmSWQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIGNvbnN0IGVtaXQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy4jZG9jdW1lbnQuY29udGFpbnMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICAgICAgZGVzdC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlc3QuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShlbWl0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVtaXQoKVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJhZklkICYmIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoaXNFcXVhbCksIHNoYXJlUmVwbGF5KDEpKVxuICAgICAgICApXG4gICAgfVxufVxuIl19
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { inject, Injectable } from "@angular/core";
|
|
2
|
-
import { combineLatest, map, Observable } from "rxjs";
|
|
3
|
-
import { DimensionWatcher } from "./dimension-watcher.service";
|
|
4
|
-
import { PositionWatcher } from "./position-watcher.service";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class RectWatcher {
|
|
7
|
-
#dimWatcher = inject(DimensionWatcher);
|
|
8
|
-
#posWatcher = inject(PositionWatcher);
|
|
9
|
-
watch(element, watchBox) {
|
|
10
|
-
return new Observable((dest) => combineLatest({
|
|
11
|
-
dim: this.#dimWatcher.watch(element, watchBox),
|
|
12
|
-
pos: this.#posWatcher.watch(element)
|
|
13
|
-
})
|
|
14
|
-
.pipe(map(({ dim, pos }) => {
|
|
15
|
-
return { ...dim, ...pos };
|
|
16
|
-
}))
|
|
17
|
-
.subscribe(dest));
|
|
18
|
-
}
|
|
19
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RectWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RectWatcher, providedIn: "root" }); }
|
|
21
|
-
}
|
|
22
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: RectWatcher, decorators: [{
|
|
23
|
-
type: Injectable,
|
|
24
|
-
args: [{ providedIn: "root" }]
|
|
25
|
-
}] });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC13YXRjaGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvc2VydmljZXMvcmVjdC13YXRjaGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBS2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBWSxNQUFNLDZCQUE2QixDQUFBO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTs7QUFHNUQsTUFBTSxPQUFPLFdBQVc7SUFDWCxXQUFXLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDdEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUU5QyxLQUFLLENBQUMsT0FBOEIsRUFBRSxRQUFrQjtRQUNwRCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsSUFBc0IsRUFBRSxFQUFFLENBQzdDLGFBQWEsQ0FBQztZQUNWLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1lBQzlDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDdkMsQ0FBQzthQUNHLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBQzdCLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUN2QixDQUFBO0lBQ0wsQ0FBQzs4R0FqQlEsV0FBVztrSEFBWCxXQUFXLGNBREUsTUFBTTs7MkZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IEVsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IFJlY3QgfSBmcm9tIFwiLi4vdXRpbC9yZWN0XCJcbmltcG9ydCB7IERpbWVuc2lvbldhdGNoZXIsIFdhdGNoQm94IH0gZnJvbSBcIi4vZGltZW5zaW9uLXdhdGNoZXIuc2VydmljZVwiXG5pbXBvcnQgeyBQb3NpdGlvbldhdGNoZXIgfSBmcm9tIFwiLi9wb3NpdGlvbi13YXRjaGVyLnNlcnZpY2VcIlxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgUmVjdFdhdGNoZXIge1xuICAgIHJlYWRvbmx5ICNkaW1XYXRjaGVyID0gaW5qZWN0KERpbWVuc2lvbldhdGNoZXIpXG4gICAgcmVhZG9ubHkgI3Bvc1dhdGNoZXIgPSBpbmplY3QoUG9zaXRpb25XYXRjaGVyKVxuXG4gICAgd2F0Y2goZWxlbWVudDogRWxlbWVudElucHV0IHwgV2luZG93LCB3YXRjaEJveDogV2F0Y2hCb3gpOiBPYnNlcnZhYmxlPFJlY3Q+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkZXN0OiBTdWJzY3JpYmVyPFJlY3Q+KSA9PlxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICAgICAgZGltOiB0aGlzLiNkaW1XYXRjaGVyLndhdGNoKGVsZW1lbnQsIHdhdGNoQm94KSxcbiAgICAgICAgICAgICAgICBwb3M6IHRoaXMuI3Bvc1dhdGNoZXIud2F0Y2goZWxlbWVudClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoeyBkaW0sIHBvcyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5kaW0sIC4uLnBvcyB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZGVzdClcbiAgICAgICAgKVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { isPlainObject } from "@ngutil/common";
|
|
2
|
-
const HORIZONTAL = ["start", "left", "center", "end", "right"];
|
|
3
|
-
export const AlignHorizontalOpposite = {
|
|
4
|
-
start: "end",
|
|
5
|
-
left: "right",
|
|
6
|
-
center: "center",
|
|
7
|
-
end: "start",
|
|
8
|
-
right: "left"
|
|
9
|
-
};
|
|
10
|
-
const VERTICAL = ["top", "middle", "bottom"];
|
|
11
|
-
export const AlignVerticalOpposite = {
|
|
12
|
-
top: "bottom",
|
|
13
|
-
middle: "middle",
|
|
14
|
-
bottom: "top"
|
|
15
|
-
};
|
|
16
|
-
const DEFAULT = { horizontal: "center", vertical: "middle" };
|
|
17
|
-
export function alignmentNormalize(value) {
|
|
18
|
-
if (value == null) {
|
|
19
|
-
return DEFAULT;
|
|
20
|
-
}
|
|
21
|
-
if (isPlainObject(value)) {
|
|
22
|
-
if ("horizontal" in value && "vertical" in value) {
|
|
23
|
-
return value;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
throw new Error(`Invalid alignment: ${value}`);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
if (typeof value !== "string") {
|
|
30
|
-
throw new Error(`Invalid alignment: ${value}`);
|
|
31
|
-
}
|
|
32
|
-
const entries = Array.from(new Set(value.split(/\s+/g)));
|
|
33
|
-
if (entries.length > 2) {
|
|
34
|
-
throw new Error(`Cannot parse: ${value}`);
|
|
35
|
-
}
|
|
36
|
-
const horizontal = HORIZONTAL.find(v => entries[0] === v || entries[1] === v) || "center";
|
|
37
|
-
const vertical = VERTICAL.find(v => entries[0] === v || entries[1] === v) || "middle";
|
|
38
|
-
return { horizontal, vertical };
|
|
39
|
-
}
|
|
40
|
-
const HorizontalOrigin = {
|
|
41
|
-
start: "left",
|
|
42
|
-
left: "left",
|
|
43
|
-
center: "center",
|
|
44
|
-
right: "right",
|
|
45
|
-
end: "right"
|
|
46
|
-
};
|
|
47
|
-
const VerticalOrigin = {
|
|
48
|
-
top: "top",
|
|
49
|
-
middle: "center",
|
|
50
|
-
bottom: "bottom"
|
|
51
|
-
};
|
|
52
|
-
export function alignmentToTransformOrigin(alignment) {
|
|
53
|
-
return `${HorizontalOrigin[alignment.horizontal] || "center"} ${VerticalOrigin[alignment.vertical] || "center"}`;
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3R5bGUvc3JjL3V0aWwvYWxpZ25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQVUsQ0FBQTtBQUd2RSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBNkM7SUFDN0UsS0FBSyxFQUFFLEtBQUs7SUFDWixJQUFJLEVBQUUsT0FBTztJQUNiLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEdBQUcsRUFBRSxPQUFPO0lBQ1osS0FBSyxFQUFFLE1BQU07Q0FDaEIsQ0FBQTtBQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQVUsQ0FBQTtBQUdyRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBeUM7SUFDdkUsR0FBRyxFQUFFLFFBQVE7SUFDYixNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsS0FBSztDQUNoQixDQUFBO0FBY0QsTUFBTSxPQUFPLEdBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQTtBQUV2RSxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBc0I7SUFDckQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDaEIsT0FBTyxPQUFPLENBQUE7SUFDbEIsQ0FBQztJQUVELElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsSUFBSSxZQUFZLElBQUksS0FBSyxJQUFJLFVBQVUsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMvQyxPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFxQixDQUFBO0lBQzVFLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFBO0lBQ3pGLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUE7SUFFckYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBeUQ7SUFDM0UsS0FBSyxFQUFFLE1BQU07SUFDYixJQUFJLEVBQUUsTUFBTTtJQUNaLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEtBQUssRUFBRSxPQUFPO0lBQ2QsR0FBRyxFQUFFLE9BQU87Q0FDZixDQUFBO0FBRUQsTUFBTSxjQUFjLEdBQXVEO0lBQ3ZFLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsTUFBTSxFQUFFLFFBQVE7Q0FDbkIsQ0FBQTtBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxTQUFvQjtJQUMzRCxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsSUFBSSxjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFBO0FBQ3BILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuY29uc3QgSE9SSVpPTlRBTCA9IFtcInN0YXJ0XCIsIFwibGVmdFwiLCBcImNlbnRlclwiLCBcImVuZFwiLCBcInJpZ2h0XCJdIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBBbGlnbkhvcml6b250YWwgPSAodHlwZW9mIEhPUklaT05UQUwpW251bWJlcl1cblxuZXhwb3J0IGNvbnN0IEFsaWduSG9yaXpvbnRhbE9wcG9zaXRlOiBSZWNvcmQ8QWxpZ25Ib3Jpem9udGFsLCBBbGlnbkhvcml6b250YWw+ID0ge1xuICAgIHN0YXJ0OiBcImVuZFwiLFxuICAgIGxlZnQ6IFwicmlnaHRcIixcbiAgICBjZW50ZXI6IFwiY2VudGVyXCIsXG4gICAgZW5kOiBcInN0YXJ0XCIsXG4gICAgcmlnaHQ6IFwibGVmdFwiXG59XG5cbmNvbnN0IFZFUlRJQ0FMID0gW1widG9wXCIsIFwibWlkZGxlXCIsIFwiYm90dG9tXCJdIGFzIGNvbnN0XG5leHBvcnQgdHlwZSBBbGlnblZlcnRpY2FsID0gKHR5cGVvZiBWRVJUSUNBTClbbnVtYmVyXVxuXG5leHBvcnQgY29uc3QgQWxpZ25WZXJ0aWNhbE9wcG9zaXRlOiBSZWNvcmQ8QWxpZ25WZXJ0aWNhbCwgQWxpZ25WZXJ0aWNhbD4gPSB7XG4gICAgdG9wOiBcImJvdHRvbVwiLFxuICAgIG1pZGRsZTogXCJtaWRkbGVcIixcbiAgICBib3R0b206IFwidG9wXCJcbn1cblxuZXhwb3J0IHR5cGUgQWxpZ25tZW50SW5wdXQgPVxuICAgIHwgYCR7QWxpZ25Ib3Jpem9udGFsfSAke0FsaWduVmVydGljYWx9YFxuICAgIHwgYCR7QWxpZ25WZXJ0aWNhbH0gJHtBbGlnbkhvcml6b250YWx9YFxuICAgIHwgQWxpZ25WZXJ0aWNhbFxuICAgIHwgQWxpZ25Ib3Jpem9udGFsXG4gICAgfCBBbGlnbm1lbnRcblxuZXhwb3J0IGludGVyZmFjZSBBbGlnbm1lbnQge1xuICAgIGhvcml6b250YWw6IEFsaWduSG9yaXpvbnRhbFxuICAgIHZlcnRpY2FsOiBBbGlnblZlcnRpY2FsXG59XG5cbmNvbnN0IERFRkFVTFQ6IEFsaWdubWVudCA9IHsgaG9yaXpvbnRhbDogXCJjZW50ZXJcIiwgdmVydGljYWw6IFwibWlkZGxlXCIgfVxuXG5leHBvcnQgZnVuY3Rpb24gYWxpZ25tZW50Tm9ybWFsaXplKHZhbHVlPzogQWxpZ25tZW50SW5wdXQpOiBBbGlnbm1lbnQge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBERUZBVUxUXG4gICAgfVxuXG4gICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGlmIChcImhvcml6b250YWxcIiBpbiB2YWx1ZSAmJiBcInZlcnRpY2FsXCIgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFsaWdubWVudDogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYWxpZ25tZW50OiAke3ZhbHVlfWApXG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IEFycmF5LmZyb20obmV3IFNldCh2YWx1ZS5zcGxpdCgvXFxzKy9nKSkpIGFzIFtzdHJpbmcsIHN0cmluZ11cbiAgICBpZiAoZW50cmllcy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHBhcnNlOiAke3ZhbHVlfWApXG4gICAgfVxuXG4gICAgY29uc3QgaG9yaXpvbnRhbCA9IEhPUklaT05UQUwuZmluZCh2ID0+IGVudHJpZXNbMF0gPT09IHYgfHwgZW50cmllc1sxXSA9PT0gdikgfHwgXCJjZW50ZXJcIlxuICAgIGNvbnN0IHZlcnRpY2FsID0gVkVSVElDQUwuZmluZCh2ID0+IGVudHJpZXNbMF0gPT09IHYgfHwgZW50cmllc1sxXSA9PT0gdikgfHwgXCJtaWRkbGVcIlxuXG4gICAgcmV0dXJuIHsgaG9yaXpvbnRhbCwgdmVydGljYWwgfVxufVxuXG5jb25zdCBIb3Jpem9udGFsT3JpZ2luOiBSZWNvcmQ8QWxpZ25Ib3Jpem9udGFsLCBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCI+ID0ge1xuICAgIHN0YXJ0OiBcImxlZnRcIixcbiAgICBsZWZ0OiBcImxlZnRcIixcbiAgICBjZW50ZXI6IFwiY2VudGVyXCIsXG4gICAgcmlnaHQ6IFwicmlnaHRcIixcbiAgICBlbmQ6IFwicmlnaHRcIlxufVxuXG5jb25zdCBWZXJ0aWNhbE9yaWdpbjogUmVjb3JkPEFsaWduVmVydGljYWwsIFwidG9wXCIgfCBcImNlbnRlclwiIHwgXCJib3R0b21cIj4gPSB7XG4gICAgdG9wOiBcInRvcFwiLFxuICAgIG1pZGRsZTogXCJjZW50ZXJcIixcbiAgICBib3R0b206IFwiYm90dG9tXCJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWdubWVudFRvVHJhbnNmb3JtT3JpZ2luKGFsaWdubWVudDogQWxpZ25tZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7SG9yaXpvbnRhbE9yaWdpblthbGlnbm1lbnQuaG9yaXpvbnRhbF0gfHwgXCJjZW50ZXJcIn0gJHtWZXJ0aWNhbE9yaWdpblthbGlnbm1lbnQudmVydGljYWxdIHx8IFwiY2VudGVyXCJ9YFxufVxuIl19
|