@ngutil/style 0.0.24 → 0.0.26
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/esm2022/index.mjs +6 -1
- package/esm2022/services/dimension-watcher.service.mjs +29 -8
- package/esm2022/services/position-watcher.service.mjs +47 -0
- package/esm2022/services/rect-watcher.service.mjs +29 -0
- package/esm2022/util/alignment.mjs +19 -0
- package/esm2022/util/in-animation.mjs +70 -0
- package/esm2022/util/rect.mjs +1 -1
- package/esm2022/util/sides.mjs +21 -0
- package/fesm2022/ngutil-style.mjs +204 -9
- package/fesm2022/ngutil-style.mjs.map +1 -1
- package/index.d.ts +6 -1
- package/package.json +3 -2
- package/services/dimension-watcher.service.d.ts +3 -3
- package/services/position-watcher.service.d.ts +10 -0
- package/services/rect-watcher.service.d.ts +11 -0
- package/util/alignment.d.ts +11 -0
- package/util/in-animation.d.ts +4 -0
- package/util/rect.d.ts +3 -1
- package/util/sides.d.ts +11 -0
package/esm2022/index.mjs
CHANGED
|
@@ -2,4 +2,9 @@ export { MediaWatcher } from "./services/media-watcher.service";
|
|
|
2
2
|
export { ColorSchemeService } from "./services/color-scheme.service";
|
|
3
3
|
export { Ease, Duration } from "./sass";
|
|
4
4
|
export { DimensionWatcher } from "./services/dimension-watcher.service";
|
|
5
|
-
|
|
5
|
+
export { PositionWatcher } from "./services/position-watcher.service";
|
|
6
|
+
export { RectWatcher } from "./services/rect-watcher.service";
|
|
7
|
+
export { alignmentNormalize } from "./util/alignment";
|
|
8
|
+
export { inAnimation, inTransition, isAnimating } from "./util/in-animation";
|
|
9
|
+
export { sidesNormalize } from "./util/sides";
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3BFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBWSxNQUFNLHNDQUFzQyxDQUFBO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFFN0QsT0FBTyxFQUFrQixrQkFBa0IsRUFBNkMsTUFBTSxrQkFBa0IsQ0FBQTtBQUNoSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUU1RSxPQUFPLEVBQWMsY0FBYyxFQUFTLE1BQU0sY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgTWVkaWFXYXRjaGVyIH0gZnJvbSBcIi4vc2VydmljZXMvbWVkaWEtd2F0Y2hlci5zZXJ2aWNlXCJcbmV4cG9ydCB7IENvbG9yU2NoZW1lU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2VzL2NvbG9yLXNjaGVtZS5zZXJ2aWNlXCJcbmV4cG9ydCB7IEVhc2UsIER1cmF0aW9uIH0gZnJvbSBcIi4vc2Fzc1wiXG5leHBvcnQgeyBEaW1lbnNpb25XYXRjaGVyLCBXYXRjaEJveCB9IGZyb20gXCIuL3NlcnZpY2VzL2RpbWVuc2lvbi13YXRjaGVyLnNlcnZpY2VcIlxuZXhwb3J0IHsgUG9zaXRpb25XYXRjaGVyIH0gZnJvbSBcIi4vc2VydmljZXMvcG9zaXRpb24td2F0Y2hlci5zZXJ2aWNlXCJcbmV4cG9ydCB7IFJlY3RXYXRjaGVyIH0gZnJvbSBcIi4vc2VydmljZXMvcmVjdC13YXRjaGVyLnNlcnZpY2VcIlxuXG5leHBvcnQgeyBBbGlnbm1lbnRJbnB1dCwgYWxpZ25tZW50Tm9ybWFsaXplLCBBbGlnbm1lbnQsIEFsaWduSG9yaXpvbnRhbCwgQWxpZ25WZXJ0aWNhbCB9IGZyb20gXCIuL3V0aWwvYWxpZ25tZW50XCJcbmV4cG9ydCB7IGluQW5pbWF0aW9uLCBpblRyYW5zaXRpb24sIGlzQW5pbWF0aW5nIH0gZnJvbSBcIi4vdXRpbC9pbi1hbmltYXRpb25cIlxuZXhwb3J0IHsgRGltZW5zaW9uLCBSZWN0LCBQb3NpdGlvbiB9IGZyb20gXCIuL3V0aWwvcmVjdFwiXG5leHBvcnQgeyBTaWRlc0lucHV0LCBzaWRlc05vcm1hbGl6ZSwgU2lkZXMgfSBmcm9tIFwiLi91dGlsL3NpZGVzXCJcbiJdfQ==
|
|
@@ -1,25 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { inject, Injectable, NgZone } from "@angular/core";
|
|
2
2
|
import { distinctUntilChanged, Observable, shareReplay } from "rxjs";
|
|
3
|
+
import { coerceElement } from "@ngutil/common";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export class DimensionWatcher {
|
|
5
6
|
#zone = inject(NgZone);
|
|
6
7
|
#watches = {};
|
|
7
8
|
watch(element, box) {
|
|
9
|
+
element = coerceElement(element);
|
|
8
10
|
let watches = this.#watches[box];
|
|
9
11
|
if (watches == null) {
|
|
10
12
|
watches = new Map();
|
|
11
13
|
this.#watches[box] = watches;
|
|
12
14
|
}
|
|
13
|
-
|
|
14
|
-
let watcher = watches.get(el);
|
|
15
|
+
let watcher = watches.get(element);
|
|
15
16
|
if (watcher == null) {
|
|
16
|
-
if (
|
|
17
|
-
watcher = this.#
|
|
17
|
+
if (element instanceof Window) {
|
|
18
|
+
watcher = this.#createWindowResizeWatcher();
|
|
18
19
|
}
|
|
19
20
|
else {
|
|
20
|
-
|
|
21
|
+
if (box === "scroll-box") {
|
|
22
|
+
watcher = this.#createScollWatcher(watches, element);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
watcher = this.#createResizeWatcher(watches, element, box);
|
|
26
|
+
}
|
|
21
27
|
}
|
|
22
|
-
watches.set(
|
|
28
|
+
watches.set(element, watcher);
|
|
23
29
|
}
|
|
24
30
|
return watcher;
|
|
25
31
|
}
|
|
@@ -81,6 +87,21 @@ export class DimensionWatcher {
|
|
|
81
87
|
};
|
|
82
88
|
}).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1)));
|
|
83
89
|
}
|
|
90
|
+
#createWindowResizeWatcher() {
|
|
91
|
+
return this.#zone.runOutsideAngular(() => new Observable((sub) => {
|
|
92
|
+
const onResize = () => {
|
|
93
|
+
sub.next({
|
|
94
|
+
width: window.innerWidth,
|
|
95
|
+
height: window.innerHeight
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
onResize();
|
|
99
|
+
window.addEventListener("resize", onResize);
|
|
100
|
+
return () => {
|
|
101
|
+
window.removeEventListener("resize", onResize);
|
|
102
|
+
};
|
|
103
|
+
}).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1)));
|
|
104
|
+
}
|
|
84
105
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DimensionWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
85
106
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DimensionWatcher, providedIn: "root" }); }
|
|
86
107
|
}
|
|
@@ -91,4 +112,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImpor
|
|
|
91
112
|
function dimensionIsEq(a, b) {
|
|
92
113
|
return a && b && a.width === b.width && a.height === b.height;
|
|
93
114
|
}
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLXdhdGNoZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0eWxlL3NyYy9zZXJ2aWNlcy9kaW1lbnNpb24td2F0Y2hlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxNQUFNLENBQUE7O0FBUWhGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDaEIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN0QixRQUFRLEdBQW9DLEVBQUUsQ0FBQTtJQUV2RCxLQUFLLENBQUMsT0FBOEMsRUFBRSxHQUFhO1FBQy9ELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUE7UUFDaEMsQ0FBQztRQUVELE1BQU0sRUFBRSxHQUFHLE9BQU8sWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUUxRSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzdCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLElBQUksR0FBRyxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUN2QixPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMs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QUFTLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMzQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDakIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJO2FBQ3RCLENBQUMsQ0FBQTtZQUNGLElBQUksRUFBRSxDQUFBO1lBRU4sT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFBO2dCQUNwQixRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7Z0JBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDdEIsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMvRCxDQUFBO0lBQ0wsQ0FBQzs4R0E1RlEsZ0JBQWdCO2tIQUFoQixnQkFBZ0IsY0FESCxNQUFNOzsyRkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUFnR2xDLFNBQVMsYUFBYSxDQUFDLENBQVksRUFBRSxDQUFZO0lBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFBO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCBTdWJzY3JpYmVyIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBEaW1lbnNpb24gfSBmcm9tIFwiLi4vdXRpbC9yZWN0XCJcblxuZXhwb3J0IHR5cGUgV2F0Y2hCb3ggPSBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfCBcInNjcm9sbC1ib3hcIlxuZXhwb3J0IHR5cGUgV2F0Y2hlcyA9IE1hcDxIVE1MRWxlbWVudCwgT2JzZXJ2YWJsZTxEaW1lbnNpb24+PlxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgRGltZW5zaW9uV2F0Y2hlciB7XG4gICAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKVxuICAgIHJlYWRvbmx5ICN3YXRjaGVzOiB7IFtrZXkgaW4gV2F0Y2hCb3hdPzogV2F0Y2hlcyB9ID0ge31cblxuICAgIHdhdGNoKGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sIGJveDogV2F0Y2hCb3gpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgICAgICBsZXQgd2F0Y2hlcyA9IHRoaXMuI3dhdGNoZXNbYm94XVxuICAgICAgICBpZiAod2F0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB3YXRjaGVzID0gbmV3IE1hcCgpXG4gICAgICAgICAgICB0aGlzLiN3YXRjaGVzW2JveF0gPSB3YXRjaGVzXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbCA9IGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50UmVmID8gZWxlbWVudC5uYXRpdmVFbGVtZW50IDogZWxlbWVudFxuXG4gICAgICAgIGxldCB3YXRjaGVyID0gd2F0Y2hlcy5nZXQoZWwpXG4gICAgICAgIGlmICh3YXRjaGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChib3ggPT09IFwic2Nyb2xsLWJveFwiKSB7XG4gICAgICAgICAgICAgICAgd2F0Y2hlciA9IHRoaXMuI2NyZWF0ZVNjb2xsV2F0Y2hlcih3YXRjaGVzLCBlbClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2F0Y2hlciA9IHRoaXMuI2NyZWF0ZVJlc2l6ZVdhdGNoZXIod2F0Y2hlcywgZWwsIGJveClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdhdGNoZXMuc2V0KGVsLCB3YXRjaGVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdhdGNoZXJcbiAgICB9XG5cbiAgICAjY3JlYXRlUmVzaXplV2F0Y2hlcih3YXRjaGVzOiBXYXRjaGVzLCBlbDogSFRNTEVsZW1lbnQsIGJveDogV2F0Y2hCb3gpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgICAgICBpZiAoYm94ICE9PSBcImJvcmRlci1ib3hcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJyZW50bHkgbm90IGltcGxlbWVudGVkIGJveCBtb2RlOiAke2JveH1gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIG5ldyBPYnNlcnZhYmxlKChzdWI6IFN1YnNjcmliZXI8RGltZW5zaW9uPikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5ib3JkZXJCb3hTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZW50cnkuYm9yZGVyQm94U2l6ZVswXS5pbmxpbmVTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGVudHJ5LmJvcmRlckJveFNpemVbMF0uYmxvY2tTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZWwub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogZWwub2Zmc2V0SGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCwgeyBib3g6IGJveCBhcyBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfSlcblxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgICAgICAgICAgICAgICB3YXRjaGVzLmRlbGV0ZShlbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKGRpbWVuc2lvbklzRXEpLCBzaGFyZVJlcGxheSgxKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgICNjcmVhdGVTY29sbFdhdGNoZXIod2F0Y2hlczogV2F0Y2hlcywgZWw6IEhUTUxFbGVtZW50KTogT2JzZXJ2YWJsZTxEaW1lbnNpb24+IHtcbiAgICAgICAgY29uc3QgYm9yZGVyQm94ID0gdGhpcy53YXRjaChlbCwgXCJib3JkZXItYm94XCIpXG4gICAgICAgIHJldHVybiB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZSgoc3ViOiBTdWJzY3JpYmVyPERpbWVuc2lvbj4pID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdFN3OiBudW1iZXIgPSBOYU5cbiAgICAgICAgICAgICAgICBsZXQgbGFzdFNoOiBudW1iZXIgPSBOYU5cblxuICAgICAgICAgICAgICAgIGNvbnN0IGVtaXQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3ID0gZWwuc2Nyb2xsV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2ggPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RTdyAhPT0gc3cgfHwgbGFzdFNoICE9PSBzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFN3ID0gc3dcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTaCA9IHNoXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIubmV4dCh7IHdpZHRoOiBsYXN0U3csIGhlaWdodDogbGFzdFNoIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaW1TdW0gPSBib3JkZXJCb3guc3Vic2NyaWJlKGVtaXQpXG4gICAgICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBuZXcgTXV0YXRpb25PYnNlcnZlcihlbWl0KVxuICAgICAgICAgICAgICAgIG11dGF0aW9uLm9ic2VydmUoZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBlbWl0KClcblxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRpbVN1bS51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgICAgIG11dGF0aW9uLmRpc2Nvbm5lY3QoKVxuICAgICAgICAgICAgICAgICAgICB3YXRjaGVzLmRlbGV0ZShlbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKGRpbWVuc2lvbklzRXEpLCBzaGFyZVJlcGxheSgxKSlcbiAgICAgICAgKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZGltZW5zaW9uSXNFcShhOiBEaW1lbnNpb24sIGI6IERpbWVuc2lvbikge1xuICAgIHJldHVybiBhICYmIGIgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHRcbn1cbiJdfQ==
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLXdhdGNoZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0eWxlL3NyYy9zZXJ2aWNlcy9kaW1lbnNpb24td2F0Y2hlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUUxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUVoRixPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLGdCQUFnQixDQUFBOztBQVE1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ2hCLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEIsUUFBUSxHQUFvQyxFQUFFLENBQUE7SUFFdkQsS0FBSyxDQUFDLE9BQThCLEVBQUUsR0FBYTtRQUMvQyxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUE7UUFDaEMsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDbEMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEIsSUFBSSxPQUFPLFlBQVksTUFBTSxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxHQUFHLEtBQUssWUFBWSxFQUFFLENBQUM7b0JBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUN4RCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFBO2dCQUM5RCxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2pDLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQTtJQUNsQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBZ0IsRUFBRSxFQUFlLEVBQUUsR0FBYTtRQUNqRSxJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxHQUFHLEVBQUUsQ0FBQyxDQUFBO1FBQ2pFLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQ3JDLElBQUksVUFBVSxDQUFDLENBQUMsR0FBMEIsRUFBRSxFQUFFO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUMxQixJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDdEIsR0FBRyxDQUFDLElBQUksQ0FBQzs0QkFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVOzRCQUN4QyxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO3lCQUMzQyxDQUFDLENBQUE7b0JBQ04sQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLEdBQUcsQ0FBQyxJQUFJLENBQUM7NEJBQ0wsS0FBSyxFQUFFLEVBQUUsQ0FBQyxXQUFXOzRCQUNyQixNQUFNLEVBQUUsRUFBRSxDQUFDLFlBQVk7eUJBQzFCLENBQUMsQ0FBQTtvQkFDTixDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQTtZQUNGLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQStCLEVBQUUsQ0FBQyxDQUFBO1lBRTlELE9BQU8sR0FBRyxFQUFFO2dCQUNSLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtnQkFDckIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUN0QixDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9ELENBQUE7SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBZ0IsRUFBRSxFQUFlO1FBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDckMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUEwQixFQUFFLEVBQUU7WUFDMUMsSUFBSSxNQUFNLEdBQVcsR0FBRyxDQUFBO1lBQ3hCLElBQUksTUFBTSxHQUFXLEdBQUcsQ0FBQTtZQUV4QixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQTtnQkFDekIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQTtnQkFDMUIsSUFBSSxNQUFNLEtBQUssRUFBRSxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxHQUFHLEVBQUUsQ0FBQTtvQkFDWCxNQUFNLEdBQUcsRUFBRSxDQUFBO29CQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO2dCQUMvQyxDQUFDO1lBQ0wsQ0FBQyxDQUFBO1lBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzNDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsYUFBYSxFQUFFLElBQUk7YUFDdEIsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxFQUFFLENBQUE7WUFFTixPQUFPLEdBQUcsRUFBRTtnQkFDUixNQUFNLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQ3BCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtnQkFDckIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUN0QixDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9ELENBQUE7SUFDTCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDckMsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUEwQixFQUFFLEVBQUU7WUFDMUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUNsQixHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVTtvQkFDeEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXO2lCQUM3QixDQUFDLENBQUE7WUFDTixDQUFDLENBQUE7WUFDRCxRQUFRLEVBQUUsQ0FBQTtZQUNWLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUE7WUFDM0MsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUNsRCxDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9ELENBQUE7SUFDTCxDQUFDOzhHQW5IUSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQURILE1BQU07OzJGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXVIbEMsU0FBUyxhQUFhLENBQUMsQ0FBWSxFQUFFLENBQVk7SUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUE7QUFDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQsIEVsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IERpbWVuc2lvbiB9IGZyb20gXCIuLi91dGlsL3JlY3RcIlxuXG5leHBvcnQgdHlwZSBXYXRjaEJveCA9IFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB8IFwic2Nyb2xsLWJveFwiXG5leHBvcnQgdHlwZSBXYXRjaGVzID0gTWFwPEhUTUxFbGVtZW50IHwgV2luZG93LCBPYnNlcnZhYmxlPERpbWVuc2lvbj4+XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBEaW1lbnNpb25XYXRjaGVyIHtcbiAgICByZWFkb25seSAjem9uZSA9IGluamVjdChOZ1pvbmUpXG4gICAgcmVhZG9ubHkgI3dhdGNoZXM6IHsgW2tleSBpbiBXYXRjaEJveF0/OiBXYXRjaGVzIH0gPSB7fVxuXG4gICAgd2F0Y2goZWxlbWVudDogRWxlbWVudElucHV0IHwgV2luZG93LCBib3g6IFdhdGNoQm94KTogT2JzZXJ2YWJsZTxEaW1lbnNpb24+IHtcbiAgICAgICAgZWxlbWVudCA9IGNvZXJjZUVsZW1lbnQoZWxlbWVudClcblxuICAgICAgICBsZXQgd2F0Y2hlcyA9IHRoaXMuI3dhdGNoZXNbYm94XVxuICAgICAgICBpZiAod2F0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB3YXRjaGVzID0gbmV3IE1hcCgpXG4gICAgICAgICAgICB0aGlzLiN3YXRjaGVzW2JveF0gPSB3YXRjaGVzXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgd2F0Y2hlciA9IHdhdGNoZXMuZ2V0KGVsZW1lbnQpXG4gICAgICAgIGlmICh3YXRjaGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgV2luZG93KSB7XG4gICAgICAgICAgICAgICAgd2F0Y2hlciA9IHRoaXMuI2NyZWF0ZVdpbmRvd1Jlc2l6ZVdhdGNoZXIoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoYm94ID09PSBcInNjcm9sbC1ib3hcIikge1xuICAgICAgICAgICAgICAgICAgICB3YXRjaGVyID0gdGhpcy4jY3JlYXRlU2NvbGxXYXRjaGVyKHdhdGNoZXMsIGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlciA9IHRoaXMuI2NyZWF0ZVJlc2l6ZVdhdGNoZXIod2F0Y2hlcywgZWxlbWVudCwgYm94KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2F0Y2hlcy5zZXQoZWxlbWVudCwgd2F0Y2hlcilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB3YXRjaGVyXG4gICAgfVxuXG4gICAgI2NyZWF0ZVJlc2l6ZVdhdGNoZXIod2F0Y2hlczogV2F0Y2hlcywgZWw6IEhUTUxFbGVtZW50LCBib3g6IFdhdGNoQm94KTogT2JzZXJ2YWJsZTxEaW1lbnNpb24+IHtcbiAgICAgICAgaWYgKGJveCAhPT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCBib3ggbW9kZTogJHtib3h9YClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiN6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZSgoc3ViOiBTdWJzY3JpYmVyPERpbWVuc2lvbj4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuYm9yZGVyQm94U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yi5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGVudHJ5LmJvcmRlckJveFNpemVbMF0uaW5saW5lU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBlbnRyeS5ib3JkZXJCb3hTaXplWzBdLmJsb2NrU2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yi5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGVsLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGVsLm9mZnNldEhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoZWwsIHsgYm94OiBib3ggYXMgUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlcy5kZWxldGUoZWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZChkaW1lbnNpb25Jc0VxKSwgc2hhcmVSZXBsYXkoMSkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAjY3JlYXRlU2NvbGxXYXRjaGVyKHdhdGNoZXM6IFdhdGNoZXMsIGVsOiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8RGltZW5zaW9uPiB7XG4gICAgICAgIGNvbnN0IGJvcmRlckJveCA9IHRoaXMud2F0Y2goZWwsIFwiYm9yZGVyLWJveFwiKVxuICAgICAgICByZXR1cm4gdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgbmV3IE9ic2VydmFibGUoKHN1YjogU3Vic2NyaWJlcjxEaW1lbnNpb24+KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RTdzogbnVtYmVyID0gTmFOXG4gICAgICAgICAgICAgICAgbGV0IGxhc3RTaDogbnVtYmVyID0gTmFOXG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbWl0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdyA9IGVsLnNjcm9sbFdpZHRoXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0U3cgIT09IHN3IHx8IGxhc3RTaCAhPT0gc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTdyA9IHN3XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0U2ggPSBzaFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoeyB3aWR0aDogbGFzdFN3LCBoZWlnaHQ6IGxhc3RTaCB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGltU3VtID0gYm9yZGVyQm94LnN1YnNjcmliZShlbWl0KVxuICAgICAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZW1pdClcbiAgICAgICAgICAgICAgICBtdXRhdGlvbi5vYnNlcnZlKGVsLCB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgZW1pdCgpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkaW1TdW0udW5zdWJzY3JpYmUoKVxuICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbi5kaXNjb25uZWN0KClcbiAgICAgICAgICAgICAgICAgICAgd2F0Y2hlcy5kZWxldGUoZWwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZChkaW1lbnNpb25Jc0VxKSwgc2hhcmVSZXBsYXkoMSkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAjY3JlYXRlV2luZG93UmVzaXplV2F0Y2hlcigpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICAgICAgbmV3IE9ic2VydmFibGUoKHN1YjogU3Vic2NyaWJlcjxEaW1lbnNpb24+KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb25SZXNpemUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogd2luZG93LmlubmVySGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9uUmVzaXplKClcbiAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlc2l6ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlc2l6ZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKGRpbWVuc2lvbklzRXEpLCBzaGFyZVJlcGxheSgxKSlcbiAgICAgICAgKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZGltZW5zaW9uSXNFcShhOiBEaW1lbnNpb24sIGI6IERpbWVuc2lvbikge1xuICAgIHJldHVybiBhICYmIGIgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHRcbn1cbiJdfQ==
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { inject, Injectable, NgZone } from "@angular/core";
|
|
2
|
+
import { distinctUntilChanged, Observable, of, shareReplay } from "rxjs";
|
|
3
|
+
import { isEqual } from "lodash";
|
|
4
|
+
import { coerceElement } from "@ngutil/common";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class PositionWatcher {
|
|
7
|
+
#zone = inject(NgZone);
|
|
8
|
+
#watches = new Map();
|
|
9
|
+
watch(element) {
|
|
10
|
+
if (element instanceof Window) {
|
|
11
|
+
return of({ x: 0, y: 0 });
|
|
12
|
+
}
|
|
13
|
+
element = coerceElement(element);
|
|
14
|
+
let watcher = this.#watches.get(element);
|
|
15
|
+
if (watcher == null) {
|
|
16
|
+
watcher = this.#createWatcher(element);
|
|
17
|
+
this.#watches.set(element, watcher);
|
|
18
|
+
}
|
|
19
|
+
return watcher;
|
|
20
|
+
}
|
|
21
|
+
#createWatcher(element) {
|
|
22
|
+
return this.#zone.runOutsideAngular(() => new Observable((dest) => {
|
|
23
|
+
let rafId = undefined;
|
|
24
|
+
const emit = () => {
|
|
25
|
+
const rect = element.getBoundingClientRect();
|
|
26
|
+
dest.next({
|
|
27
|
+
x: rect.x,
|
|
28
|
+
y: rect.y
|
|
29
|
+
});
|
|
30
|
+
if (!dest.closed) {
|
|
31
|
+
rafId = requestAnimationFrame(emit);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
emit();
|
|
35
|
+
return () => {
|
|
36
|
+
rafId && cancelAnimationFrame(rafId);
|
|
37
|
+
};
|
|
38
|
+
}).pipe(distinctUntilChanged(isEqual), shareReplay(1)));
|
|
39
|
+
}
|
|
40
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PositionWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
41
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PositionWatcher, providedIn: "root" }); }
|
|
42
|
+
}
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PositionWatcher, decorators: [{
|
|
44
|
+
type: Injectable,
|
|
45
|
+
args: [{ providedIn: "root" }]
|
|
46
|
+
}] });
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24td2F0Y2hlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3R5bGUvc3JjL3NlcnZpY2VzL3Bvc2l0aW9uLXdhdGNoZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBRXBGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFaEMsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxnQkFBZ0IsQ0FBQTs7QUFLNUQsTUFBTSxPQUFPLGVBQWU7SUFDZixLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RCLFFBQVEsR0FBMkMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUVyRSxLQUFLLENBQUMsT0FBOEI7UUFDaEMsSUFBSSxPQUFPLFlBQVksTUFBTSxFQUFFLENBQUM7WUFDNUIsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzdCLENBQUM7UUFFRCxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3hDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUE7SUFDbEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFvQjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQ3JDLElBQUksVUFBVSxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFO1lBQzFDLElBQUksS0FBSyxHQUF1QixTQUFTLENBQUE7WUFDekMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO2dCQUNkLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO2dCQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUNOLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDVCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ1osQ0FBQyxDQUFBO2dCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2YsS0FBSyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN2QyxDQUFDO1lBQ0wsQ0FBQyxDQUFBO1lBQ0QsSUFBSSxFQUFFLENBQUE7WUFDTixPQUFPLEdBQUcsRUFBRTtnQkFDUixLQUFLLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDeEMsQ0FBQyxDQUFBO1FBQ0wsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN6RCxDQUFBO0lBQ0wsQ0FBQzs4R0F4Q1EsZUFBZTtrSEFBZixlQUFlLGNBREYsTUFBTTs7MkZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgY29lcmNlRWxlbWVudCwgRWxlbWVudElucHV0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tIFwiLi4vdXRpbC9yZWN0XCJcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uV2F0Y2hlciB7XG4gICAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKVxuICAgIHJlYWRvbmx5ICN3YXRjaGVzOiBNYXA8SFRNTEVsZW1lbnQsIE9ic2VydmFibGU8UG9zaXRpb24+PiA9IG5ldyBNYXAoKVxuXG4gICAgd2F0Y2goZWxlbWVudDogRWxlbWVudElucHV0IHwgV2luZG93KTogT2JzZXJ2YWJsZTxQb3NpdGlvbj4ge1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFdpbmRvdykge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHsgeDogMCwgeTogMCB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudCA9IGNvZXJjZUVsZW1lbnQoZWxlbWVudClcblxuICAgICAgICBsZXQgd2F0Y2hlciA9IHRoaXMuI3dhdGNoZXMuZ2V0KGVsZW1lbnQpXG4gICAgICAgIGlmICh3YXRjaGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHdhdGNoZXIgPSB0aGlzLiNjcmVhdGVXYXRjaGVyKGVsZW1lbnQpXG4gICAgICAgICAgICB0aGlzLiN3YXRjaGVzLnNldChlbGVtZW50LCB3YXRjaGVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdhdGNoZXJcbiAgICB9XG5cbiAgICAjY3JlYXRlV2F0Y2hlcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8UG9zaXRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgICAgIG5ldyBPYnNlcnZhYmxlKChkZXN0OiBTdWJzY3JpYmVyPFBvc2l0aW9uPikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByYWZJZDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgY29uc3QgZW1pdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICAgICAgICAgICAgZGVzdC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHJlY3QueVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRlc3QuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShlbWl0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVtaXQoKVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJhZklkICYmIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoaXNFcXVhbCksIHNoYXJlUmVwbGF5KDEpKVxuICAgICAgICApXG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { inject, Injectable } from "@angular/core";
|
|
2
|
+
import { combineLatest, Observable, shareReplay } 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
|
+
}).subscribe(({ dim, pos }) => {
|
|
14
|
+
dest.next({
|
|
15
|
+
x: pos.x,
|
|
16
|
+
y: pos.y,
|
|
17
|
+
width: dim.width,
|
|
18
|
+
height: dim.height
|
|
19
|
+
});
|
|
20
|
+
})).pipe(shareReplay(1));
|
|
21
|
+
}
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: RectWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
23
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: RectWatcher, providedIn: "root" }); }
|
|
24
|
+
}
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: RectWatcher, decorators: [{
|
|
26
|
+
type: Injectable,
|
|
27
|
+
args: [{ providedIn: "root" }]
|
|
28
|
+
}] });
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC13YXRjaGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvc2VydmljZXMvcmVjdC13YXRjaGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBS3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBWSxNQUFNLDZCQUE2QixDQUFBO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTs7QUFHNUQsTUFBTSxPQUFPLFdBQVc7SUFDWCxXQUFXLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDdEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUU5QyxLQUFLLENBQUMsT0FBOEIsRUFBRSxRQUFrQjtRQUNwRCxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsSUFBc0IsRUFBRSxFQUFFLENBQzdDLGFBQWEsQ0FBQztZQUNWLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO1lBQzlDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDdkMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDTixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ1IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDaEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO2FBQ3JCLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUNMLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzFCLENBQUM7OEdBbEJRLFdBQVc7a0hBQVgsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IEVsZW1lbnRJbnB1dCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IFJlY3QgfSBmcm9tIFwiLi4vdXRpbC9yZWN0XCJcbmltcG9ydCB7IERpbWVuc2lvbldhdGNoZXIsIFdhdGNoQm94IH0gZnJvbSBcIi4vZGltZW5zaW9uLXdhdGNoZXIuc2VydmljZVwiXG5pbXBvcnQgeyBQb3NpdGlvbldhdGNoZXIgfSBmcm9tIFwiLi9wb3NpdGlvbi13YXRjaGVyLnNlcnZpY2VcIlxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgUmVjdFdhdGNoZXIge1xuICAgIHJlYWRvbmx5ICNkaW1XYXRjaGVyID0gaW5qZWN0KERpbWVuc2lvbldhdGNoZXIpXG4gICAgcmVhZG9ubHkgI3Bvc1dhdGNoZXIgPSBpbmplY3QoUG9zaXRpb25XYXRjaGVyKVxuXG4gICAgd2F0Y2goZWxlbWVudDogRWxlbWVudElucHV0IHwgV2luZG93LCB3YXRjaEJveDogV2F0Y2hCb3gpOiBPYnNlcnZhYmxlPFJlY3Q+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkZXN0OiBTdWJzY3JpYmVyPFJlY3Q+KSA9PlxuICAgICAgICAgICAgY29tYmluZUxhdGVzdCh7XG4gICAgICAgICAgICAgICAgZGltOiB0aGlzLiNkaW1XYXRjaGVyLndhdGNoKGVsZW1lbnQsIHdhdGNoQm94KSxcbiAgICAgICAgICAgICAgICBwb3M6IHRoaXMuI3Bvc1dhdGNoZXIud2F0Y2goZWxlbWVudClcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgoeyBkaW0sIHBvcyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgZGVzdC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgeDogcG9zLngsXG4gICAgICAgICAgICAgICAgICAgIHk6IHBvcy55LFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogZGltLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpbS5oZWlnaHRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const HORIZONTAL = ["start", "center", "end", "max-width"];
|
|
2
|
+
const VERTICAL = ["top", "middle", "bottom", "max-height"];
|
|
3
|
+
const DEFAULT = { horizontal: "center", vertical: "middle" };
|
|
4
|
+
export function alignmentNormalize(value) {
|
|
5
|
+
if (value == null) {
|
|
6
|
+
return DEFAULT;
|
|
7
|
+
}
|
|
8
|
+
if (typeof value !== "string") {
|
|
9
|
+
throw new Error(`Invalid alignment: ${value}`);
|
|
10
|
+
}
|
|
11
|
+
const entries = Array.from(new Set(value.split(/\s+/g)));
|
|
12
|
+
if (entries.length > 2) {
|
|
13
|
+
throw new Error(`Cannot parse: ${value}`);
|
|
14
|
+
}
|
|
15
|
+
const horizontal = HORIZONTAL.find(v => entries[0] === v || entries[1] === v) || "center";
|
|
16
|
+
const vertical = VERTICAL.find(v => entries[0] === v || entries[1] === v) || "middle";
|
|
17
|
+
return { horizontal, vertical };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ25tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3R5bGUvc3JjL3V0aWwvYWxpZ25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFVLENBQUE7QUFHbkUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLENBQVUsQ0FBQTtBQWNuRSxNQUFNLE9BQU8sR0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFBO0FBRXZFLE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFzQjtJQUNyRCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQixPQUFPLE9BQU8sQ0FBQTtJQUNsQixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBcUIsQ0FBQTtJQUM1RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQTtJQUN6RixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFBO0lBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUE7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEhPUklaT05UQUwgPSBbXCJzdGFydFwiLCBcImNlbnRlclwiLCBcImVuZFwiLCBcIm1heC13aWR0aFwiXSBhcyBjb25zdFxuZXhwb3J0IHR5cGUgQWxpZ25Ib3Jpem9udGFsID0gKHR5cGVvZiBIT1JJWk9OVEFMKVtudW1iZXJdXG5cbmNvbnN0IFZFUlRJQ0FMID0gW1widG9wXCIsIFwibWlkZGxlXCIsIFwiYm90dG9tXCIsIFwibWF4LWhlaWdodFwiXSBhcyBjb25zdFxuZXhwb3J0IHR5cGUgQWxpZ25WZXJ0aWNhbCA9ICh0eXBlb2YgVkVSVElDQUwpW251bWJlcl1cblxuZXhwb3J0IHR5cGUgQWxpZ25tZW50SW5wdXQgPVxuICAgIHwgYCR7QWxpZ25Ib3Jpem9udGFsfSAke0FsaWduVmVydGljYWx9YFxuICAgIHwgYCR7QWxpZ25WZXJ0aWNhbH0gJHtBbGlnbkhvcml6b250YWx9YFxuICAgIHwgQWxpZ25WZXJ0aWNhbFxuICAgIHwgQWxpZ25Ib3Jpem9udGFsXG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxpZ25tZW50IHtcbiAgICBob3Jpem9udGFsOiBBbGlnbkhvcml6b250YWxcbiAgICB2ZXJ0aWNhbDogQWxpZ25WZXJ0aWNhbFxufVxuXG5jb25zdCBERUZBVUxUOiBBbGlnbm1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcIm1pZGRsZVwiIH1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsaWdubWVudE5vcm1hbGl6ZSh2YWx1ZT86IEFsaWdubWVudElucHV0KTogQWxpZ25tZW50IHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gREVGQVVMVFxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFsaWdubWVudDogJHt2YWx1ZX1gKVxuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQodmFsdWUuc3BsaXQoL1xccysvZykpKSBhcyBbc3RyaW5nLCBzdHJpbmddXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZTogJHt2YWx1ZX1gKVxuICAgIH1cblxuICAgIGNvbnN0IGhvcml6b250YWwgPSBIT1JJWk9OVEFMLmZpbmQodiA9PiBlbnRyaWVzWzBdID09PSB2IHx8IGVudHJpZXNbMV0gPT09IHYpIHx8IFwiY2VudGVyXCJcbiAgICBjb25zdCB2ZXJ0aWNhbCA9IFZFUlRJQ0FMLmZpbmQodiA9PiBlbnRyaWVzWzBdID09PSB2IHx8IGVudHJpZXNbMV0gPT09IHYpIHx8IFwibWlkZGxlXCJcblxuICAgIHJldHVybiB7IGhvcml6b250YWwsIHZlcnRpY2FsIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { combineLatest, distinctUntilChanged, map, Observable } from "rxjs";
|
|
2
|
+
import { __zone_symbol__, rawCancelAnimationFrame, rawRequestAnimationFrame } from "@ngutil/common";
|
|
3
|
+
const addEventListener = __zone_symbol__("addEventListener");
|
|
4
|
+
const removeEventListener = __zone_symbol__("removeEventListener");
|
|
5
|
+
export function inAnimation(el, animations) {
|
|
6
|
+
return _in(el, "animationName", "animationstart", "animationiteration", "animationend", "animationcancel", animations);
|
|
7
|
+
}
|
|
8
|
+
export function inTransition(el, properties) {
|
|
9
|
+
return _in(el, "propertyName", "transitionstart", "transitionrun", "transitionend", "transitioncancel", properties);
|
|
10
|
+
}
|
|
11
|
+
export function isAnimating(el) {
|
|
12
|
+
return combineLatest([inAnimation(el), inTransition(el)]).pipe(map(values => !!(values[0] || values[1])), distinctUntilChanged());
|
|
13
|
+
}
|
|
14
|
+
function _in(el, keyName, beginName, doingName, endName, cancelName, keys) {
|
|
15
|
+
return new Observable((dest) => {
|
|
16
|
+
const state = {};
|
|
17
|
+
const start = (event) => {
|
|
18
|
+
const key = event[keyName];
|
|
19
|
+
if (keys && keys.length > 0 && !keys.includes(key)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (key in state) {
|
|
23
|
+
state[key]++;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
state[key] = 1;
|
|
27
|
+
}
|
|
28
|
+
dest.next(Object.keys(state));
|
|
29
|
+
};
|
|
30
|
+
const doing = (event) => {
|
|
31
|
+
const key = event[keyName];
|
|
32
|
+
if (keys && keys.length > 0 && !keys.includes(key)) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (!(key in state)) {
|
|
36
|
+
state[key] = 1;
|
|
37
|
+
dest.next(Object.keys(state));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const end = (event) => {
|
|
41
|
+
if (event[keyName] in state) {
|
|
42
|
+
const key = event[keyName];
|
|
43
|
+
state[key]--;
|
|
44
|
+
if (state[key] <= 0) {
|
|
45
|
+
delete state[key];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (Object.keys(state).length === 0) {
|
|
49
|
+
dest.next(null);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
el[addEventListener](beginName, start);
|
|
53
|
+
el[addEventListener](doingName, doing);
|
|
54
|
+
el[addEventListener](endName, end);
|
|
55
|
+
el[addEventListener](cancelName, end);
|
|
56
|
+
const raf = rawRequestAnimationFrame(() => {
|
|
57
|
+
if (Object.keys(state).length === 0) {
|
|
58
|
+
dest.next(null);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
return () => {
|
|
62
|
+
rawCancelAnimationFrame(raf);
|
|
63
|
+
el[removeEventListener](beginName, start);
|
|
64
|
+
el[removeEventListener](doingName, doing);
|
|
65
|
+
el[removeEventListener](endName, end);
|
|
66
|
+
el[removeEventListener](cancelName, end);
|
|
67
|
+
};
|
|
68
|
+
}).pipe(distinctUntilChanged());
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW4tYW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3R5bGUvc3JjL3V0aWwvaW4tYW5pbWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBYyxNQUFNLE1BQU0sQ0FBQTtBQUV2RixPQUFPLEVBQUUsZUFBZSxFQUFFLHVCQUF1QixFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbkcsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtBQUM1RCxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0FBRWxFLE1BQU0sVUFBVSxXQUFXLENBQXdCLEVBQUssRUFBRSxVQUFxQjtJQUMzRSxPQUFPLEdBQUcsQ0FDTixFQUFFLEVBQ0YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixVQUFVLENBQ2IsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUF3QixFQUFLLEVBQUUsVUFBcUI7SUFDNUUsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFBO0FBQ3ZILENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUF3QixFQUFLO0lBQ3BELE9BQU8sYUFBYSxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxD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QUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ25CLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxFQUFFO1lBQ1IsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDNUIsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ3pDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUN6QyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDckMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzVDLENBQUMsQ0FBQTtJQUNMLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUE7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IF9fem9uZV9zeW1ib2xfXywgcmF3Q2FuY2VsQW5pbWF0aW9uRnJhbWUsIHJhd1JlcXVlc3RBbmltYXRpb25GcmFtZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmNvbnN0IGFkZEV2ZW50TGlzdGVuZXIgPSBfX3pvbmVfc3ltYm9sX18oXCJhZGRFdmVudExpc3RlbmVyXCIpXG5jb25zdCByZW1vdmVFdmVudExpc3RlbmVyID0gX196b25lX3N5bWJvbF9fKFwicmVtb3ZlRXZlbnRMaXN0ZW5lclwiKVxuXG5leHBvcnQgZnVuY3Rpb24gaW5BbmltYXRpb248VCBleHRlbmRzIEhUTUxFbGVtZW50PihlbDogVCwgYW5pbWF0aW9ucz86IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIF9pbihcbiAgICAgICAgZWwsXG4gICAgICAgIFwiYW5pbWF0aW9uTmFtZVwiLFxuICAgICAgICBcImFuaW1hdGlvbnN0YXJ0XCIsXG4gICAgICAgIFwiYW5pbWF0aW9uaXRlcmF0aW9uXCIsXG4gICAgICAgIFwiYW5pbWF0aW9uZW5kXCIsXG4gICAgICAgIFwiYW5pbWF0aW9uY2FuY2VsXCIsXG4gICAgICAgIGFuaW1hdGlvbnNcbiAgICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpblRyYW5zaXRpb248VCBleHRlbmRzIEhUTUxFbGVtZW50PihlbDogVCwgcHJvcGVydGllcz86IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIF9pbihlbCwgXCJwcm9wZXJ0eU5hbWVcIiwgXCJ0cmFuc2l0aW9uc3RhcnRcIiwgXCJ0cmFuc2l0aW9ucnVuXCIsIFwidHJhbnNpdGlvbmVuZFwiLCBcInRyYW5zaXRpb25jYW5jZWxcIiwgcHJvcGVydGllcylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQW5pbWF0aW5nPFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oZWw6IFQpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbaW5BbmltYXRpb24oZWwpLCBpblRyYW5zaXRpb24oZWwpXSkucGlwZShcbiAgICAgICAgbWFwKHZhbHVlcyA9PiAhISh2YWx1ZXNbMF0gfHwgdmFsdWVzWzFdKSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApXG59XG5cbmZ1bmN0aW9uIF9pbjxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KFxuICAgIGVsOiBULFxuICAgIGtleU5hbWU6IHN0cmluZyxcbiAgICBiZWdpbk5hbWU6IHN0cmluZyxcbiAgICBkb2luZ05hbWU6IHN0cmluZyxcbiAgICBlbmROYW1lOiBzdHJpbmcsXG4gICAgY2FuY2VsTmFtZTogc3RyaW5nLFxuICAgIGtleXM/OiBzdHJpbmdbXVxuKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChkZXN0OiBTdWJzY3JpYmVyPHN0cmluZ1tdIHwgbnVsbD4pID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGU6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGV2ZW50W2tleU5hbWVdXG4gICAgICAgICAgICBpZiAoa2V5cyAmJiBrZXlzLmxlbmd0aCA+IDAgJiYgIWtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoa2V5IGluIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVba2V5XSsrXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlW2tleV0gPSAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZXN0Lm5leHQoT2JqZWN0LmtleXMoc3RhdGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZG9pbmcgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZXZlbnRba2V5TmFtZV1cbiAgICAgICAgICAgIGlmIChrZXlzICYmIGtleXMubGVuZ3RoID4gMCAmJiAha2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghKGtleSBpbiBzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZVtrZXldID0gMVxuICAgICAgICAgICAgICAgIGRlc3QubmV4dChPYmplY3Qua2V5cyhzdGF0ZSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbmQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50W2tleU5hbWVdIGluIHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZXZlbnRba2V5TmFtZV1cbiAgICAgICAgICAgICAgICBzdGF0ZVtrZXldLS1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVba2V5XSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZVtrZXldXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRlc3QubmV4dChudWxsKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZWxbYWRkRXZlbnRMaXN0ZW5lcl0oYmVnaW5OYW1lLCBzdGFydClcbiAgICAgICAgZWxbYWRkRXZlbnRMaXN0ZW5lcl0oZG9pbmdOYW1lLCBkb2luZylcbiAgICAgICAgZWxbYWRkRXZlbnRMaXN0ZW5lcl0oZW5kTmFtZSwgZW5kKVxuICAgICAgICBlbFthZGRFdmVudExpc3RlbmVyXShjYW5jZWxOYW1lLCBlbmQpXG5cbiAgICAgICAgY29uc3QgcmFmID0gcmF3UmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgZGVzdC5uZXh0KG51bGwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIHJhd0NhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZilcbiAgICAgICAgICAgIGVsW3JlbW92ZUV2ZW50TGlzdGVuZXJdKGJlZ2luTmFtZSwgc3RhcnQpXG4gICAgICAgICAgICBlbFtyZW1vdmVFdmVudExpc3RlbmVyXShkb2luZ05hbWUsIGRvaW5nKVxuICAgICAgICAgICAgZWxbcmVtb3ZlRXZlbnRMaXN0ZW5lcl0oZW5kTmFtZSwgZW5kKVxuICAgICAgICAgICAgZWxbcmVtb3ZlRXZlbnRMaXN0ZW5lcl0oY2FuY2VsTmFtZSwgZW5kKVxuICAgICAgICB9XG4gICAgfSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxufVxuIl19
|
package/esm2022/util/rect.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0eWxlL3NyYy91dGlsL3JlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRGltZW5zaW9uIHtcbiAgICB3aWR0aDogbnVtYmVyXG4gICAgaGVpZ2h0OiBudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbiB7XG4gICAgeDogbnVtYmVyXG4gICAgeTogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjdCBleHRlbmRzIERpbWVuc2lvbiwgUG9zaXRpb24ge31cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { isPlainObject, NumberWithUnit } from "@ngutil/common";
|
|
2
|
+
export function sidesNormalize(value) {
|
|
3
|
+
if (isPlainObject(value)) {
|
|
4
|
+
return value;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof value === "number") {
|
|
7
|
+
return sidesNormalize(`${value}px`);
|
|
8
|
+
}
|
|
9
|
+
else if (typeof value !== "string") {
|
|
10
|
+
throw new Error(`Invalid sides: ${value}`);
|
|
11
|
+
}
|
|
12
|
+
const entries = value.split(/\s+/g).map(v => NumberWithUnit.coerce(v, "px"));
|
|
13
|
+
if (entries.length < 0 || entries.length > 4) {
|
|
14
|
+
throw new Error(`Cannot parse: ${value}`);
|
|
15
|
+
}
|
|
16
|
+
return compose(...entries);
|
|
17
|
+
}
|
|
18
|
+
function compose(top, right = top, bottom = top, left = right) {
|
|
19
|
+
return { top, right, bottom, left };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdHlsZS9zcmMvdXRpbC9zaWRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBa0I5RCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWlCO0lBQzVDLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkIsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsT0FBTyxjQUFjLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQXFCLENBQUE7SUFFaEcsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUNaLEdBQW1CLEVBQ25CLFFBQXdCLEdBQUcsRUFDM0IsU0FBeUIsR0FBRyxFQUM1QixPQUF1QixLQUFLO0lBRTVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQTtBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGFpbk9iamVjdCwgTnVtYmVyV2l0aFVuaXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGVzIHtcbiAgICB0b3A6IE51bWJlcldpdGhVbml0XG4gICAgcmlnaHQ6IE51bWJlcldpdGhVbml0XG4gICAgYm90dG9tOiBOdW1iZXJXaXRoVW5pdFxuICAgIGxlZnQ6IE51bWJlcldpdGhVbml0XG59XG5cbmV4cG9ydCB0eXBlIFNpZGVzVW5pdCA9IFwicHhcIiB8IFwiJVwiXG5leHBvcnQgdHlwZSBTaWRlc051bWJlciA9IGAke251bWJlcn0ke1NpZGVzVW5pdH1gIHwgbnVtYmVyXG5leHBvcnQgdHlwZSBTaWRlc0lucHV0ID1cbiAgICB8IFNpZGVzXG4gICAgfCBTaWRlc051bWJlclxuICAgIHwgYCR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9YFxuICAgIHwgYCR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9YFxuICAgIHwgYCR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9ICR7U2lkZXNOdW1iZXJ9YFxuXG5leHBvcnQgZnVuY3Rpb24gc2lkZXNOb3JtYWxpemUodmFsdWU6IFNpZGVzSW5wdXQpOiBTaWRlcyB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBzaWRlc05vcm1hbGl6ZShgJHt2YWx1ZX1weGApXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNpZGVzOiAke3ZhbHVlfWApXG4gICAgfVxuXG4gICAgY29uc3QgZW50cmllcyA9IHZhbHVlLnNwbGl0KC9cXHMrL2cpLm1hcCh2ID0+IE51bWJlcldpdGhVbml0LmNvZXJjZSh2LCBcInB4XCIpKSBhcyBbTnVtYmVyV2l0aFVuaXRdXG5cbiAgICBpZiAoZW50cmllcy5sZW5ndGggPCAwIHx8IGVudHJpZXMubGVuZ3RoID4gNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwYXJzZTogJHt2YWx1ZX1gKVxuICAgIH1cblxuICAgIHJldHVybiBjb21wb3NlKC4uLmVudHJpZXMpXG59XG5cbmZ1bmN0aW9uIGNvbXBvc2UoXG4gICAgdG9wOiBOdW1iZXJXaXRoVW5pdCxcbiAgICByaWdodDogTnVtYmVyV2l0aFVuaXQgPSB0b3AsXG4gICAgYm90dG9tOiBOdW1iZXJXaXRoVW5pdCA9IHRvcCxcbiAgICBsZWZ0OiBOdW1iZXJXaXRoVW5pdCA9IHJpZ2h0XG4pOiBTaWRlcyB7XG4gICAgcmV0dXJuIHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, NgZone, Injectable
|
|
3
|
-
import { Observable, distinctUntilChanged, shareReplay, map } from 'rxjs';
|
|
2
|
+
import { inject, NgZone, Injectable } from '@angular/core';
|
|
3
|
+
import { Observable, distinctUntilChanged, shareReplay, map, of, combineLatest } from 'rxjs';
|
|
4
|
+
import { coerceElement, __zone_symbol__, rawRequestAnimationFrame, rawCancelAnimationFrame, isPlainObject, NumberWithUnit } from '@ngutil/common';
|
|
5
|
+
import { isEqual } from 'lodash';
|
|
4
6
|
|
|
5
7
|
class MediaWatcher {
|
|
6
8
|
#zone = inject(NgZone);
|
|
@@ -81,21 +83,26 @@ class DimensionWatcher {
|
|
|
81
83
|
#zone = inject(NgZone);
|
|
82
84
|
#watches = {};
|
|
83
85
|
watch(element, box) {
|
|
86
|
+
element = coerceElement(element);
|
|
84
87
|
let watches = this.#watches[box];
|
|
85
88
|
if (watches == null) {
|
|
86
89
|
watches = new Map();
|
|
87
90
|
this.#watches[box] = watches;
|
|
88
91
|
}
|
|
89
|
-
|
|
90
|
-
let watcher = watches.get(el);
|
|
92
|
+
let watcher = watches.get(element);
|
|
91
93
|
if (watcher == null) {
|
|
92
|
-
if (
|
|
93
|
-
watcher = this.#
|
|
94
|
+
if (element instanceof Window) {
|
|
95
|
+
watcher = this.#createWindowResizeWatcher();
|
|
94
96
|
}
|
|
95
97
|
else {
|
|
96
|
-
|
|
98
|
+
if (box === "scroll-box") {
|
|
99
|
+
watcher = this.#createScollWatcher(watches, element);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
watcher = this.#createResizeWatcher(watches, element, box);
|
|
103
|
+
}
|
|
97
104
|
}
|
|
98
|
-
watches.set(
|
|
105
|
+
watches.set(element, watcher);
|
|
99
106
|
}
|
|
100
107
|
return watcher;
|
|
101
108
|
}
|
|
@@ -157,6 +164,21 @@ class DimensionWatcher {
|
|
|
157
164
|
};
|
|
158
165
|
}).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1)));
|
|
159
166
|
}
|
|
167
|
+
#createWindowResizeWatcher() {
|
|
168
|
+
return this.#zone.runOutsideAngular(() => new Observable((sub) => {
|
|
169
|
+
const onResize = () => {
|
|
170
|
+
sub.next({
|
|
171
|
+
width: window.innerWidth,
|
|
172
|
+
height: window.innerHeight
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
onResize();
|
|
176
|
+
window.addEventListener("resize", onResize);
|
|
177
|
+
return () => {
|
|
178
|
+
window.removeEventListener("resize", onResize);
|
|
179
|
+
};
|
|
180
|
+
}).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1)));
|
|
181
|
+
}
|
|
160
182
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DimensionWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
161
183
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DimensionWatcher, providedIn: "root" }); }
|
|
162
184
|
}
|
|
@@ -168,9 +190,182 @@ function dimensionIsEq(a, b) {
|
|
|
168
190
|
return a && b && a.width === b.width && a.height === b.height;
|
|
169
191
|
}
|
|
170
192
|
|
|
193
|
+
class PositionWatcher {
|
|
194
|
+
#zone = inject(NgZone);
|
|
195
|
+
#watches = new Map();
|
|
196
|
+
watch(element) {
|
|
197
|
+
if (element instanceof Window) {
|
|
198
|
+
return of({ x: 0, y: 0 });
|
|
199
|
+
}
|
|
200
|
+
element = coerceElement(element);
|
|
201
|
+
let watcher = this.#watches.get(element);
|
|
202
|
+
if (watcher == null) {
|
|
203
|
+
watcher = this.#createWatcher(element);
|
|
204
|
+
this.#watches.set(element, watcher);
|
|
205
|
+
}
|
|
206
|
+
return watcher;
|
|
207
|
+
}
|
|
208
|
+
#createWatcher(element) {
|
|
209
|
+
return this.#zone.runOutsideAngular(() => new Observable((dest) => {
|
|
210
|
+
let rafId = undefined;
|
|
211
|
+
const emit = () => {
|
|
212
|
+
const rect = element.getBoundingClientRect();
|
|
213
|
+
dest.next({
|
|
214
|
+
x: rect.x,
|
|
215
|
+
y: rect.y
|
|
216
|
+
});
|
|
217
|
+
if (!dest.closed) {
|
|
218
|
+
rafId = requestAnimationFrame(emit);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
emit();
|
|
222
|
+
return () => {
|
|
223
|
+
rafId && cancelAnimationFrame(rafId);
|
|
224
|
+
};
|
|
225
|
+
}).pipe(distinctUntilChanged(isEqual), shareReplay(1)));
|
|
226
|
+
}
|
|
227
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PositionWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
228
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PositionWatcher, providedIn: "root" }); }
|
|
229
|
+
}
|
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: PositionWatcher, decorators: [{
|
|
231
|
+
type: Injectable,
|
|
232
|
+
args: [{ providedIn: "root" }]
|
|
233
|
+
}] });
|
|
234
|
+
|
|
235
|
+
class RectWatcher {
|
|
236
|
+
#dimWatcher = inject(DimensionWatcher);
|
|
237
|
+
#posWatcher = inject(PositionWatcher);
|
|
238
|
+
watch(element, watchBox) {
|
|
239
|
+
return new Observable((dest) => combineLatest({
|
|
240
|
+
dim: this.#dimWatcher.watch(element, watchBox),
|
|
241
|
+
pos: this.#posWatcher.watch(element)
|
|
242
|
+
}).subscribe(({ dim, pos }) => {
|
|
243
|
+
dest.next({
|
|
244
|
+
x: pos.x,
|
|
245
|
+
y: pos.y,
|
|
246
|
+
width: dim.width,
|
|
247
|
+
height: dim.height
|
|
248
|
+
});
|
|
249
|
+
})).pipe(shareReplay(1));
|
|
250
|
+
}
|
|
251
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: RectWatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
252
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: RectWatcher, providedIn: "root" }); }
|
|
253
|
+
}
|
|
254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: RectWatcher, decorators: [{
|
|
255
|
+
type: Injectable,
|
|
256
|
+
args: [{ providedIn: "root" }]
|
|
257
|
+
}] });
|
|
258
|
+
|
|
259
|
+
const HORIZONTAL = ["start", "center", "end", "max-width"];
|
|
260
|
+
const VERTICAL = ["top", "middle", "bottom", "max-height"];
|
|
261
|
+
const DEFAULT = { horizontal: "center", vertical: "middle" };
|
|
262
|
+
function alignmentNormalize(value) {
|
|
263
|
+
if (value == null) {
|
|
264
|
+
return DEFAULT;
|
|
265
|
+
}
|
|
266
|
+
if (typeof value !== "string") {
|
|
267
|
+
throw new Error(`Invalid alignment: ${value}`);
|
|
268
|
+
}
|
|
269
|
+
const entries = Array.from(new Set(value.split(/\s+/g)));
|
|
270
|
+
if (entries.length > 2) {
|
|
271
|
+
throw new Error(`Cannot parse: ${value}`);
|
|
272
|
+
}
|
|
273
|
+
const horizontal = HORIZONTAL.find(v => entries[0] === v || entries[1] === v) || "center";
|
|
274
|
+
const vertical = VERTICAL.find(v => entries[0] === v || entries[1] === v) || "middle";
|
|
275
|
+
return { horizontal, vertical };
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const addEventListener = __zone_symbol__("addEventListener");
|
|
279
|
+
const removeEventListener = __zone_symbol__("removeEventListener");
|
|
280
|
+
function inAnimation(el, animations) {
|
|
281
|
+
return _in(el, "animationName", "animationstart", "animationiteration", "animationend", "animationcancel", animations);
|
|
282
|
+
}
|
|
283
|
+
function inTransition(el, properties) {
|
|
284
|
+
return _in(el, "propertyName", "transitionstart", "transitionrun", "transitionend", "transitioncancel", properties);
|
|
285
|
+
}
|
|
286
|
+
function isAnimating(el) {
|
|
287
|
+
return combineLatest([inAnimation(el), inTransition(el)]).pipe(map(values => !!(values[0] || values[1])), distinctUntilChanged());
|
|
288
|
+
}
|
|
289
|
+
function _in(el, keyName, beginName, doingName, endName, cancelName, keys) {
|
|
290
|
+
return new Observable((dest) => {
|
|
291
|
+
const state = {};
|
|
292
|
+
const start = (event) => {
|
|
293
|
+
const key = event[keyName];
|
|
294
|
+
if (keys && keys.length > 0 && !keys.includes(key)) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (key in state) {
|
|
298
|
+
state[key]++;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
state[key] = 1;
|
|
302
|
+
}
|
|
303
|
+
dest.next(Object.keys(state));
|
|
304
|
+
};
|
|
305
|
+
const doing = (event) => {
|
|
306
|
+
const key = event[keyName];
|
|
307
|
+
if (keys && keys.length > 0 && !keys.includes(key)) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
if (!(key in state)) {
|
|
311
|
+
state[key] = 1;
|
|
312
|
+
dest.next(Object.keys(state));
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
const end = (event) => {
|
|
316
|
+
if (event[keyName] in state) {
|
|
317
|
+
const key = event[keyName];
|
|
318
|
+
state[key]--;
|
|
319
|
+
if (state[key] <= 0) {
|
|
320
|
+
delete state[key];
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
if (Object.keys(state).length === 0) {
|
|
324
|
+
dest.next(null);
|
|
325
|
+
}
|
|
326
|
+
};
|
|
327
|
+
el[addEventListener](beginName, start);
|
|
328
|
+
el[addEventListener](doingName, doing);
|
|
329
|
+
el[addEventListener](endName, end);
|
|
330
|
+
el[addEventListener](cancelName, end);
|
|
331
|
+
const raf = rawRequestAnimationFrame(() => {
|
|
332
|
+
if (Object.keys(state).length === 0) {
|
|
333
|
+
dest.next(null);
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
return () => {
|
|
337
|
+
rawCancelAnimationFrame(raf);
|
|
338
|
+
el[removeEventListener](beginName, start);
|
|
339
|
+
el[removeEventListener](doingName, doing);
|
|
340
|
+
el[removeEventListener](endName, end);
|
|
341
|
+
el[removeEventListener](cancelName, end);
|
|
342
|
+
};
|
|
343
|
+
}).pipe(distinctUntilChanged());
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
function sidesNormalize(value) {
|
|
347
|
+
if (isPlainObject(value)) {
|
|
348
|
+
return value;
|
|
349
|
+
}
|
|
350
|
+
else if (typeof value === "number") {
|
|
351
|
+
return sidesNormalize(`${value}px`);
|
|
352
|
+
}
|
|
353
|
+
else if (typeof value !== "string") {
|
|
354
|
+
throw new Error(`Invalid sides: ${value}`);
|
|
355
|
+
}
|
|
356
|
+
const entries = value.split(/\s+/g).map(v => NumberWithUnit.coerce(v, "px"));
|
|
357
|
+
if (entries.length < 0 || entries.length > 4) {
|
|
358
|
+
throw new Error(`Cannot parse: ${value}`);
|
|
359
|
+
}
|
|
360
|
+
return compose(...entries);
|
|
361
|
+
}
|
|
362
|
+
function compose(top, right = top, bottom = top, left = right) {
|
|
363
|
+
return { top, right, bottom, left };
|
|
364
|
+
}
|
|
365
|
+
|
|
171
366
|
/**
|
|
172
367
|
* Generated bundle index. Do not edit.
|
|
173
368
|
*/
|
|
174
369
|
|
|
175
|
-
export { ColorSchemeService, DimensionWatcher, Duration, Ease, MediaWatcher };
|
|
370
|
+
export { ColorSchemeService, DimensionWatcher, Duration, Ease, MediaWatcher, PositionWatcher, RectWatcher, alignmentNormalize, inAnimation, inTransition, isAnimating, sidesNormalize };
|
|
176
371
|
//# sourceMappingURL=ngutil-style.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngutil-style.mjs","sources":["../../../../packages/style/src/services/media-watcher.service.ts","../../../../packages/style/src/services/color-scheme.service.ts","../../../../packages/style/src/sass/animation/vars/index.ts","../../../../packages/style/src/services/dimension-watcher.service.ts","../../../../packages/style/src/ngutil-style.ts"],"sourcesContent":["import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\n@Injectable({ providedIn: \"root\" })\nexport class MediaWatcher {\n readonly #zone = inject(NgZone)\n #watches: { [key: string]: Observable<boolean> } = {}\n\n /**\n * svc.watch(\"(display-mode: standalone)\").subscribe(match => {})\n */\n watch(query: string): Observable<boolean> {\n let watcher = this.#watches[query]\n if (!watcher) {\n watcher = this.#newWatcher(query)\n this.#watches[query] = watcher\n }\n return watcher\n }\n\n #newWatcher(query: string): Observable<boolean> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<boolean>) => {\n const queryWatcher = window.matchMedia(query)\n const listener = (event: MediaQueryListEvent) => {\n sub.next(event.matches)\n }\n queryWatcher.addEventListener(\"change\", listener)\n sub.next(queryWatcher.matches)\n return () => {\n queryWatcher.removeEventListener(\"change\", listener)\n delete this.#watches[query]\n }\n }).pipe(distinctUntilChanged(), shareReplay(1))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { map, Observable, shareReplay } from \"rxjs\"\n\nimport { MediaWatcher } from \"./media-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class ColorSchemeService {\n readonly #mq = inject(MediaWatcher)\n readonly isDark: Observable<boolean> = this.#mq.watch(\"(prefers-color-scheme: dark)\")\n readonly isLight = this.isDark.pipe(\n map(v => !v),\n shareReplay(1)\n )\n\n // TODO: set preferred color scheme (dark/light)\n}\n","/* eslint-disable */\n/* eslint-disable prettier/prettier */\n/* ! AUTO GENERATED DO NOT EDIT ! */\n\nexport class Ease {\n static readonly Deceleration = \"cubic-bezier(0, 0, 0.2, 1)\" as const\n static readonly Standard = \"cubic-bezier(0.4, 0, 0.2, 1)\" as const\n static readonly Acceleration = \"cubic-bezier(0.4, 0, 1, 1)\" as const\n static readonly Sharp = \"cubic-bezier(0.4, 0, 0.6, 1)\" as const\n /**\n * Reach nearly end position fast, and slowly move to final position\n */\n static readonly Emphasized = \"cubic-bezier(0.12, 0.9, 0.12, 0.9)\" as const\n}\n\nexport class Duration {\n static readonly Fast = \"200ms\" as const\n static readonly FastMs = 200 as const\n static readonly Medium = \"300ms\" as const\n static readonly MediumMs = 300 as const\n static readonly Slow = \"400ms\" as const\n static readonly SlowMs = 400 as const\n static readonly Snail = \"600ms\" as const\n static readonly SnailMs = 600 as const\n}\n","import { ElementRef, inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\nimport { Dimension } from \"../util/rect\"\n\nexport type WatchBox = ResizeObserverBoxOptions | \"scroll-box\"\nexport type Watches = Map<HTMLElement, Observable<Dimension>>\n\n@Injectable({ providedIn: \"root\" })\nexport class DimensionWatcher {\n readonly #zone = inject(NgZone)\n readonly #watches: { [key in WatchBox]?: Watches } = {}\n\n watch(element: HTMLElement | ElementRef<HTMLElement>, box: WatchBox): Observable<Dimension> {\n let watches = this.#watches[box]\n if (watches == null) {\n watches = new Map()\n this.#watches[box] = watches\n }\n\n const el = element instanceof ElementRef ? element.nativeElement : element\n\n let watcher = watches.get(el)\n if (watcher == null) {\n if (box === \"scroll-box\") {\n watcher = this.#createScollWatcher(watches, el)\n } else {\n watcher = this.#createResizeWatcher(watches, el, box)\n }\n watches.set(el, watcher)\n }\n\n return watcher\n }\n\n #createResizeWatcher(watches: Watches, el: HTMLElement, box: WatchBox): Observable<Dimension> {\n if (box !== \"border-box\") {\n throw new Error(`Currently not implemented box mode: ${box}`)\n }\n\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.borderBoxSize) {\n sub.next({\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize\n })\n } else {\n sub.next({\n width: el.offsetWidth,\n height: el.offsetHeight\n })\n }\n }\n })\n observer.observe(el, { box: box as ResizeObserverBoxOptions })\n\n return () => {\n observer.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createScollWatcher(watches: Watches, el: HTMLElement): Observable<Dimension> {\n const borderBox = this.watch(el, \"border-box\")\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n let lastSw: number = NaN\n let lastSh: number = NaN\n\n const emit = () => {\n const sw = el.scrollWidth\n const sh = el.scrollHeight\n if (lastSw !== sw || lastSh !== sh) {\n lastSw = sw\n lastSh = sh\n sub.next({ width: lastSw, height: lastSh })\n }\n }\n\n const dimSum = borderBox.subscribe(emit)\n const mutation = new MutationObserver(emit)\n mutation.observe(el, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true\n })\n emit()\n\n return () => {\n dimSum.unsubscribe()\n mutation.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n}\n\nfunction dimensionIsEq(a: Dimension, b: Dimension) {\n return a && b && a.width === b.width && a.height === b.height\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngutil-style.mjs","sources":["../../../../packages/style/src/services/media-watcher.service.ts","../../../../packages/style/src/services/color-scheme.service.ts","../../../../packages/style/src/sass/animation/vars/index.ts","../../../../packages/style/src/services/dimension-watcher.service.ts","../../../../packages/style/src/services/position-watcher.service.ts","../../../../packages/style/src/services/rect-watcher.service.ts","../../../../packages/style/src/util/alignment.ts","../../../../packages/style/src/util/in-animation.ts","../../../../packages/style/src/util/sides.ts","../../../../packages/style/src/ngutil-style.ts"],"sourcesContent":["import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\n@Injectable({ providedIn: \"root\" })\nexport class MediaWatcher {\n readonly #zone = inject(NgZone)\n #watches: { [key: string]: Observable<boolean> } = {}\n\n /**\n * svc.watch(\"(display-mode: standalone)\").subscribe(match => {})\n */\n watch(query: string): Observable<boolean> {\n let watcher = this.#watches[query]\n if (!watcher) {\n watcher = this.#newWatcher(query)\n this.#watches[query] = watcher\n }\n return watcher\n }\n\n #newWatcher(query: string): Observable<boolean> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<boolean>) => {\n const queryWatcher = window.matchMedia(query)\n const listener = (event: MediaQueryListEvent) => {\n sub.next(event.matches)\n }\n queryWatcher.addEventListener(\"change\", listener)\n sub.next(queryWatcher.matches)\n return () => {\n queryWatcher.removeEventListener(\"change\", listener)\n delete this.#watches[query]\n }\n }).pipe(distinctUntilChanged(), shareReplay(1))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { map, Observable, shareReplay } from \"rxjs\"\n\nimport { MediaWatcher } from \"./media-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class ColorSchemeService {\n readonly #mq = inject(MediaWatcher)\n readonly isDark: Observable<boolean> = this.#mq.watch(\"(prefers-color-scheme: dark)\")\n readonly isLight = this.isDark.pipe(\n map(v => !v),\n shareReplay(1)\n )\n\n // TODO: set preferred color scheme (dark/light)\n}\n","/* eslint-disable */\n/* eslint-disable prettier/prettier */\n/* ! AUTO GENERATED DO NOT EDIT ! */\n\nexport class Ease {\n static readonly Deceleration = \"cubic-bezier(0, 0, 0.2, 1)\" as const\n static readonly Standard = \"cubic-bezier(0.4, 0, 0.2, 1)\" as const\n static readonly Acceleration = \"cubic-bezier(0.4, 0, 1, 1)\" as const\n static readonly Sharp = \"cubic-bezier(0.4, 0, 0.6, 1)\" as const\n /**\n * Reach nearly end position fast, and slowly move to final position\n */\n static readonly Emphasized = \"cubic-bezier(0.12, 0.9, 0.12, 0.9)\" as const\n}\n\nexport class Duration {\n static readonly Fast = \"200ms\" as const\n static readonly FastMs = 200 as const\n static readonly Medium = \"300ms\" as const\n static readonly MediumMs = 300 as const\n static readonly Slow = \"400ms\" as const\n static readonly SlowMs = 400 as const\n static readonly Snail = \"600ms\" as const\n static readonly SnailMs = 600 as const\n}\n","import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, shareReplay, Subscriber } from \"rxjs\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Dimension } from \"../util/rect\"\n\nexport type WatchBox = ResizeObserverBoxOptions | \"scroll-box\"\nexport type Watches = Map<HTMLElement | Window, Observable<Dimension>>\n\n@Injectable({ providedIn: \"root\" })\nexport class DimensionWatcher {\n readonly #zone = inject(NgZone)\n readonly #watches: { [key in WatchBox]?: Watches } = {}\n\n watch(element: ElementInput | Window, box: WatchBox): Observable<Dimension> {\n element = coerceElement(element)\n\n let watches = this.#watches[box]\n if (watches == null) {\n watches = new Map()\n this.#watches[box] = watches\n }\n\n let watcher = watches.get(element)\n if (watcher == null) {\n if (element instanceof Window) {\n watcher = this.#createWindowResizeWatcher()\n } else {\n if (box === \"scroll-box\") {\n watcher = this.#createScollWatcher(watches, element)\n } else {\n watcher = this.#createResizeWatcher(watches, element, box)\n }\n }\n\n watches.set(element, watcher)\n }\n\n return watcher\n }\n\n #createResizeWatcher(watches: Watches, el: HTMLElement, box: WatchBox): Observable<Dimension> {\n if (box !== \"border-box\") {\n throw new Error(`Currently not implemented box mode: ${box}`)\n }\n\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const observer = new ResizeObserver(entries => {\n for (const entry of entries) {\n if (entry.borderBoxSize) {\n sub.next({\n width: entry.borderBoxSize[0].inlineSize,\n height: entry.borderBoxSize[0].blockSize\n })\n } else {\n sub.next({\n width: el.offsetWidth,\n height: el.offsetHeight\n })\n }\n }\n })\n observer.observe(el, { box: box as ResizeObserverBoxOptions })\n\n return () => {\n observer.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createScollWatcher(watches: Watches, el: HTMLElement): Observable<Dimension> {\n const borderBox = this.watch(el, \"border-box\")\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n let lastSw: number = NaN\n let lastSh: number = NaN\n\n const emit = () => {\n const sw = el.scrollWidth\n const sh = el.scrollHeight\n if (lastSw !== sw || lastSh !== sh) {\n lastSw = sw\n lastSh = sh\n sub.next({ width: lastSw, height: lastSh })\n }\n }\n\n const dimSum = borderBox.subscribe(emit)\n const mutation = new MutationObserver(emit)\n mutation.observe(el, {\n subtree: true,\n childList: true,\n attributes: true,\n characterData: true\n })\n emit()\n\n return () => {\n dimSum.unsubscribe()\n mutation.disconnect()\n watches.delete(el)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n\n #createWindowResizeWatcher(): Observable<Dimension> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((sub: Subscriber<Dimension>) => {\n const onResize = () => {\n sub.next({\n width: window.innerWidth,\n height: window.innerHeight\n })\n }\n onResize()\n window.addEventListener(\"resize\", onResize)\n return () => {\n window.removeEventListener(\"resize\", onResize)\n }\n }).pipe(distinctUntilChanged(dimensionIsEq), shareReplay(1))\n )\n }\n}\n\nfunction dimensionIsEq(a: Dimension, b: Dimension) {\n return a && b && a.width === b.width && a.height === b.height\n}\n","import { inject, Injectable, NgZone } from \"@angular/core\"\n\nimport { distinctUntilChanged, Observable, of, shareReplay, Subscriber } from \"rxjs\"\n\nimport { isEqual } from \"lodash\"\n\nimport { coerceElement, ElementInput } from \"@ngutil/common\"\n\nimport { Position } from \"../util/rect\"\n\n@Injectable({ providedIn: \"root\" })\nexport class PositionWatcher {\n readonly #zone = inject(NgZone)\n readonly #watches: Map<HTMLElement, Observable<Position>> = new Map()\n\n watch(element: ElementInput | Window): Observable<Position> {\n if (element instanceof Window) {\n return of({ x: 0, y: 0 })\n }\n\n element = coerceElement(element)\n\n let watcher = this.#watches.get(element)\n if (watcher == null) {\n watcher = this.#createWatcher(element)\n this.#watches.set(element, watcher)\n }\n\n return watcher\n }\n\n #createWatcher(element: HTMLElement): Observable<Position> {\n return this.#zone.runOutsideAngular(() =>\n new Observable((dest: Subscriber<Position>) => {\n let rafId: number | undefined = undefined\n const emit = () => {\n const rect = element.getBoundingClientRect()\n dest.next({\n x: rect.x,\n y: rect.y\n })\n if (!dest.closed) {\n rafId = requestAnimationFrame(emit)\n }\n }\n emit()\n return () => {\n rafId && cancelAnimationFrame(rafId)\n }\n }).pipe(distinctUntilChanged(isEqual), shareReplay(1))\n )\n }\n}\n","import { inject, Injectable } from \"@angular/core\"\n\nimport { combineLatest, Observable, shareReplay, Subscriber } from \"rxjs\"\n\nimport { ElementInput } from \"@ngutil/common\"\n\nimport { Rect } from \"../util/rect\"\nimport { DimensionWatcher, WatchBox } from \"./dimension-watcher.service\"\nimport { PositionWatcher } from \"./position-watcher.service\"\n\n@Injectable({ providedIn: \"root\" })\nexport class RectWatcher {\n readonly #dimWatcher = inject(DimensionWatcher)\n readonly #posWatcher = inject(PositionWatcher)\n\n watch(element: ElementInput | Window, watchBox: WatchBox): Observable<Rect> {\n return new Observable((dest: Subscriber<Rect>) =>\n combineLatest({\n dim: this.#dimWatcher.watch(element, watchBox),\n pos: this.#posWatcher.watch(element)\n }).subscribe(({ dim, pos }) => {\n dest.next({\n x: pos.x,\n y: pos.y,\n width: dim.width,\n height: dim.height\n })\n })\n ).pipe(shareReplay(1))\n }\n}\n","const HORIZONTAL = [\"start\", \"center\", \"end\", \"max-width\"] as const\nexport type AlignHorizontal = (typeof HORIZONTAL)[number]\n\nconst VERTICAL = [\"top\", \"middle\", \"bottom\", \"max-height\"] as const\nexport type AlignVertical = (typeof VERTICAL)[number]\n\nexport type AlignmentInput =\n | `${AlignHorizontal} ${AlignVertical}`\n | `${AlignVertical} ${AlignHorizontal}`\n | AlignVertical\n | AlignHorizontal\n\nexport interface Alignment {\n horizontal: AlignHorizontal\n vertical: AlignVertical\n}\n\nconst DEFAULT: Alignment = { horizontal: \"center\", vertical: \"middle\" }\n\nexport function alignmentNormalize(value?: AlignmentInput): Alignment {\n if (value == null) {\n return DEFAULT\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`Invalid alignment: ${value}`)\n }\n\n const entries = Array.from(new Set(value.split(/\\s+/g))) as [string, string]\n if (entries.length > 2) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n const horizontal = HORIZONTAL.find(v => entries[0] === v || entries[1] === v) || \"center\"\n const vertical = VERTICAL.find(v => entries[0] === v || entries[1] === v) || \"middle\"\n\n return { horizontal, vertical }\n}\n","import { combineLatest, distinctUntilChanged, map, Observable, Subscriber } from \"rxjs\"\n\nimport { __zone_symbol__, rawCancelAnimationFrame, rawRequestAnimationFrame } from \"@ngutil/common\"\n\nconst addEventListener = __zone_symbol__(\"addEventListener\")\nconst removeEventListener = __zone_symbol__(\"removeEventListener\")\n\nexport function inAnimation<T extends HTMLElement>(el: T, animations?: string[]) {\n return _in(\n el,\n \"animationName\",\n \"animationstart\",\n \"animationiteration\",\n \"animationend\",\n \"animationcancel\",\n animations\n )\n}\n\nexport function inTransition<T extends HTMLElement>(el: T, properties?: string[]) {\n return _in(el, \"propertyName\", \"transitionstart\", \"transitionrun\", \"transitionend\", \"transitioncancel\", properties)\n}\n\nexport function isAnimating<T extends HTMLElement>(el: T) {\n return combineLatest([inAnimation(el), inTransition(el)]).pipe(\n map(values => !!(values[0] || values[1])),\n distinctUntilChanged()\n )\n}\n\nfunction _in<T extends HTMLElement>(\n el: T,\n keyName: string,\n beginName: string,\n doingName: string,\n endName: string,\n cancelName: string,\n keys?: string[]\n) {\n return new Observable((dest: Subscriber<string[] | null>) => {\n const state: { [key: string]: number } = {}\n\n const start = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (key in state) {\n state[key]++\n } else {\n state[key] = 1\n }\n dest.next(Object.keys(state))\n }\n\n const doing = (event: any) => {\n const key = event[keyName]\n if (keys && keys.length > 0 && !keys.includes(key)) {\n return\n }\n\n if (!(key in state)) {\n state[key] = 1\n dest.next(Object.keys(state))\n }\n }\n\n const end = (event: any) => {\n if (event[keyName] in state) {\n const key = event[keyName]\n state[key]--\n if (state[key] <= 0) {\n delete state[key]\n }\n }\n\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n }\n\n el[addEventListener](beginName, start)\n el[addEventListener](doingName, doing)\n el[addEventListener](endName, end)\n el[addEventListener](cancelName, end)\n\n const raf = rawRequestAnimationFrame(() => {\n if (Object.keys(state).length === 0) {\n dest.next(null)\n }\n })\n\n return () => {\n rawCancelAnimationFrame(raf)\n el[removeEventListener](beginName, start)\n el[removeEventListener](doingName, doing)\n el[removeEventListener](endName, end)\n el[removeEventListener](cancelName, end)\n }\n }).pipe(distinctUntilChanged())\n}\n","import { isPlainObject, NumberWithUnit } from \"@ngutil/common\"\n\nexport interface Sides {\n top: NumberWithUnit\n right: NumberWithUnit\n bottom: NumberWithUnit\n left: NumberWithUnit\n}\n\nexport type SidesUnit = \"px\" | \"%\"\nexport type SidesNumber = `${number}${SidesUnit}` | number\nexport type SidesInput =\n | Sides\n | SidesNumber\n | `${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber}`\n | `${SidesNumber} ${SidesNumber} ${SidesNumber} ${SidesNumber}`\n\nexport function sidesNormalize(value: SidesInput): Sides {\n if (isPlainObject(value)) {\n return value\n } else if (typeof value === \"number\") {\n return sidesNormalize(`${value}px`)\n } else if (typeof value !== \"string\") {\n throw new Error(`Invalid sides: ${value}`)\n }\n\n const entries = value.split(/\\s+/g).map(v => NumberWithUnit.coerce(v, \"px\")) as [NumberWithUnit]\n\n if (entries.length < 0 || entries.length > 4) {\n throw new Error(`Cannot parse: ${value}`)\n }\n\n return compose(...entries)\n}\n\nfunction compose(\n top: NumberWithUnit,\n right: NumberWithUnit = top,\n bottom: NumberWithUnit = top,\n left: NumberWithUnit = right\n): Sides {\n return { top, right, bottom, left }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAKa,YAAY,CAAA;AACZ,IAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/B,QAAQ,GAA2C,EAAE,CAAA;AAErD;;AAEG;AACH,IAAA,KAAK,CAAC,KAAa,EAAA;QACf,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,CAAC,OAAO,EAAE;AACV,YAAA,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;SACjC;AACD,QAAA,OAAO,OAAO,CAAA;KACjB;AAED,IAAA,WAAW,CAAC,KAAa,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAChC,IAAI,UAAU,CAAC,CAAC,GAAwB,KAAI;YACxC,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;AAC7C,YAAA,MAAM,QAAQ,GAAG,CAAC,KAA0B,KAAI;AAC5C,gBAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC3B,aAAC,CAAA;AACD,YAAA,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACjD,YAAA,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;AAC9B,YAAA,OAAO,MAAK;AACR,gBAAA,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACpD,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/B,aAAC,CAAA;AACL,SAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAClD,CAAA;KACJ;8GA/BQ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCGrB,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEa,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;QAC1B,IAAM,CAAA,MAAA,GAAwB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC5E,IAAO,CAAA,OAAA,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAC/B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EACZ,WAAW,CAAC,CAAC,CAAC,CACjB,CAAA;AAGJ,KAAA;AARY,IAAA,GAAG,CAAuB;8GAD1B,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACNlC;AACA;AACA;MAEa,IAAI,CAAA;aACG,IAAY,CAAA,YAAA,GAAG,4BAAqC,CAAA,EAAA;aACpD,IAAQ,CAAA,QAAA,GAAG,8BAAuC,CAAA,EAAA;aAClD,IAAY,CAAA,YAAA,GAAG,4BAAqC,CAAA,EAAA;aACpD,IAAK,CAAA,KAAA,GAAG,8BAAuC,CAAA,EAAA;AAC/D;;AAEG;aACa,IAAU,CAAA,UAAA,GAAG,oCAA6C,CAAA,EAAA;;MAGjE,QAAQ,CAAA;aACD,IAAI,CAAA,IAAA,GAAG,OAAgB,CAAA,EAAA;aACvB,IAAM,CAAA,MAAA,GAAG,GAAY,CAAA,EAAA;aACrB,IAAM,CAAA,MAAA,GAAG,OAAgB,CAAA,EAAA;aACzB,IAAQ,CAAA,QAAA,GAAG,GAAY,CAAA,EAAA;aACvB,IAAI,CAAA,IAAA,GAAG,OAAgB,CAAA,EAAA;aACvB,IAAM,CAAA,MAAA,GAAG,GAAY,CAAA,EAAA;aACrB,IAAK,CAAA,KAAA,GAAG,OAAgB,CAAA,EAAA;aACxB,IAAO,CAAA,OAAA,GAAG,GAAY,CAAA,EAAA;;;MCX7B,gBAAgB,CAAA;AAChB,IAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACtB,QAAQ,GAAoC,EAAE,CAAA;IAEvD,KAAK,CAAC,OAA8B,EAAE,GAAa,EAAA;AAC/C,QAAA,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QAEhC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAChC,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;SAC/B;QAED,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAClC,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,YAAA,IAAI,OAAO,YAAY,MAAM,EAAE;AAC3B,gBAAA,OAAO,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAA;aAC9C;iBAAM;AACH,gBAAA,IAAI,GAAG,KAAK,YAAY,EAAE;oBACtB,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;iBACvD;qBAAM;oBACH,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;iBAC7D;aACJ;AAED,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;SAChC;AAED,QAAA,OAAO,OAAO,CAAA;KACjB;AAED,IAAA,oBAAoB,CAAC,OAAgB,EAAE,EAAe,EAAE,GAAa,EAAA;AACjE,QAAA,IAAI,GAAG,KAAK,YAAY,EAAE;AACtB,YAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,CAAA,CAAE,CAAC,CAAA;SAChE;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAChC,IAAI,UAAU,CAAC,CAAC,GAA0B,KAAI;AAC1C,YAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,IAAG;AAC1C,gBAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACzB,oBAAA,IAAI,KAAK,CAAC,aAAa,EAAE;wBACrB,GAAG,CAAC,IAAI,CAAC;4BACL,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU;4BACxC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;AAC3C,yBAAA,CAAC,CAAA;qBACL;yBAAM;wBACH,GAAG,CAAC,IAAI,CAAC;4BACL,KAAK,EAAE,EAAE,CAAC,WAAW;4BACrB,MAAM,EAAE,EAAE,CAAC,YAAY;AAC1B,yBAAA,CAAC,CAAA;qBACL;iBACJ;AACL,aAAC,CAAC,CAAA;YACF,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAA+B,EAAE,CAAC,CAAA;AAE9D,YAAA,OAAO,MAAK;gBACR,QAAQ,CAAC,UAAU,EAAE,CAAA;AACrB,gBAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AACtB,aAAC,CAAA;AACL,SAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAA;KACJ;IAED,mBAAmB,CAAC,OAAgB,EAAE,EAAe,EAAA;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,CAAC,CAAA;AAC9C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAChC,IAAI,UAAU,CAAC,CAAC,GAA0B,KAAI;YAC1C,IAAI,MAAM,GAAW,GAAG,CAAA;YACxB,IAAI,MAAM,GAAW,GAAG,CAAA;YAExB,MAAM,IAAI,GAAG,MAAK;AACd,gBAAA,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAA;AACzB,gBAAA,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAA;gBAC1B,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,EAAE;oBAChC,MAAM,GAAG,EAAE,CAAA;oBACX,MAAM,GAAG,EAAE,CAAA;AACX,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;iBAC9C;AACL,aAAC,CAAA;YAED,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AACxC,YAAA,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAA;AAC3C,YAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE;AACjB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,aAAa,EAAE,IAAI;AACtB,aAAA,CAAC,CAAA;AACF,YAAA,IAAI,EAAE,CAAA;AAEN,YAAA,OAAO,MAAK;gBACR,MAAM,CAAC,WAAW,EAAE,CAAA;gBACpB,QAAQ,CAAC,UAAU,EAAE,CAAA;AACrB,gBAAA,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AACtB,aAAC,CAAA;AACL,SAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAA;KACJ;IAED,0BAA0B,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAChC,IAAI,UAAU,CAAC,CAAC,GAA0B,KAAI;YAC1C,MAAM,QAAQ,GAAG,MAAK;gBAClB,GAAG,CAAC,IAAI,CAAC;oBACL,KAAK,EAAE,MAAM,CAAC,UAAU;oBACxB,MAAM,EAAE,MAAM,CAAC,WAAW;AAC7B,iBAAA,CAAC,CAAA;AACN,aAAC,CAAA;AACD,YAAA,QAAQ,EAAE,CAAA;AACV,YAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAC3C,YAAA,OAAO,MAAK;AACR,gBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAClD,aAAC,CAAA;AACL,SAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAA;KACJ;8GAnHQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;AAuHlC,SAAS,aAAa,CAAC,CAAY,EAAE,CAAY,EAAA;AAC7C,IAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAA;AACjE;;MCzHa,eAAe,CAAA;AACf,IAAA,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACtB,IAAA,QAAQ,GAA2C,IAAI,GAAG,EAAE,CAAA;AAErE,IAAA,KAAK,CAAC,OAA8B,EAAA;AAChC,QAAA,IAAI,OAAO,YAAY,MAAM,EAAE;AAC3B,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;SAC5B;AAED,QAAA,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;QAEhC,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AACxC,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;SACtC;AAED,QAAA,OAAO,OAAO,CAAA;KACjB;AAED,IAAA,cAAc,CAAC,OAAoB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAChC,IAAI,UAAU,CAAC,CAAC,IAA0B,KAAI;YAC1C,IAAI,KAAK,GAAuB,SAAS,CAAA;YACzC,MAAM,IAAI,GAAG,MAAK;AACd,gBAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAA;gBAC5C,IAAI,CAAC,IAAI,CAAC;oBACN,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,CAAC,EAAE,IAAI,CAAC,CAAC;AACZ,iBAAA,CAAC,CAAA;AACF,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,oBAAA,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;iBACtC;AACL,aAAC,CAAA;AACD,YAAA,IAAI,EAAE,CAAA;AACN,YAAA,OAAO,MAAK;AACR,gBAAA,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;AACxC,aAAC,CAAA;AACL,SAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CACzD,CAAA;KACJ;8GAxCQ,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;MCCrB,WAAW,CAAA;AACX,IAAA,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;AACtC,IAAA,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;IAE9C,KAAK,CAAC,OAA8B,EAAE,QAAkB,EAAA;QACpD,OAAO,IAAI,UAAU,CAAC,CAAC,IAAsB,KACzC,aAAa,CAAC;YACV,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC;YAC9C,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC;SACvC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAI;YAC1B,IAAI,CAAC,IAAI,CAAC;gBACN,CAAC,EAAE,GAAG,CAAC,CAAC;gBACR,CAAC,EAAE,GAAG,CAAC,CAAC;gBACR,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;AACrB,aAAA,CAAC,CAAA;SACL,CAAC,CACL,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;KACzB;8GAlBQ,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACVlC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAU,CAAA;AAGnE,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAU,CAAA;AAcnE,MAAM,OAAO,GAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AAEjE,SAAU,kBAAkB,CAAC,KAAsB,EAAA;AACrD,IAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,QAAA,OAAO,OAAO,CAAA;KACjB;AAED,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3B,QAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAA,CAAE,CAAC,CAAA;KACjD;AAED,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAqB,CAAA;AAC5E,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,QAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC,CAAA;KAC5C;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAA;IACzF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAA;AAErF,IAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;AACnC;;ACjCA,MAAM,gBAAgB,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAA;AAC5D,MAAM,mBAAmB,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAA;AAElD,SAAA,WAAW,CAAwB,EAAK,EAAE,UAAqB,EAAA;AAC3E,IAAA,OAAO,GAAG,CACN,EAAE,EACF,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,UAAU,CACb,CAAA;AACL,CAAC;AAEe,SAAA,YAAY,CAAwB,EAAK,EAAE,UAAqB,EAAA;AAC5E,IAAA,OAAO,GAAG,CAAC,EAAE,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAA;AACvH,CAAC;AAEK,SAAU,WAAW,CAAwB,EAAK,EAAA;AACpD,IAAA,OAAO,aAAa,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1D,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EACzC,oBAAoB,EAAE,CACzB,CAAA;AACL,CAAC;AAED,SAAS,GAAG,CACR,EAAK,EACL,OAAe,EACf,SAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,UAAkB,EAClB,IAAe,EAAA;AAEf,IAAA,OAAO,IAAI,UAAU,CAAC,CAAC,IAAiC,KAAI;QACxD,MAAM,KAAK,GAA8B,EAAE,CAAA;AAE3C,QAAA,MAAM,KAAK,GAAG,CAAC,KAAU,KAAI;AACzB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1B,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAChD,OAAM;aACT;AAED,YAAA,IAAI,GAAG,IAAI,KAAK,EAAE;AACd,gBAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;aACf;iBAAM;AACH,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;aACjB;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;AACjC,SAAC,CAAA;AAED,QAAA,MAAM,KAAK,GAAG,CAAC,KAAU,KAAI;AACzB,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1B,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAChD,OAAM;aACT;AAED,YAAA,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE;AACjB,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;aAChC;AACL,SAAC,CAAA;AAED,QAAA,MAAM,GAAG,GAAG,CAAC,KAAU,KAAI;AACvB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE;AACzB,gBAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1B,gBAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;AACZ,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACjB,oBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA;iBACpB;aACJ;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aAClB;AACL,SAAC,CAAA;QAED,EAAE,CAAC,gBAAgB,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACtC,EAAE,CAAC,gBAAgB,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACtC,EAAE,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QAClC,EAAE,CAAC,gBAAgB,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;AAErC,QAAA,MAAM,GAAG,GAAG,wBAAwB,CAAC,MAAK;YACtC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aAClB;AACL,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,MAAK;YACR,uBAAuB,CAAC,GAAG,CAAC,CAAA;YAC5B,EAAE,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YACzC,EAAE,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YACzC,EAAE,CAAC,mBAAmB,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;YACrC,EAAE,CAAC,mBAAmB,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;AAC5C,SAAC,CAAA;AACL,KAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAA;AACnC;;ACnFM,SAAU,cAAc,CAAC,KAAiB,EAAA;AAC5C,IAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,KAAK,CAAA;KACf;AAAM,SAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAClC,QAAA,OAAO,cAAc,CAAC,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI,CAAC,CAAA;KACtC;AAAM,SAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAClC,QAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,CAAA,CAAE,CAAC,CAAA;KAC7C;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAqB,CAAA;AAEhG,IAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,QAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,KAAK,CAAA,CAAE,CAAC,CAAA;KAC5C;AAED,IAAA,OAAO,OAAO,CAAC,GAAG,OAAO,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,OAAO,CACZ,GAAmB,EACnB,KAAA,GAAwB,GAAG,EAC3B,MAAyB,GAAA,GAAG,EAC5B,IAAA,GAAuB,KAAK,EAAA;IAE5B,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AACvC;;AC3CA;;AAEG;;;;"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
export { MediaWatcher } from "./services/media-watcher.service";
|
|
2
2
|
export { ColorSchemeService } from "./services/color-scheme.service";
|
|
3
3
|
export { Ease, Duration } from "./sass";
|
|
4
|
-
export { Dimension, Rect } from "./util/rect";
|
|
5
4
|
export { DimensionWatcher, WatchBox } from "./services/dimension-watcher.service";
|
|
5
|
+
export { PositionWatcher } from "./services/position-watcher.service";
|
|
6
|
+
export { RectWatcher } from "./services/rect-watcher.service";
|
|
7
|
+
export { AlignmentInput, alignmentNormalize, Alignment, AlignHorizontal, AlignVertical } from "./util/alignment";
|
|
8
|
+
export { inAnimation, inTransition, isAnimating } from "./util/in-animation";
|
|
9
|
+
export { Dimension, Rect, Position } from "./util/rect";
|
|
10
|
+
export { SidesInput, sidesNormalize, Sides } from "./util/sides";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngutil/style",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.26",
|
|
4
4
|
"exports": {
|
|
5
5
|
".": {
|
|
6
6
|
"sass": "./index.scss",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"@angular/common": "^17.3.6",
|
|
19
19
|
"@angular/core": "^17.3.6",
|
|
20
|
-
"rxjs": "^7.8.1"
|
|
20
|
+
"rxjs": "^7.8.1",
|
|
21
|
+
"@ngutil/common": "0.0.26"
|
|
21
22
|
},
|
|
22
23
|
"publishConfig": {
|
|
23
24
|
"access": "public",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { ElementRef } from "@angular/core";
|
|
2
1
|
import { Observable } from "rxjs";
|
|
2
|
+
import { ElementInput } from "@ngutil/common";
|
|
3
3
|
import { Dimension } from "../util/rect";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export type WatchBox = ResizeObserverBoxOptions | "scroll-box";
|
|
6
|
-
export type Watches = Map<HTMLElement, Observable<Dimension>>;
|
|
6
|
+
export type Watches = Map<HTMLElement | Window, Observable<Dimension>>;
|
|
7
7
|
export declare class DimensionWatcher {
|
|
8
8
|
#private;
|
|
9
|
-
watch(element:
|
|
9
|
+
watch(element: ElementInput | Window, box: WatchBox): Observable<Dimension>;
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<DimensionWatcher, never>;
|
|
11
11
|
static ɵprov: i0.ɵɵInjectableDeclaration<DimensionWatcher>;
|
|
12
12
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { ElementInput } from "@ngutil/common";
|
|
3
|
+
import { Position } from "../util/rect";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class PositionWatcher {
|
|
6
|
+
#private;
|
|
7
|
+
watch(element: ElementInput | Window): Observable<Position>;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PositionWatcher, never>;
|
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<PositionWatcher>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { ElementInput } from "@ngutil/common";
|
|
3
|
+
import { Rect } from "../util/rect";
|
|
4
|
+
import { WatchBox } from "./dimension-watcher.service";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class RectWatcher {
|
|
7
|
+
#private;
|
|
8
|
+
watch(element: ElementInput | Window, watchBox: WatchBox): Observable<Rect>;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RectWatcher, never>;
|
|
10
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<RectWatcher>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
declare const HORIZONTAL: readonly ["start", "center", "end", "max-width"];
|
|
2
|
+
export type AlignHorizontal = (typeof HORIZONTAL)[number];
|
|
3
|
+
declare const VERTICAL: readonly ["top", "middle", "bottom", "max-height"];
|
|
4
|
+
export type AlignVertical = (typeof VERTICAL)[number];
|
|
5
|
+
export type AlignmentInput = `${AlignHorizontal} ${AlignVertical}` | `${AlignVertical} ${AlignHorizontal}` | AlignVertical | AlignHorizontal;
|
|
6
|
+
export interface Alignment {
|
|
7
|
+
horizontal: AlignHorizontal;
|
|
8
|
+
vertical: AlignVertical;
|
|
9
|
+
}
|
|
10
|
+
export declare function alignmentNormalize(value?: AlignmentInput): Alignment;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
export declare function inAnimation<T extends HTMLElement>(el: T, animations?: string[]): Observable<string[] | null>;
|
|
3
|
+
export declare function inTransition<T extends HTMLElement>(el: T, properties?: string[]): Observable<string[] | null>;
|
|
4
|
+
export declare function isAnimating<T extends HTMLElement>(el: T): Observable<boolean>;
|
package/util/rect.d.ts
CHANGED
package/util/sides.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NumberWithUnit } from "@ngutil/common";
|
|
2
|
+
export interface Sides {
|
|
3
|
+
top: NumberWithUnit;
|
|
4
|
+
right: NumberWithUnit;
|
|
5
|
+
bottom: NumberWithUnit;
|
|
6
|
+
left: NumberWithUnit;
|
|
7
|
+
}
|
|
8
|
+
export type SidesUnit = "px" | "%";
|
|
9
|
+
export type SidesNumber = `${number}${SidesUnit}` | number;
|
|
10
|
+
export type SidesInput = Sides | SidesNumber | `${SidesNumber} ${SidesNumber}` | `${SidesNumber} ${SidesNumber} ${SidesNumber}` | `${SidesNumber} ${SidesNumber} ${SidesNumber} ${SidesNumber}`;
|
|
11
|
+
export declare function sidesNormalize(value: SidesInput): Sides;
|