@ssv/ngx.ux 2.0.1-dev198 → 2.0.2
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/CHANGELOG.md +149 -142
- package/LICENSE +21 -21
- package/README.md +297 -297
- package/bundles/ssv-ngx.ux.umd.js +1154 -1154
- package/bundles/ssv-ngx.ux.umd.js.map +1 -1
- package/bundles/ssv-ngx.ux.umd.min.js +1 -1
- package/bundles/ssv-ngx.ux.umd.min.js.map +1 -1
- package/config.d.ts +7 -7
- package/esm2015/config.js +7 -7
- package/esm2015/index.js +5 -5
- package/esm2015/internal/internal.model.js +2 -2
- package/esm2015/module.js +50 -50
- package/esm2015/platform/window.js +28 -28
- package/esm2015/ssv-ngx.ux.js +7 -7
- package/esm2015/version.js +2 -2
- package/esm2015/viewport/index.js +9 -9
- package/esm2015/viewport/viewport-data/index.js +4 -4
- package/esm2015/viewport/viewport-data/viewport-data-matcher.js +108 -108
- package/esm2015/viewport/viewport-data/viewport-data.pipe.js +43 -43
- package/esm2015/viewport/viewport-data/viewport-data.service.js +38 -38
- package/esm2015/viewport/viewport-data/viewport-data.utils.js +100 -100
- package/esm2015/viewport/viewport-matcher-var.directive.js +64 -64
- package/esm2015/viewport/viewport-matcher.directive.js +134 -134
- package/esm2015/viewport/viewport-server-size.service.js +38 -38
- package/esm2015/viewport/viewport.const.js +18 -18
- package/esm2015/viewport/viewport.model.js +31 -31
- package/esm2015/viewport/viewport.service.js +69 -69
- package/esm2015/viewport/viewport.util.js +117 -117
- package/esm2020/config.mjs +7 -0
- package/esm2020/index.mjs +5 -0
- package/esm2020/internal/internal.model.mjs +2 -0
- package/esm2020/module.mjs +65 -0
- package/esm2020/platform/window.mjs +30 -0
- package/esm2020/ssv-ngx.ux.mjs +5 -0
- package/esm2020/version.mjs +2 -0
- package/esm2020/viewport/index.mjs +9 -0
- package/esm2020/viewport/viewport-data/index.mjs +4 -0
- package/esm2020/viewport/viewport-data/viewport-data-matcher.mjs +108 -0
- package/esm2020/viewport/viewport-data/viewport-data.pipe.mjs +43 -0
- package/esm2020/viewport/viewport-data/viewport-data.service.mjs +37 -0
- package/esm2020/viewport/viewport-data/viewport-data.utils.mjs +100 -0
- package/esm2020/viewport/viewport-matcher-var.directive.mjs +63 -0
- package/esm2020/viewport/viewport-matcher.directive.mjs +131 -0
- package/esm2020/viewport/viewport-server-size.service.mjs +43 -0
- package/esm2020/viewport/viewport.const.mjs +18 -0
- package/esm2020/viewport/viewport.model.mjs +31 -0
- package/esm2020/viewport/viewport.service.mjs +67 -0
- package/esm2020/viewport/viewport.util.mjs +117 -0
- package/fesm2015/ssv-ngx.ux.js +770 -770
- package/fesm2015/ssv-ngx.ux.js.map +1 -1
- package/fesm2015/ssv-ngx.ux.mjs +829 -0
- package/fesm2015/ssv-ngx.ux.mjs.map +1 -0
- package/fesm2020/ssv-ngx.ux.mjs +823 -0
- package/fesm2020/ssv-ngx.ux.mjs.map +1 -0
- package/index.d.ts +4 -4
- package/internal/internal.model.d.ts +9 -9
- package/module.d.ts +19 -12
- package/package.json +21 -9
- package/platform/window.d.ts +13 -10
- package/ssv-ngx.ux.d.ts +6 -6
- package/ssv-ngx.ux.metadata.json +1 -1
- package/version.d.ts +1 -1
- package/viewport/index.d.ts +8 -8
- package/viewport/viewport-data/index.d.ts +3 -3
- package/viewport/viewport-data/viewport-data-matcher.d.ts +32 -32
- package/viewport/viewport-data/viewport-data.pipe.d.ts +18 -15
- package/viewport/viewport-data/viewport-data.service.d.ts +20 -17
- package/viewport/viewport-data/viewport-data.utils.d.ts +21 -21
- package/viewport/viewport-matcher-var.directive.d.ts +25 -22
- package/viewport/viewport-matcher.directive.d.ts +33 -30
- package/viewport/viewport-server-size.service.d.ts +12 -9
- package/viewport/viewport.const.d.ts +5 -5
- package/viewport/viewport.model.d.ts +57 -57
- package/viewport/viewport.service.d.ts +37 -34
- package/viewport/viewport.util.d.ts +25 -25
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ViewportDataService } from "./viewport-data.service";
|
|
2
|
+
export { ViewportDataPipe } from "./viewport-data.pipe";
|
|
3
|
+
export { ViewportDataMatchStrategy } from "./viewport-data-matcher";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdmlld3BvcnQvdmlld3BvcnQtZGF0YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQXNCLHlCQUF5QixFQUFvQyxNQUFNLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgVmlld3BvcnREYXRhU2VydmljZSB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEuc2VydmljZVwiO1xyXG5leHBvcnQgeyBWaWV3cG9ydERhdGFQaXBlIH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS5waXBlXCI7XHJcbmV4cG9ydCB7IFZpZXdwb3J0RGF0YUNvbmZpZywgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSwgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneUxpdGVyYWwgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhLW1hdGNoZXJcIjtcclxuIl19
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
export var ViewportDataMatchStrategy;
|
|
2
|
+
(function (ViewportDataMatchStrategy) {
|
|
3
|
+
/** Indicates that size should match exact or default. */
|
|
4
|
+
ViewportDataMatchStrategy[ViewportDataMatchStrategy["exact"] = 0] = "exact";
|
|
5
|
+
/** Indicates that size matches when exact match, first match smaller (down) or default. */
|
|
6
|
+
ViewportDataMatchStrategy[ViewportDataMatchStrategy["smaller"] = 1] = "smaller";
|
|
7
|
+
/** Indicates that size matches when exact match, first match larger (up) or default. */
|
|
8
|
+
ViewportDataMatchStrategy[ViewportDataMatchStrategy["larger"] = 2] = "larger";
|
|
9
|
+
/** Indicates that size matches when exact match, or it tries both smaller/larger (smaller is preferred) until match or default. */
|
|
10
|
+
ViewportDataMatchStrategy[ViewportDataMatchStrategy["closestSmallerFirst"] = 3] = "closestSmallerFirst";
|
|
11
|
+
/** Indicates that size matches when exact match, or it tries both larger/smaller (larger is preferred) until match or default. */
|
|
12
|
+
ViewportDataMatchStrategy[ViewportDataMatchStrategy["closestLargerFirst"] = 4] = "closestLargerFirst";
|
|
13
|
+
})(ViewportDataMatchStrategy || (ViewportDataMatchStrategy = {}));
|
|
14
|
+
/**
|
|
15
|
+
* Utility function to match data based on strategy and size.
|
|
16
|
+
*
|
|
17
|
+
* @param dataConfig Data config to generate rules based on.
|
|
18
|
+
* @param sizeType Size type to get data for.
|
|
19
|
+
* @param strategy Strategy to use when building rules.
|
|
20
|
+
* @param sizeTypes Available size types ordered by index type. (Can be obtained from `ViewportService`)
|
|
21
|
+
* @param sizeTypeMap Available size type map. (Can be obtained from `ViewportService`)
|
|
22
|
+
* @returns Returns the matched data value.
|
|
23
|
+
*/
|
|
24
|
+
export function matchViewportData(dataConfig, sizeType, strategy, sizeTypes, sizeTypeMap) {
|
|
25
|
+
const matchFn = matchStrategyHandlerMap[strategy];
|
|
26
|
+
if (!matchFn) {
|
|
27
|
+
throw Error(`matchViewportData: Viewport Data strategy not implemented. Strategy: '${strategy}'`);
|
|
28
|
+
}
|
|
29
|
+
const data = matchFn(dataConfig, sizeType, sizeTypes, sizeTypeMap);
|
|
30
|
+
if (data !== undefined) {
|
|
31
|
+
return data;
|
|
32
|
+
}
|
|
33
|
+
return dataConfig.default;
|
|
34
|
+
}
|
|
35
|
+
const matchStrategyHandlerMap = {
|
|
36
|
+
[ViewportDataMatchStrategy.exact]: matchWithExact,
|
|
37
|
+
[ViewportDataMatchStrategy.larger]: matchWithLargerMatch,
|
|
38
|
+
[ViewportDataMatchStrategy.smaller]: matchWithSmallerMatch,
|
|
39
|
+
[ViewportDataMatchStrategy.closestSmallerFirst]: matchWithClosestSmallerFirstMatch,
|
|
40
|
+
[ViewportDataMatchStrategy.closestLargerFirst]: matchWithClosestLargerFirstMatch,
|
|
41
|
+
};
|
|
42
|
+
function matchWithExact(dataConfig, currentSizeType) {
|
|
43
|
+
return dataConfig[currentSizeType.name];
|
|
44
|
+
}
|
|
45
|
+
function matchWithLargerMatch(dataConfig, currentSizeType, sizeTypes) {
|
|
46
|
+
let data = dataConfig[currentSizeType.name];
|
|
47
|
+
if (data !== undefined) {
|
|
48
|
+
return data;
|
|
49
|
+
}
|
|
50
|
+
const largestTypeIdx = sizeTypes[sizeTypes.length - 1].type;
|
|
51
|
+
if (currentSizeType.type >= largestTypeIdx) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
for (let index = currentSizeType.type; index < sizeTypes.length; index++) {
|
|
55
|
+
const sizeType = sizeTypes[index];
|
|
56
|
+
data = dataConfig[sizeType.name];
|
|
57
|
+
if (data !== undefined) {
|
|
58
|
+
return data;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
function matchWithSmallerMatch(dataConfig, currentSizeType, sizeTypes) {
|
|
64
|
+
let data = dataConfig[currentSizeType.name];
|
|
65
|
+
if (data !== undefined) {
|
|
66
|
+
return data;
|
|
67
|
+
}
|
|
68
|
+
if (currentSizeType.type <= 0) {
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
// eslint-disable-next-line for-direction
|
|
72
|
+
for (let index = currentSizeType.type; index < sizeTypes.length; index--) {
|
|
73
|
+
const sizeType = sizeTypes[index];
|
|
74
|
+
data = dataConfig[sizeType.name];
|
|
75
|
+
if (data !== undefined) {
|
|
76
|
+
return data;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
function matchWithClosestSmallerFirstMatch(dataConfig, currentSizeType, sizeTypes) {
|
|
82
|
+
return closestMatch(dataConfig, currentSizeType, sizeTypes, true);
|
|
83
|
+
}
|
|
84
|
+
function matchWithClosestLargerFirstMatch(dataConfig, currentSizeType, sizeTypes) {
|
|
85
|
+
return closestMatch(dataConfig, currentSizeType, sizeTypes, false);
|
|
86
|
+
}
|
|
87
|
+
function closestMatch(dataConfig, currentSizeType, sizeTypes, isSmallerFirst) {
|
|
88
|
+
let data = dataConfig[currentSizeType.name];
|
|
89
|
+
if (data !== undefined) {
|
|
90
|
+
return data;
|
|
91
|
+
}
|
|
92
|
+
let downIndex = currentSizeType.type;
|
|
93
|
+
let upIndex = currentSizeType.type;
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
95
|
+
for (let index = 0; index < sizeTypes.length; index++) {
|
|
96
|
+
for (const idx of isSmallerFirst ? [--downIndex, ++upIndex] : [++upIndex, --downIndex]) {
|
|
97
|
+
const sizeType = sizeTypes[idx];
|
|
98
|
+
if (sizeType) {
|
|
99
|
+
data = dataConfig[sizeType.name];
|
|
100
|
+
if (data !== undefined) {
|
|
101
|
+
return data;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS1tYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sQ0FBTixJQUFZLHlCQWVYO0FBZkQsV0FBWSx5QkFBeUI7SUFDcEMseURBQXlEO0lBQ3pELDJFQUFLLENBQUE7SUFFTCwyRkFBMkY7SUFDM0YsK0VBQU8sQ0FBQTtJQUVQLHdGQUF3RjtJQUN4Riw2RUFBTSxDQUFBO0lBRU4sbUlBQW1JO0lBQ25JLHVHQUFtQixDQUFBO0lBRW5CLGtJQUFrSTtJQUNsSSxxR0FBa0IsQ0FBQTtBQUNuQixDQUFDLEVBZlcseUJBQXlCLEtBQXpCLHlCQUF5QixRQWVwQztBQVlEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDaEMsVUFBaUMsRUFDakMsUUFBOEIsRUFDOUIsUUFBbUMsRUFDbkMsU0FBaUMsRUFDakMsV0FBNkM7SUFFN0MsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNiLE1BQU0sS0FBSyxDQUFDLHlFQUF5RSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0tBQ2xHO0lBQ0QsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBTSxDQUFDO0lBQ3hFLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUN2QixPQUFPLElBQUksQ0FBQztLQUNaO0lBQ0QsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDO0FBQzNCLENBQUM7QUFHRCxNQUFNLHVCQUF1QixHQUFvQztJQUNoRSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxFQUFFLGNBQWM7SUFDakQsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsRUFB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O0tBQ1o7SUFFRCxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBQ3JDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFFbkMsNERBQTREO0lBQzVELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3RELEtBQUssTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUN2RixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxRQUFRLEVBQUU7Z0JBQ2IsSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtvQkFDdkIsT0FBTyxJQUFJLENBQUM7aUJBQ1o7YUFDRDtTQUNEO0tBQ0Q7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbC9pbnRlcm5hbC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBWaWV3cG9ydFNpemVUeXBlSW5mbyB9IGZyb20gXCIuLi92aWV3cG9ydC5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IHR5cGUgVmlld3BvcnREYXRhQ29uZmlnPFRWYWx1ZSA9IHVua25vd24sIFREYXRhID0gRGljdGlvbmFyeTxUVmFsdWU+PiA9IFREYXRhICYge1xyXG5cdGRlZmF1bHQ/OiBUVmFsdWVcclxufTtcclxuXHJcbmV4cG9ydCBlbnVtIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kge1xyXG5cdC8qKiBJbmRpY2F0ZXMgdGhhdCBzaXplIHNob3VsZCBtYXRjaCBleGFjdCBvciBkZWZhdWx0LiAqL1xyXG5cdGV4YWN0LFxyXG5cclxuXHQvKiogSW5kaWNhdGVzIHRoYXQgc2l6ZSBtYXRjaGVzIHdoZW4gZXhhY3QgbWF0Y2gsIGZpcnN0IG1hdGNoIHNtYWxsZXIgKGRvd24pIG9yIGRlZmF1bHQuICovXHJcblx0c21hbGxlcixcclxuXHJcblx0LyoqIEluZGljYXRlcyB0aGF0IHNpemUgbWF0Y2hlcyB3aGVuIGV4YWN0IG1hdGNoLCBmaXJzdCBtYXRjaCBsYXJnZXIgKHVwKSBvciBkZWZhdWx0LiAqL1xyXG5cdGxhcmdlcixcclxuXHJcblx0LyoqIEluZGljYXRlcyB0aGF0IHNpemUgbWF0Y2hlcyB3aGVuIGV4YWN0IG1hdGNoLCBvciBpdCB0cmllcyBib3RoIHNtYWxsZXIvbGFyZ2VyIChzbWFsbGVyIGlzIHByZWZlcnJlZCkgdW50aWwgbWF0Y2ggb3IgZGVmYXVsdC4gKi9cclxuXHRjbG9zZXN0U21hbGxlckZpcnN0LFxyXG5cclxuXHQvKiogSW5kaWNhdGVzIHRoYXQgc2l6ZSBtYXRjaGVzIHdoZW4gZXhhY3QgbWF0Y2gsIG9yIGl0IHRyaWVzIGJvdGggbGFyZ2VyL3NtYWxsZXIgKGxhcmdlciBpcyBwcmVmZXJyZWQpIHVudGlsIG1hdGNoIG9yIGRlZmF1bHQuICovXHJcblx0Y2xvc2VzdExhcmdlckZpcnN0LFxyXG59XHJcbmV4cG9ydCB0eXBlIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3lMaXRlcmFsID0ga2V5b2YgdHlwZW9mIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3k7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0RGF0YU1hdGNoZXI8VCA9IHVua25vd24+IHtcclxuXHQoXHJcblx0XHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0XHRjdXJyZW50U2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxyXG5cdFx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxyXG5cdFx0c2l6ZVR5cGVNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+LFxyXG5cdCk6IFQgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIG1hdGNoIGRhdGEgYmFzZWQgb24gc3RyYXRlZ3kgYW5kIHNpemUuXHJcbiAqXHJcbiAqIEBwYXJhbSBkYXRhQ29uZmlnIERhdGEgY29uZmlnIHRvIGdlbmVyYXRlIHJ1bGVzIGJhc2VkIG9uLlxyXG4gKiBAcGFyYW0gc2l6ZVR5cGUgU2l6ZSB0eXBlIHRvIGdldCBkYXRhIGZvci5cclxuICogQHBhcmFtIHN0cmF0ZWd5IFN0cmF0ZWd5IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHJ1bGVzLlxyXG4gKiBAcGFyYW0gc2l6ZVR5cGVzIEF2YWlsYWJsZSBzaXplIHR5cGVzIG9yZGVyZWQgYnkgaW5kZXggdHlwZS4gKENhbiBiZSBvYnRhaW5lZCBmcm9tIGBWaWV3cG9ydFNlcnZpY2VgKVxyXG4gKiBAcGFyYW0gc2l6ZVR5cGVNYXAgQXZhaWxhYmxlIHNpemUgdHlwZSBtYXAuIChDYW4gYmUgb2J0YWluZWQgZnJvbSBgVmlld3BvcnRTZXJ2aWNlYClcclxuICogQHJldHVybnMgUmV0dXJucyB0aGUgbWF0Y2hlZCBkYXRhIHZhbHVlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoVmlld3BvcnREYXRhPFQ+KFxyXG5cdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcclxuXHRzaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8sXHJcblx0c3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3ksXHJcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxyXG5cdHNpemVUeXBlTWFwOiBEaWN0aW9uYXJ5PFZpZXdwb3J0U2l6ZVR5cGVJbmZvPixcclxuKTogVCB8IHVuZGVmaW5lZCB7XHJcblx0Y29uc3QgbWF0Y2hGbiA9IG1hdGNoU3RyYXRlZ3lIYW5kbGVyTWFwW3N0cmF0ZWd5XTtcclxuXHRpZiAoIW1hdGNoRm4pIHtcclxuXHRcdHRocm93IEVycm9yKGBtYXRjaFZpZXdwb3J0RGF0YTogVmlld3BvcnQgRGF0YSBzdHJhdGVneSBub3QgaW1wbGVtZW50ZWQuIFN0cmF0ZWd5OiAnJHtzdHJhdGVneX0nYCk7XHJcblx0fVxyXG5cdGNvbnN0IGRhdGEgPSBtYXRjaEZuKGRhdGFDb25maWcsIHNpemVUeXBlLCBzaXplVHlwZXMsIHNpemVUeXBlTWFwKSBhcyBUO1xyXG5cdGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdHJldHVybiBkYXRhO1xyXG5cdH1cclxuXHRyZXR1cm4gZGF0YUNvbmZpZy5kZWZhdWx0O1xyXG59XHJcblxyXG5cclxuY29uc3QgbWF0Y2hTdHJhdGVneUhhbmRsZXJNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnREYXRhTWF0Y2hlcj4gPSB7XHJcblx0W1ZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kuZXhhY3RdOiBtYXRjaFdpdGhFeGFjdCxcclxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5sYXJnZXJdOiBtYXRjaFdpdGhMYXJnZXJNYXRjaCxcclxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5zbWFsbGVyXTogbWF0Y2hXaXRoU21hbGxlck1hdGNoLFxyXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LmNsb3Nlc3RTbWFsbGVyRmlyc3RdOiBtYXRjaFdpdGhDbG9zZXN0U21hbGxlckZpcnN0TWF0Y2gsXHJcblx0W1ZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kuY2xvc2VzdExhcmdlckZpcnN0XTogbWF0Y2hXaXRoQ2xvc2VzdExhcmdlckZpcnN0TWF0Y2gsXHJcbn07XHJcblxyXG5mdW5jdGlvbiBtYXRjaFdpdGhFeGFjdDxUPihcclxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0Y3VycmVudFNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuKTogVCB8IHVuZGVmaW5lZCB7XHJcblx0cmV0dXJuIGRhdGFDb25maWdbY3VycmVudFNpemVUeXBlLm5hbWVdO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXRjaFdpdGhMYXJnZXJNYXRjaDxUPihcclxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0Y3VycmVudFNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcbik6IFQgfCB1bmRlZmluZWQge1xyXG5cdGxldCBkYXRhID0gZGF0YUNvbmZpZ1tjdXJyZW50U2l6ZVR5cGUubmFtZV07XHJcblx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0cmV0dXJuIGRhdGE7XHJcblx0fVxyXG5cclxuXHRjb25zdCBsYXJnZXN0VHlwZUlkeCA9IHNpemVUeXBlc1tzaXplVHlwZXMubGVuZ3RoIC0gMV0udHlwZTtcclxuXHRpZiAoY3VycmVudFNpemVUeXBlLnR5cGUgPj0gbGFyZ2VzdFR5cGVJZHgpIHtcclxuXHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRmb3IgKGxldCBpbmRleCA9IGN1cnJlbnRTaXplVHlwZS50eXBlOyBpbmRleCA8IHNpemVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcclxuXHRcdGNvbnN0IHNpemVUeXBlID0gc2l6ZVR5cGVzW2luZGV4XTtcclxuXHRcdGRhdGEgPSBkYXRhQ29uZmlnW3NpemVUeXBlLm5hbWVdO1xyXG5cdFx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hdGNoV2l0aFNtYWxsZXJNYXRjaDxUPihcclxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0Y3VycmVudFNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcbik6IFQgfCB1bmRlZmluZWQge1xyXG5cdGxldCBkYXRhID0gZGF0YUNvbmZpZ1tjdXJyZW50U2l6ZVR5cGUubmFtZV07XHJcblx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0cmV0dXJuIGRhdGE7XHJcblx0fVxyXG5cclxuXHRpZiAoY3VycmVudFNpemVUeXBlLnR5cGUgPD0gMCkge1xyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmb3ItZGlyZWN0aW9uXHJcblx0Zm9yIChsZXQgaW5kZXggPSBjdXJyZW50U2l6ZVR5cGUudHlwZTsgaW5kZXggPCBzaXplVHlwZXMubGVuZ3RoOyBpbmRleC0tKSB7XHJcblx0XHRjb25zdCBzaXplVHlwZSA9IHNpemVUeXBlc1tpbmRleF07XHJcblx0XHRkYXRhID0gZGF0YUNvbmZpZ1tzaXplVHlwZS5uYW1lXTtcclxuXHRcdGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdW5kZWZpbmVkO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXRjaFdpdGhDbG9zZXN0U21hbGxlckZpcnN0TWF0Y2g8VD4oXHJcblx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxyXG5cdGN1cnJlbnRTaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8sXHJcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxyXG4pOiBUIHwgdW5kZWZpbmVkIHtcclxuXHRyZXR1cm4gY2xvc2VzdE1hdGNoKGRhdGFDb25maWcsIGN1cnJlbnRTaXplVHlwZSwgc2l6ZVR5cGVzLCB0cnVlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWF0Y2hXaXRoQ2xvc2VzdExhcmdlckZpcnN0TWF0Y2g8VD4oXHJcblx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxyXG5cdGN1cnJlbnRTaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8sXHJcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxyXG4pOiBUIHwgdW5kZWZpbmVkIHtcclxuXHRyZXR1cm4gY2xvc2VzdE1hdGNoKGRhdGFDb25maWcsIGN1cnJlbnRTaXplVHlwZSwgc2l6ZVR5cGVzLCBmYWxzZSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsb3Nlc3RNYXRjaDxUPihcclxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0Y3VycmVudFNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcblx0aXNTbWFsbGVyRmlyc3Q6IGJvb2xlYW5cclxuKTogVCB8IHVuZGVmaW5lZCB7XHJcblx0bGV0IGRhdGEgPSBkYXRhQ29uZmlnW2N1cnJlbnRTaXplVHlwZS5uYW1lXTtcclxuXHRpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRyZXR1cm4gZGF0YTtcclxuXHR9XHJcblxyXG5cdGxldCBkb3duSW5kZXggPSBjdXJyZW50U2l6ZVR5cGUudHlwZTtcclxuXHRsZXQgdXBJbmRleCA9IGN1cnJlbnRTaXplVHlwZS50eXBlO1xyXG5cclxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcclxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZVR5cGVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0Zm9yIChjb25zdCBpZHggb2YgaXNTbWFsbGVyRmlyc3QgPyBbLS1kb3duSW5kZXgsICsrdXBJbmRleF0gOiBbKyt1cEluZGV4LCAtLWRvd25JbmRleF0pIHtcclxuXHRcdFx0Y29uc3Qgc2l6ZVR5cGUgPSBzaXplVHlwZXNbaWR4XTtcclxuXHRcdFx0aWYgKHNpemVUeXBlKSB7XHJcblx0XHRcdFx0ZGF0YSA9IGRhdGFDb25maWdbc2l6ZVR5cGUubmFtZV07XHJcblx0XHRcdFx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gdW5kZWZpbmVkO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Subscription } from "rxjs";
|
|
2
|
+
import { tap } from "rxjs/operators";
|
|
3
|
+
import { Pipe } from "@angular/core";
|
|
4
|
+
import { ViewportDataMatchStrategy } from "./viewport-data-matcher";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./viewport-data.service";
|
|
7
|
+
/* eslint-disable @angular-eslint/no-pipe-impure */
|
|
8
|
+
export class ViewportDataPipe {
|
|
9
|
+
constructor(viewportData, cdr) {
|
|
10
|
+
this.viewportData = viewportData;
|
|
11
|
+
this.cdr = cdr;
|
|
12
|
+
this.markForTransform = true;
|
|
13
|
+
this.data$$ = Subscription.EMPTY;
|
|
14
|
+
}
|
|
15
|
+
transform(data, strategy) {
|
|
16
|
+
if (!this.markForTransform && data === this.data && strategy === this.strategy) {
|
|
17
|
+
return this.value;
|
|
18
|
+
}
|
|
19
|
+
this.data = data;
|
|
20
|
+
this.strategy = strategy;
|
|
21
|
+
this.data$$.unsubscribe();
|
|
22
|
+
this.data$$ = this.viewportData.get$(data, ViewportDataMatchStrategy[strategy]).pipe(tap(value => {
|
|
23
|
+
this.markForTransform = true;
|
|
24
|
+
this.value = value;
|
|
25
|
+
this.cdr.markForCheck();
|
|
26
|
+
})).subscribe();
|
|
27
|
+
this.markForTransform = false;
|
|
28
|
+
return this.value;
|
|
29
|
+
}
|
|
30
|
+
ngOnDestroy() {
|
|
31
|
+
this.data$$.unsubscribe();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
ViewportDataPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportDataPipe, deps: [{ token: i1.ViewportDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
35
|
+
ViewportDataPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ViewportDataPipe, name: "ssvViewportData", pure: false });
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportDataPipe, decorators: [{
|
|
37
|
+
type: Pipe,
|
|
38
|
+
args: [{
|
|
39
|
+
name: "ssvViewportData",
|
|
40
|
+
pure: false
|
|
41
|
+
}]
|
|
42
|
+
}], ctorParameters: function () { return [{ type: i1.ViewportDataService }, { type: i0.ChangeDetectorRef }]; } });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQStDLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBc0IseUJBQXlCLEVBQW9DLE1BQU0seUJBQXlCLENBQUM7OztBQUcxSCxtREFBbUQ7QUFLbkQsTUFBTSxPQUFPLGdCQUFnQjtJQVE1QixZQUNTLFlBQWlDLEVBQ2pDLEdBQXNCO1FBRHRCLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVJ2QixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFJeEIsV0FBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFNcEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUF3QixFQUFFLFFBQTBDO1FBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDL0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbkYsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUNGLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7NkdBcENXLGdCQUFnQjsyR0FBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBSjVCLElBQUk7bUJBQUM7b0JBQ0wsSUFBSSxFQUFFLGlCQUFpQjtvQkFDdkIsSUFBSSxFQUFFLEtBQUs7aUJBQ1giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBWaWV3cG9ydERhdGFDb25maWcsIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3ksIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3lMaXRlcmFsIH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS1tYXRjaGVyXCI7XHJcbmltcG9ydCB7IFZpZXdwb3J0RGF0YVNlcnZpY2UgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhLnNlcnZpY2VcIjtcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1waXBlLWltcHVyZSAqL1xyXG5AUGlwZSh7XHJcblx0bmFtZTogXCJzc3ZWaWV3cG9ydERhdGFcIixcclxuXHRwdXJlOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld3BvcnREYXRhUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XHJcblxyXG5cdHByaXZhdGUgbWFya0ZvclRyYW5zZm9ybSA9IHRydWU7XHJcblx0cHJpdmF0ZSB2YWx1ZTogdW5rbm93bjtcclxuXHRwcml2YXRlIGRhdGE6IFZpZXdwb3J0RGF0YUNvbmZpZyB8IHVuZGVmaW5lZDtcclxuXHRwcml2YXRlIHN0cmF0ZWd5OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5TGl0ZXJhbCB8IHVuZGVmaW5lZDtcclxuXHRwcml2YXRlIGRhdGEkJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHZpZXdwb3J0RGF0YTogVmlld3BvcnREYXRhU2VydmljZSxcclxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0dHJhbnNmb3JtKGRhdGE6IFZpZXdwb3J0RGF0YUNvbmZpZywgc3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3lMaXRlcmFsKTogdW5rbm93biB7XHJcblx0XHRpZiAoIXRoaXMubWFya0ZvclRyYW5zZm9ybSAmJiBkYXRhID09PSB0aGlzLmRhdGEgJiYgc3RyYXRlZ3kgPT09IHRoaXMuc3RyYXRlZ3kpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWU7XHJcblx0XHR9XHJcblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xyXG5cdFx0dGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xyXG5cclxuXHRcdHRoaXMuZGF0YSQkLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR0aGlzLmRhdGEkJCA9IHRoaXMudmlld3BvcnREYXRhLmdldCQoZGF0YSwgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneVtzdHJhdGVneV0pLnBpcGUoXHJcblx0XHRcdHRhcCh2YWx1ZSA9PiB7XHJcblx0XHRcdFx0dGhpcy5tYXJrRm9yVHJhbnNmb3JtID0gdHJ1ZTtcclxuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdH0pLFxyXG5cdFx0KS5zdWJzY3JpYmUoKTtcclxuXHJcblx0XHR0aGlzLm1hcmtGb3JUcmFuc2Zvcm0gPSBmYWxzZTtcclxuXHRcdHJldHVybiB0aGlzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLmRhdGEkJC51bnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Inject, Injectable } from "@angular/core";
|
|
2
|
+
import { distinctUntilChanged, map } from "rxjs/operators";
|
|
3
|
+
import { UX_CONFIG } from "../../config";
|
|
4
|
+
import { matchViewportData } from "./viewport-data-matcher";
|
|
5
|
+
import { generateViewportRulesRangeFromDataMatcher } from "./viewport-data.utils";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../viewport.service";
|
|
8
|
+
export class ViewportDataService {
|
|
9
|
+
constructor(viewport, config) {
|
|
10
|
+
this.viewport = viewport;
|
|
11
|
+
this.config = config;
|
|
12
|
+
}
|
|
13
|
+
/** Get data for match. */
|
|
14
|
+
get(dataConfig, strategy = this.config.viewport.defaultDataMatchStrategy, sizeType = this.viewport.sizeTypeSnapshot) {
|
|
15
|
+
return matchViewportData(dataConfig, sizeType, strategy, this.viewport.sizeTypes, this.viewport.sizeTypeMap);
|
|
16
|
+
}
|
|
17
|
+
/** Get data for match as observable. */
|
|
18
|
+
get$(dataConfig, strategy, throttle = true) {
|
|
19
|
+
return (throttle ? this.viewport.sizeType$ : this.viewport.sizeTypeSnap$).pipe(map(sizeType => this.get(dataConfig, strategy, sizeType)), distinctUntilChanged());
|
|
20
|
+
}
|
|
21
|
+
/** Generate rules based on strategies for data. */
|
|
22
|
+
generateRules(dataConfig, strategy = this.config.viewport.defaultDataMatchStrategy) {
|
|
23
|
+
return generateViewportRulesRangeFromDataMatcher(dataConfig, strategy, this.viewport.sizeTypes, this.viewport.sizeTypeMap);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
ViewportDataService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportDataService, deps: [{ token: i1.ViewportService }, { token: UX_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
27
|
+
ViewportDataService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportDataService, providedIn: "root" });
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportDataService, decorators: [{
|
|
29
|
+
type: Injectable,
|
|
30
|
+
args: [{
|
|
31
|
+
providedIn: "root",
|
|
32
|
+
}]
|
|
33
|
+
}], ctorParameters: function () { return [{ type: i1.ViewportService }, { type: undefined, decorators: [{
|
|
34
|
+
type: Inject,
|
|
35
|
+
args: [UX_CONFIG]
|
|
36
|
+
}] }]; } });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sY0FBYyxDQUFDO0FBSXBELE9BQU8sRUFBRSxpQkFBaUIsRUFBaUQsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRyxPQUFPLEVBQUUseUNBQXlDLEVBQW9CLE1BQU0sdUJBQXVCLENBQUM7OztBQUtwRyxNQUFNLE9BQU8sbUJBQW1CO0lBRS9CLFlBQ1MsUUFBeUIsRUFDTixNQUFpQjtRQURwQyxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUNOLFdBQU0sR0FBTixNQUFNLENBQVc7SUFFN0MsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixHQUFHLENBQ0YsVUFBaUMsRUFDakMsV0FBc0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLEVBQ25GLFdBQWlDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1FBRS9ELE9BQU8saUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLElBQUksQ0FBSSxVQUFpQyxFQUFFLFFBQW9DLEVBQUUsUUFBUSxHQUFHLElBQUk7UUFDL0YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUM3RSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFDNUQsb0JBQW9CLEVBQUUsQ0FDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsYUFBYSxDQUNaLFVBQWlDLEVBQ2pDLFdBQXNDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QjtRQUVuRixPQUFPLHlDQUF5QyxDQUMvQyxVQUFVLEVBQ1YsUUFBUSxFQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDekIsQ0FBQztJQUNILENBQUM7O2dIQXBDVyxtQkFBbUIsaURBSXRCLFNBQVM7b0hBSk4sbUJBQW1CLGNBRm5CLE1BQU07MkZBRU4sbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQjs7MEJBS0UsTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgVVhfQ09ORklHLCBVeE9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vY29uZmlnXCI7XHJcblxyXG5pbXBvcnQgeyBWaWV3cG9ydFNpemVUeXBlSW5mbyB9IGZyb20gXCIuLi92aWV3cG9ydC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tIFwiLi4vdmlld3BvcnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBtYXRjaFZpZXdwb3J0RGF0YSwgVmlld3BvcnREYXRhQ29uZmlnLCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5IH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS1tYXRjaGVyXCI7XHJcbmltcG9ydCB7IGdlbmVyYXRlVmlld3BvcnRSdWxlc1JhbmdlRnJvbURhdGFNYXRjaGVyLCBWaWV3cG9ydERhdGFSdWxlIH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS51dGlsc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld3BvcnREYXRhU2VydmljZSB7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSB2aWV3cG9ydDogVmlld3BvcnRTZXJ2aWNlLFxyXG5cdFx0QEluamVjdChVWF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBVeE9wdGlvbnMsXHJcblx0KSB7XHJcblx0fVxyXG5cclxuXHQvKiogR2V0IGRhdGEgZm9yIG1hdGNoLiAqL1xyXG5cdGdldDxUPihcclxuXHRcdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcclxuXHRcdHN0cmF0ZWd5OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5ID0gdGhpcy5jb25maWcudmlld3BvcnQuZGVmYXVsdERhdGFNYXRjaFN0cmF0ZWd5LFxyXG5cdFx0c2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvID0gdGhpcy52aWV3cG9ydC5zaXplVHlwZVNuYXBzaG90XHJcblx0KTogVCB8IHVuZGVmaW5lZCB7XHJcblx0XHRyZXR1cm4gbWF0Y2hWaWV3cG9ydERhdGEoZGF0YUNvbmZpZywgc2l6ZVR5cGUsIHN0cmF0ZWd5LCB0aGlzLnZpZXdwb3J0LnNpemVUeXBlcywgdGhpcy52aWV3cG9ydC5zaXplVHlwZU1hcCk7XHJcblx0fVxyXG5cclxuXHQvKiogR2V0IGRhdGEgZm9yIG1hdGNoIGFzIG9ic2VydmFibGUuICovXHJcblx0Z2V0JDxUPihkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sIHN0cmF0ZWd5PzogVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSwgdGhyb3R0bGUgPSB0cnVlKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XHJcblx0XHRyZXR1cm4gKHRocm90dGxlID8gdGhpcy52aWV3cG9ydC5zaXplVHlwZSQgOiB0aGlzLnZpZXdwb3J0LnNpemVUeXBlU25hcCQpLnBpcGUoXHJcblx0XHRcdG1hcChzaXplVHlwZSA9PiB0aGlzLmdldDxUPihkYXRhQ29uZmlnLCBzdHJhdGVneSwgc2l6ZVR5cGUpKSxcclxuXHRcdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKiogR2VuZXJhdGUgcnVsZXMgYmFzZWQgb24gc3RyYXRlZ2llcyBmb3IgZGF0YS4gKi9cclxuXHRnZW5lcmF0ZVJ1bGVzPFQ+KFxyXG5cdFx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxyXG5cdFx0c3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kgPSB0aGlzLmNvbmZpZy52aWV3cG9ydC5kZWZhdWx0RGF0YU1hdGNoU3RyYXRlZ3ksXHJcblx0KTogVmlld3BvcnREYXRhUnVsZTxUPltdIHtcclxuXHRcdHJldHVybiBnZW5lcmF0ZVZpZXdwb3J0UnVsZXNSYW5nZUZyb21EYXRhTWF0Y2hlcihcclxuXHRcdFx0ZGF0YUNvbmZpZyxcclxuXHRcdFx0c3RyYXRlZ3ksXHJcblx0XHRcdHRoaXMudmlld3BvcnQuc2l6ZVR5cGVzLFxyXG5cdFx0XHR0aGlzLnZpZXdwb3J0LnNpemVUeXBlTWFwXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { ViewportDataMatchStrategy } from "./viewport-data-matcher";
|
|
2
|
+
/**
|
|
3
|
+
* Utility function to generate rules based on strategies.
|
|
4
|
+
*
|
|
5
|
+
* @param dataConfig Data config to generate rules based on.
|
|
6
|
+
* @param strategy Strategy to use when building rules.
|
|
7
|
+
* @param sizeTypes Available size types ordered by index type. (Can be obtained from `ViewportService`)
|
|
8
|
+
* @param sizeTypeMap Available size type map. (Can be obtained from `ViewportService`)
|
|
9
|
+
* @returns Returns a collection of rules (ordered).
|
|
10
|
+
*/
|
|
11
|
+
export function generateViewportRulesRangeFromDataMatcher(dataConfig, strategy, sizeTypes, sizeTypeMap) {
|
|
12
|
+
const ruleBuilderFn = matchStrategyHandlerMap[strategy];
|
|
13
|
+
if (!ruleBuilderFn) {
|
|
14
|
+
throw Error(`generateViewportRulesRangeFromDataMatcher: Viewport Data strategy not implemented. Strategy: '${strategy}'`);
|
|
15
|
+
}
|
|
16
|
+
let dataSizes = [];
|
|
17
|
+
for (const key in dataConfig) {
|
|
18
|
+
if (Object.prototype.hasOwnProperty.call(dataConfig, key)) {
|
|
19
|
+
const data = dataConfig[key];
|
|
20
|
+
if (data === undefined) {
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const size = sizeTypeMap[key];
|
|
24
|
+
if (size) {
|
|
25
|
+
dataSizes.push(size);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
dataSizes = dataSizes.sort(({ type: typeA }, { type: typeB }) => typeA - typeB);
|
|
30
|
+
const rules = [];
|
|
31
|
+
if (dataConfig.default) {
|
|
32
|
+
rules.push({ value: dataConfig.default, min: undefined, max: undefined });
|
|
33
|
+
}
|
|
34
|
+
let prevRule;
|
|
35
|
+
for (let index = 0; index < dataSizes.length; index++) {
|
|
36
|
+
const prevDataSize = dataSizes[index - 1];
|
|
37
|
+
const nextDataSize = dataSizes[index + 1];
|
|
38
|
+
const dataSize = dataSizes[index];
|
|
39
|
+
const prevSize = sizeTypes[dataSize.type - 1];
|
|
40
|
+
// const nextSize = sizeTypes[dataSize.type + 1];
|
|
41
|
+
const data = dataConfig[dataSize.name];
|
|
42
|
+
const rule = {
|
|
43
|
+
value: data,
|
|
44
|
+
min: undefined,
|
|
45
|
+
max: undefined,
|
|
46
|
+
};
|
|
47
|
+
ruleBuilderFn(rule, dataSize, nextDataSize, prevDataSize, prevSize, prevRule, sizeTypes);
|
|
48
|
+
prevRule = rule;
|
|
49
|
+
rules.push(rule);
|
|
50
|
+
}
|
|
51
|
+
return rules;
|
|
52
|
+
}
|
|
53
|
+
const matchStrategyHandlerMap = {
|
|
54
|
+
[ViewportDataMatchStrategy.exact]: (rule, dataSize, _nextDataSize, _prevDataSize, prevSize) => {
|
|
55
|
+
rule.max = dataSize.widthThreshold;
|
|
56
|
+
if (prevSize) {
|
|
57
|
+
rule.min = prevSize.widthThreshold + 1;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
[ViewportDataMatchStrategy.smaller]: (rule, dataSize, nextDataSize, _prevDataSize, prevSize) => {
|
|
61
|
+
if (nextDataSize) {
|
|
62
|
+
rule.max = dataSize.widthThreshold;
|
|
63
|
+
}
|
|
64
|
+
if (prevSize) {
|
|
65
|
+
rule.min = prevSize.widthThreshold + 1;
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
[ViewportDataMatchStrategy.larger]: (rule, dataSize, _nextDataSize, prevDataSize) => {
|
|
69
|
+
if (dataSize) {
|
|
70
|
+
rule.max = dataSize.widthThreshold;
|
|
71
|
+
}
|
|
72
|
+
if (prevDataSize) {
|
|
73
|
+
rule.min = prevDataSize.widthThreshold + 1;
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
[ViewportDataMatchStrategy.closestSmallerFirst]: (rule, dataSize, nextDataSize, _prevDataSize, _prevSize, prevRule, sizeTypes) => {
|
|
77
|
+
if (nextDataSize) {
|
|
78
|
+
rule.max = calculateClosestWidthThreshold(nextDataSize, dataSize, sizeTypes, true);
|
|
79
|
+
}
|
|
80
|
+
if (prevRule?.max) {
|
|
81
|
+
rule.min = prevRule.max + 1;
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
[ViewportDataMatchStrategy.closestLargerFirst]: (rule, dataSize, nextDataSize, _prevDataSize, _prevSize, prevRule, sizeTypes) => {
|
|
85
|
+
if (nextDataSize) {
|
|
86
|
+
rule.max = calculateClosestWidthThreshold(nextDataSize, dataSize, sizeTypes, false);
|
|
87
|
+
}
|
|
88
|
+
if (prevRule?.max) {
|
|
89
|
+
rule.min = prevRule.max + 1;
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
function calculateClosestWidthThreshold(nextDataSize, dataSize, sizeTypes, isSmallerPreferred) {
|
|
94
|
+
const fn = isSmallerPreferred ? Math.ceil : Math.floor;
|
|
95
|
+
// get closest between curr and next
|
|
96
|
+
const diffIndex = fn((nextDataSize.type - dataSize.type - 1) / 2);
|
|
97
|
+
const diffNextSize = sizeTypes[dataSize.type + diffIndex];
|
|
98
|
+
return (diffNextSize || dataSize).widthThreshold;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy92aWV3cG9ydC92aWV3cG9ydC1kYXRhL3ZpZXdwb3J0LWRhdGEudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFzQix5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUXhGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHlDQUF5QyxDQUN4RCxVQUFpQyxFQUNqQyxRQUFtQyxFQUNuQyxTQUFpQyxFQUNqQyxXQUE2QztJQUU3QyxNQUFNLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsYUFBYSxFQUFFO1FBQ25CLE1BQU0sS0FBSyxDQUFDLGlHQUFpRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0tBQzFIO0lBRUQsSUFBSSxTQUFTLEdBQTJCLEVBQUUsQ0FBQztJQUMzQyxLQUFLLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTtRQUM3QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDMUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFDdkIsU0FBUzthQUNUO1lBQ0QsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksSUFBSSxFQUFFO2dCQUNULFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckI7U0FDRDtLQUNEO0lBQ0QsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFH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Q0FBQyxjQUFjLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWwvaW50ZXJuYWwubW9kZWxcIjtcclxuaW1wb3J0IHsgVmlld3BvcnRTaXplVHlwZUluZm8gfSBmcm9tIFwiLi4vdmlld3BvcnQubW9kZWxcIjtcclxuaW1wb3J0IHsgVmlld3BvcnREYXRhQ29uZmlnLCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5IH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS1tYXRjaGVyXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0RGF0YVJ1bGU8VD4ge1xyXG5cdG1pbj86IG51bWJlcjtcclxuXHRtYXg/OiBudW1iZXI7XHJcblx0dmFsdWU6IFQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHJ1bGVzIGJhc2VkIG9uIHN0cmF0ZWdpZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBkYXRhQ29uZmlnIERhdGEgY29uZmlnIHRvIGdlbmVyYXRlIHJ1bGVzIGJhc2VkIG9uLlxyXG4gKiBAcGFyYW0gc3RyYXRlZ3kgU3RyYXRlZ3kgdG8gdXNlIHdoZW4gYnVpbGRpbmcgcnVsZXMuXHJcbiAqIEBwYXJhbSBzaXplVHlwZXMgQXZhaWxhYmxlIHNpemUgdHlwZXMgb3JkZXJlZCBieSBpbmRleCB0eXBlLiAoQ2FuIGJlIG9idGFpbmVkIGZyb20gYFZpZXdwb3J0U2VydmljZWApXHJcbiAqIEBwYXJhbSBzaXplVHlwZU1hcCBBdmFpbGFibGUgc2l6ZSB0eXBlIG1hcC4gKENhbiBiZSBvYnRhaW5lZCBmcm9tIGBWaWV3cG9ydFNlcnZpY2VgKVxyXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBydWxlcyAob3JkZXJlZCkuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVWaWV3cG9ydFJ1bGVzUmFuZ2VGcm9tRGF0YU1hdGNoZXI8VD4oXHJcblx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxyXG5cdHN0cmF0ZWd5OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LFxyXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcclxuXHRzaXplVHlwZU1hcDogRGljdGlvbmFyeTxWaWV3cG9ydFNpemVUeXBlSW5mbz4sXHJcbik6IFZpZXdwb3J0RGF0YVJ1bGU8VD5bXSB7XHJcblx0Y29uc3QgcnVsZUJ1aWxkZXJGbiA9IG1hdGNoU3RyYXRlZ3lIYW5kbGVyTWFwW3N0cmF0ZWd5XTtcclxuXHRpZiAoIXJ1bGVCdWlsZGVyRm4pIHtcclxuXHRcdHRocm93IEVycm9yKGBnZW5lcmF0ZVZpZXdwb3J0UnVsZXNSYW5nZUZyb21EYXRhTWF0Y2hlcjogVmlld3BvcnQgRGF0YSBzdHJhdGVneSBub3QgaW1wbGVtZW50ZWQuIFN0cmF0ZWd5OiAnJHtzdHJhdGVneX0nYCk7XHJcblx0fVxyXG5cclxuXHRsZXQgZGF0YVNpemVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdID0gW107XHJcblx0Zm9yIChjb25zdCBrZXkgaW4gZGF0YUNvbmZpZykge1xyXG5cdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhQ29uZmlnLCBrZXkpKSB7XHJcblx0XHRcdGNvbnN0IGRhdGEgPSBkYXRhQ29uZmlnW2tleV07XHJcblx0XHRcdGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCBzaXplID0gc2l6ZVR5cGVNYXBba2V5XTtcclxuXHRcdFx0aWYgKHNpemUpIHtcclxuXHRcdFx0XHRkYXRhU2l6ZXMucHVzaChzaXplKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRkYXRhU2l6ZXMgPSBkYXRhU2l6ZXMuc29ydCgoeyB0eXBlOiB0eXBlQSB9LCB7IHR5cGU6IHR5cGVCIH0pID0+IHR5cGVBIC0gdHlwZUIpO1xyXG5cclxuXHRjb25zdCBydWxlczogVmlld3BvcnREYXRhUnVsZTxUPltdID0gW107XHJcblx0aWYgKGRhdGFDb25maWcuZGVmYXVsdCkge1xyXG5cdFx0cnVsZXMucHVzaCh7IHZhbHVlOiBkYXRhQ29uZmlnLmRlZmF1bHQsIG1pbjogdW5kZWZpbmVkLCBtYXg6IHVuZGVmaW5lZCB9KTtcclxuXHR9XHJcblxyXG5cdGxldCBwcmV2UnVsZTogVmlld3BvcnREYXRhUnVsZTxUPiB8IHVuZGVmaW5lZDtcclxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGF0YVNpemVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0Y29uc3QgcHJldkRhdGFTaXplID0gZGF0YVNpemVzW2luZGV4IC0gMV07XHJcblx0XHRjb25zdCBuZXh0RGF0YVNpemUgPSBkYXRhU2l6ZXNbaW5kZXggKyAxXTtcclxuXHRcdGNvbnN0IGRhdGFTaXplID0gZGF0YVNpemVzW2luZGV4XTtcclxuXHRcdGNvbnN0IHByZXZTaXplID0gc2l6ZVR5cGVzW2RhdGFTaXplLnR5cGUgLSAxXTtcclxuXHRcdC8vIGNvbnN0IG5leHRTaXplID0gc2l6ZVR5cGVzW2RhdGFTaXplLnR5cGUgKyAxXTtcclxuXHRcdGNvbnN0IGRhdGEgPSBkYXRhQ29uZmlnW2RhdGFTaXplLm5hbWVdO1xyXG5cdFx0Y29uc3QgcnVsZTogVmlld3BvcnREYXRhUnVsZTxUPiA9IHtcclxuXHRcdFx0dmFsdWU6IGRhdGEsXHJcblx0XHRcdG1pbjogdW5kZWZpbmVkLFxyXG5cdFx0XHRtYXg6IHVuZGVmaW5lZCxcclxuXHRcdH07XHJcblxyXG5cdFx0cnVsZUJ1aWxkZXJGbihydWxlLCBkYXRhU2l6ZSwgbmV4dERhdGFTaXplLCBwcmV2RGF0YVNpemUsIHByZXZTaXplLCBwcmV2UnVsZSwgc2l6ZVR5cGVzKTtcclxuXHJcblx0XHRwcmV2UnVsZSA9IHJ1bGU7XHJcblx0XHRydWxlcy5wdXNoKHJ1bGUpO1xyXG5cdH1cclxuXHRyZXR1cm4gcnVsZXM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRSdWxlUmFuZ2VCdWlsZGVyPFQgPSB1bmtub3duPiB7XHJcblx0KFxyXG5cdFx0cnVsZTogVmlld3BvcnREYXRhUnVsZTxUPixcclxuXHRcdGRhdGFTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRcdG5leHREYXRhU2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQsXHJcblx0XHRwcmV2RGF0YVNpemU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvIHwgdW5kZWZpbmVkLFxyXG5cdFx0cHJldlNpemU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvIHwgdW5kZWZpbmVkLFxyXG5cdFx0cHJldlJ1bGU6IFZpZXdwb3J0RGF0YVJ1bGU8VD4gfCB1bmRlZmluZWQsXHJcblx0XHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcblx0KTogdm9pZDtcclxufVxyXG5cclxuY29uc3QgbWF0Y2hTdHJhdGVneUhhbmRsZXJNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnRSdWxlUmFuZ2VCdWlsZGVyPiA9IHtcclxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5leGFjdF06IChydWxlLCBkYXRhU2l6ZSwgX25leHREYXRhU2l6ZSwgX3ByZXZEYXRhU2l6ZSwgcHJldlNpemUpID0+IHtcclxuXHRcdHJ1bGUubWF4ID0gZGF0YVNpemUud2lkdGhUaHJlc2hvbGQ7XHJcblx0XHRpZiAocHJldlNpemUpIHtcclxuXHRcdFx0cnVsZS5taW4gPSBwcmV2U2l6ZS53aWR0aFRocmVzaG9sZCArIDE7XHJcblx0XHR9XHJcblx0fSxcclxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5zbWFsbGVyXTogKHJ1bGUsIGRhdGFTaXplLCBuZXh0RGF0YVNpemUsIF9wcmV2RGF0YVNpemUsIHByZXZTaXplKSA9PiB7XHJcblx0XHRpZiAobmV4dERhdGFTaXplKSB7XHJcblx0XHRcdHJ1bGUubWF4ID0gZGF0YVNpemUud2lkdGhUaHJlc2hvbGQ7XHJcblx0XHR9XHJcblx0XHRpZiAocHJldlNpemUpIHtcclxuXHRcdFx0cnVsZS5taW4gPSBwcmV2U2l6ZS53aWR0aFRocmVzaG9sZCArIDE7XHJcblx0XHR9XHJcblx0fSxcclxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5sYXJnZXJdOiAocnVsZSwgZGF0YVNpemUsIF9uZXh0RGF0YVNpemUsIHByZXZEYXRhU2l6ZSkgPT4ge1xyXG5cdFx0aWYgKGRhdGFTaXplKSB7XHJcblx0XHRcdHJ1bGUubWF4ID0gZGF0YVNpemUud2lkdGhUaHJlc2hvbGQ7XHJcblx0XHR9XHJcblx0XHRpZiAocHJldkRhdGFTaXplKSB7XHJcblx0XHRcdHJ1bGUubWluID0gcHJldkRhdGFTaXplLndpZHRoVGhyZXNob2xkICsgMTtcclxuXHRcdH1cclxuXHR9LFxyXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LmNsb3Nlc3RTbWFsbGVyRmlyc3RdOiAocnVsZSwgZGF0YVNpemUsIG5leHREYXRhU2l6ZSwgX3ByZXZEYXRhU2l6ZSwgX3ByZXZTaXplLCBwcmV2UnVsZSwgc2l6ZVR5cGVzKSA9PiB7XHJcblx0XHRpZiAobmV4dERhdGFTaXplKSB7XHJcblx0XHRcdHJ1bGUubWF4ID0gY2FsY3VsYXRlQ2xvc2VzdFdpZHRoVGhyZXNob2xkKG5leHREYXRhU2l6ZSwgZGF0YVNpemUsIHNpemVUeXBlcywgdHJ1ZSk7XHJcblx0XHR9XHJcblx0XHRpZiAocHJldlJ1bGU/Lm1heCkge1xyXG5cdFx0XHRydWxlLm1pbiA9IHByZXZSdWxlLm1heCArIDE7XHJcblx0XHR9XHJcblx0fSxcclxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5jbG9zZXN0TGFyZ2VyRmlyc3RdOiAocnVsZSwgZGF0YVNpemUsIG5leHREYXRhU2l6ZSwgX3ByZXZEYXRhU2l6ZSwgX3ByZXZTaXplLCBwcmV2UnVsZSwgc2l6ZVR5cGVzKSA9PiB7XHJcblx0XHRpZiAobmV4dERhdGFTaXplKSB7XHJcblx0XHRcdHJ1bGUubWF4ID0gY2FsY3VsYXRlQ2xvc2VzdFdpZHRoVGhyZXNob2xkKG5leHREYXRhU2l6ZSwgZGF0YVNpemUsIHNpemVUeXBlcywgZmFsc2UpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHByZXZSdWxlPy5tYXgpIHtcclxuXHRcdFx0cnVsZS5taW4gPSBwcmV2UnVsZS5tYXggKyAxO1xyXG5cdFx0fVxyXG5cdH0sXHJcbn07XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhdGVDbG9zZXN0V2lkdGhUaHJlc2hvbGQoXHJcblx0bmV4dERhdGFTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRkYXRhU2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8sXHJcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxyXG5cdGlzU21hbGxlclByZWZlcnJlZDogYm9vbGVhbixcclxuKSB7XHJcblx0Y29uc3QgZm4gPSBpc1NtYWxsZXJQcmVmZXJyZWQgPyBNYXRoLmNlaWwgOiBNYXRoLmZsb29yO1xyXG5cdC8vIGdldCBjbG9zZXN0IGJldHdlZW4gY3VyciBhbmQgbmV4dFxyXG5cdGNvbnN0IGRpZmZJbmRleCA9IGZuKChuZXh0RGF0YVNpemUudHlwZSAtIGRhdGFTaXplLnR5cGUgLSAxKSAvIDIpO1xyXG5cdGNvbnN0IGRpZmZOZXh0U2l6ZSA9IHNpemVUeXBlc1tkYXRhU2l6ZS50eXBlICsgZGlmZkluZGV4XTtcclxuXHRyZXR1cm4gKGRpZmZOZXh0U2l6ZSB8fCBkYXRhU2l6ZSkud2lkdGhUaHJlc2hvbGQ7XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Directive, Input, } from "@angular/core";
|
|
2
|
+
import { combineLatest, ReplaySubject, Subject } from "rxjs";
|
|
3
|
+
import { tap, map, takeUntil } from "rxjs/operators";
|
|
4
|
+
import { isViewportSizeMatcherExpression, isViewportSizeMatcherTupleExpression, isViewportConditionMatch } from "./viewport.util";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./viewport.service";
|
|
7
|
+
const NAME_CAMEL = "ssvViewportMatcherVar";
|
|
8
|
+
export class SsvViewportMatcherVarContext {
|
|
9
|
+
constructor($implicit = false) {
|
|
10
|
+
this.$implicit = $implicit;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class SsvViewportMatcherVarDirective {
|
|
14
|
+
constructor(viewport, viewContainer, templateRef) {
|
|
15
|
+
this.viewport = viewport;
|
|
16
|
+
this.viewContainer = viewContainer;
|
|
17
|
+
this.templateRef = templateRef;
|
|
18
|
+
this._matchConditions = {};
|
|
19
|
+
this._context = new SsvViewportMatcherVarContext();
|
|
20
|
+
this._destroy$ = new Subject();
|
|
21
|
+
this._update$ = new ReplaySubject(1);
|
|
22
|
+
}
|
|
23
|
+
set condition(value) {
|
|
24
|
+
if (isViewportSizeMatcherExpression(value)) {
|
|
25
|
+
this._matchConditions.expression = value;
|
|
26
|
+
}
|
|
27
|
+
else if (isViewportSizeMatcherTupleExpression(value)) {
|
|
28
|
+
const [op, size] = value;
|
|
29
|
+
this._matchConditions.expression = {
|
|
30
|
+
operation: op,
|
|
31
|
+
size
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this._matchConditions.sizeType = value;
|
|
36
|
+
}
|
|
37
|
+
this._update$.next();
|
|
38
|
+
}
|
|
39
|
+
ngOnInit() {
|
|
40
|
+
this.updateView();
|
|
41
|
+
combineLatest([this.viewport.sizeType$, this._update$]).pipe(map(([sizeType]) => isViewportConditionMatch(sizeType, this._matchConditions, this.viewport.sizeTypeMap)), tap(x => this._context.$implicit = x), tap(() => this._viewRef.markForCheck()), takeUntil(this._destroy$)).subscribe();
|
|
42
|
+
}
|
|
43
|
+
ngOnDestroy() {
|
|
44
|
+
this._destroy$.next();
|
|
45
|
+
this._destroy$.complete();
|
|
46
|
+
}
|
|
47
|
+
updateView() {
|
|
48
|
+
this.viewContainer.clear();
|
|
49
|
+
this._viewRef = this.viewContainer.createEmbeddedView(this.templateRef, this._context);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
SsvViewportMatcherVarDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvViewportMatcherVarDirective, deps: [{ token: i1.ViewportService }, { token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
53
|
+
SsvViewportMatcherVarDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SsvViewportMatcherVarDirective, selector: "[ssvViewportMatcherVar]", inputs: { condition: ["ssvViewportMatcherVarWhen", "condition"] }, ngImport: i0 });
|
|
54
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvViewportMatcherVarDirective, decorators: [{
|
|
55
|
+
type: Directive,
|
|
56
|
+
args: [{
|
|
57
|
+
selector: `[${NAME_CAMEL}]`,
|
|
58
|
+
}]
|
|
59
|
+
}], ctorParameters: function () { return [{ type: i1.ViewportService }, { type: i0.ViewContainerRef }, { type: i0.TemplateRef }]; }, propDecorators: { condition: [{
|
|
60
|
+
type: Input,
|
|
61
|
+
args: [`${NAME_CAMEL}When`]
|
|
62
|
+
}] } });
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtbWF0Y2hlci12YXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0LW1hdGNoZXItdmFyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR04sU0FBUyxFQUNULEtBQUssR0FJTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHckQsT0FBTyxFQUNOLCtCQUErQixFQUMvQixvQ0FBb0MsRUFDcEMsd0JBQXdCLEVBQ3hCLE1BQU0saUJBQWlCLENBQUM7OztBQUd6QixNQUFNLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQztBQUUzQyxNQUFNLE9BQU8sNEJBQTRCO0lBRXhDLFlBQ1EsWUFBWSxLQUFLO1FBQWpCLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDckIsQ0FBQztDQUVMO0FBS0QsTUFBTSxPQUFPLDhCQUE4QjtJQXdCMUMsWUFDUyxRQUF5QixFQUN6QixhQUErQixFQUMvQixXQUFzRDtRQUZ0RCxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsZ0JBQVcsR0FBWCxXQUFXLENBQTJDO1FBekJ2RCxxQkFBZ0IsR0FBNEIsRUFBRSxDQUFDO1FBQy9DLGFBQVEsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsYUFBUSxHQUFHLElBQUksYUFBYSxDQUFPLENBQUMsQ0FBQyxDQUFDO0lBd0J2RCxDQUFDO0lBckJELElBQWdDLFNBQVMsQ0FBQyxLQUF3RDtRQUNqRyxJQUFJLCtCQUErQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxvQ0FBb0MsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2RCxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHO2dCQUNsQyxTQUFTLEVBQUUsRUFBRTtnQkFDYixJQUFJO2FBQ0osQ0FBQztTQUNGO2FBQU07WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQVNELFFBQVE7UUFDUCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzRCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDekcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ3pCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sVUFBVTtRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RixDQUFDOzsySEFqRFcsOEJBQThCOytHQUE5Qiw4QkFBOEI7MkZBQTlCLDhCQUE4QjtrQkFIMUMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsSUFBSSxVQUFVLEdBQUc7aUJBQzNCOytKQVNnQyxTQUFTO3NCQUF4QyxLQUFLO3VCQUFDLEdBQUcsVUFBVSxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRPbkluaXQsXHJcblx0T25EZXN0cm95LFxyXG5cdERpcmVjdGl2ZSxcclxuXHRJbnB1dCxcclxuXHRUZW1wbGF0ZVJlZixcclxuXHRWaWV3Q29udGFpbmVyUmVmLFxyXG5cdEVtYmVkZGVkVmlld1JlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG5cdGlzVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24sXHJcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uLFxyXG5cdGlzVmlld3BvcnRDb25kaXRpb25NYXRjaFxyXG59IGZyb20gXCIuL3ZpZXdwb3J0LnV0aWxcIjtcclxuaW1wb3J0IHsgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMsIFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcclxuXHJcbmNvbnN0IE5BTUVfQ0FNRUwgPSBcInNzdlZpZXdwb3J0TWF0Y2hlclZhclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNzdlZpZXdwb3J0TWF0Y2hlclZhckNvbnRleHQge1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyAkaW1wbGljaXQgPSBmYWxzZSxcclxuXHQpIHsgfVxyXG5cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcblx0c2VsZWN0b3I6IGBbJHtOQU1FX0NBTUVMfV1gLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3N2Vmlld3BvcnRNYXRjaGVyVmFyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRwcml2YXRlIF9tYXRjaENvbmRpdGlvbnM6IFZpZXdwb3J0TWF0Y2hDb25kaXRpb25zID0ge307XHJcblx0cHJpdmF0ZSBfY29udGV4dCA9IG5ldyBTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0KCk7XHJcblx0cHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgX3VwZGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcclxuXHRwcml2YXRlIF92aWV3UmVmITogRW1iZWRkZWRWaWV3UmVmPFNzdlZpZXdwb3J0TWF0Y2hlclZhckNvbnRleHQ+O1xyXG5cclxuXHRASW5wdXQoYCR7TkFNRV9DQU1FTH1XaGVuYCkgc2V0IGNvbmRpdGlvbih2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbikge1xyXG5cdFx0aWYgKGlzVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24odmFsdWUpKSB7XHJcblx0XHRcdHRoaXMuX21hdGNoQ29uZGl0aW9ucy5leHByZXNzaW9uID0gdmFsdWU7XHJcblx0XHR9IGVsc2UgaWYgKGlzVmlld3BvcnRTaXplTWF0Y2hlclR1cGxlRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuXHRcdFx0Y29uc3QgW29wLCBzaXplXSA9IHZhbHVlO1xyXG5cdFx0XHR0aGlzLl9tYXRjaENvbmRpdGlvbnMuZXhwcmVzc2lvbiA9IHtcclxuXHRcdFx0XHRvcGVyYXRpb246IG9wLFxyXG5cdFx0XHRcdHNpemVcclxuXHRcdFx0fTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuX21hdGNoQ29uZGl0aW9ucy5zaXplVHlwZSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuX3VwZGF0ZSQubmV4dCgpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHZpZXdwb3J0OiBWaWV3cG9ydFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcblx0XHRwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0PixcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy51cGRhdGVWaWV3KCk7XHJcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLnZpZXdwb3J0LnNpemVUeXBlJCwgdGhpcy5fdXBkYXRlJF0pLnBpcGUoXHJcblx0XHRcdG1hcCgoW3NpemVUeXBlXSkgPT4gaXNWaWV3cG9ydENvbmRpdGlvbk1hdGNoKHNpemVUeXBlLCB0aGlzLl9tYXRjaENvbmRpdGlvbnMsIHRoaXMudmlld3BvcnQuc2l6ZVR5cGVNYXApKSxcclxuXHRcdFx0dGFwKHggPT4gdGhpcy5fY29udGV4dC4kaW1wbGljaXQgPSB4KSxcclxuXHRcdFx0dGFwKCgpID0+IHRoaXMuX3ZpZXdSZWYubWFya0ZvckNoZWNrKCkpLFxyXG5cdFx0XHR0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxyXG5cdFx0KS5zdWJzY3JpYmUoKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG5cdFx0dGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlVmlldygpOiB2b2lkIHtcclxuXHRcdHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xyXG5cdFx0dGhpcy5fdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZiwgdGhpcy5fY29udGV4dCk7XHJcblx0fVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Directive, Input, } from "@angular/core";
|
|
2
|
+
import { Subscription, Subject } from "rxjs";
|
|
3
|
+
import { tap, filter, pairwise, startWith } from "rxjs/operators";
|
|
4
|
+
import { isViewportSizeMatcherExpression, isViewportSizeMatcherTupleExpression, isViewportConditionMatch } from "./viewport.util";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "./viewport.service";
|
|
7
|
+
export class SsvViewportMatcherContext {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.sizeType = null;
|
|
10
|
+
this.sizeTypeExclude = null;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class SsvViewportMatcherDirective {
|
|
14
|
+
constructor(viewport, renderer, viewContainer, cdr, templateRef) {
|
|
15
|
+
this.viewport = viewport;
|
|
16
|
+
this.renderer = renderer;
|
|
17
|
+
this.viewContainer = viewContainer;
|
|
18
|
+
this.cdr = cdr;
|
|
19
|
+
this._context = new SsvViewportMatcherContext();
|
|
20
|
+
this._thenTemplateRef = null;
|
|
21
|
+
this._elseTemplateRef = null;
|
|
22
|
+
this._thenViewRef = null;
|
|
23
|
+
this._elseViewRef = null;
|
|
24
|
+
this.sizeType$$ = Subscription.EMPTY;
|
|
25
|
+
this.cssClass$$ = Subscription.EMPTY;
|
|
26
|
+
this._update$ = new Subject();
|
|
27
|
+
this._thenTemplateRef = templateRef;
|
|
28
|
+
}
|
|
29
|
+
set ssvViewportMatcher(value) {
|
|
30
|
+
if (isViewportSizeMatcherExpression(value)) {
|
|
31
|
+
this._context.expression = value;
|
|
32
|
+
}
|
|
33
|
+
else if (isViewportSizeMatcherTupleExpression(value)) {
|
|
34
|
+
const [op, size] = value;
|
|
35
|
+
this._context.expression = {
|
|
36
|
+
operation: op,
|
|
37
|
+
size
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this._context.sizeType = value;
|
|
42
|
+
}
|
|
43
|
+
if (this.sizeInfo) {
|
|
44
|
+
this._update$.next(this._context);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
set ssvViewportMatcherExclude(value) {
|
|
48
|
+
this._context.sizeTypeExclude = value;
|
|
49
|
+
if (this.sizeInfo) {
|
|
50
|
+
this._update$.next(this._context);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
set ssvViewportMatcherElse(templateRef) {
|
|
54
|
+
this._elseTemplateRef = templateRef;
|
|
55
|
+
this._elseViewRef = null; // clear previous view if any.
|
|
56
|
+
if (this.sizeInfo) {
|
|
57
|
+
this._update$.next(this._context);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
ngOnInit() {
|
|
61
|
+
// console.log("ssvViewportMatcher init");
|
|
62
|
+
this._update$
|
|
63
|
+
.pipe(
|
|
64
|
+
// tap(x => console.log(">>> ssvViewportMatcher - update triggered", x)),
|
|
65
|
+
filter(() => !!this.sizeInfo),
|
|
66
|
+
// tap(x => console.log(">>> ssvViewportMatcher - updating...", x)),
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
68
|
+
tap(() => this._updateView(this.sizeInfo)), tap(() => this.cdr.markForCheck()))
|
|
69
|
+
.subscribe();
|
|
70
|
+
this.sizeType$$ = this.viewport.sizeType$
|
|
71
|
+
.pipe(
|
|
72
|
+
// tap(x => console.log("ssvViewportMatcher - sizeType changed", x)),
|
|
73
|
+
tap(x => this.sizeInfo = x), tap(() => this._update$.next(this._context)))
|
|
74
|
+
.subscribe();
|
|
75
|
+
this.cssClass$$ = this.viewport.sizeType$
|
|
76
|
+
.pipe(startWith(undefined), filter(() => !!(this._thenViewRef || this._elseViewRef)), pairwise(), tap(([prev, curr]) => {
|
|
77
|
+
const el = this._thenViewRef
|
|
78
|
+
? this._thenViewRef.rootNodes[0]
|
|
79
|
+
: this._elseViewRef?.rootNodes[0];
|
|
80
|
+
if (!el.classList) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (prev) {
|
|
84
|
+
this.renderer.removeClass(el, `ssv-vp-size--${prev.name}`);
|
|
85
|
+
}
|
|
86
|
+
this.renderer.addClass(el, `ssv-vp-size--${curr?.name}`);
|
|
87
|
+
}))
|
|
88
|
+
.subscribe();
|
|
89
|
+
}
|
|
90
|
+
ngOnDestroy() {
|
|
91
|
+
this.cssClass$$.unsubscribe();
|
|
92
|
+
this.sizeType$$.unsubscribe();
|
|
93
|
+
this._update$.complete();
|
|
94
|
+
}
|
|
95
|
+
_updateView(sizeInfo) {
|
|
96
|
+
if (isViewportConditionMatch(sizeInfo, this._context, this.viewport.sizeTypeMap)) {
|
|
97
|
+
if (!this._thenViewRef) {
|
|
98
|
+
this.viewContainer.clear();
|
|
99
|
+
this._elseViewRef = null;
|
|
100
|
+
if (this._thenTemplateRef) {
|
|
101
|
+
this._thenViewRef = this.viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
if (!this._elseViewRef) {
|
|
107
|
+
this.viewContainer.clear();
|
|
108
|
+
this._thenViewRef = null;
|
|
109
|
+
if (this._elseTemplateRef) {
|
|
110
|
+
this._elseViewRef = this.viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
SsvViewportMatcherDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvViewportMatcherDirective, deps: [{ token: i1.ViewportService }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
117
|
+
SsvViewportMatcherDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SsvViewportMatcherDirective, selector: "[ssvViewportMatcher]", inputs: { ssvViewportMatcher: "ssvViewportMatcher", ssvViewportMatcherExclude: "ssvViewportMatcherExclude", ssvViewportMatcherElse: "ssvViewportMatcherElse" }, exportAs: ["ssvViewportMatcher"], ngImport: i0 });
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvViewportMatcherDirective, decorators: [{
|
|
119
|
+
type: Directive,
|
|
120
|
+
args: [{
|
|
121
|
+
selector: "[ssvViewportMatcher]",
|
|
122
|
+
exportAs: "ssvViewportMatcher",
|
|
123
|
+
}]
|
|
124
|
+
}], ctorParameters: function () { return [{ type: i1.ViewportService }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: i0.TemplateRef }]; }, propDecorators: { ssvViewportMatcher: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], ssvViewportMatcherExclude: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], ssvViewportMatcherElse: [{
|
|
129
|
+
type: Input
|
|
130
|
+
}] } });
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtbWF0Y2hlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmlld3BvcnQvdmlld3BvcnQtbWF0Y2hlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdOLFNBQVMsRUFHVCxLQUFLLEdBSUwsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xFLE9BQU8sRUFDTiwrQkFBK0IsRUFDL0Isb0NBQW9DLEVBQ3BDLHdCQUF3QixFQUN4QixNQUFNLGlCQUFpQixDQUFDOzs7QUFHekIsTUFBTSxPQUFPLHlCQUF5QjtJQUF0QztRQUVDLGFBQVEsR0FBNkIsSUFBSSxDQUFDO1FBQzFDLG9CQUFlLEdBQTZCLElBQUksQ0FBQztJQUdsRCxDQUFDO0NBQUE7QUFNRCxNQUFNLE9BQU8sMkJBQTJCO0lBK0N2QyxZQUNTLFFBQXlCLEVBQ3pCLFFBQW1CLEVBQ25CLGFBQStCLEVBQy9CLEdBQXNCLEVBQzlCLFdBQW1EO1FBSjNDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0N2QixhQUFRLEdBQThCLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUN0RSxxQkFBZ0IsR0FBa0QsSUFBSSxDQUFDO1FBQ3ZFLHFCQUFnQixHQUFrRCxJQUFJLENBQUM7UUFDdkUsaUJBQVksR0FBc0QsSUFBSSxDQUFDO1FBQ3ZFLGlCQUFZLEdBQXNELElBQUksQ0FBQztRQUN2RSxlQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNoQyxlQUFV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RCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztpQkFDRjthQUNEO1NBQ0Q7YUFBTTtZQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFFekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDeEQsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsUUFBUSxDQUNiLENBQUM7aUJBQ0Y7YUFDRDtTQUNEO0lBQ0YsQ0FBQzs7d0hBcklXLDJCQUEyQjs0R0FBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjtpQkFDOUI7dU5BY2Esa0JBQWtCO3NCQUE5QixLQUFLO2dCQWtCTyx5QkFBeUI7c0JBQXJDLEtBQUs7Z0JBUU8sc0JBQXNCO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRPbkluaXQsXHJcblx0T25EZXN0cm95LFxyXG5cdERpcmVjdGl2ZSxcclxuXHRSZW5kZXJlcjIsXHJcblx0Vmlld0NvbnRhaW5lclJlZixcclxuXHRJbnB1dCxcclxuXHRFbWJlZGRlZFZpZXdSZWYsXHJcblx0VGVtcGxhdGVSZWYsXHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwLCBmaWx0ZXIsIHBhaXJ3aXNlLCBzdGFydFdpdGggfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gXCIuL3ZpZXdwb3J0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuXHRpc1ZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uLFxyXG5cdGlzVmlld3BvcnRTaXplTWF0Y2hlclR1cGxlRXhwcmVzc2lvbixcclxuXHRpc1ZpZXdwb3J0Q29uZGl0aW9uTWF0Y2hcclxufSBmcm9tIFwiLi92aWV3cG9ydC51dGlsXCI7XHJcbmltcG9ydCB7IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLCBWaWV3cG9ydE1hdGNoQ29uZGl0aW9ucywgVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24gfSBmcm9tIFwiLi92aWV3cG9ydC5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQgaW1wbGVtZW50cyBWaWV3cG9ydE1hdGNoQ29uZGl0aW9ucyB7XHJcblxyXG5cdHNpemVUeXBlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xyXG5cdHNpemVUeXBlRXhjbHVkZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsID0gbnVsbDtcclxuXHRleHByZXNzaW9uPzogVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb247XHJcblxyXG59XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuXHRzZWxlY3RvcjogXCJbc3N2Vmlld3BvcnRNYXRjaGVyXVwiLFxyXG5cdGV4cG9ydEFzOiBcInNzdlZpZXdwb3J0TWF0Y2hlclwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3N2Vmlld3BvcnRNYXRjaGVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRzaXplSW5mbzogVmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQ7XHJcblxyXG5cdHByaXZhdGUgX2NvbnRleHQ6IFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQgPSBuZXcgU3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dCgpO1xyXG5cdHByaXZhdGUgX3RoZW5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsID0gbnVsbDtcclxuXHRwcml2YXRlIF9lbHNlVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQ+IHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBfdGhlblZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PiB8IG51bGwgPSBudWxsO1xyXG5cdHByaXZhdGUgX2Vsc2VWaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsID0gbnVsbDtcclxuXHRwcml2YXRlIHNpemVUeXBlJCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XHJcblx0cHJpdmF0ZSBjc3NDbGFzcyQkID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgX3VwZGF0ZSQgPSBuZXcgU3ViamVjdDxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PigpO1xyXG5cclxuXHRASW5wdXQoKSBzZXQgc3N2Vmlld3BvcnRNYXRjaGVyKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uKSB7XHJcblx0XHRpZiAoaXNWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuXHRcdFx0dGhpcy5fY29udGV4dC5leHByZXNzaW9uID0gdmFsdWU7XHJcblx0XHR9IGVsc2UgaWYgKGlzVmlld3BvcnRTaXplTWF0Y2hlclR1cGxlRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuXHRcdFx0Y29uc3QgW29wLCBzaXplXSA9IHZhbHVlO1xyXG5cdFx0XHR0aGlzLl9jb250ZXh0LmV4cHJlc3Npb24gPSB7XHJcblx0XHRcdFx0b3BlcmF0aW9uOiBvcCxcclxuXHRcdFx0XHRzaXplXHJcblx0XHRcdH07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLl9jb250ZXh0LnNpemVUeXBlID0gdmFsdWU7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuc2l6ZUluZm8pIHtcclxuXHRcdFx0dGhpcy5fdXBkYXRlJC5uZXh0KHRoaXMuX2NvbnRleHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0QElucHV0KCkgc2V0IHNzdlZpZXdwb3J0TWF0Y2hlckV4Y2x1ZGUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcblx0XHR0aGlzLl9jb250ZXh0LnNpemVUeXBlRXhjbHVkZSA9IHZhbHVlO1xyXG5cclxuXHRcdGlmICh0aGlzLnNpemVJbmZvKSB7XHJcblx0XHRcdHRoaXMuX3VwZGF0ZSQubmV4dCh0aGlzLl9jb250ZXh0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdEBJbnB1dCgpIHNldCBzc3ZWaWV3cG9ydE1hdGNoZXJFbHNlKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PiB8IG51bGwpIHtcclxuXHRcdHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xyXG5cdFx0dGhpcy5fZWxzZVZpZXdSZWYgPSBudWxsOyAvLyBjbGVhciBwcmV2aW91cyB2aWV3IGlmIGFueS5cclxuXHRcdGlmICh0aGlzLnNpemVJbmZvKSB7XHJcblx0XHRcdHRoaXMuX3VwZGF0ZSQubmV4dCh0aGlzLl9jb250ZXh0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSB2aWV3cG9ydDogVmlld3BvcnRTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG5cdFx0cHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG5cdFx0cHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0dGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQ+LFxyXG5cdCkge1xyXG5cdFx0dGhpcy5fdGhlblRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKFwic3N2Vmlld3BvcnRNYXRjaGVyIGluaXRcIik7XHJcblxyXG5cdFx0dGhpcy5fdXBkYXRlJFxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHQvLyB0YXAoeCA9PiBjb25zb2xlLmxvZyhcIj4+PiBzc3ZWaWV3cG9ydE1hdGNoZXIgLSB1cGRhdGUgdHJpZ2dlcmVkXCIsIHgpKSxcclxuXHRcdFx0XHRmaWx0ZXIoKCkgPT4gISF0aGlzLnNpemVJbmZvKSxcclxuXHRcdFx0XHQvLyB0YXAoeCA9PiBjb25zb2xlLmxvZyhcIj4+PiBzc3ZWaWV3cG9ydE1hdGNoZXIgLSB1cGRhdGluZy4uLlwiLCB4KSksXHJcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuXHRcdFx0XHR0YXAoKCkgPT4gdGhpcy5fdXBkYXRlVmlldyh0aGlzLnNpemVJbmZvISkpLFxyXG5cdFx0XHRcdHRhcCgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSlcclxuXHRcdFx0KVxyXG5cdFx0XHQuc3Vic2NyaWJlKCk7XHJcblxyXG5cdFx0dGhpcy5zaXplVHlwZSQkID0gdGhpcy52aWV3cG9ydC5zaXplVHlwZSRcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0Ly8gdGFwKHggPT4gY29uc29sZS5sb2coXCJzc3ZWaWV3cG9ydE1hdGNoZXIgLSBzaXplVHlwZSBjaGFuZ2VkXCIsIHgpKSxcclxuXHRcdFx0XHR0YXAoeCA9PiB0aGlzLnNpemVJbmZvID0geCksXHJcblx0XHRcdFx0dGFwKCgpID0+IHRoaXMuX3VwZGF0ZSQubmV4dCh0aGlzLl9jb250ZXh0KSksXHJcblx0XHRcdClcclxuXHRcdFx0LnN1YnNjcmliZSgpO1xyXG5cclxuXHRcdHRoaXMuY3NzQ2xhc3MkJCA9IHRoaXMudmlld3BvcnQuc2l6ZVR5cGUkXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdHN0YXJ0V2l0aDxWaWV3cG9ydFNpemVUeXBlSW5mbyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKSxcclxuXHRcdFx0XHRmaWx0ZXIoKCkgPT4gISEodGhpcy5fdGhlblZpZXdSZWYgfHwgdGhpcy5fZWxzZVZpZXdSZWYpKSxcclxuXHRcdFx0XHRwYWlyd2lzZSgpLFxyXG5cdFx0XHRcdHRhcCgoW3ByZXYsIGN1cnJdKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBlbDogRWxlbWVudCA9IHRoaXMuX3RoZW5WaWV3UmVmXHJcblx0XHRcdFx0XHRcdD8gdGhpcy5fdGhlblZpZXdSZWYucm9vdE5vZGVzWzBdXHJcblx0XHRcdFx0XHRcdDogdGhpcy5fZWxzZVZpZXdSZWY/LnJvb3ROb2Rlc1swXTtcclxuXHJcblx0XHRcdFx0XHRpZiAoIWVsLmNsYXNzTGlzdCkge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAocHJldikge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsLCBgc3N2LXZwLXNpemUtLSR7cHJldi5uYW1lfWApO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgYHNzdi12cC1zaXplLS0ke2N1cnI/Lm5hbWV9YCk7XHJcblx0XHRcdFx0fSksXHJcblx0XHRcdClcclxuXHRcdFx0LnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLmNzc0NsYXNzJCQudW5zdWJzY3JpYmUoKTtcclxuXHRcdHRoaXMuc2l6ZVR5cGUkJC51bnN1YnNjcmliZSgpO1xyXG5cdFx0dGhpcy5fdXBkYXRlJC5jb21wbGV0ZSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBfdXBkYXRlVmlldyhzaXplSW5mbzogVmlld3BvcnRTaXplVHlwZUluZm8pIHtcclxuXHRcdGlmIChpc1ZpZXdwb3J0Q29uZGl0aW9uTWF0Y2goc2l6ZUluZm8sIHRoaXMuX2NvbnRleHQsIHRoaXMudmlld3BvcnQuc2l6ZVR5cGVNYXApKSB7XHJcblx0XHRcdGlmICghdGhpcy5fdGhlblZpZXdSZWYpIHtcclxuXHRcdFx0XHR0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuXHRcdFx0XHR0aGlzLl9lbHNlVmlld1JlZiA9IG51bGw7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLl90aGVuVGVtcGxhdGVSZWYpIHtcclxuXHRcdFx0XHRcdHRoaXMuX3RoZW5WaWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcclxuXHRcdFx0XHRcdFx0dGhpcy5fdGhlblRlbXBsYXRlUmVmLFxyXG5cdFx0XHRcdFx0XHR0aGlzLl9jb250ZXh0LFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICghdGhpcy5fZWxzZVZpZXdSZWYpIHtcclxuXHRcdFx0XHR0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcclxuXHRcdFx0XHR0aGlzLl90aGVuVmlld1JlZiA9IG51bGw7XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLl9lbHNlVGVtcGxhdGVSZWYpIHtcclxuXHRcdFx0XHRcdHRoaXMuX2Vsc2VWaWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcclxuXHRcdFx0XHRcdFx0dGhpcy5fZWxzZVRlbXBsYXRlUmVmLFxyXG5cdFx0XHRcdFx0XHR0aGlzLl9jb250ZXh0LFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcbiJdfQ==
|