@ngutil/layout 0.0.3-dev.6 → 0.0.3-dev.7

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.
@@ -0,0 +1,3 @@
1
+ export * from "./range";
2
+ export * from "./state";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcmFuZ2VcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3RhdGVcIlxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L3JhbmdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBVSxDQUFBO0FBQ3JELE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQTtBQVF2RCxNQUFNLE9BQU8sTUFBTTtJQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBaUI7UUFDM0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRS9CLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFRLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQVEsQ0FBQyxFQUFFLENBQUM7WUFDL0QsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFRLEVBQUUsQ0FBUSxDQUFDLENBQUE7UUFDekMsQ0FBQztRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVELFlBQ29CLENBQWEsRUFDYixDQUFlO1FBRGYsTUFBQyxHQUFELENBQUMsQ0FBWTtRQUNiLE1BQUMsR0FBRCxDQUFDLENBQWM7SUFDaEMsQ0FBQztDQUNQO0FBRUQsTUFBTSxPQUFPLE9BQU87SUFDaEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUE0QjtRQUN0QyxJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUMzQixPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFLRCxZQUFZ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QUcsTUFBTSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNyQyxLQUFLLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDeEQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQixNQUFNLEtBQUssQ0FBQyxzQkFBc0IsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUE7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIHwgVE9QOkxFRlQgICAgIHwgIFRPUDpDRU5URVIgICB8IFRPUDpSSUdIVCAgICB8XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogfCBNSURETEU6TEVGVCAgfCBNSURETEU6Q0VOVEVSIHwgTUlERExFOlJJR0ggIHxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiB8IEJPVFRPTU46TEVGVCB8IEJPVFRPTTpDRU5URVIgfCBCT1RUT006UklHSFQgfFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCB2ZXJ0aWNhbCA9IFtcInRvcFwiLCBcIm1pZGRsZVwiLCBcImJvdHRvbVwiXSBhcyBjb25zdFxuY29uc3QgaG9yaXpvbnRhbCA9IFtcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBMOVZlcnRpY2FsID0gXCJ0b3BcIiB8IFwibWlkZGxlXCIgfCBcImJvdHRvbVwiXG5leHBvcnQgdHlwZSBMOUhvcml6b250YWwgPSBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCJcbmV4cG9ydCB0eXBlIEw5Q2VsbE5hbWUgPSBgJHtMOVZlcnRpY2FsfToke0w5SG9yaXpvbnRhbH1gXG5leHBvcnQgdHlwZSBMOVJhbmdlTmFtZSA9IEw5VmVydGljYWwgfCBMOUhvcml6b250YWwgfCBMOUNlbGxOYW1lIHwgYCR7TDlDZWxsTmFtZX0tJHtMOUNlbGxOYW1lfWBcbmV4cG9ydCB0eXBlIEw5T3JpZW50ID0gXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCIgfCBcInJlY3RcIlxuXG5leHBvcnQgY2xhc3MgTDlDZWxsIHtcbiAgICBzdGF0aWMgY29lcmNlKHZhbHVlOiBMOUNlbGxOYW1lKSB7XG4gICAgICAgIGNvbnN0IFt2LCBoXSA9IHZhbHVlLnNwbGl0KFwiOlwiKVxuXG4gICAgICAgIGlmICh2ZXJ0aWNhbC5pbmNsdWRlcyh2IGFzIGFueSkgJiYgaG9yaXpvbnRhbC5pbmNsdWRlcyhoIGFzIGFueSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTDlDZWxsKHYgYXMgYW55LCBoIGFzIGFueSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjZWxsIHZhbHVlOiAke3ZhbHVlfWApXG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSB2OiBMOVZlcnRpY2FsLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgaDogTDlIb3Jpem9udGFsXG4gICAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgTDlSYW5nZSB7XG4gICAgc3RhdGljIGNvZXJjZSh2YWx1ZTogTDlSYW5nZSB8IEw5UmFuZ2VOYW1lKSB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEw5UmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMOVJhbmdlKHZhbHVlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgY2VsbHM6IEFycmF5PEw5Q2VsbD5cbiAgICByZWFkb25seSBvcmllbnQ6IEw5T3JpZW50XG5cbiAgICBjb25zdHJ1Y3RvcihyYW5nZTogTDlSYW5nZU5hbWUpIHtcbiAgICAgICAgdGhpcy5jZWxscyA9IHBhcnNlKHJhbmdlKVxuICAgICAgICB0aGlzLm9yaWVudCA9IHRoaXMuI2RldGVybWluZU9yaWVudCgpXG4gICAgfVxuXG4gICAgaXNFcShvdGhlcjogTDlSYW5nZSkge1xuICAgICAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBMOVJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxmRmlyc3QgPSB0aGlzLmNlbGxzWzBdXG4gICAgICAgICAgICBjb25zdCBvdGhlckZpcnN0ID0gb3RoZXIuY2VsbHNbMF1cblxuICAgICAgICAgICAgaWYgKHNlbGZGaXJzdC5oICE9PSBvdGhlckZpcnN0LmggfHwgc2VsZkZpcnN0LnYgIT09IG90aGVyRmlyc3Qudikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxmTGFzdCA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgY29uc3Qgb3RoZXJMYXN0ID0gb3RoZXIuY2VsbHNbb3RoZXIuY2VsbHMubGVuZ3RoIC0gMV1cblxuICAgICAgICAgICAgaWYgKHNlbGZMYXN0LmggPT09IG90aGVyTGFzdC5oICYmIHNlbGZMYXN0LnYgPT09IG90aGVyTGFzdC52KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAjZGV0ZXJtaW5lT3JpZW50KCk6IEw5T3JpZW50IHtcbiAgICAgICAgY29uc3QgeyB2OiBzdiwgaDogc2ggfSA9IHRoaXMuY2VsbHNbMF1cbiAgICAgICAgY29uc3QgeyB2OiBldiwgaDogZWggfSA9IHRoaXMuY2VsbHNbdGhpcy5jZWxscy5sZW5ndGggLSAxXVxuXG4gICAgICAgIGlmIChzdiA9PT0gZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBcImhvcml6b250YWxcIlxuICAgICAgICB9IGVsc2UgaWYgKHNoID09PSBlaCkge1xuICAgICAgICAgICAgcmV0dXJuIFwidmVydGljYWxcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwicmVjdFwiXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHZhbHVlOiBhbnkpOiBBcnJheTxMOUNlbGw+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,83 @@
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_CONTENT_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_CONTENT_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 = 0;
56
+ let lastSh = 0;
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
+ return () => {
75
+ dimSum.unsubscribe();
76
+ mutation.disconnect();
77
+ };
78
+ }).pipe(shareReplay(1)));
79
+ }
80
+ function _number(val) {
81
+ return new NumberWithUnit(val, "pk");
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLXdhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL3V0aWwvZGltZW5zaW9uLXdhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFFaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBTy9DLE1BQU0sY0FBYyxHQUFZLElBQUksR0FBRyxFQUFFLENBQUE7QUFDekMsTUFBTSxzQkFBc0IsR0FBWSxJQUFJLEdBQUcsRUFBRSxDQUFBO0FBRWpELE1BQU0sVUFBVSxjQUFjLENBQUMsRUFBZSxFQUFFLE1BQWdCLFlBQVk7SUFDeEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzNCLE9BQU8sR0FBRyxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFDdEYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQVksRUFBRSxFQUFlLEVBQUUsR0FBYTtJQUM5RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDdEYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQVksRUFBRSxFQUFlO0lBQy9DLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsR0FBRyxF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LFlBQVksQ0FBQTtZQUMxQixJQUFJLE1BQU0sS0FBSyxFQUFFLElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLEdBQUcsRUFBRSxDQUFBO2dCQUNYLE1BQU0sR0FBRyxFQUFFLENBQUE7Z0JBQ1gsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDakUsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixhQUFhLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUE7UUFFRixPQUFPLEdBQUcsRUFBRTtZQUNSLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUNwQixRQUFRLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDekIsQ0FBQyxDQUFBO0lBQ0wsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMxQixDQUFBO0FBQ0wsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQVc7SUFDeEIsT0FBTyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIFN1YnNjcmliZXIgfSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IE51bWJlcldpdGhVbml0IH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgRGltZW5zaW9uIH0gZnJvbSBcIi4vZGltZW5zaW9uXCJcblxudHlwZSBXYXRjaGVzID0gTWFwPEhUTUxFbGVtZW50LCBPYnNlcnZhYmxlPERpbWVuc2lvbj4+XG5leHBvcnQgdHlwZSBXYXRjaEJveCA9IFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB8IFwic2Nyb2xsLWJveFwiXG5cbmNvbnN0IFJFU0laRV9XQVRDSEVTOiBXYXRjaGVzID0gbmV3IE1hcCgpXG5jb25zdCBTQ1JPTExfQ09OVEVOVF9XQVRDSEVTOiBXYXRjaGVzID0gbmV3IE1hcCgpXG5cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaERpbWVuc2lvbihlbDogSFRNTEVsZW1lbnQsIGJveDogV2F0Y2hCb3ggPSBcImJvcmRlci1ib3hcIik6IE9ic2VydmFibGU8RGltZW5zaW9uPiB7XG4gICAgY29uc3Qgem9uZSA9IGluamVjdChOZ1pvbmUpXG4gICAgcmV0dXJuIGJveCA9PT0gXCJzY3JvbGwtYm94XCIgPyBfd2F0Y2hTY3JvbGwoem9uZSwgZWwpIDogX3dhdGNoUmVzaXplKHpvbmUsIGVsLCBib3gpXG59XG5cbmZ1bmN0aW9uIF93YXRjaFJlc2l6ZSh6b25lOiBOZ1pvbmUsIGVsOiBIVE1MRWxlbWVudCwgYm94OiBXYXRjaEJveCkge1xuICAgIHJldHVybiBfd2F0Y2goem9uZSwgZWwsIFJFU0laRV9XQVRDSEVTLCAoKSA9PiBfY3JlYXRlUmVzaXplV2F0Y2hlcih6b25lLCBlbCwgYm94KSlcbn1cblxuZnVuY3Rpb24gX3dhdGNoU2Nyb2xsKHpvbmU6IE5nWm9uZSwgZWw6IEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIF93YXRjaCh6b25lLCBlbCwgU0NST0xMX0NPTlRFTlRfV0FUQ0hFUywgKCkgPT4gX2NyZWF0ZVNjb2xsV2F0Y2hlcih6b25lLCBlbCkpXG59XG5cbmZ1bmN0aW9uIF93YXRjaCh6b25lOiBOZ1pvbmUsIGVsOiBIVE1MRWxlbWVudCwgd2F0Y2hlczogV2F0Y2hlcywgZmFjdG9yeTogKCkgPT4gT2JzZXJ2YWJsZTxEaW1lbnNpb24+KSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB3YXRjaGVzLmdldChlbClcbiAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB3YXRjaGVyID0gZmFjdG9yeSgpXG4gICAgICAgIHdhdGNoZXMuc2V0KGVsLCB3YXRjaGVyKVxuICAgICAgICByZXR1cm4gd2F0Y2hlclxuICAgIH1cbiAgICByZXR1cm4gZXhpc3Rpbmdcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVJlc2l6ZVdhdGNoZXIoem9uZTogTmdab25lLCBlbDogSFRNTEVsZW1lbnQsIGJveDogV2F0Y2hCb3gpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgIGlmIChib3ggIT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCBib3ggbW9kZTogJHtib3h9YClcbiAgICB9XG5cbiAgICByZXR1cm4gem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICBuZXcgT2JzZXJ2YWJsZSgoc3ViOiBTdWJzY3JpYmVyPERpbWVuc2lvbj4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuYm9yZGVyQm94U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfbnVtYmVyKGVudHJ5LmJvcmRlckJveFNpemVbMF0uaW5saW5lU2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfbnVtYmVyKGVudHJ5LmJvcmRlckJveFNpemVbMF0uYmxvY2tTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yi5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX251bWJlcihlbC5vZmZzZXRXaWR0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfbnVtYmVyKGVsLm9mZnNldEhlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCwgeyBib3g6IGJveCBhcyBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfSlcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICAgICAgICAgICAgICBSRVNJWkVfV0FUQ0hFUy5kZWxldGUoZWwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gcCAmJiBjICYmIHAud2lkdGggPT09IGMud2lkdGggJiYgcC5oZWlnaHQgPT09IGMuaGVpZ2h0KSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgIClcbiAgICApXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTY29sbFdhdGNoZXIoem9uZTogTmdab25lLCBlbDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIG5ldyBPYnNlcnZhYmxlKChzdWI6IFN1YnNjcmliZXI8RGltZW5zaW9uPikgPT4ge1xuICAgICAgICAgICAgbGV0IGxhc3RTdzogbnVtYmVyID0gMFxuICAgICAgICAgICAgbGV0IGxhc3RTaDogbnVtYmVyID0gMFxuXG4gICAgICAgICAgICBjb25zdCBlbWl0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN3ID0gZWwuc2Nyb2xsV2lkdGhcbiAgICAgICAgICAgICAgICBjb25zdCBzaCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgICAgIGlmIChsYXN0U3cgIT09IHN3IHx8IGxhc3RTaCAhPT0gc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFN3ID0gc3dcbiAgICAgICAgICAgICAgICAgICAgbGFzdFNoID0gc2hcbiAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoeyB3aWR0aDogX251bWJlcihsYXN0U3cpLCBoZWlnaHQ6IF9udW1iZXIobGFzdFNoKSB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGltU3VtID0gX3dhdGNoUmVzaXplKHpvbmUsIGVsLCBcImJvcmRlci1ib3hcIikuc3Vic2NyaWJlKGVtaXQpXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGVtaXQpXG4gICAgICAgICAgICBtdXRhdGlvbi5vYnNlcnZlKGVsLCB7XG4gICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRpbVN1bS51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgbXV0YXRpb24uZGlzY29ubmVjdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoc2hhcmVSZXBsYXkoMSkpXG4gICAgKVxufVxuXG5mdW5jdGlvbiBfbnVtYmVyKHZhbDogbnVtYmVyKTogTnVtYmVyV2l0aFVuaXQge1xuICAgIHJldHVybiBuZXcgTnVtYmVyV2l0aFVuaXQodmFsLCBcInBrXCIpXG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGF5b3V0L3NyYy91dGlsL2RpbWVuc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVtYmVyV2l0aFVuaXQgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5leHBvcnQgaW50ZXJmYWNlIERpbWVuc2lvbiB7XG4gICAgd2lkdGg6IE51bWJlcldpdGhVbml0XG4gICAgaGVpZ2h0OiBOdW1iZXJXaXRoVW5pdFxufVxuIl19
@@ -0,0 +1,71 @@
1
+ import { rawRequestAnimationFrame } from "@ngutil/common";
2
+ class _FastDOM {
3
+ #rafId;
4
+ #mutate = [];
5
+ #measure = [];
6
+ mutate(handler) {
7
+ this.#mutate.push(handler);
8
+ this._schedule();
9
+ }
10
+ mutateNext(handler) {
11
+ this.#mutate.push(() => {
12
+ this.#mutate.push(handler);
13
+ });
14
+ this._schedule();
15
+ }
16
+ measure(handler) {
17
+ this.#measure.push(handler);
18
+ this._schedule();
19
+ }
20
+ setStyle(el, style, chain) {
21
+ this.mutate(() => {
22
+ for (const [k, v] of Object.entries(style)) {
23
+ if (v == null) {
24
+ el.style.removeProperty(k);
25
+ }
26
+ else {
27
+ el.style.setProperty(k, v);
28
+ }
29
+ }
30
+ chain && chain();
31
+ });
32
+ }
33
+ setAttributes(el, attrs, chain) {
34
+ this.mutate(() => {
35
+ for (const [k, v] of Object.entries(attrs)) {
36
+ if (v == null) {
37
+ el.removeAttribute(k);
38
+ }
39
+ else {
40
+ el.setAttribute(k, v);
41
+ }
42
+ }
43
+ chain && chain();
44
+ });
45
+ }
46
+ _schedule() {
47
+ if (!this.#rafId) {
48
+ this.#rafId = rawRequestAnimationFrame(this._apply.bind(this));
49
+ }
50
+ }
51
+ _apply() {
52
+ this.#rafId = null;
53
+ const measure = this.#measure.slice();
54
+ const mutate = this.#mutate.slice();
55
+ this.#measure.length = 0;
56
+ this.#mutate.length = 0;
57
+ runQ(measure);
58
+ runQ(mutate);
59
+ if (this.#measure.length || this.#mutate.length) {
60
+ this._schedule();
61
+ }
62
+ }
63
+ }
64
+ function runQ(items) {
65
+ let item;
66
+ while ((item = items.shift())) {
67
+ item();
68
+ }
69
+ }
70
+ export const FastDOM = new _FastDOM();
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGF5b3V0L3NyYy91dGlsL2RvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUl6RCxNQUFNLFFBQVE7SUFDVixNQUFNLENBQUs7SUFDWCxPQUFPLEdBQTBCLEVBQUUsQ0FBQTtJQUNuQyxRQUFRLEdBQTBCLEVBQUUsQ0FBQTtJQUU3QixNQUFNLENBQUMsT0FBdUI7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDMUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBdUI7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzlCLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFTSxPQUFPLENBQUMsT0FBdUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFTSxRQUFRLENBQUMsRUFBZSxFQUFFLEtBQTZCLEVBQUUsS0FBc0I7UUFDbEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDYixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDWixFQUFFLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDOUIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtnQkFDOUIsQ0FBQztZQUNMLENBQUM7WUFFRCxLQUFLLElBQUksS0FBSyxFQUFFLENBQUE7UUFDcEIsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRU0sYUFBYSxDQUFDLEVBQWUsRUFBRSxLQUE2QixFQUFFLEtBQXNCO1FBQ3ZGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2IsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1osRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDekIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO2dCQUN6QixDQUFDO1lBQ0wsQ0FBQztZQUVELEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQTtRQUNwQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFTyxTQUFTO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNsRSxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU07UUFDVixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQTtRQUVsQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUV2QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFWixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBQ3BCLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUFFRCxTQUFTLElBQUksQ0FBQyxLQUF1QjtJQUNqQyxJQUFJLElBQW9CLENBQUE7SUFDeEIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdCLElBQUksRUFBRSxDQUFBO0lBQ1YsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhd1JlcXVlc3RBbmltYXRpb25GcmFtZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbnR5cGUgRmFzdERvbUhhbmRsZXIgPSAoKSA9PiB2b2lkXG5cbmNsYXNzIF9GYXN0RE9NIHtcbiAgICAjcmFmSWQ6IGFueVxuICAgICNtdXRhdGU6IEFycmF5PEZhc3REb21IYW5kbGVyPiA9IFtdXG4gICAgI21lYXN1cmU6IEFycmF5PEZhc3REb21IYW5kbGVyPiA9IFtdXG5cbiAgICBwdWJsaWMgbXV0YXRlKGhhbmRsZXI6IEZhc3REb21IYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuI211dGF0ZS5wdXNoKGhhbmRsZXIpXG4gICAgICAgIHRoaXMuX3NjaGVkdWxlKClcbiAgICB9XG5cbiAgICBwdWJsaWMgbXV0YXRlTmV4dChoYW5kbGVyOiBGYXN0RG9tSGFuZGxlcikge1xuICAgICAgICB0aGlzLiNtdXRhdGUucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNtdXRhdGUucHVzaChoYW5kbGVyKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLl9zY2hlZHVsZSgpXG4gICAgfVxuXG4gICAgcHVibGljIG1lYXN1cmUoaGFuZGxlcjogRmFzdERvbUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy4jbWVhc3VyZS5wdXNoKGhhbmRsZXIpXG4gICAgICAgIHRoaXMuX3NjaGVkdWxlKClcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0U3R5bGUoZWw6IEhUTUxFbGVtZW50LCBzdHlsZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhaW4/OiBGYXN0RG9tSGFuZGxlcikge1xuICAgICAgICB0aGlzLm11dGF0ZSgoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhzdHlsZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KGspXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoaywgdilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoYWluICYmIGNoYWluKClcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QXR0cmlidXRlcyhlbDogSFRNTEVsZW1lbnQsIGF0dHJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFpbj86IEZhc3REb21IYW5kbGVyKSB7XG4gICAgICAgIHRoaXMubXV0YXRlKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkge1xuICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGspXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKGssIHYpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGFpbiAmJiBjaGFpbigpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2NoZWR1bGUoKSB7XG4gICAgICAgIGlmICghdGhpcy4jcmFmSWQpIHtcbiAgICAgICAgICAgIHRoaXMuI3JhZklkID0gcmF3UmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FwcGx5LmJpbmQodGhpcykpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcHBseSgpIHtcbiAgICAgICAgdGhpcy4jcmFmSWQgPSBudWxsXG5cbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHRoaXMuI21lYXN1cmUuc2xpY2UoKVxuICAgICAgICBjb25zdCBtdXRhdGUgPSB0aGlzLiNtdXRhdGUuc2xpY2UoKVxuICAgICAgICB0aGlzLiNtZWFzdXJlLmxlbmd0aCA9IDBcbiAgICAgICAgdGhpcy4jbXV0YXRlLmxlbmd0aCA9IDBcblxuICAgICAgICBydW5RKG1lYXN1cmUpXG4gICAgICAgIHJ1blEobXV0YXRlKVxuXG4gICAgICAgIGlmICh0aGlzLiNtZWFzdXJlLmxlbmd0aCB8fCB0aGlzLiNtdXRhdGUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZSgpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJ1blEoaXRlbXM6IEZhc3REb21IYW5kbGVyW10pIHtcbiAgICBsZXQgaXRlbTogRmFzdERvbUhhbmRsZXJcbiAgICB3aGlsZSAoKGl0ZW0gPSBpdGVtcy5zaGlmdCgpISkpIHtcbiAgICAgICAgaXRlbSgpXG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgRmFzdERPTSA9IG5ldyBfRmFzdERPTSgpXG4iXX0=
@@ -0,0 +1,4 @@
1
+ export { watchMedia } from "./media-watcher";
2
+ export { watchDimension } from "./dimension-watcher";
3
+ export { FastDOM } from "./dom";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL3V0aWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRGltZW5zaW9uIH0gZnJvbSBcIi4vZGltZW5zaW9uXCJcbmV4cG9ydCB7IFJlY3QgfSBmcm9tIFwiLi9yZWN0XCJcbmV4cG9ydCB7IHdhdGNoTWVkaWEgfSBmcm9tIFwiLi9tZWRpYS13YXRjaGVyXCJcbmV4cG9ydCB7IHdhdGNoRGltZW5zaW9uIH0gZnJvbSBcIi4vZGltZW5zaW9uLXdhdGNoZXJcIlxuZXhwb3J0IHsgRmFzdERPTSB9IGZyb20gXCIuL2RvbVwiXG4iXX0=
@@ -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