@ngutil/style 0.0.80 → 0.0.82

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