@ngutil/layout 0.0.3-dev.1 → 0.0.3-dev.10
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/docking/docking-content.component.d.ts +5 -0
- package/docking/docking-layout.component.d.ts +22 -0
- package/docking/docking-panel.component.d.ts +40 -0
- package/docking/index.d.ts +13 -0
- package/esm2022/docking/docking-content.component.mjs +11 -0
- package/esm2022/docking/docking-layout.component.mjs +140 -0
- package/esm2022/docking/docking-panel.component.mjs +179 -0
- package/esm2022/docking/index.mjs +20 -0
- package/esm2022/index.mjs +5 -0
- package/esm2022/l9/index.mjs +3 -0
- package/esm2022/l9/range.mjs +109 -0
- package/esm2022/l9/state.mjs +29 -0
- package/esm2022/ngutil-layout.mjs +5 -0
- package/esm2022/services/slots.service.mjs +240 -0
- package/esm2022/util/dimension-watcher.mjs +85 -0
- package/esm2022/util/dimension.mjs +2 -0
- package/esm2022/util/index.mjs +3 -0
- package/esm2022/util/media-watcher.mjs +29 -0
- package/esm2022/util/rect.mjs +2 -0
- package/fesm2022/ngutil-layout.mjs +822 -0
- package/fesm2022/ngutil-layout.mjs.map +1 -0
- package/index.d.ts +4 -0
- package/l9/index.d.ts +2 -0
- package/l9/range.d.ts +28 -0
- package/l9/state.d.ts +14 -0
- package/package.json +18 -5
- package/services/slots.service.d.ts +69 -0
- package/util/dimension-watcher.d.ts +4 -0
- package/util/dimension.d.ts +5 -0
- package/util/index.d.ts +4 -0
- package/util/media-watcher.d.ts +5 -0
- package/util/rect.d.ts +5 -0
- package/.eslintrc.json +0 -25
- package/.storybook/main.ts +0 -16
- package/.storybook/preview.ts +0 -0
- package/.storybook/tsconfig.json +0 -16
- package/jest.config.ts +0 -22
- package/ng-package.json +0 -7
- package/project.json +0 -73
- package/src/index.ts +0 -1
- package/src/lib/layout/layout.component.scss +0 -0
- package/src/lib/layout/layout.component.spec.ts +0 -22
- package/src/lib/layout/layout.component.stories.ts +0 -24
- package/src/lib/layout/layout.component.ts +0 -11
- package/src/test-setup.ts +0 -9
- package/tsconfig.json +0 -32
- package/tsconfig.lib.json +0 -19
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -11
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* -----------------------------------------------
|
|
3
|
+
* | TOP:LEFT | TOP:CENTER | TOP:RIGHT |
|
|
4
|
+
* -----------------------------------------------
|
|
5
|
+
* | MIDDLE:LEFT | MIDDLE:CENTER | MIDDLE:RIGH |
|
|
6
|
+
* -----------------------------------------------
|
|
7
|
+
* | BOTTOMN:LEFT | BOTTOM:CENTER | BOTTOM:RIGHT |
|
|
8
|
+
* -----------------------------------------------
|
|
9
|
+
*/
|
|
10
|
+
const vertical = ["top", "middle", "bottom"];
|
|
11
|
+
const horizontal = ["left", "center", "right"];
|
|
12
|
+
export class L9Cell {
|
|
13
|
+
static coerce(value) {
|
|
14
|
+
const [v, h] = value.split(":");
|
|
15
|
+
if (vertical.includes(v) && horizontal.includes(h)) {
|
|
16
|
+
return new L9Cell(v, h);
|
|
17
|
+
}
|
|
18
|
+
throw new Error(`Invalid cell value: ${value}`);
|
|
19
|
+
}
|
|
20
|
+
constructor(v, h) {
|
|
21
|
+
this.v = v;
|
|
22
|
+
this.h = h;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class L9Range {
|
|
26
|
+
static coerce(value) {
|
|
27
|
+
if (value instanceof L9Range) {
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return new L9Range(value);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
constructor(range) {
|
|
35
|
+
this.cells = parse(range);
|
|
36
|
+
this.orient = this.#determineOrient();
|
|
37
|
+
}
|
|
38
|
+
isEq(other) {
|
|
39
|
+
if (other instanceof L9Range) {
|
|
40
|
+
const selfFirst = this.cells[0];
|
|
41
|
+
const otherFirst = other.cells[0];
|
|
42
|
+
if (selfFirst.h !== otherFirst.h || selfFirst.v !== otherFirst.v) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const selfLast = this.cells[this.cells.length - 1];
|
|
46
|
+
const otherLast = other.cells[other.cells.length - 1];
|
|
47
|
+
if (selfLast.h === otherLast.h && selfLast.v === otherLast.v) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
#determineOrient() {
|
|
54
|
+
const { v: sv, h: sh } = this.cells[0];
|
|
55
|
+
const { v: ev, h: eh } = this.cells[this.cells.length - 1];
|
|
56
|
+
if (sv === ev) {
|
|
57
|
+
return "horizontal";
|
|
58
|
+
}
|
|
59
|
+
else if (sh === eh) {
|
|
60
|
+
return "vertical";
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return "rect";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function parse(value) {
|
|
68
|
+
const cells = [];
|
|
69
|
+
if (vertical.includes(value)) {
|
|
70
|
+
for (const h of horizontal) {
|
|
71
|
+
cells.push(new L9Cell(value, h));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (horizontal.includes(value)) {
|
|
75
|
+
for (const v of vertical) {
|
|
76
|
+
cells.push(new L9Cell(v, value));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (value.includes("-")) {
|
|
80
|
+
const [begin, end] = value.split("-");
|
|
81
|
+
const beginCells = parse(begin);
|
|
82
|
+
const endCells = parse(end);
|
|
83
|
+
if (beginCells.length > 1) {
|
|
84
|
+
throw new Error(`Currently not supported begin range value: ${begin}`);
|
|
85
|
+
}
|
|
86
|
+
if (endCells.length > 1) {
|
|
87
|
+
throw new Error(`Currently not supported end range value: ${end}`);
|
|
88
|
+
}
|
|
89
|
+
const { v: bv, h: bh } = beginCells[0];
|
|
90
|
+
const { v: ev, h: eh } = endCells[0];
|
|
91
|
+
const vstart = Math.min(vertical.indexOf(bv), vertical.indexOf(ev));
|
|
92
|
+
const vend = Math.max(vertical.indexOf(bv), vertical.indexOf(ev));
|
|
93
|
+
const hstart = Math.min(horizontal.indexOf(bh), horizontal.indexOf(eh));
|
|
94
|
+
const hend = Math.max(horizontal.indexOf(bh), horizontal.indexOf(eh));
|
|
95
|
+
for (let vi = vstart; vi <= vend; vi++) {
|
|
96
|
+
for (let hi = hstart; hi <= hend; hi++) {
|
|
97
|
+
cells.push(new L9Cell(vertical[vi], horizontal[hi]));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (value.includes(":")) {
|
|
102
|
+
cells.push(L9Cell.coerce(value));
|
|
103
|
+
}
|
|
104
|
+
if (cells.length === 0) {
|
|
105
|
+
throw Error(`Undefined l9cell: "${value}"`);
|
|
106
|
+
}
|
|
107
|
+
return cells;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQTtBQVF2RCxNQUFNLE9BQU8sTUFBTTtJQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBaUI7UUFDM0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRS9CLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFRLEVBQUUsQ0FBUSxDQUFDLENBQUE7UUFDekMsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVELFlBQ29CLENBQWEsRUFDYixDQUFlO1FBRGYsTUFBQyxHQUFELENBQUMsQ0FBWTtRQUNiLE1BQUMsR0FBRCxDQUFDLENBQWM7SUFDaEMsQ0FBQztDQUNQO0FBRUQsTUFBTSxPQUFPLE9BQU87SUFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUE0QjtRQUN0QyxJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUMzQixPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFLRCxZQUFZLEtBQWtCO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDekMsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFjO1FBQ2YsSUFBSSxLQUFLLFlBQVksT0FBTyxFQUFFLENBQUM7WUFDM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUMvQixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBRWpDLElBQUksU0FBUyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvRCxPQUFPLEtBQUssQ0FBQTtZQUNoQixDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNsRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBRXJELElBQUksUUFBUSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxPQUFPLElBQUksQ0FBQTtZQUNmLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDaEIsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRTFELElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxZQUFZLENBQUE7UUFDdkIsQ0FBQzthQUFNLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE9BQU8sVUFBVSxDQUFBO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxNQUFNLENBQUE7UUFDakIsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQUVELFNBQVMsS0FBSyxDQUFDLEtBQVU7SUFDckIsTUFBTSxLQUFLLEdBQWtCLEVBQUUsQ0FBQTtJQUUvQixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQixLQUFLLE1BQU0sQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDcEMsQ0FBQztJQUNMLENBQUM7U0FBTSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDcEMsQ0FBQztJQUNMLENBQUM7U0FBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUUzQixJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUMxRSxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDdEUsQ0FBQztRQUVELE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUVwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxDQUFDLENBQUE7UUFDL0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLENBQUMsQ0FBQTtRQUNyRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBUyxDQUFDLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFTLENBQUMsQ0FBQyxDQUFBO1FBRW5GLEtBQUssSUFBSSxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxLQUFLLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDeEQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixNQUFNLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIHwgVE9QOkxFRlQgICAgIHwgIFRPUDpDRU5URVIgICB8IFRPUDpSSUdIVCAgICB8XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogfCBNSURETEU6TEVGVCAgfCBNSURETEU6Q0VOVEVSIHwgTUlERExFOlJJR0ggIHxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiB8IEJPVFRPTU46TEVGVCB8IEJPVFRPTTpDRU5URVIgfCBCT1RUT006UklHSFQgfFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCB2ZXJ0aWNhbCA9IFtcInRvcFwiLCBcIm1pZGRsZVwiLCBcImJvdHRvbVwiXSBhcyBjb25zdFxuY29uc3QgaG9yaXpvbnRhbCA9IFtcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBMOVZlcnRpY2FsID0gXCJ0b3BcIiB8IFwibWlkZGxlXCIgfCBcImJvdHRvbVwiXG5leHBvcnQgdHlwZSBMOUhvcml6b250YWwgPSBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCJcbmV4cG9ydCB0eXBlIEw5Q2VsbE5hbWUgPSBgJHtMOVZlcnRpY2FsfToke0w5SG9yaXpvbnRhbH1gXG5leHBvcnQgdHlwZSBMOVJhbmdlTmFtZSA9IEw5VmVydGljYWwgfCBMOUhvcml6b250YWwgfCBMOUNlbGxOYW1lIHwgYCR7TDlDZWxsTmFtZX0tJHtMOUNlbGxOYW1lfWBcbmV4cG9ydCB0eXBlIEw5T3JpZW50ID0gXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCIgfCBcInJlY3RcIlxuXG5leHBvcnQgY2xhc3MgTDlDZWxsIHtcbiAgICBzdGF0aWMgY29lcmNlKHZhbHVlOiBMOUNlbGxOYW1lKSB7XG4gICAgICAgIGNvbnN0IFt2LCBoXSA9IHZhbHVlLnNwbGl0KFwiOlwiKVxuXG4gICAgICAgIGlmICh2ZXJ0aWNhbC5pbmNsdWRlcyh2IGFzIGFueSkgJiYgaG9yaXpvbnRhbC5pbmNsdWRlcyhoIGFzIGFueSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTDlDZWxsKHYgYXMgYW55LCBoIGFzIGFueSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjZWxsIHZhbHVlOiAke3ZhbHVlfWApXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB2OiBMOVZlcnRpY2FsLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaDogTDlIb3Jpem9udGFsXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgTDlSYW5nZSB7XG4gICAgc3RhdGljIGNvZXJjZSh2YWx1ZTogTDlSYW5nZSB8IEw5UmFuZ2VOYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEw5UmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMOVJhbmdlKHZhbHVlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgY2VsbHM6IEFycmF5PEw5Q2VsbD5cbiAgICByZWFkb25seSBvcmllbnQ6IEw5T3JpZW50XG5cbiAgICBjb25zdHJ1Y3RvcihyYW5nZTogTDlSYW5nZU5hbWUpIHtcbiAgICAgICAgdGhpcy5jZWxscyA9IHBhcnNlKHJhbmdlKVxuICAgICAgICB0aGlzLm9yaWVudCA9IHRoaXMuI2RldGVybWluZU9yaWVudCgpXG4gICAgfVxuXG4gICAgaXNFcShvdGhlcjogTDlSYW5nZSkge1xuICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMOVJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxmRmlyc3QgPSB0aGlzLmNlbGxzWzBdXG4gICAgICAgICAgICBjb25zdCBvdGhlckZpcnN0ID0gb3RoZXIuY2VsbHNbMF1cblxuICAgICAgICAgICAgaWYgKHNlbGZGaXJzdC5oICE9PSBvdGhlckZpcnN0LmggfHwgc2VsZkZpcnN0LnYgIT09IG90aGVyRmlyc3Qudikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxmTGFzdCA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgY29uc3Qgb3RoZXJMYXN0ID0gb3RoZXIuY2VsbHNbb3RoZXIuY2VsbHMubGVuZ3RoIC0gMV1cblxuICAgICAgICAgICAgaWYgKHNlbGZMYXN0LmggPT09IG90aGVyTGFzdC5oICYmIHNlbGZMYXN0LnYgPT09IG90aGVyTGFzdC52KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAjZGV0ZXJtaW5lT3JpZW50KCk6IEw5T3JpZW50IHtcbiAgICAgICAgY29uc3QgeyB2OiBzdiwgaDogc2ggfSA9IHRoaXMuY2VsbHNbMF1cbiAgICAgICAgY29uc3QgeyB2OiBldiwgaDogZWggfSA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuXG4gICAgICAgIGlmIChzdiA9PT0gZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBcImhvcml6b250YWxcIlxuICAgICAgICB9IGVsc2UgaWYgKHNoID09PSBlaCkge1xuICAgICAgICAgICAgcmV0dXJuIFwidmVydGljYWxcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwicmVjdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHZhbHVlOiBhbnkpOiBBcnJheTxMOUNlbGw+IHtcbiAgICBjb25zdCBjZWxsczogQXJyYXk8TDlDZWxsPiA9IFtdXG5cbiAgICBpZiAodmVydGljYWwuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgaCBvZiBob3Jpem9udGFsKSB7XG4gICAgICAgICAgICBjZWxscy5wdXNoKG5ldyBMOUNlbGwodmFsdWUsIGgpKVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChob3Jpem9udGFsLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmVydGljYWwpIHtcbiAgICAgICAgICAgIGNlbGxzLnB1c2gobmV3IEw5Q2VsbCh2LCB2YWx1ZSkpXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluY2x1ZGVzKFwiLVwiKSkge1xuICAgICAgICBjb25zdCBbYmVnaW4sIGVuZF0gPSB2YWx1ZS5zcGxpdChcIi1cIilcbiAgICAgICAgY29uc3QgYmVnaW5DZWxscyA9IHBhcnNlKGJlZ2luKVxuICAgICAgICBjb25zdCBlbmRDZWxscyA9IHBhcnNlKGVuZClcblxuICAgICAgICBpZiAoYmVnaW5DZWxscy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJlZ2luIHJhbmdlIHZhbHVlOiAke2JlZ2lufWApXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW5kQ2VsbHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJyZW50bHkgbm90IHN1cHBvcnRlZCBlbmQgcmFuZ2UgdmFsdWU6ICR7ZW5kfWApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHY6IGJ2LCBoOiBiaCB9ID0gYmVnaW5DZWxsc1swXVxuICAgICAgICBjb25zdCB7IHY6IGV2LCBoOiBlaCB9ID0gZW5kQ2VsbHNbMF1cblxuICAgICAgICBjb25zdCB2c3RhcnQgPSBNYXRoLm1pbih2ZXJ0aWNhbC5pbmRleE9mKGJ2IGFzIGFueSksIHZlcnRpY2FsLmluZGV4T2YoZXYgYXMgYW55KSlcbiAgICAgICAgY29uc3QgdmVuZCA9IE1hdGgubWF4KHZlcnRpY2FsLmluZGV4T2YoYnYgYXMgYW55KSwgdmVydGljYWwuaW5kZXhPZihldiBhcyBhbnkpKVxuICAgICAgICBjb25zdCBoc3RhcnQgPSBNYXRoLm1pbihob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG4gICAgICAgIGNvbnN0IGhlbmQgPSBNYXRoLm1heChob3Jpem9udGFsLmluZGV4T2YoYmggYXMgYW55KSwgaG9yaXpvbnRhbC5pbmRleE9mKGVoIGFzIGFueSkpXG5cbiAgICAgICAgZm9yIChsZXQgdmkgPSB2c3RhcnQ7IHZpIDw9IHZlbmQ7IHZpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGhpID0gaHN0YXJ0OyBoaSA8PSBoZW5kOyBoaSsrKSB7XG4gICAgICAgICAgICAgICAgY2VsbHMucHVzaChuZXcgTDlDZWxsKHZlcnRpY2FsW3ZpXSwgaG9yaXpvbnRhbFtoaV0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmNsdWRlcyhcIjpcIikpIHtcbiAgICAgICAgY2VsbHMucHVzaChMOUNlbGwuY29lcmNlKHZhbHVlKSlcbiAgICB9XG5cbiAgICBpZiAoY2VsbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBVbmRlZmluZWQgbDljZWxsOiBcIiR7dmFsdWV9XCJgKVxuICAgIH1cblxuICAgIHJldHVybiBjZWxsc1xufVxuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { BehaviorSubject, map, shareReplay } from "rxjs";
|
|
2
|
+
import { L9Range } from "./range";
|
|
3
|
+
export class L9State {
|
|
4
|
+
#dims;
|
|
5
|
+
constructor(prefix) {
|
|
6
|
+
this.prefix = prefix;
|
|
7
|
+
this.#dims = new BehaviorSubject({});
|
|
8
|
+
this.style = this.#dims.pipe(map(dims => {
|
|
9
|
+
const res = {};
|
|
10
|
+
for (const [k, v] of Object.entries(dims)) {
|
|
11
|
+
if (v == null) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
const [vertical, horizontal] = k.split(":");
|
|
15
|
+
res[`--${this.prefix}-${vertical}-${horizontal}-w`] = v.width.toString();
|
|
16
|
+
res[`--${this.prefix}-${vertical}-${horizontal}-h`] = v.height.toString();
|
|
17
|
+
}
|
|
18
|
+
return res;
|
|
19
|
+
}), shareReplay(1));
|
|
20
|
+
}
|
|
21
|
+
update(range, dim) {
|
|
22
|
+
range = L9Range.coerce(range);
|
|
23
|
+
const dims = { ...this.#dims.value };
|
|
24
|
+
// for (const cell of range.horizontals) {
|
|
25
|
+
// dims[cell] = dim.width
|
|
26
|
+
// }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L3N0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFjLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUdwRSxPQUFPLEVBQTRCLE9BQU8sRUFBMkIsTUFBTSxTQUFTLENBQUE7QUFPcEYsTUFBTSxPQUFPLE9BQU87SUFDUCxLQUFLLENBQWtDO0lBcUJoRCxZQUE0QixNQUFTO1FBQVQsV0FBTSxHQUFOLE1BQU0sQ0FBRztRQXJCNUIsVUFBSyxHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFBO1FBRXZDLFVBQUssR0FBK0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3hELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNQLE1BQU0sR0FBRyxHQUFtQixFQUFFLENBQUE7WUFFOUIsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1osU0FBUTtnQkFDWixDQUFDO2dCQUVELE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDM0MsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLElBQUksVUFBVSxJQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQTtnQkFDekYsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLElBQUksVUFBVSxJQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtZQUM5RixDQUFDO1lBRUQsT0FBTyxHQUFHLENBQUE7UUFDZCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7SUFFdUMsQ0FBQztJQUV6QyxNQUFNLENBQUMsS0FBNEIsRUFBRSxHQUFjO1FBQy9DLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzdCLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ3BDLDBDQUEwQztRQUMxQyw2QkFBNkI7UUFDN0IsSUFBSTtJQUNSLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGltZW5zaW9uIH0gZnJvbSBcIi4uL3V0aWxcIlxuaW1wb3J0IHsgTDlDZWxsTmFtZSwgTDlIb3Jpem9udGFsLCBMOVJhbmdlLCBMOVJhbmdlTmFtZSwgTDlWZXJ0aWNhbCB9IGZyb20gXCIuL3JhbmdlXCJcblxuZXhwb3J0IHR5cGUgTDlTdGF0ZVZhcjxUIGV4dGVuZHMgc3RyaW5nPiA9IGAtLSR7VH0tJHtMOVZlcnRpY2FsfS0ke0w5SG9yaXpvbnRhbH0tJHtcIndcIiB8IFwiaFwifWBcbmV4cG9ydCB0eXBlIEw5U3R5bGVWYXJzPFQgZXh0ZW5kcyBzdHJpbmc+ID0geyBba2V5IGluIEw5U3RhdGVWYXI8VD5dPzogc3RyaW5nIH1cblxudHlwZSBMOURpbXMgPSB7IFtrZXkgaW4gTDlDZWxsTmFtZV0/OiBEaW1lbnNpb24gfVxuXG5leHBvcnQgY2xhc3MgTDlTdGF0ZTxUIGV4dGVuZHMgc3RyaW5nPiB7XG4gICAgcmVhZG9ubHkgI2RpbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEw5RGltcz4oe30pXG5cbiAgICByZWFkb25seSBzdHlsZTogT2JzZXJ2YWJsZTxMOVN0eWxlVmFyczxUPj4gPSB0aGlzLiNkaW1zLnBpcGUoXG4gICAgICAgIG1hcChkaW1zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlczogTDlTdHlsZVZhcnM8VD4gPSB7fVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhkaW1zKSkge1xuICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBbdmVydGljYWwsIGhvcml6b250YWxdID0gay5zcGxpdChcIjpcIilcbiAgICAgICAgICAgICAgICByZXNbYC0tJHt0aGlzLnByZWZpeH0tJHt2ZXJ0aWNhbH0tJHtob3Jpem9udGFsfS13YCBhcyBMOVN0YXRlVmFyPFQ+XSA9IHYud2lkdGgudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIHJlc1tgLS0ke3RoaXMucHJlZml4fS0ke3ZlcnRpY2FsfS0ke2hvcml6b250YWx9LWhgIGFzIEw5U3RhdGVWYXI8VD5dID0gdi5oZWlnaHQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBwcmVmaXg6IFQpIHt9XG5cbiAgICB1cGRhdGUocmFuZ2U6IEw5UmFuZ2UgfCBMOVJhbmdlTmFtZSwgZGltOiBEaW1lbnNpb24pIHtcbiAgICAgICAgcmFuZ2UgPSBMOVJhbmdlLmNvZXJjZShyYW5nZSlcbiAgICAgICAgY29uc3QgZGltcyA9IHsgLi4udGhpcy4jZGltcy52YWx1ZSB9XG4gICAgICAgIC8vIGZvciAoY29uc3QgY2VsbCBvZiByYW5nZS5ob3Jpem9udGFscykge1xuICAgICAgICAvLyAgICAgZGltc1tjZWxsXSA9IGRpbS53aWR0aFxuICAgICAgICAvLyB9XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd1dGlsLWxheW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dC9zcmMvbmd1dGlsLWxheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { Directive, inject, Injectable, Injector, TemplateRef, ViewContainerRef } from "@angular/core";
|
|
2
|
+
import { BehaviorSubject, distinctUntilChanged, finalize, map, of, scan, shareReplay, Subject, switchMap, tap } from "rxjs";
|
|
3
|
+
import { Destructible } from "@ngutil/common";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const SLOT_REGEX = /^([^:\s]+)(?::(\d+))?(?:\s+as\s+(.*?))?$/i;
|
|
6
|
+
export class SlotDef {
|
|
7
|
+
constructor(slot, tpl) {
|
|
8
|
+
this.tpl = tpl;
|
|
9
|
+
const match = slot.match(SLOT_REGEX);
|
|
10
|
+
if (!match) {
|
|
11
|
+
console.warn(`Invalid slot definition: ${slot}`);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
this.slot = match[1];
|
|
15
|
+
this.order = match[2] != null ? Number(match[2]) : Infinity;
|
|
16
|
+
this.id = match[3];
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
dispose() {
|
|
20
|
+
this.viewRef?.destroy();
|
|
21
|
+
this.viewRef = undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @Directive({selector: "ng-template[xyzSlot]", inputs: [{name: "slot", alias: "xyzSlot"}]})
|
|
26
|
+
* class XYZSlotDirective extends SlotDirective<XYZComponentSlots> { }
|
|
27
|
+
*
|
|
28
|
+
* @Directive({selector: "ng-template[xyzSlotOutlet]", inputs: [{name: "slot", alias: "xyzSlotOutlet"}]})
|
|
29
|
+
* class XYZSlotOutletDirective extends SlotOutletDirective<XYZComponentSlots> { }
|
|
30
|
+
*
|
|
31
|
+
*
|
|
32
|
+
* @Component({provides: [SlotsService]})
|
|
33
|
+
* class XYZComponent {
|
|
34
|
+
* slots: inject(SlotsService<XYZComponentSlots>)
|
|
35
|
+
* }
|
|
36
|
+
*
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
export class SlotsService extends Destructible {
|
|
40
|
+
#events = new Subject();
|
|
41
|
+
#entries = this.#events.pipe(scan((entries, event) => {
|
|
42
|
+
if (event.type === "add") {
|
|
43
|
+
const index = entries.findIndex(value => value === event.def);
|
|
44
|
+
if (index > -1) {
|
|
45
|
+
entries[index] = event.def;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
entries.push(event.def);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (event.type === "del") {
|
|
52
|
+
const index = entries.findIndex(value => value === event.def);
|
|
53
|
+
if (index > -1) {
|
|
54
|
+
entries.splice(index, 1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return entries;
|
|
58
|
+
}, []), tap(entries => {
|
|
59
|
+
entries.sort((a, b) => {
|
|
60
|
+
if (a.slot === b.slot) {
|
|
61
|
+
return a.order - b.order;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
return a.slot.localeCompare(b.slot);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}), shareReplay(1));
|
|
68
|
+
constructor() {
|
|
69
|
+
super();
|
|
70
|
+
// XXX: need to collect entries from the beginning
|
|
71
|
+
this.d.sub(this.#entries).subscribe();
|
|
72
|
+
}
|
|
73
|
+
addTpl(def) {
|
|
74
|
+
this.#events.next({ type: "add", def });
|
|
75
|
+
}
|
|
76
|
+
delTpl(def) {
|
|
77
|
+
this.#events.next({ type: "del", def });
|
|
78
|
+
}
|
|
79
|
+
#watchers = {};
|
|
80
|
+
watch(slot) {
|
|
81
|
+
const existing = this.#watchers[slot];
|
|
82
|
+
if (existing == null) {
|
|
83
|
+
return (this.#watchers[slot] = this.#watch(slot));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
return existing;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
#watch(slot) {
|
|
90
|
+
return this.#entries.pipe(map(entries => entries.filter(entry => entry.slot === slot)), distinctUntilChanged((prev, curr) => {
|
|
91
|
+
if (prev.length === curr.length) {
|
|
92
|
+
for (let i = 0; i < prev.length; i++) {
|
|
93
|
+
if (prev[i] !== curr[i]) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}), finalize(() => {
|
|
103
|
+
delete this.#watchers[slot];
|
|
104
|
+
}), shareReplay(1));
|
|
105
|
+
}
|
|
106
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
107
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService }); }
|
|
108
|
+
}
|
|
109
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService, decorators: [{
|
|
110
|
+
type: Injectable
|
|
111
|
+
}], ctorParameters: () => [] });
|
|
112
|
+
export class SlotDirective {
|
|
113
|
+
constructor() {
|
|
114
|
+
this.tpl = inject((TemplateRef));
|
|
115
|
+
}
|
|
116
|
+
set slot(slot) {
|
|
117
|
+
if (this.#slot !== slot) {
|
|
118
|
+
this.#slot = slot;
|
|
119
|
+
if (this.#slotDef) {
|
|
120
|
+
this.slotSvc.delTpl(this.#slotDef);
|
|
121
|
+
}
|
|
122
|
+
this.#slotDef = new SlotDef(slot, this.tpl);
|
|
123
|
+
this.slotSvc.addTpl(this.#slotDef);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
get slot() {
|
|
127
|
+
return this.#slot;
|
|
128
|
+
}
|
|
129
|
+
#slot;
|
|
130
|
+
#slotDef;
|
|
131
|
+
ngOnDestroy() {
|
|
132
|
+
if (this.#slotDef) {
|
|
133
|
+
this.slotSvc.delTpl(this.#slotDef);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
137
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: SlotDirective, ngImport: i0 }); }
|
|
138
|
+
}
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotDirective, decorators: [{
|
|
140
|
+
type: Directive
|
|
141
|
+
}] });
|
|
142
|
+
export class SlotOutletDirective extends Destructible {
|
|
143
|
+
set slot(slot) {
|
|
144
|
+
if (this.#slot.value !== slot) {
|
|
145
|
+
this.#slot.next(slot);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
get slot() {
|
|
149
|
+
return this.#slot.value;
|
|
150
|
+
}
|
|
151
|
+
#slot;
|
|
152
|
+
#watch;
|
|
153
|
+
#views;
|
|
154
|
+
constructor() {
|
|
155
|
+
super();
|
|
156
|
+
this.vcr = inject(ViewContainerRef);
|
|
157
|
+
this.injector = inject(Injector);
|
|
158
|
+
this.#slot = new BehaviorSubject(null);
|
|
159
|
+
this.#watch = this.#slot.pipe(switchMap(slot => {
|
|
160
|
+
if (slot) {
|
|
161
|
+
return this.slotSvc.watch(slot);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
return of([]);
|
|
165
|
+
}
|
|
166
|
+
}));
|
|
167
|
+
this.#views = [];
|
|
168
|
+
this.#onEntriesChanged = (entries) => {
|
|
169
|
+
const { remove, undecided } = this.#determineActions(entries);
|
|
170
|
+
for (const r of remove) {
|
|
171
|
+
r.dispose();
|
|
172
|
+
const idx = this.#views.indexOf(r);
|
|
173
|
+
if (idx >= 0) {
|
|
174
|
+
this.#views.splice(idx, 1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
this.#views.length = 0;
|
|
178
|
+
for (const [pos, entry] of undecided.entries()) {
|
|
179
|
+
if (entry.viewRef && !entry.viewRef.destroyed) {
|
|
180
|
+
const currentPos = this.vcr.indexOf(entry.viewRef);
|
|
181
|
+
if (currentPos !== pos) {
|
|
182
|
+
this.vcr.insert(entry.viewRef, pos);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
;
|
|
187
|
+
entry.viewRef = this.vcr.createEmbeddedView(entry.tpl, null, {
|
|
188
|
+
index: pos,
|
|
189
|
+
injector: this.injector
|
|
190
|
+
});
|
|
191
|
+
entry.viewRef.markForCheck();
|
|
192
|
+
}
|
|
193
|
+
this.#views.push(entry);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
this.d.any(this.#clearViews.bind(this));
|
|
197
|
+
}
|
|
198
|
+
ngOnInit() {
|
|
199
|
+
this.d.sub(this.#watch).subscribe(this.#onEntriesChanged);
|
|
200
|
+
}
|
|
201
|
+
#onEntriesChanged;
|
|
202
|
+
#determineActions(entries) {
|
|
203
|
+
const byId = {};
|
|
204
|
+
let remove = [];
|
|
205
|
+
const undecided = [];
|
|
206
|
+
for (const entry of entries) {
|
|
207
|
+
if (entry.id != null) {
|
|
208
|
+
if (!byId[entry.id]) {
|
|
209
|
+
byId[entry.id] = [entry];
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
byId[entry.id].push(entry);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
undecided.push(entry);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
for (const values of Object.values(byId)) {
|
|
220
|
+
remove = remove.concat(values.slice(0, -1));
|
|
221
|
+
undecided.push(values[values.length - 1]);
|
|
222
|
+
}
|
|
223
|
+
for (const current of this.#views) {
|
|
224
|
+
if (!undecided.includes(current)) {
|
|
225
|
+
remove.push(current);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return { remove, undecided };
|
|
229
|
+
}
|
|
230
|
+
#clearViews() {
|
|
231
|
+
this.vcr.clear();
|
|
232
|
+
this.#views = [];
|
|
233
|
+
}
|
|
234
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotOutletDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
235
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: SlotOutletDirective, usesInheritance: true, ngImport: i0 }); }
|
|
236
|
+
}
|
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotOutletDirective, decorators: [{
|
|
238
|
+
type: Directive
|
|
239
|
+
}], ctorParameters: () => [] });
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dC9zcmMvc2VydmljZXMvc2xvdHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUdSLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUE7QUFFdEIsT0FBTyxFQUNILGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsUUFBUSxFQUNSLEdBQUcsRUFFSCxFQUFFLEVBQ0YsSUFBSSxFQUNKLFdBQVcsRUFDWCxPQUFPLEVBQ1AsU0FBUyxFQUNULEdBQUcsRUFDTixNQUFNLE1BQU0sQ0FBQTtBQUViLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQTs7QUFRMUQsTUFBTSxVQUFVLEdBQUcsMkNBQTJDLENBQUE7QUFFOUQsTUFBTSxPQUFPLE9BQU87SUFNaEIsWUFDSSxJQUFhLEVBQ0csR0FBWTtRQUFaLFFBQUcsR0FBSCxHQUFHLENBQVM7UUFFNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFRLENBQUE7WUFDM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtZQUMzRCxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUss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QVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3hCLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUE7SUFDcEIsQ0FBQzs4R0FuR2lCLG1CQUFtQjtrR0FBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUR4QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGZpbmFsaXplLFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIHNjYW4sXG4gICAgc2hhcmVSZXBsYXksXG4gICAgU3ViamVjdCxcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFwXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgRGVzdHJ1Y3RpYmxlLCBJRGlzcG9zYWJsZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbnR5cGUgU2xvdE9yZGVyID0gYDoke251bWJlcn1gXG50eXBlIFNsb3RJZCA9IGAgYXMgJHtzdHJpbmd9YFxuZXhwb3J0IHR5cGUgU2xvdDxUIGV4dGVuZHMgc3RyaW5nPiA9IGAke1R9JHtTbG90T3JkZXIgfCBcIlwifSR7U2xvdElkIHwgXCJcIn1gXG5leHBvcnQgdHlwZSBTbG90VHBsID0gVGVtcGxhdGVSZWY8YW55PlxuZXhwb3J0IHR5cGUgU2xvdFZpZXdSZWYgPSBFbWJlZGRlZFZpZXdSZWY8YW55PlxuXG5jb25zdCBTTE9UX1JFR0VYID0gL14oW146XFxzXSspKD86OihcXGQrKSk/KD86XFxzK2FzXFxzKyguKj8pKT8kL2lcblxuZXhwb3J0IGNsYXNzIFNsb3REZWY8VCBleHRlbmRzIHN0cmluZz4gaW1wbGVtZW50cyBJRGlzcG9zYWJsZSB7XG4gICAgcmVhZG9ubHkgc2xvdCE6IFRcbiAgICByZWFkb25seSBvcmRlciE6IG51bWJlclxuICAgIHJlYWRvbmx5IGlkPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgdmlld1JlZj86IFNsb3RWaWV3UmVmXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgc2xvdDogU2xvdDxUPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHRwbDogU2xvdFRwbFxuICAgICkge1xuICAgICAgICBjb25zdCBtYXRjaCA9IHNsb3QubWF0Y2goU0xPVF9SRUdFWClcbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHNsb3QgZGVmaW5pdGlvbjogJHtzbG90fWApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNsb3QgPSBtYXRjaFsxXSBhcyBhbnlcbiAgICAgICAgICAgIHRoaXMub3JkZXIgPSBtYXRjaFsyXSAhPSBudWxsID8gTnVtYmVyKG1hdGNoWzJdKSA6IEluZmluaXR5XG4gICAgICAgICAgICB0aGlzLmlkID0gbWF0Y2hbM10gYXMgc3RyaW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNwb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpZXdSZWY/LmRlc3Ryb3koKVxuICAgICAgICA7KHRoaXMgYXMgeyB2aWV3UmVmPzogU2xvdFZpZXdSZWYgfSkudmlld1JlZiA9IHVuZGVmaW5lZFxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbG90RXZlbnQ8VCBleHRlbmRzIHN0cmluZz4ge1xuICAgIHR5cGU6IFwiYWRkXCIgfCBcImRlbFwiXG4gICAgZGVmOiBTbG90RGVmPFQ+XG59XG5cbi8qKlxuICogQERpcmVjdGl2ZSh7c2VsZWN0b3I6IFwibmctdGVtcGxhdGVbeHl6U2xvdF1cIiwgaW5wdXRzOiBbe25hbWU6IFwic2xvdFwiLCBhbGlhczogXCJ4eXpTbG90XCJ9XX0pXG4gKiBjbGFzcyBYWVpTbG90RGlyZWN0aXZlIGV4dGVuZHMgU2xvdERpcmVjdGl2ZTxYWVpDb21wb25lbnRTbG90cz4geyB9XG4gKlxuICogQERpcmVjdGl2ZSh7c2VsZWN0b3I6IFwibmctdGVtcGxhdGVbeHl6U2xvdE91dGxldF1cIiwgaW5wdXRzOiBbe25hbWU6IFwic2xvdFwiLCBhbGlhczogXCJ4eXpTbG90T3V0bGV0XCJ9XX0pXG4gKiBjbGFzcyBYWVpTbG90T3V0bGV0RGlyZWN0aXZlIGV4dGVuZHMgU2xvdE91dGxldERpcmVjdGl2ZTxYWVpDb21wb25lbnRTbG90cz4geyB9XG4gKlxuICpcbiAqIEBDb21wb25lbnQoe3Byb3ZpZGVzOiBbU2xvdHNTZXJ2aWNlXX0pXG4gKiBjbGFzcyBYWVpDb21wb25lbnQge1xuICogICAgICBzbG90czogaW5qZWN0KFNsb3RzU2VydmljZTxYWVpDb21wb25lbnRTbG90cz4pXG4gKiB9XG4gKlxuICpcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNsb3RzU2VydmljZTxUIGV4dGVuZHMgc3RyaW5nID0gYW55PiBleHRlbmRzIERlc3RydWN0aWJsZSB7XG4gICAgI2V2ZW50cyA9IG5ldyBTdWJqZWN0PFNsb3RFdmVudDxUPj4oKVxuXG4gICAgI2VudHJpZXMgPSB0aGlzLiNldmVudHMucGlwZShcbiAgICAgICAgc2NhbigoZW50cmllcywgZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC50eXBlID09PSBcImFkZFwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBlbnRyaWVzLmZpbmRJbmRleCh2YWx1ZSA9PiB2YWx1ZSA9PT0gZXZlbnQuZGVmKVxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXNbaW5kZXhdID0gZXZlbnQuZGVmXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGV2ZW50LmRlZilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09IFwiZGVsXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGVudHJpZXMuZmluZEluZGV4KHZhbHVlID0+IHZhbHVlID09PSBldmVudC5kZWYpXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgICAgfSwgW10gYXMgU2xvdERlZjxUPltdKSxcbiAgICAgICAgdGFwKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgZW50cmllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGEuc2xvdCA9PT0gYi5zbG90KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLm9yZGVyIC0gYi5vcmRlclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNsb3QubG9jYWxlQ29tcGFyZShiLnNsb3QpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKClcbiAgICAgICAgLy8gWFhYOiBuZWVkIHRvIGNvbGxlY3QgZW50cmllcyBmcm9tIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgdGhpcy5kLnN1Yih0aGlzLiNlbnRyaWVzKS5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGFkZFRwbChkZWY6IFNsb3REZWY8VD4pIHtcbiAgICAgICAgdGhpcy4jZXZlbnRzLm5leHQoeyB0eXBlOiBcImFkZFwiLCBkZWYgfSlcbiAgICB9XG5cbiAgICBkZWxUcGwoZGVmOiBTbG90RGVmPFQ+KSB7XG4gICAgICAgIHRoaXMuI2V2ZW50cy5uZXh0KHsgdHlwZTogXCJkZWxcIiwgZGVmIH0pXG4gICAgfVxuXG4gICAgI3dhdGNoZXJzOiB7IFtrZXkgaW4gVF06IE9ic2VydmFibGU8QXJyYXk8U2xvdERlZjxUPj4+IH0gPSB7fSBhcyBhbnlcblxuICAgIHdhdGNoKHNsb3Q6IFQpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLiN3YXRjaGVyc1tzbG90XVxuICAgICAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLiN3YXRjaGVyc1tzbG90XSA9IHRoaXMuI3dhdGNoKHNsb3QpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjd2F0Y2goc2xvdDogVCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZW50cmllcy5waXBlKFxuICAgICAgICAgICAgbWFwKGVudHJpZXMgPT4gZW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkuc2xvdCA9PT0gc2xvdCkpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJldi5sZW5ndGggPT09IGN1cnIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZbaV0gIT09IGN1cnJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLiN3YXRjaGVyc1tzbG90XVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICApXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbG90RGlyZWN0aXZlPFQgZXh0ZW5kcyBzdHJpbmcsIEMgPSBhbnk+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgc2xvdFN2YzogU2xvdHNTZXJ2aWNlPFQ+XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRwbCA9IGluamVjdChUZW1wbGF0ZVJlZjxDPilcblxuICAgIHNldCBzbG90KHNsb3Q6IFNsb3Q8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMuI3Nsb3QgIT09IHNsb3QpIHtcbiAgICAgICAgICAgIHRoaXMuI3Nsb3QgPSBzbG90XG5cbiAgICAgICAgICAgIGlmICh0aGlzLiNzbG90RGVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbG90U3ZjLmRlbFRwbCh0aGlzLiNzbG90RGVmKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiNzbG90RGVmID0gbmV3IFNsb3REZWY8VD4oc2xvdCwgdGhpcy50cGwpXG4gICAgICAgICAgICB0aGlzLnNsb3RTdmMuYWRkVHBsKHRoaXMuI3Nsb3REZWYpXG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNsb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzbG90XG4gICAgfVxuICAgICNzbG90ITogU2xvdDxUPlxuICAgICNzbG90RGVmPzogU2xvdERlZjxUPlxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLiNzbG90RGVmKSB7XG4gICAgICAgICAgICB0aGlzLnNsb3RTdmMuZGVsVHBsKHRoaXMuI3Nsb3REZWYpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNsb3RPdXRsZXREaXJlY3RpdmU8VCBleHRlbmRzIHN0cmluZz4gZXh0ZW5kcyBEZXN0cnVjdGlibGUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSBzbG90U3ZjOiBTbG90c1NlcnZpY2U8VD5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmNyOiBWaWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3RvcilcblxuICAgIHNldCBzbG90KHNsb3Q6IFQgfCBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLiNzbG90LnZhbHVlICE9PSBzbG90KSB7XG4gICAgICAgICAgICB0aGlzLiNzbG90Lm5leHQoc2xvdClcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2xvdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Nsb3QudmFsdWVcbiAgICB9XG4gICAgI3Nsb3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFQgfCBudWxsPihudWxsKVxuXG4gICAgI3dhdGNoID0gdGhpcy4jc2xvdC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoc2xvdCA9PiB7XG4gICAgICAgICAgICBpZiAoc2xvdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNsb3RTdmMud2F0Y2goc2xvdClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIClcblxuICAgICN2aWV3czogQXJyYXk8U2xvdERlZjxhbnk+PiA9IFtdXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKVxuICAgICAgICB0aGlzLmQuYW55KHRoaXMuI2NsZWFyVmlld3MuYmluZCh0aGlzKSlcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kLnN1Yih0aGlzLiN3YXRjaCkuc3Vic2NyaWJlKHRoaXMuI29uRW50cmllc0NoYW5nZWQpXG4gICAgfVxuXG4gICAgI29uRW50cmllc0NoYW5nZWQgPSAoZW50cmllczogQXJyYXk8U2xvdERlZjxUPj4pID0+IHtcbiAgICAgICAgY29uc3QgeyByZW1vdmUsIHVuZGVjaWRlZCB9ID0gdGhpcy4jZGV0ZXJtaW5lQWN0aW9ucyhlbnRyaWVzKVxuXG4gICAgICAgIGZvciAoY29uc3QgciBvZiByZW1vdmUpIHtcbiAgICAgICAgICAgIHIuZGlzcG9zZSgpXG4gICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLiN2aWV3cy5pbmRleE9mKHIpXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLiN2aWV3cy5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jdmlld3MubGVuZ3RoID0gMFxuICAgICAgICBmb3IgKGNvbnN0IFtwb3MsIGVudHJ5XSBvZiB1bmRlY2lkZWQuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAoZW50cnkudmlld1JlZiAmJiAhZW50cnkudmlld1JlZi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UG9zID0gdGhpcy52Y3IuaW5kZXhPZihlbnRyeS52aWV3UmVmKVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UG9zICE9PSBwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52Y3IuaW5zZXJ0KGVudHJ5LnZpZXdSZWYsIHBvcylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIDsoZW50cnkgYXMgeyB2aWV3UmVmOiBTbG90Vmlld1JlZiB9KS52aWV3UmVmID0gdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KGVudHJ5LnRwbCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICBpbmRleDogcG9zLFxuICAgICAgICAgICAgICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgZW50cnkudmlld1JlZiEubWFya0ZvckNoZWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI3ZpZXdzLnB1c2goZW50cnkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjZGV0ZXJtaW5lQWN0aW9ucyhlbnRyaWVzOiBBcnJheTxTbG90RGVmPFQ+Pikge1xuICAgICAgICBjb25zdCBieUlkOiB7IFtrZXk6IHN0cmluZ106IEFycmF5PFNsb3REZWY8VD4+IH0gPSB7fVxuICAgICAgICBsZXQgcmVtb3ZlOiBBcnJheTxTbG90RGVmPFQ+PiA9IFtdXG4gICAgICAgIGNvbnN0IHVuZGVjaWRlZDogQXJyYXk8U2xvdERlZjxUPj4gPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgaWYgKGVudHJ5LmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWJ5SWRbZW50cnkuaWRdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5SWRbZW50cnkuaWRdID0gW2VudHJ5XVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGJ5SWRbZW50cnkuaWRdLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bmRlY2lkZWQucHVzaChlbnRyeSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWVzIG9mIE9iamVjdC52YWx1ZXMoYnlJZCkpIHtcbiAgICAgICAgICAgIHJlbW92ZSA9IHJlbW92ZS5jb25jYXQodmFsdWVzLnNsaWNlKDAsIC0xKSlcbiAgICAgICAgICAgIHVuZGVjaWRlZC5wdXNoKHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0pXG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGN1cnJlbnQgb2YgdGhpcy4jdmlld3MpIHtcbiAgICAgICAgICAgIGlmICghdW5kZWNpZGVkLmluY2x1ZGVzKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlLnB1c2goY3VycmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHJlbW92ZSwgdW5kZWNpZGVkIH1cbiAgICB9XG5cbiAgICAjY2xlYXJWaWV3cygpIHtcbiAgICAgICAgdGhpcy52Y3IuY2xlYXIoKVxuICAgICAgICB0aGlzLiN2aWV3cyA9IFtdXG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { inject, NgZone } from "@angular/core";
|
|
2
|
+
import { distinctUntilChanged, Observable, shareReplay } from "rxjs";
|
|
3
|
+
import { NumberWithUnit } from "@ngutil/common";
|
|
4
|
+
const RESIZE_WATCHES = new Map();
|
|
5
|
+
const SCROLL_WATCHES = new Map();
|
|
6
|
+
export function watchDimension(el, box = "border-box") {
|
|
7
|
+
const zone = inject(NgZone);
|
|
8
|
+
return box === "scroll-box" ? _watchScroll(zone, el) : _watchResize(zone, el, box);
|
|
9
|
+
}
|
|
10
|
+
function _watchResize(zone, el, box) {
|
|
11
|
+
return _watch(zone, el, RESIZE_WATCHES, () => _createResizeWatcher(zone, el, box));
|
|
12
|
+
}
|
|
13
|
+
function _watchScroll(zone, el) {
|
|
14
|
+
return _watch(zone, el, SCROLL_WATCHES, () => _createScollWatcher(zone, el));
|
|
15
|
+
}
|
|
16
|
+
function _watch(zone, el, watches, factory) {
|
|
17
|
+
const existing = watches.get(el);
|
|
18
|
+
if (existing == null) {
|
|
19
|
+
const watcher = factory();
|
|
20
|
+
watches.set(el, watcher);
|
|
21
|
+
return watcher;
|
|
22
|
+
}
|
|
23
|
+
return existing;
|
|
24
|
+
}
|
|
25
|
+
function _createResizeWatcher(zone, el, box) {
|
|
26
|
+
if (box !== "border-box") {
|
|
27
|
+
throw new Error(`Currently not implemented box mode: ${box}`);
|
|
28
|
+
}
|
|
29
|
+
return zone.runOutsideAngular(() => new Observable((sub) => {
|
|
30
|
+
const observer = new ResizeObserver(entries => {
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
if (entry.borderBoxSize) {
|
|
33
|
+
sub.next({
|
|
34
|
+
width: _number(entry.borderBoxSize[0].inlineSize),
|
|
35
|
+
height: _number(entry.borderBoxSize[0].blockSize)
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
sub.next({
|
|
40
|
+
width: _number(el.offsetWidth),
|
|
41
|
+
height: _number(el.offsetHeight)
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
observer.observe(el, { box: box });
|
|
47
|
+
return () => {
|
|
48
|
+
observer.disconnect();
|
|
49
|
+
RESIZE_WATCHES.delete(el);
|
|
50
|
+
};
|
|
51
|
+
}).pipe(distinctUntilChanged((p, c) => p && c && p.width === c.width && p.height === c.height), shareReplay(1)));
|
|
52
|
+
}
|
|
53
|
+
function _createScollWatcher(zone, el) {
|
|
54
|
+
return zone.runOutsideAngular(() => new Observable((sub) => {
|
|
55
|
+
let lastSw = NaN;
|
|
56
|
+
let lastSh = NaN;
|
|
57
|
+
const emit = () => {
|
|
58
|
+
const sw = el.scrollWidth;
|
|
59
|
+
const sh = el.scrollHeight;
|
|
60
|
+
if (lastSw !== sw || lastSh !== sh) {
|
|
61
|
+
lastSw = sw;
|
|
62
|
+
lastSh = sh;
|
|
63
|
+
sub.next({ width: _number(lastSw), height: _number(lastSh) });
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const dimSum = _watchResize(zone, el, "border-box").subscribe(emit);
|
|
67
|
+
const mutation = new MutationObserver(emit);
|
|
68
|
+
mutation.observe(el, {
|
|
69
|
+
subtree: true,
|
|
70
|
+
childList: true,
|
|
71
|
+
attributes: true,
|
|
72
|
+
characterData: true
|
|
73
|
+
});
|
|
74
|
+
emit();
|
|
75
|
+
return () => {
|
|
76
|
+
dimSum.unsubscribe();
|
|
77
|
+
mutation.disconnect();
|
|
78
|
+
SCROLL_WATCHES.delete(el);
|
|
79
|
+
};
|
|
80
|
+
}).pipe(shareReplay(1)));
|
|
81
|
+
}
|
|
82
|
+
function _number(val) {
|
|
83
|
+
return new NumberWithUnit(val, "px");
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLXdhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL3V0aWwvZGltZW5zaW9uLXdhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFFaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBTy9DLE1BQU0sY0FBYyxHQUFZLElBQUksR0FBRyxFQUFFLENBQUE7QUFDekMsTUFBTSxjQUFjLEdBQVksSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUV6QyxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQWUsRUFBRSxNQUFnQixZQUFZO0lBQ3hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMzQixPQUFPLEdBQUcsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3RGLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFZLEVBQUUsRUFBZSxFQUFFLEdBQWE7SUFDOUQsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ3RGLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFZLEVBQUUsRUFBZTtJQUMvQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUs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bSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IE51bWJlcldpdGhVbml0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgRGltZW5zaW9uIH0gZnJvbSBcIi4vZGltZW5zaW9uXCJcblxudHlwZSBXYXRjaGVzID0gTWFwPEhUTUxFbGVtZW50LCBPYnNlcnZhYmxlPERpbWVuc2lvbj4+XG5leHBvcnQgdHlwZSBXYXRjaEJveCA9IFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB8IFwic2Nyb2xsLWJveFwiXG5cbmNvbnN0IFJFU0laRV9XQVRDSEVTOiBXYXRjaGVzID0gbmV3IE1hcCgpXG5jb25zdCBTQ1JPTExfV0FUQ0hFUzogV2F0Y2hlcyA9IG5ldyBNYXAoKVxuXG5leHBvcnQgZnVuY3Rpb24gd2F0Y2hEaW1lbnNpb24oZWw6IEhUTUxFbGVtZW50LCBib3g6IFdhdGNoQm94ID0gXCJib3JkZXItYm94XCIpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgIGNvbnN0IHpvbmUgPSBpbmplY3QoTmdab25lKVxuICAgIHJldHVybiBib3ggPT09IFwic2Nyb2xsLWJveFwiID8gX3dhdGNoU2Nyb2xsKHpvbmUsIGVsKSA6IF93YXRjaFJlc2l6ZSh6b25lLCBlbCwgYm94KVxufVxuXG5mdW5jdGlvbiBfd2F0Y2hSZXNpemUoem9uZTogTmdab25lLCBlbDogSFRNTEVsZW1lbnQsIGJveDogV2F0Y2hCb3gpIHtcbiAgICByZXR1cm4gX3dhdGNoKHpvbmUsIGVsLCBSRVNJWkVfV0FUQ0hFUywgKCkgPT4gX2NyZWF0ZVJlc2l6ZVdhdGNoZXIoem9uZSwgZWwsIGJveCkpXG59XG5cbmZ1bmN0aW9uIF93YXRjaFNjcm9sbCh6b25lOiBOZ1pvbmUsIGVsOiBIVE1MRWxlbWVudCkge1xuICAgIHJldHVybiBfd2F0Y2goem9uZSwgZWwsIFNDUk9MTF9XQVRDSEVTLCAoKSA9PiBfY3JlYXRlU2NvbGxXYXRjaGVyKHpvbmUsIGVsKSlcbn1cblxuZnVuY3Rpb24gX3dhdGNoKHpvbmU6IE5nWm9uZSwgZWw6IEhUTUxFbGVtZW50LCB3YXRjaGVzOiBXYXRjaGVzLCBmYWN0b3J5OiAoKSA9PiBPYnNlcnZhYmxlPERpbWVuc2lvbj4pIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHdhdGNoZXMuZ2V0KGVsKVxuICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHdhdGNoZXIgPSBmYWN0b3J5KClcbiAgICAgICAgd2F0Y2hlcy5zZXQoZWwsIHdhdGNoZXIpXG4gICAgICAgIHJldHVybiB3YXRjaGVyXG4gICAgfVxuICAgIHJldHVybiBleGlzdGluZ1xufVxuXG5mdW5jdGlvbiBfY3JlYXRlUmVzaXplV2F0Y2hlcih6b25lOiBOZ1pvbmUsIGVsOiBIVE1MRWxlbWVudCwgYm94OiBXYXRjaEJveCk6IE9ic2VydmFibGU8RGltZW5zaW9uPiB7XG4gICAgaWYgKGJveCAhPT0gXCJib3JkZXItYm94XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXJyZW50bHkgbm90IGltcGxlbWVudGVkIGJveCBtb2RlOiAke2JveH1gKVxuICAgIH1cblxuICAgIHJldHVybiB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIG5ldyBPYnNlcnZhYmxlKChzdWI6IFN1YnNjcmliZXI8RGltZW5zaW9uPikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS5ib3JkZXJCb3hTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF9udW1iZXIoZW50cnkuYm9yZGVyQm94U2l6ZVswXS5pbmxpbmVTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IF9udW1iZXIoZW50cnkuYm9yZGVyQm94U2l6ZVswXS5ibG9ja1NpemUpXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfbnVtYmVyKGVsLm9mZnNldFdpZHRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IF9udW1iZXIoZWwub2Zmc2V0SGVpZ2h0KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGVsLCB7IGJveDogYm94IGFzIFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB9KVxuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgICAgICAgICAgIFJFU0laRV9XQVRDSEVTLmRlbGV0ZShlbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwLCBjKSA9PiBwICYmIGMgJiYgcC53aWR0aCA9PT0gYy53aWR0aCAmJiBwLmhlaWdodCA9PT0gYy5oZWlnaHQpLFxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKVxuICAgIClcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVNjb2xsV2F0Y2hlcih6b25lOiBOZ1pvbmUsIGVsOiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8RGltZW5zaW9uPiB7XG4gICAgcmV0dXJuIHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgbmV3IE9ic2VydmFibGUoKHN1YjogU3Vic2NyaWJlcjxEaW1lbnNpb24+KSA9PiB7XG4gICAgICAgICAgICBsZXQgbGFzdFN3OiBudW1iZXIgPSBOYU5cbiAgICAgICAgICAgIGxldCBsYXN0U2g6IG51bWJlciA9IE5hTlxuXG4gICAgICAgICAgICBjb25zdCBlbWl0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN3ID0gZWwuc2Nyb2xsV2lkdGhcbiAgICAgICAgICAgICAgICBjb25zdCBzaCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgICAgIGlmIChsYXN0U3cgIT09IHN3IHx8IGxhc3RTaCAhPT0gc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFN3ID0gc3dcbiAgICAgICAgICAgICAgICAgICAgbGFzdFNoID0gc2hcbiAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoeyB3aWR0aDogX251bWJlcihsYXN0U3cpLCBoZWlnaHQ6IF9udW1iZXIobGFzdFNoKSB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGltU3VtID0gX3dhdGNoUmVzaXplKHpvbmUsIGVsLCBcImJvcmRlci1ib3hcIikuc3Vic2NyaWJlKGVtaXQpXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGVtaXQpXG4gICAgICAgICAgICBtdXRhdGlvbi5vYnNlcnZlKGVsLCB7XG4gICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZW1pdCgpXG5cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGltU3VtLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICBtdXRhdGlvbi5kaXNjb25uZWN0KClcbiAgICAgICAgICAgICAgICBTQ1JPTExfV0FUQ0hFUy5kZWxldGUoZWwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoc2hhcmVSZXBsYXkoMSkpXG4gICAgKVxufVxuXG5mdW5jdGlvbiBfbnVtYmVyKHZhbDogbnVtYmVyKTogTnVtYmVyV2l0aFVuaXQge1xuICAgIHJldHVybiBuZXcgTnVtYmVyV2l0aFVuaXQodmFsLCBcInB4XCIpXG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGF5b3V0L3NyYy91dGlsL2RpbWVuc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVtYmVyV2l0aFVuaXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5leHBvcnQgaW50ZXJmYWNlIERpbWVuc2lvbiB7XG4gICAgd2lkdGg6IE51bWJlcldpdGhVbml0XG4gICAgaGVpZ2h0OiBOdW1iZXJXaXRoVW5pdFxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { watchMedia } from "./media-watcher";
|
|
2
|
+
export { watchDimension } from "./dimension-watcher";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL3V0aWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IERpbWVuc2lvbiB9IGZyb20gXCIuL2RpbWVuc2lvblwiXG5leHBvcnQgeyBSZWN0IH0gZnJvbSBcIi4vcmVjdFwiXG5leHBvcnQgeyB3YXRjaE1lZGlhIH0gZnJvbSBcIi4vbWVkaWEtd2F0Y2hlclwiXG5leHBvcnQgeyB3YXRjaERpbWVuc2lvbiB9IGZyb20gXCIuL2RpbWVuc2lvbi13YXRjaGVyXCJcbiJdfQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { inject, NgZone } from "@angular/core";
|
|
2
|
+
import { distinctUntilChanged, Observable, shareReplay } from "rxjs";
|
|
3
|
+
const WATCHES = {};
|
|
4
|
+
/**
|
|
5
|
+
* watchMedia("(display-mode: standalone)")
|
|
6
|
+
*/
|
|
7
|
+
export function watchMedia(expr) {
|
|
8
|
+
const existing = WATCHES[expr];
|
|
9
|
+
if (existing == null) {
|
|
10
|
+
return (WATCHES[expr] = _createWatcher(expr));
|
|
11
|
+
}
|
|
12
|
+
return existing;
|
|
13
|
+
}
|
|
14
|
+
function _createWatcher(expr) {
|
|
15
|
+
const zone = inject(NgZone);
|
|
16
|
+
return zone.runOutsideAngular(() => new Observable((sub) => {
|
|
17
|
+
const query = window.matchMedia(expr);
|
|
18
|
+
const listener = (event) => {
|
|
19
|
+
sub.next(event.matches);
|
|
20
|
+
};
|
|
21
|
+
query.addEventListener("change", listener);
|
|
22
|
+
sub.next(query.matches);
|
|
23
|
+
return () => {
|
|
24
|
+
query.removeEventListener("change", listener);
|
|
25
|
+
delete WATCHES[expr];
|
|
26
|
+
};
|
|
27
|
+
}).pipe(distinctUntilChanged(), shareReplay(1)));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtd2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dC9zcmMvdXRpbC9tZWRpYS13YXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFjLE1BQU0sTUFBTSxDQUFBO0FBRWhGLE1BQU0sT0FBTyxHQUEyQyxFQUFFLENBQUE7QUFFMUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQVk7SUFDbkMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzlCLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDakQsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFBO0FBQ25CLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFZO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMzQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FDL0IsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUF3QixFQUFFLEVBQUU7UUFDeEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQTBCLEVBQUUsRUFBRTtZQUM1QyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQixDQUFDLENBQUE7UUFDRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQzFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZCLE9BQU8sR0FBRyxFQUFFO1lBQ1IsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtZQUM3QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QixDQUFDLENBQUE7SUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEQsQ0FBQTtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcblxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCBTdWJzY3JpYmVyIH0gZnJvbSBcInJ4anNcIlxuXG5jb25zdCBXQVRDSEVTOiB7IFtrZXk6IHN0cmluZ106IE9ic2VydmFibGU8Ym9vbGVhbj4gfSA9IHt9XG5cbi8qKlxuICogd2F0Y2hNZWRpYShcIihkaXNwbGF5LW1vZGU6IHN0YW5kYWxvbmUpXCIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaE1lZGlhKGV4cHI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gV0FUQ0hFU1tleHByXVxuICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAoV0FUQ0hFU1tleHByXSA9IF9jcmVhdGVXYXRjaGVyKGV4cHIpKVxuICAgIH1cbiAgICByZXR1cm4gZXhpc3Rpbmdcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVdhdGNoZXIoZXhwcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpXG4gICAgcmV0dXJuIHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT5cbiAgICAgICAgbmV3IE9ic2VydmFibGUoKHN1YjogU3Vic2NyaWJlcjxib29sZWFuPikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSB3aW5kb3cubWF0Y2hNZWRpYShleHByKVxuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoZXZlbnQ6IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBzdWIubmV4dChldmVudC5tYXRjaGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcXVlcnkuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBsaXN0ZW5lcilcbiAgICAgICAgICAgIHN1Yi5uZXh0KHF1ZXJ5Lm1hdGNoZXMpXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHF1ZXJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgbGlzdGVuZXIpXG4gICAgICAgICAgICAgICAgZGVsZXRlIFdBVENIRVNbZXhwcl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSgxKSlcbiAgICApXG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dC9zcmMvdXRpbC9yZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaW1lbnNpb24gfSBmcm9tIFwiLi9kaW1lbnNpb25cIlxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY3QgZXh0ZW5kcyBEaW1lbnNpb24ge1xuICAgIHg6IG51bWJlclxuICAgIHk6IG51bWJlclxufVxuIl19
|