@ssv/ngx.ux 2.0.2-dev.7 → 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.
Files changed (75) hide show
  1. package/CHANGELOG.md +149 -0
  2. package/LICENSE +21 -21
  3. package/README.md +297 -297
  4. package/bundles/ssv-ngx.ux.umd.js +1219 -0
  5. package/bundles/ssv-ngx.ux.umd.js.map +1 -0
  6. package/bundles/ssv-ngx.ux.umd.min.js +16 -0
  7. package/bundles/ssv-ngx.ux.umd.min.js.map +1 -0
  8. package/config.d.ts +7 -7
  9. package/esm2015/config.js +7 -0
  10. package/esm2015/index.js +5 -0
  11. package/esm2015/internal/internal.model.js +2 -0
  12. package/esm2015/module.js +50 -0
  13. package/esm2015/platform/window.js +28 -0
  14. package/esm2015/ssv-ngx.ux.js +7 -0
  15. package/esm2015/version.js +2 -0
  16. package/esm2015/viewport/index.js +9 -0
  17. package/esm2015/viewport/viewport-data/index.js +4 -0
  18. package/esm2015/viewport/viewport-data/viewport-data-matcher.js +108 -0
  19. package/esm2015/viewport/viewport-data/viewport-data.pipe.js +43 -0
  20. package/esm2015/viewport/viewport-data/viewport-data.service.js +38 -0
  21. package/esm2015/viewport/viewport-data/viewport-data.utils.js +100 -0
  22. package/esm2015/viewport/viewport-matcher-var.directive.js +64 -0
  23. package/esm2015/viewport/viewport-matcher.directive.js +134 -0
  24. package/esm2015/viewport/viewport-server-size.service.js +38 -0
  25. package/esm2015/viewport/viewport.const.js +18 -0
  26. package/esm2015/viewport/viewport.model.js +31 -0
  27. package/esm2015/viewport/viewport.service.js +69 -0
  28. package/esm2015/viewport/viewport.util.js +117 -0
  29. package/esm2020/config.mjs +7 -7
  30. package/esm2020/index.mjs +5 -5
  31. package/esm2020/internal/internal.model.mjs +2 -2
  32. package/esm2020/module.mjs +65 -65
  33. package/esm2020/platform/window.mjs +30 -30
  34. package/esm2020/ssv-ngx.ux.mjs +4 -4
  35. package/esm2020/version.mjs +2 -2
  36. package/esm2020/viewport/index.mjs +9 -9
  37. package/esm2020/viewport/viewport-data/index.mjs +4 -4
  38. package/esm2020/viewport/viewport-data/viewport-data-matcher.mjs +108 -108
  39. package/esm2020/viewport/viewport-data/viewport-data.pipe.mjs +43 -43
  40. package/esm2020/viewport/viewport-data/viewport-data.service.mjs +37 -37
  41. package/esm2020/viewport/viewport-data/viewport-data.utils.mjs +100 -100
  42. package/esm2020/viewport/viewport-matcher-var.directive.mjs +63 -63
  43. package/esm2020/viewport/viewport-matcher.directive.mjs +131 -131
  44. package/esm2020/viewport/viewport-server-size.service.mjs +43 -43
  45. package/esm2020/viewport/viewport.const.mjs +18 -18
  46. package/esm2020/viewport/viewport.model.mjs +31 -31
  47. package/esm2020/viewport/viewport.service.mjs +67 -66
  48. package/esm2020/viewport/viewport.util.mjs +117 -117
  49. package/fesm2015/ssv-ngx.ux.js +807 -0
  50. package/fesm2015/ssv-ngx.ux.js.map +1 -0
  51. package/fesm2015/ssv-ngx.ux.mjs +790 -789
  52. package/fesm2015/ssv-ngx.ux.mjs.map +1 -1
  53. package/fesm2020/ssv-ngx.ux.mjs +784 -783
  54. package/fesm2020/ssv-ngx.ux.mjs.map +1 -1
  55. package/index.d.ts +4 -4
  56. package/internal/internal.model.d.ts +9 -9
  57. package/module.d.ts +19 -19
  58. package/package.json +1 -1
  59. package/platform/window.d.ts +13 -13
  60. package/ssv-ngx.ux.d.ts +6 -0
  61. package/ssv-ngx.ux.metadata.json +1 -0
  62. package/version.d.ts +1 -1
  63. package/viewport/index.d.ts +8 -8
  64. package/viewport/viewport-data/index.d.ts +3 -3
  65. package/viewport/viewport-data/viewport-data-matcher.d.ts +32 -32
  66. package/viewport/viewport-data/viewport-data.pipe.d.ts +18 -18
  67. package/viewport/viewport-data/viewport-data.service.d.ts +20 -20
  68. package/viewport/viewport-data/viewport-data.utils.d.ts +21 -21
  69. package/viewport/viewport-matcher-var.directive.d.ts +25 -25
  70. package/viewport/viewport-matcher.directive.d.ts +33 -33
  71. package/viewport/viewport-server-size.service.d.ts +12 -12
  72. package/viewport/viewport.const.d.ts +5 -5
  73. package/viewport/viewport.model.d.ts +57 -57
  74. package/viewport/viewport.service.d.ts +37 -37
  75. package/viewport/viewport.util.d.ts +25 -25
@@ -0,0 +1,2 @@
1
+ export const VERSION = "0.0.0-PLACEHOLDER";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiJDOi9kZXYvZ2l0L0Bzc3Yubmd4LnV4L3NyYy8iLCJzb3VyY2VzIjpbInZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIjAuMC4wLVBMQUNFSE9MREVSXCI7XHJcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ export * from "./viewport-data/index";
2
+ export { SsvViewportMatcherVarDirective, SsvViewportMatcherVarContext } from "./viewport-matcher-var.directive";
3
+ export { SsvViewportMatcherDirective, SsvViewportMatcherContext } from "./viewport-matcher.directive";
4
+ export { UX_VIEWPORT_SSR_DEVICE, ViewportServerSizeService } from "./viewport-server-size.service";
5
+ export { ComparisonOperation, DeviceType, ViewportSizeType } from "./viewport.model";
6
+ export { ViewportService } from "./viewport.service";
7
+ export { generateViewportSizeType } from "./viewport.util";
8
+ export { UX_VIEWPORT_DEFAULT_BREAKPOINTS } from "./viewport.const";
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiQzovZGV2L2dpdC9Ac3N2Lm5neC51eC9zcmMvIiwic291cmNlcyI6WyJ2aWV3cG9ydC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQW1DLGdCQUFnQixFQUF3QixNQUFNLGtCQUFrQixDQUFDO0FBQzVJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEvaW5kZXhcIjtcclxuXHJcbmV4cG9ydCB7IFNzdlZpZXdwb3J0TWF0Y2hlclZhckRpcmVjdGl2ZSwgU3N2Vmlld3BvcnRNYXRjaGVyVmFyQ29udGV4dCB9IGZyb20gXCIuL3ZpZXdwb3J0LW1hdGNoZXItdmFyLmRpcmVjdGl2ZVwiO1xyXG5leHBvcnQgeyBTc3ZWaWV3cG9ydE1hdGNoZXJEaXJlY3RpdmUsIFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQgfSBmcm9tIFwiLi92aWV3cG9ydC1tYXRjaGVyLmRpcmVjdGl2ZVwiO1xyXG5leHBvcnQgeyBVWF9WSUVXUE9SVF9TU1JfREVWSUNFLCBWaWV3cG9ydFNlcnZlclNpemVTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQtc2VydmVyLXNpemUuc2VydmljZVwiO1xyXG5leHBvcnQgeyBDb21wYXJpc29uT3BlcmF0aW9uLCBEZXZpY2VUeXBlLCBVeFZpZXdwb3J0T3B0aW9ucywgVmlld3BvcnRTaXplLCBWaWV3cG9ydFNpemVUeXBlLCBWaWV3cG9ydFNpemVUeXBlSW5mbyB9IGZyb20gXCIuL3ZpZXdwb3J0Lm1vZGVsXCI7XHJcbmV4cG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gXCIuL3ZpZXdwb3J0LnNlcnZpY2VcIjtcclxuZXhwb3J0IHsgZ2VuZXJhdGVWaWV3cG9ydFNpemVUeXBlIH0gZnJvbSBcIi4vdmlld3BvcnQudXRpbFwiO1xyXG5leHBvcnQgeyBVWF9WSUVXUE9SVF9ERUZBVUxUX0JSRUFLUE9JTlRTIH0gZnJvbSBcIi4vdmlld3BvcnQuY29uc3RcIjtcclxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiQzovZGV2L2dpdC9Ac3N2Lm5neC51eC9zcmMvIiwic291cmNlcyI6WyJ2aWV3cG9ydC92aWV3cG9ydC1kYXRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBc0IseUJBQXlCLEVBQW9DLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBWaWV3cG9ydERhdGFTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS5zZXJ2aWNlXCI7XHJcbmV4cG9ydCB7IFZpZXdwb3J0RGF0YVBpcGUgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhLnBpcGVcIjtcclxuZXhwb3J0IHsgVmlld3BvcnREYXRhQ29uZmlnLCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5TGl0ZXJhbCB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEtbWF0Y2hlclwiO1xyXG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS1tYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IkM6L2Rldi9naXQvQHNzdi5uZ3gudXgvc3JjLyIsInNvdXJjZXMiOlsidmlld3BvcnQvdmlld3BvcnQtZGF0YS92aWV3cG9ydC1kYXRhLW1hdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxDQUFOLElBQVkseUJBZVg7QUFmRCxXQUFZLHlCQUF5QjtJQUNwQyx5REFBeUQ7SUFDekQsMkVBQUssQ0FBQTtJQUVMLDJGQUEyRjtJQUMzRiwrRUFBTyxDQUFBO0lBRVAsd0ZBQXdGO0lBQ3hGLDZFQUFNLENBQUE7SUFFTixtSUFBbUk7SUFDbkksdUdBQW1CLENBQUE7SUFFbkIsa0lBQWtJO0lBQ2xJLHFHQUFrQixDQUFBO0FBQ25CLENBQUMsRUFmVyx5QkFBeUIsS0FBekIseUJBQXlCLFFBZXBDO0FBWUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUNoQyxVQUFpQyxFQUNqQyxRQUE4QixFQUM5QixRQUFtQyxFQUNuQyxTQUFpQyxFQUNqQyxXQUE2QztJQUU3QyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ2IsTUFBTSxLQUFLLENBQUMseUVBQXlFLFFBQVEsR0FBRyxDQUFDLENBQUM7S0FDbEc7SUFDRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFNLENBQUM7SUFDeEUsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFDRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDM0IsQ0FBQztBQUdELE1BQU0sdUJBQXVCLEdBQW9DO0lBQ2hFLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEVBQUUsY0FBYztJQUNqRCxDQUFDLHlCQUF5QixDQUFDLE1B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TyxJQUFJLENBQUM7S0FDWjtJQUVELElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFDckMsSUFBSSxPQUFPLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztJQUVuQyw0REFBNEQ7SUFDNUQsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDdEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3ZGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLFFBQVEsRUFBRTtnQkFDYixJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO29CQUN2QixPQUFPLElBQUksQ0FBQztpQkFDWjthQUNEO1NBQ0Q7S0FDRDtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uLy4uL2ludGVybmFsL2ludGVybmFsLm1vZGVsXCI7XHJcbmltcG9ydCB7IFZpZXdwb3J0U2l6ZVR5cGVJbmZvIH0gZnJvbSBcIi4uL3ZpZXdwb3J0Lm1vZGVsXCI7XHJcblxyXG5leHBvcnQgdHlwZSBWaWV3cG9ydERhdGFDb25maWc8VFZhbHVlID0gdW5rbm93biwgVERhdGEgPSBEaWN0aW9uYXJ5PFRWYWx1ZT4+ID0gVERhdGEgJiB7XHJcblx0ZGVmYXVsdD86IFRWYWx1ZVxyXG59O1xyXG5cclxuZXhwb3J0IGVudW0gVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSB7XHJcblx0LyoqIEluZGljYXRlcyB0aGF0IHNpemUgc2hvdWxkIG1hdGNoIGV4YWN0IG9yIGRlZmF1bHQuICovXHJcblx0ZXhhY3QsXHJcblxyXG5cdC8qKiBJbmRpY2F0ZXMgdGhhdCBzaXplIG1hdGNoZXMgd2hlbiBleGFjdCBtYXRjaCwgZmlyc3QgbWF0Y2ggc21hbGxlciAoZG93bikgb3IgZGVmYXVsdC4gKi9cclxuXHRzbWFsbGVyLFxyXG5cclxuXHQvKiogSW5kaWNhdGVzIHRoYXQgc2l6ZSBtYXRjaGVzIHdoZW4gZXhhY3QgbWF0Y2gsIGZpcnN0IG1hdGNoIGxhcmdlciAodXApIG9yIGRlZmF1bHQuICovXHJcblx0bGFyZ2VyLFxyXG5cclxuXHQvKiogSW5kaWNhdGVzIHRoYXQgc2l6ZSBtYXRjaGVzIHdoZW4gZXhhY3QgbWF0Y2gsIG9yIGl0IHRyaWVzIGJvdGggc21hbGxlci9sYXJnZXIgKHNtYWxsZXIgaXMgcHJlZmVycmVkKSB1bnRpbCBtYXRjaCBvciBkZWZhdWx0LiAqL1xyXG5cdGNsb3Nlc3RTbWFsbGVyRmlyc3QsXHJcblxyXG5cdC8qKiBJbmRpY2F0ZXMgdGhhdCBzaXplIG1hdGNoZXMgd2hlbiBleGFjdCBtYXRjaCwgb3IgaXQgdHJpZXMgYm90aCBsYXJnZXIvc21hbGxlciAobGFyZ2VyIGlzIHByZWZlcnJlZCkgdW50aWwgbWF0Y2ggb3IgZGVmYXVsdC4gKi9cclxuXHRjbG9zZXN0TGFyZ2VyRmlyc3QsXHJcbn1cclxuZXhwb3J0IHR5cGUgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneUxpdGVyYWwgPSBrZXlvZiB0eXBlb2YgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnREYXRhTWF0Y2hlcjxUID0gdW5rbm93bj4ge1xyXG5cdChcclxuXHRcdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcclxuXHRcdGN1cnJlbnRTaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8sXHJcblx0XHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcblx0XHRzaXplVHlwZU1hcDogRGljdGlvbmFyeTxWaWV3cG9ydFNpemVUeXBlSW5mbz4sXHJcblx0KTogVCB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gbWF0Y2ggZGF0YSBiYXNlZCBvbiBzdHJhdGVneSBhbmQgc2l6ZS5cclxuICpcclxuICogQHBhcmFtIGRhdGFDb25maWcgRGF0YSBjb25maWcgdG8gZ2VuZXJhdGUgcnVsZXMgYmFzZWQgb24uXHJcbiAqIEBwYXJhbSBzaXplVHlwZSBTaXplIHR5cGUgdG8gZ2V0IGRhdGEgZm9yLlxyXG4gKiBAcGFyYW0gc3RyYXRlZ3kgU3RyYXRlZ3kgdG8gdXNlIHdoZW4gYnVpbGRpbmcgcnVsZXMuXHJcbiAqIEBwYXJhbSBzaXplVHlwZXMgQXZhaWxhYmxlIHNpemUgdHlwZXMgb3JkZXJlZCBieSBpbmRleCB0eXBlLiAoQ2FuIGJlIG9idGFpbmVkIGZyb20gYFZpZXdwb3J0U2VydmljZWApXHJcbiAqIEBwYXJhbSBzaXplVHlwZU1hcCBBdmFpbGFibGUgc2l6ZSB0eXBlIG1hcC4gKENhbiBiZSBvYnRhaW5lZCBmcm9tIGBWaWV3cG9ydFNlcnZpY2VgKVxyXG4gKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBtYXRjaGVkIGRhdGEgdmFsdWUuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hWaWV3cG9ydERhdGE8VD4oXHJcblx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxyXG5cdHNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRzdHJhdGVneTogVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSxcclxuXHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcblx0c2l6ZVR5cGVNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+LFxyXG4pOiBUIHwgdW5kZWZpbmVkIHtcclxuXHRjb25zdCBtYXRjaEZuID0gbWF0Y2hTdHJhdGVneUhhbmRsZXJNYXBbc3RyYXRlZ3ldO1xyXG5cdGlmICghbWF0Y2hGbikge1xyXG5cdFx0dGhyb3cgRXJyb3IoYG1hdGNoVmlld3BvcnREYXRhOiBWaWV3cG9ydCBEYXRhIHN0cmF0ZWd5IG5vdCBpbXBsZW1lbnRlZC4gU3RyYXRlZ3k6ICcke3N0cmF0ZWd5fSdgKTtcclxuXHR9XHJcblx0Y29uc3QgZGF0YSA9IG1hdGNoRm4oZGF0YUNvbmZpZywgc2l6ZVR5cGUsIHNpemVUeXBlcywgc2l6ZVR5cGVNYXApIGFzIFQ7XHJcblx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0cmV0dXJuIGRhdGE7XHJcblx0fVxyXG5cdHJldHVybiBkYXRhQ29uZmlnLmRlZmF1bHQ7XHJcbn1cclxuXHJcblxyXG5jb25zdCBtYXRjaFN0cmF0ZWd5SGFuZGxlck1hcDogRGljdGlvbmFyeTxWaWV3cG9ydERhdGFNYXRjaGVyPiA9IHtcclxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5leGFjdF06IG1hdGNoV2l0aEV4YWN0LFxyXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5Lmxhcmdlcl06IG1hdGNoV2l0aExhcmdlck1hdGNoLFxyXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LnNtYWxsZXJdOiBtYXRjaFdpdGhTbWFsbGVyTWF0Y2gsXHJcblx0W1ZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kuY2xvc2VzdFNtYWxsZXJGaXJzdF06IG1hdGNoV2l0aENsb3Nlc3RTbWFsbGVyRmlyc3RNYXRjaCxcclxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5jbG9zZXN0TGFyZ2VyRmlyc3RdOiBtYXRjaFdpdGhDbG9zZXN0TGFyZ2VyRmlyc3RNYXRjaCxcclxufTtcclxuXHJcbmZ1bmN0aW9uIG1hdGNoV2l0aEV4YWN0PFQ+KFxyXG5cdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcclxuXHRjdXJyZW50U2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxyXG4pOiBUIHwgdW5kZWZpbmVkIHtcclxuXHRyZXR1cm4gZGF0YUNvbmZpZ1tjdXJyZW50U2l6ZVR5cGUubmFtZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hdGNoV2l0aExhcmdlck1hdGNoPFQ+KFxyXG5cdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcclxuXHRjdXJyZW50U2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxyXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcclxuKTogVCB8IHVuZGVmaW5lZCB7XHJcblx0bGV0IGRhdGEgPSBkYXRhQ29uZmlnW2N1cnJlbnRTaXplVHlwZS5uYW1lXTtcclxuXHRpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRyZXR1cm4gZGF0YTtcclxuXHR9XHJcblxyXG5cdGNvbnN0IGxhcmdlc3RUeXBlSWR4ID0gc2l6ZVR5cGVzW3NpemVUeXBlcy5sZW5ndGggLSAxXS50eXBlO1xyXG5cdGlmIChjdXJyZW50U2l6ZVR5cGUudHlwZSA+PSBsYXJnZXN0VHlwZUlkeCkge1xyXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHR9XHJcblxyXG5cdGZvciAobGV0IGluZGV4ID0gY3VycmVudFNpemVUeXBlLnR5cGU7IGluZGV4IDwgc2l6ZVR5cGVzLmxlbmd0aDsgaW5kZXgrKykge1xyXG5cdFx0Y29uc3Qgc2l6ZVR5cGUgPSBzaXplVHlwZXNbaW5kZXhdO1xyXG5cdFx0ZGF0YSA9IGRhdGFDb25maWdbc2l6ZVR5cGUubmFtZV07XHJcblx0XHRpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiBkYXRhO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gbWF0Y2hXaXRoU21hbGxlck1hdGNoPFQ+KFxyXG5cdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcclxuXHRjdXJyZW50U2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxyXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcclxuKTogVCB8IHVuZGVmaW5lZCB7XHJcblx0bGV0IGRhdGEgPSBkYXRhQ29uZmlnW2N1cnJlbnRTaXplVHlwZS5uYW1lXTtcclxuXHRpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRyZXR1cm4gZGF0YTtcclxuXHR9XHJcblxyXG5cdGlmIChjdXJyZW50U2l6ZVR5cGUudHlwZSA8PSAwKSB7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZvci1kaXJlY3Rpb25cclxuXHRmb3IgKGxldCBpbmRleCA9IGN1cnJlbnRTaXplVHlwZS50eXBlOyBpbmRleCA8IHNpemVUeXBlcy5sZW5ndGg7IGluZGV4LS0pIHtcclxuXHRcdGNvbnN0IHNpemVUeXBlID0gc2l6ZVR5cGVzW2luZGV4XTtcclxuXHRcdGRhdGEgPSBkYXRhQ29uZmlnW3NpemVUeXBlLm5hbWVdO1xyXG5cdFx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1hdGNoV2l0aENsb3Nlc3RTbWFsbGVyRmlyc3RNYXRjaDxUPihcclxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0Y3VycmVudFNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcbik6IFQgfCB1bmRlZmluZWQge1xyXG5cdHJldHVybiBjbG9zZXN0TWF0Y2goZGF0YUNvbmZpZywgY3VycmVudFNpemVUeXBlLCBzaXplVHlwZXMsIHRydWUpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXRjaFdpdGhDbG9zZXN0TGFyZ2VyRmlyc3RNYXRjaDxUPihcclxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0Y3VycmVudFNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcbik6IFQgfCB1bmRlZmluZWQge1xyXG5cdHJldHVybiBjbG9zZXN0TWF0Y2goZGF0YUNvbmZpZywgY3VycmVudFNpemVUeXBlLCBzaXplVHlwZXMsIGZhbHNlKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2xvc2VzdE1hdGNoPFQ+KFxyXG5cdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcclxuXHRjdXJyZW50U2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxyXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcclxuXHRpc1NtYWxsZXJGaXJzdDogYm9vbGVhblxyXG4pOiBUIHwgdW5kZWZpbmVkIHtcclxuXHRsZXQgZGF0YSA9IGRhdGFDb25maWdbY3VycmVudFNpemVUeXBlLm5hbWVdO1xyXG5cdGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdHJldHVybiBkYXRhO1xyXG5cdH1cclxuXHJcblx0bGV0IGRvd25JbmRleCA9IGN1cnJlbnRTaXplVHlwZS50eXBlO1xyXG5cdGxldCB1cEluZGV4ID0gY3VycmVudFNpemVUeXBlLnR5cGU7XHJcblxyXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxyXG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzaXplVHlwZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcblx0XHRmb3IgKGNvbnN0IGlkeCBvZiBpc1NtYWxsZXJGaXJzdCA/IFstLWRvd25JbmRleCwgKyt1cEluZGV4XSA6IFsrK3VwSW5kZXgsIC0tZG93bkluZGV4XSkge1xyXG5cdFx0XHRjb25zdCBzaXplVHlwZSA9IHNpemVUeXBlc1tpZHhdO1xyXG5cdFx0XHRpZiAoc2l6ZVR5cGUpIHtcclxuXHRcdFx0XHRkYXRhID0gZGF0YUNvbmZpZ1tzaXplVHlwZS5uYW1lXTtcclxuXHRcdFx0XHRpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJldHVybiB1bmRlZmluZWQ7XHJcbn1cclxuIl19
@@ -0,0 +1,43 @@
1
+ import { Subscription } from "rxjs";
2
+ import { tap } from "rxjs/operators";
3
+ import { Pipe, ChangeDetectorRef } from "@angular/core";
4
+ import { ViewportDataMatchStrategy } from "./viewport-data-matcher";
5
+ import { ViewportDataService } from "./viewport-data.service";
6
+ /* eslint-disable @angular-eslint/no-pipe-impure */
7
+ export class ViewportDataPipe {
8
+ constructor(viewportData, cdr) {
9
+ this.viewportData = viewportData;
10
+ this.cdr = cdr;
11
+ this.markForTransform = true;
12
+ this.data$$ = Subscription.EMPTY;
13
+ }
14
+ transform(data, strategy) {
15
+ if (!this.markForTransform && data === this.data && strategy === this.strategy) {
16
+ return this.value;
17
+ }
18
+ this.data = data;
19
+ this.strategy = strategy;
20
+ this.data$$.unsubscribe();
21
+ this.data$$ = this.viewportData.get$(data, ViewportDataMatchStrategy[strategy]).pipe(tap(value => {
22
+ this.markForTransform = true;
23
+ this.value = value;
24
+ this.cdr.markForCheck();
25
+ })).subscribe();
26
+ this.markForTransform = false;
27
+ return this.value;
28
+ }
29
+ ngOnDestroy() {
30
+ this.data$$.unsubscribe();
31
+ }
32
+ }
33
+ ViewportDataPipe.decorators = [
34
+ { type: Pipe, args: [{
35
+ name: "ssvViewportData",
36
+ pure: false
37
+ },] }
38
+ ];
39
+ ViewportDataPipe.ctorParameters = () => [
40
+ { type: ViewportDataService },
41
+ { type: ChangeDetectorRef }
42
+ ];
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS5waXBlLmpzIiwic291cmNlUm9vdCI6IkM6L2Rldi9naXQvQHNzdi5uZ3gudXgvc3JjLyIsInNvdXJjZXMiOlsidmlld3BvcnQvdmlld3BvcnQtZGF0YS92aWV3cG9ydC1kYXRhLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLElBQUksRUFBNEIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFzQix5QkFBeUIsRUFBb0MsTUFBTSx5QkFBeUIsQ0FBQztBQUMxSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5RCxtREFBbUQ7QUFLbkQsTUFBTSxPQUFPLGdCQUFnQjtJQVE1QixZQUNTLFlBQWlDLEVBQ2pDLEdBQXNCO1FBRHRCLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQVJ2QixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFJeEIsV0FBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFNcEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxJQUF3QixFQUFFLFFBQTBDO1FBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDL0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDbkYsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUNGLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNuQixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7O1lBeENELElBQUksU0FBQztnQkFDTCxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixJQUFJLEVBQUUsS0FBSzthQUNYOzs7WUFOUSxtQkFBbUI7WUFIYSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBWaWV3cG9ydERhdGFDb25maWcsIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3ksIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3lMaXRlcmFsIH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS1tYXRjaGVyXCI7XHJcbmltcG9ydCB7IFZpZXdwb3J0RGF0YVNlcnZpY2UgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhLnNlcnZpY2VcIjtcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9uby1waXBlLWltcHVyZSAqL1xyXG5AUGlwZSh7XHJcblx0bmFtZTogXCJzc3ZWaWV3cG9ydERhdGFcIixcclxuXHRwdXJlOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld3BvcnREYXRhUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XHJcblxyXG5cdHByaXZhdGUgbWFya0ZvclRyYW5zZm9ybSA9IHRydWU7XHJcblx0cHJpdmF0ZSB2YWx1ZTogdW5rbm93bjtcclxuXHRwcml2YXRlIGRhdGE6IFZpZXdwb3J0RGF0YUNvbmZpZyB8IHVuZGVmaW5lZDtcclxuXHRwcml2YXRlIHN0cmF0ZWd5OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5TGl0ZXJhbCB8IHVuZGVmaW5lZDtcclxuXHRwcml2YXRlIGRhdGEkJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHZpZXdwb3J0RGF0YTogVmlld3BvcnREYXRhU2VydmljZSxcclxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0dHJhbnNmb3JtKGRhdGE6IFZpZXdwb3J0RGF0YUNvbmZpZywgc3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3lMaXRlcmFsKTogdW5rbm93biB7XHJcblx0XHRpZiAoIXRoaXMubWFya0ZvclRyYW5zZm9ybSAmJiBkYXRhID09PSB0aGlzLmRhdGEgJiYgc3RyYXRlZ3kgPT09IHRoaXMuc3RyYXRlZ3kpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWU7XHJcblx0XHR9XHJcblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xyXG5cdFx0dGhpcy5zdHJhdGVneSA9IHN0cmF0ZWd5O1xyXG5cclxuXHRcdHRoaXMuZGF0YSQkLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR0aGlzLmRhdGEkJCA9IHRoaXMudmlld3BvcnREYXRhLmdldCQoZGF0YSwgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneVtzdHJhdGVneV0pLnBpcGUoXHJcblx0XHRcdHRhcCh2YWx1ZSA9PiB7XHJcblx0XHRcdFx0dGhpcy5tYXJrRm9yVHJhbnNmb3JtID0gdHJ1ZTtcclxuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XHJcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdH0pLFxyXG5cdFx0KS5zdWJzY3JpYmUoKTtcclxuXHJcblx0XHR0aGlzLm1hcmtGb3JUcmFuc2Zvcm0gPSBmYWxzZTtcclxuXHRcdHJldHVybiB0aGlzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLmRhdGEkJC51bnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,38 @@
1
+ import { Inject, Injectable } from "@angular/core";
2
+ import { distinctUntilChanged, map } from "rxjs/operators";
3
+ import { UX_CONFIG } from "../../config";
4
+ import { ViewportService } from "../viewport.service";
5
+ import { matchViewportData } from "./viewport-data-matcher";
6
+ import { generateViewportRulesRangeFromDataMatcher } from "./viewport-data.utils";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../viewport.service";
9
+ import * as i2 from "../../config";
10
+ export class ViewportDataService {
11
+ constructor(viewport, config) {
12
+ this.viewport = viewport;
13
+ this.config = config;
14
+ }
15
+ /** Get data for match. */
16
+ get(dataConfig, strategy = this.config.viewport.defaultDataMatchStrategy, sizeType = this.viewport.sizeTypeSnapshot) {
17
+ return matchViewportData(dataConfig, sizeType, strategy, this.viewport.sizeTypes, this.viewport.sizeTypeMap);
18
+ }
19
+ /** Get data for match as observable. */
20
+ get$(dataConfig, strategy, throttle = true) {
21
+ return (throttle ? this.viewport.sizeType$ : this.viewport.sizeTypeSnap$).pipe(map(sizeType => this.get(dataConfig, strategy, sizeType)), distinctUntilChanged());
22
+ }
23
+ /** Generate rules based on strategies for data. */
24
+ generateRules(dataConfig, strategy = this.config.viewport.defaultDataMatchStrategy) {
25
+ return generateViewportRulesRangeFromDataMatcher(dataConfig, strategy, this.viewport.sizeTypes, this.viewport.sizeTypeMap);
26
+ }
27
+ }
28
+ ViewportDataService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ViewportDataService_Factory() { return new ViewportDataService(i0.ɵɵinject(i1.ViewportService), i0.ɵɵinject(i2.UX_CONFIG)); }, token: ViewportDataService, providedIn: "root" });
29
+ ViewportDataService.decorators = [
30
+ { type: Injectable, args: [{
31
+ providedIn: "root",
32
+ },] }
33
+ ];
34
+ ViewportDataService.ctorParameters = () => [
35
+ { type: ViewportService },
36
+ { type: undefined, decorators: [{ type: Inject, args: [UX_CONFIG,] }] }
37
+ ];
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L2Rldi9naXQvQHNzdi5uZ3gudXgvc3JjLyIsInNvdXJjZXMiOlsidmlld3BvcnQvdmlld3BvcnQtZGF0YS92aWV3cG9ydC1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQWEsTUFBTSxjQUFjLENBQUM7QUFHcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBaUQsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRyxPQUFPLEVBQUUseUNBQXlDLEVBQW9CLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFLcEcsTUFBTSxPQUFPLG1CQUFtQjtJQUUvQixZQUNTLFFBQXlCLEVBQ04sTUFBaUI7UUFEcEMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDTixXQUFNLEdBQU4sTUFBTSxDQUFXO0lBRTdDLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsR0FBRyxDQUNGLFVBQWlDLEVBQ2pDLFdBQXNDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixFQUNuRixXQUFpQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtRQUUvRCxPQUFPLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxJQUFJLENBQUksVUFBaUMsRUFBRSxRQUFvQyxFQUFFLFFBQVEsR0FBRyxJQUFJO1FBQy9GLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FDN0UsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQzVELG9CQUFvQixFQUFFLENBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELGFBQWEsQ0FDWixVQUFpQyxFQUNqQyxXQUFzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0I7UUFFbkYsT0FBTyx5Q0FBeUMsQ0FDL0MsVUFBVSxFQUNWLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQ3pCLENBQUM7SUFDSCxDQUFDOzs7O1lBdkNELFVBQVUsU0FBQztnQkFDWCxVQUFVLEVBQUUsTUFBTTthQUNsQjs7O1lBTlEsZUFBZTs0Q0FXckIsTUFBTSxTQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBVWF9DT05GSUcsIFV4T3B0aW9ucyB9IGZyb20gXCIuLi8uLi9jb25maWdcIjtcclxuXHJcbmltcG9ydCB7IFZpZXdwb3J0U2l6ZVR5cGVJbmZvIH0gZnJvbSBcIi4uL3ZpZXdwb3J0Lm1vZGVsXCI7XHJcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gXCIuLi92aWV3cG9ydC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IG1hdGNoVmlld3BvcnREYXRhLCBWaWV3cG9ydERhdGFDb25maWcsIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhLW1hdGNoZXJcIjtcclxuaW1wb3J0IHsgZ2VuZXJhdGVWaWV3cG9ydFJ1bGVzUmFuZ2VGcm9tRGF0YU1hdGNoZXIsIFZpZXdwb3J0RGF0YVJ1bGUgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhLnV0aWxzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaWV3cG9ydERhdGFTZXJ2aWNlIHtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHZpZXdwb3J0OiBWaWV3cG9ydFNlcnZpY2UsXHJcblx0XHRASW5qZWN0KFVYX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFV4T3B0aW9ucyxcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdC8qKiBHZXQgZGF0YSBmb3IgbWF0Y2guICovXHJcblx0Z2V0PFQ+KFxyXG5cdFx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxyXG5cdFx0c3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kgPSB0aGlzLmNvbmZpZy52aWV3cG9ydC5kZWZhdWx0RGF0YU1hdGNoU3RyYXRlZ3ksXHJcblx0XHRzaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8gPSB0aGlzLnZpZXdwb3J0LnNpemVUeXBlU25hcHNob3RcclxuXHQpOiBUIHwgdW5kZWZpbmVkIHtcclxuXHRcdHJldHVybiBtYXRjaFZpZXdwb3J0RGF0YShkYXRhQ29uZmlnLCBzaXplVHlwZSwgc3RyYXRlZ3ksIHRoaXMudmlld3BvcnQuc2l6ZVR5cGVzLCB0aGlzLnZpZXdwb3J0LnNpemVUeXBlTWFwKTtcclxuXHR9XHJcblxyXG5cdC8qKiBHZXQgZGF0YSBmb3IgbWF0Y2ggYXMgb2JzZXJ2YWJsZS4gKi9cclxuXHRnZXQkPFQ+KGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPiwgc3RyYXRlZ3k/OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LCB0aHJvdHRsZSA9IHRydWUpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcclxuXHRcdHJldHVybiAodGhyb3R0bGUgPyB0aGlzLnZpZXdwb3J0LnNpemVUeXBlJCA6IHRoaXMudmlld3BvcnQuc2l6ZVR5cGVTbmFwJCkucGlwZShcclxuXHRcdFx0bWFwKHNpemVUeXBlID0+IHRoaXMuZ2V0PFQ+KGRhdGFDb25maWcsIHN0cmF0ZWd5LCBzaXplVHlwZSkpLFxyXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKiBHZW5lcmF0ZSBydWxlcyBiYXNlZCBvbiBzdHJhdGVnaWVzIGZvciBkYXRhLiAqL1xyXG5cdGdlbmVyYXRlUnVsZXM8VD4oXHJcblx0XHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0XHRzdHJhdGVneTogVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSA9IHRoaXMuY29uZmlnLnZpZXdwb3J0LmRlZmF1bHREYXRhTWF0Y2hTdHJhdGVneSxcclxuXHQpOiBWaWV3cG9ydERhdGFSdWxlPFQ+W10ge1xyXG5cdFx0cmV0dXJuIGdlbmVyYXRlVmlld3BvcnRSdWxlc1JhbmdlRnJvbURhdGFNYXRjaGVyKFxyXG5cdFx0XHRkYXRhQ29uZmlnLFxyXG5cdFx0XHRzdHJhdGVneSxcclxuXHRcdFx0dGhpcy52aWV3cG9ydC5zaXplVHlwZXMsXHJcblx0XHRcdHRoaXMudmlld3BvcnQuc2l6ZVR5cGVNYXBcclxuXHRcdCk7XHJcblx0fVxyXG5cclxufVxyXG4iXX0=
@@ -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 === null || prevRule === void 0 ? void 0 : 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 === null || prevRule === void 0 ? void 0 : 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiJDOi9kZXYvZ2l0L0Bzc3Yubmd4LnV4L3NyYy8iLCJzb3VyY2VzIjpbInZpZXdwb3J0L3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQXNCLHlCQUF5QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFReEY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUseUNBQXlDLENBQ3hELFVBQWlDLEVBQ2pDLFFBQW1DLEVBQ25DLFNBQWlDLEVBQ2pDLFdBQTZDO0lBRTdDLE1BQU0sYUFBYSxHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDbkIsTUFBTSxLQUFLLENBQUMsaUdBQWlHLFFBQVEsR0FBRyxDQUFDLENBQUM7S0FDMUg7SUFFRCxJQUFJLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO1FBQzdCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMxRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUN2QixTQUFTO2FBQ1Q7WUFDRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQjtTQUNEO0tBQ0Q7SUFDRCxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FB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RyxTQUFTLENBQUMsQ0FBQztJQUMxRCxPQUFPLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbC9pbnRlcm5hbC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBWaWV3cG9ydFNpemVUeXBlSW5mbyB9IGZyb20gXCIuLi92aWV3cG9ydC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBWaWV3cG9ydERhdGFDb25maWcsIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhLW1hdGNoZXJcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnREYXRhUnVsZTxUPiB7XHJcblx0bWluPzogbnVtYmVyO1xyXG5cdG1heD86IG51bWJlcjtcclxuXHR2YWx1ZTogVDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgcnVsZXMgYmFzZWQgb24gc3RyYXRlZ2llcy5cclxuICpcclxuICogQHBhcmFtIGRhdGFDb25maWcgRGF0YSBjb25maWcgdG8gZ2VuZXJhdGUgcnVsZXMgYmFzZWQgb24uXHJcbiAqIEBwYXJhbSBzdHJhdGVneSBTdHJhdGVneSB0byB1c2Ugd2hlbiBidWlsZGluZyBydWxlcy5cclxuICogQHBhcmFtIHNpemVUeXBlcyBBdmFpbGFibGUgc2l6ZSB0eXBlcyBvcmRlcmVkIGJ5IGluZGV4IHR5cGUuIChDYW4gYmUgb2J0YWluZWQgZnJvbSBgVmlld3BvcnRTZXJ2aWNlYClcclxuICogQHBhcmFtIHNpemVUeXBlTWFwIEF2YWlsYWJsZSBzaXplIHR5cGUgbWFwLiAoQ2FuIGJlIG9idGFpbmVkIGZyb20gYFZpZXdwb3J0U2VydmljZWApXHJcbiAqIEByZXR1cm5zIFJldHVybnMgYSBjb2xsZWN0aW9uIG9mIHJ1bGVzIChvcmRlcmVkKS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVZpZXdwb3J0UnVsZXNSYW5nZUZyb21EYXRhTWF0Y2hlcjxUPihcclxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXHJcblx0c3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3ksXHJcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxyXG5cdHNpemVUeXBlTWFwOiBEaWN0aW9uYXJ5PFZpZXdwb3J0U2l6ZVR5cGVJbmZvPixcclxuKTogVmlld3BvcnREYXRhUnVsZTxUPltdIHtcclxuXHRjb25zdCBydWxlQnVpbGRlckZuID0gbWF0Y2hTdHJhdGVneUhhbmRsZXJNYXBbc3RyYXRlZ3ldO1xyXG5cdGlmICghcnVsZUJ1aWxkZXJGbikge1xyXG5cdFx0dGhyb3cgRXJyb3IoYGdlbmVyYXRlVmlld3BvcnRSdWxlc1JhbmdlRnJvbURhdGFNYXRjaGVyOiBWaWV3cG9ydCBEYXRhIHN0cmF0ZWd5IG5vdCBpbXBsZW1lbnRlZC4gU3RyYXRlZ3k6ICcke3N0cmF0ZWd5fSdgKTtcclxuXHR9XHJcblxyXG5cdGxldCBkYXRhU2l6ZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10gPSBbXTtcclxuXHRmb3IgKGNvbnN0IGtleSBpbiBkYXRhQ29uZmlnKSB7XHJcblx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGFDb25maWcsIGtleSkpIHtcclxuXHRcdFx0Y29uc3QgZGF0YSA9IGRhdGFDb25maWdba2V5XTtcclxuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHNpemUgPSBzaXplVHlwZU1hcFtrZXldO1xyXG5cdFx0XHRpZiAoc2l6ZSkge1xyXG5cdFx0XHRcdGRhdGFTaXplcy5wdXNoKHNpemUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdGRhdGFTaXplcyA9IGRhdGFTaXplcy5zb3J0KCh7IHR5cGU6IHR5cGVBIH0sIHsgdHlwZTogdHlwZUIgfSkgPT4gdHlwZUEgLSB0eXBlQik7XHJcblxyXG5cdGNvbnN0IHJ1bGVzOiBWaWV3cG9ydERhdGFSdWxlPFQ+W10gPSBbXTtcclxuXHRpZiAoZGF0YUNvbmZpZy5kZWZhdWx0KSB7XHJcblx0XHRydWxlcy5wdXNoKHsgdmFsdWU6IGRhdGFDb25maWcuZGVmYXVsdCwgbWluOiB1bmRlZmluZWQsIG1heDogdW5kZWZpbmVkIH0pO1xyXG5cdH1cclxuXHJcblx0bGV0IHByZXZSdWxlOiBWaWV3cG9ydERhdGFSdWxlPFQ+IHwgdW5kZWZpbmVkO1xyXG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhU2l6ZXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcblx0XHRjb25zdCBwcmV2RGF0YVNpemUgPSBkYXRhU2l6ZXNbaW5kZXggLSAxXTtcclxuXHRcdGNvbnN0IG5leHREYXRhU2l6ZSA9IGRhdGFTaXplc1tpbmRleCArIDFdO1xyXG5cdFx0Y29uc3QgZGF0YVNpemUgPSBkYXRhU2l6ZXNbaW5kZXhdO1xyXG5cdFx0Y29uc3QgcHJldlNpemUgPSBzaXplVHlwZXNbZGF0YVNpemUudHlwZSAtIDFdO1xyXG5cdFx0Ly8gY29uc3QgbmV4dFNpemUgPSBzaXplVHlwZXNbZGF0YVNpemUudHlwZSArIDFdO1xyXG5cdFx0Y29uc3QgZGF0YSA9IGRhdGFDb25maWdbZGF0YVNpemUubmFtZV07XHJcblx0XHRjb25zdCBydWxlOiBWaWV3cG9ydERhdGFSdWxlPFQ+ID0ge1xyXG5cdFx0XHR2YWx1ZTogZGF0YSxcclxuXHRcdFx0bWluOiB1bmRlZmluZWQsXHJcblx0XHRcdG1heDogdW5kZWZpbmVkLFxyXG5cdFx0fTtcclxuXHJcblx0XHRydWxlQnVpbGRlckZuKHJ1bGUsIGRhdGFTaXplLCBuZXh0RGF0YVNpemUsIHByZXZEYXRhU2l6ZSwgcHJldlNpemUsIHByZXZSdWxlLCBzaXplVHlwZXMpO1xyXG5cclxuXHRcdHByZXZSdWxlID0gcnVsZTtcclxuXHRcdHJ1bGVzLnB1c2gocnVsZSk7XHJcblx0fVxyXG5cdHJldHVybiBydWxlcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydFJ1bGVSYW5nZUJ1aWxkZXI8VCA9IHVua25vd24+IHtcclxuXHQoXHJcblx0XHRydWxlOiBWaWV3cG9ydERhdGFSdWxlPFQ+LFxyXG5cdFx0ZGF0YVNpemU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxyXG5cdFx0bmV4dERhdGFTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyB8IHVuZGVmaW5lZCxcclxuXHRcdHByZXZEYXRhU2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQsXHJcblx0XHRwcmV2U2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQsXHJcblx0XHRwcmV2UnVsZTogVmlld3BvcnREYXRhUnVsZTxUPiB8IHVuZGVmaW5lZCxcclxuXHRcdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcclxuXHQpOiB2b2lkO1xyXG59XHJcblxyXG5jb25zdCBtYXRjaFN0cmF0ZWd5SGFuZGxlck1hcDogRGljdGlvbmFyeTxWaWV3cG9ydFJ1bGVSYW5nZUJ1aWxkZXI+ID0ge1xyXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LmV4YWN0XTogKHJ1bGUsIGRhdGFTaXplLCBfbmV4dERhdGFTaXplLCBfcHJldkRhdGFTaXplLCBwcmV2U2l6ZSkgPT4ge1xyXG5cdFx0cnVsZS5tYXggPSBkYXRhU2l6ZS53aWR0aFRocmVzaG9sZDtcclxuXHRcdGlmIChwcmV2U2l6ZSkge1xyXG5cdFx0XHRydWxlLm1pbiA9IHByZXZTaXplLndpZHRoVGhyZXNob2xkICsgMTtcclxuXHRcdH1cclxuXHR9LFxyXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LnNtYWxsZXJdOiAocnVsZSwgZGF0YVNpemUsIG5leHREYXRhU2l6ZSwgX3ByZXZEYXRhU2l6ZSwgcHJldlNpemUpID0+IHtcclxuXHRcdGlmIChuZXh0RGF0YVNpemUpIHtcclxuXHRcdFx0cnVsZS5tYXggPSBkYXRhU2l6ZS53aWR0aFRocmVzaG9sZDtcclxuXHRcdH1cclxuXHRcdGlmIChwcmV2U2l6ZSkge1xyXG5cdFx0XHRydWxlLm1pbiA9IHByZXZTaXplLndpZHRoVGhyZXNob2xkICsgMTtcclxuXHRcdH1cclxuXHR9LFxyXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5Lmxhcmdlcl06IChydWxlLCBkYXRhU2l6ZSwgX25leHREYXRhU2l6ZSwgcHJldkRhdGFTaXplKSA9PiB7XHJcblx0XHRpZiAoZGF0YVNpemUpIHtcclxuXHRcdFx0cnVsZS5tYXggPSBkYXRhU2l6ZS53aWR0aFRocmVzaG9sZDtcclxuXHRcdH1cclxuXHRcdGlmIChwcmV2RGF0YVNpemUpIHtcclxuXHRcdFx0cnVsZS5taW4gPSBwcmV2RGF0YVNpemUud2lkdGhUaHJlc2hvbGQgKyAxO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0W1ZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kuY2xvc2VzdFNtYWxsZXJGaXJzdF06IChydWxlLCBkYXRhU2l6ZSwgbmV4dERhdGFTaXplLCBfcHJldkRhdGFTaXplLCBfcHJldlNpemUsIHByZXZSdWxlLCBzaXplVHlwZXMpID0+IHtcclxuXHRcdGlmIChuZXh0RGF0YVNpemUpIHtcclxuXHRcdFx0cnVsZS5tYXggPSBjYWxjdWxhdGVDbG9zZXN0V2lkdGhUaHJlc2hvbGQobmV4dERhdGFTaXplLCBkYXRhU2l6ZSwgc2l6ZVR5cGVzLCB0cnVlKTtcclxuXHRcdH1cclxuXHRcdGlmIChwcmV2UnVsZT8ubWF4KSB7XHJcblx0XHRcdHJ1bGUubWluID0gcHJldlJ1bGUubWF4ICsgMTtcclxuXHRcdH1cclxuXHR9LFxyXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LmNsb3Nlc3RMYXJnZXJGaXJzdF06IChydWxlLCBkYXRhU2l6ZSwgbmV4dERhdGFTaXplLCBfcHJldkRhdGFTaXplLCBfcHJldlNpemUsIHByZXZSdWxlLCBzaXplVHlwZXMpID0+IHtcclxuXHRcdGlmIChuZXh0RGF0YVNpemUpIHtcclxuXHRcdFx0cnVsZS5tYXggPSBjYWxjdWxhdGVDbG9zZXN0V2lkdGhUaHJlc2hvbGQobmV4dERhdGFTaXplLCBkYXRhU2l6ZSwgc2l6ZVR5cGVzLCBmYWxzZSk7XHJcblx0XHR9XHJcblx0XHRpZiAocHJldlJ1bGU/Lm1heCkge1xyXG5cdFx0XHRydWxlLm1pbiA9IHByZXZSdWxlLm1heCArIDE7XHJcblx0XHR9XHJcblx0fSxcclxufTtcclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGF0ZUNsb3Nlc3RXaWR0aFRocmVzaG9sZChcclxuXHRuZXh0RGF0YVNpemU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxyXG5cdGRhdGFTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXHJcblx0aXNTbWFsbGVyUHJlZmVycmVkOiBib29sZWFuLFxyXG4pIHtcclxuXHRjb25zdCBmbiA9IGlzU21hbGxlclByZWZlcnJlZCA/IE1hdGguY2VpbCA6IE1hdGguZmxvb3I7XHJcblx0Ly8gZ2V0IGNsb3Nlc3QgYmV0d2VlbiBjdXJyIGFuZCBuZXh0XHJcblx0Y29uc3QgZGlmZkluZGV4ID0gZm4oKG5leHREYXRhU2l6ZS50eXBlIC0gZGF0YVNpemUudHlwZSAtIDEpIC8gMik7XHJcblx0Y29uc3QgZGlmZk5leHRTaXplID0gc2l6ZVR5cGVzW2RhdGFTaXplLnR5cGUgKyBkaWZmSW5kZXhdO1xyXG5cdHJldHVybiAoZGlmZk5leHRTaXplIHx8IGRhdGFTaXplKS53aWR0aFRocmVzaG9sZDtcclxufVxyXG4iXX0=
@@ -0,0 +1,64 @@
1
+ import { Directive, Input, TemplateRef, ViewContainerRef, } from "@angular/core";
2
+ import { combineLatest, ReplaySubject, Subject } from "rxjs";
3
+ import { tap, map, takeUntil } from "rxjs/operators";
4
+ import { ViewportService } from "./viewport.service";
5
+ import { isViewportSizeMatcherExpression, isViewportSizeMatcherTupleExpression, isViewportConditionMatch } from "./viewport.util";
6
+ const NAME_CAMEL = "ssvViewportMatcherVar";
7
+ export class SsvViewportMatcherVarContext {
8
+ constructor($implicit = false) {
9
+ this.$implicit = $implicit;
10
+ }
11
+ }
12
+ export class SsvViewportMatcherVarDirective {
13
+ constructor(viewport, viewContainer, templateRef) {
14
+ this.viewport = viewport;
15
+ this.viewContainer = viewContainer;
16
+ this.templateRef = templateRef;
17
+ this._matchConditions = {};
18
+ this._context = new SsvViewportMatcherVarContext();
19
+ this._destroy$ = new Subject();
20
+ this._update$ = new ReplaySubject(1);
21
+ }
22
+ set condition(value) {
23
+ if (isViewportSizeMatcherExpression(value)) {
24
+ this._matchConditions.expression = value;
25
+ }
26
+ else if (isViewportSizeMatcherTupleExpression(value)) {
27
+ const [op, size] = value;
28
+ this._matchConditions.expression = {
29
+ operation: op,
30
+ size
31
+ };
32
+ }
33
+ else {
34
+ this._matchConditions.sizeType = value;
35
+ }
36
+ this._update$.next();
37
+ }
38
+ ngOnInit() {
39
+ this.updateView();
40
+ 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();
41
+ }
42
+ ngOnDestroy() {
43
+ this._destroy$.next();
44
+ this._destroy$.complete();
45
+ }
46
+ updateView() {
47
+ this.viewContainer.clear();
48
+ this._viewRef = this.viewContainer.createEmbeddedView(this.templateRef, this._context);
49
+ }
50
+ }
51
+ SsvViewportMatcherVarDirective.decorators = [
52
+ { type: Directive, args: [{
53
+ selector: `[${NAME_CAMEL}]`,
54
+ },] }
55
+ ];
56
+ SsvViewportMatcherVarDirective.ctorParameters = () => [
57
+ { type: ViewportService },
58
+ { type: ViewContainerRef },
59
+ { type: TemplateRef }
60
+ ];
61
+ SsvViewportMatcherVarDirective.propDecorators = {
62
+ condition: [{ type: Input, args: [`${NAME_CAMEL}When`,] }]
63
+ };
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtbWF0Y2hlci12YXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IkM6L2Rldi9naXQvQHNzdi5uZ3gudXgvc3JjLyIsInNvdXJjZXMiOlsidmlld3BvcnQvdmlld3BvcnQtbWF0Y2hlci12YXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTixTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQ04sK0JBQStCLEVBQy9CLG9DQUFvQyxFQUNwQyx3QkFBd0IsRUFDeEIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixNQUFNLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQztBQUUzQyxNQUFNLE9BQU8sNEJBQTRCO0lBRXhDLFlBQ1EsWUFBWSxLQUFLO1FBQWpCLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDckIsQ0FBQztDQUVMO0FBS0QsTUFBTSxPQUFPLDhCQUE4QjtJQXdCMUMsWUFDUyxRQUF5QixFQUN6QixhQUErQixFQUMvQixXQUFzRDtRQUZ0RCxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsZ0JBQVcsR0FBWCxXQUFXLENBQTJDO1FBekJ2RCxxQkFBZ0IsR0FBNEIsRUFBRSxDQUFDO1FBQy9DLGFBQVEsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsYUFBUSxHQUFHLElBQUksYUFBYSxDQUFPLENBQUMsQ0FBQyxDQUFDO0lBd0J2RCxDQUFDO0lBckJELElBQWdDLFNBQVMsQ0FBQyxLQUF3RDtRQUNqRyxJQUFJLCtCQUErQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxvQ0FBb0MsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2RCxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHO2dCQUNsQyxTQUFTLEVBQUUsRUFBRTtnQkFDYixJQUFJO2FBQ0osQ0FBQztTQUNGO2FBQU07WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQVNELFFBQVE7UUFDUCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzRCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDekcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ3pCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sVUFBVTtRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RixDQUFDOzs7WUFwREQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxJQUFJLFVBQVUsR0FBRzthQUMzQjs7O1lBcEJRLGVBQWU7WUFOdkIsZ0JBQWdCO1lBRGhCLFdBQVc7Ozt3QkFvQ1YsS0FBSyxTQUFDLEdBQUcsVUFBVSxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRPbkluaXQsXHJcblx0T25EZXN0cm95LFxyXG5cdERpcmVjdGl2ZSxcclxuXHRJbnB1dCxcclxuXHRUZW1wbGF0ZVJlZixcclxuXHRWaWV3Q29udGFpbmVyUmVmLFxyXG5cdEVtYmVkZGVkVmlld1JlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFwLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG5cdGlzVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24sXHJcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uLFxyXG5cdGlzVmlld3BvcnRDb25kaXRpb25NYXRjaFxyXG59IGZyb20gXCIuL3ZpZXdwb3J0LnV0aWxcIjtcclxuaW1wb3J0IHsgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMsIFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcclxuXHJcbmNvbnN0IE5BTUVfQ0FNRUwgPSBcInNzdlZpZXdwb3J0TWF0Y2hlclZhclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNzdlZpZXdwb3J0TWF0Y2hlclZhckNvbnRleHQge1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyAkaW1wbGljaXQgPSBmYWxzZSxcclxuXHQpIHsgfVxyXG5cclxufVxyXG5cclxuQERpcmVjdGl2ZSh7XHJcblx0c2VsZWN0b3I6IGBbJHtOQU1FX0NBTUVMfV1gLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3N2Vmlld3BvcnRNYXRjaGVyVmFyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuXHRwcml2YXRlIF9tYXRjaENvbmRpdGlvbnM6IFZpZXdwb3J0TWF0Y2hDb25kaXRpb25zID0ge307XHJcblx0cHJpdmF0ZSBfY29udGV4dCA9IG5ldyBTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0KCk7XHJcblx0cHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgX3VwZGF0ZSQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcclxuXHRwcml2YXRlIF92aWV3UmVmITogRW1iZWRkZWRWaWV3UmVmPFNzdlZpZXdwb3J0TWF0Y2hlclZhckNvbnRleHQ+O1xyXG5cclxuXHRASW5wdXQoYCR7TkFNRV9DQU1FTH1XaGVuYCkgc2V0IGNvbmRpdGlvbih2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbikge1xyXG5cdFx0aWYgKGlzVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24odmFsdWUpKSB7XHJcblx0XHRcdHRoaXMuX21hdGNoQ29uZGl0aW9ucy5leHByZXNzaW9uID0gdmFsdWU7XHJcblx0XHR9IGVsc2UgaWYgKGlzVmlld3BvcnRTaXplTWF0Y2hlclR1cGxlRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuXHRcdFx0Y29uc3QgW29wLCBzaXplXSA9IHZhbHVlO1xyXG5cdFx0XHR0aGlzLl9tYXRjaENvbmRpdGlvbnMuZXhwcmVzc2lvbiA9IHtcclxuXHRcdFx0XHRvcGVyYXRpb246IG9wLFxyXG5cdFx0XHRcdHNpemVcclxuXHRcdFx0fTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuX21hdGNoQ29uZGl0aW9ucy5zaXplVHlwZSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuX3VwZGF0ZSQubmV4dCgpO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHZpZXdwb3J0OiBWaWV3cG9ydFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcblx0XHRwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0PixcclxuXHQpIHtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy51cGRhdGVWaWV3KCk7XHJcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLnZpZXdwb3J0LnNpemVUeXBlJCwgdGhpcy5fdXBkYXRlJF0pLnBpcGUoXHJcblx0XHRcdG1hcCgoW3NpemVUeXBlXSkgPT4gaXNWaWV3cG9ydENvbmRpdGlvbk1hdGNoKHNpemVUeXBlLCB0aGlzLl9tYXRjaENvbmRpdGlvbnMsIHRoaXMudmlld3BvcnQuc2l6ZVR5cGVNYXApKSxcclxuXHRcdFx0dGFwKHggPT4gdGhpcy5fY29udGV4dC4kaW1wbGljaXQgPSB4KSxcclxuXHRcdFx0dGFwKCgpID0+IHRoaXMuX3ZpZXdSZWYubWFya0ZvckNoZWNrKCkpLFxyXG5cdFx0XHR0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxyXG5cdFx0KS5zdWJzY3JpYmUoKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG5cdFx0dGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlVmlldygpOiB2b2lkIHtcclxuXHRcdHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xyXG5cdFx0dGhpcy5fdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZiwgdGhpcy5fY29udGV4dCk7XHJcblx0fVxyXG5cclxufVxyXG4iXX0=
@@ -0,0 +1,134 @@
1
+ import { Directive, Renderer2, ViewContainerRef, Input, TemplateRef, ChangeDetectorRef, } from "@angular/core";
2
+ import { Subscription, Subject } from "rxjs";
3
+ import { tap, filter, pairwise, startWith } from "rxjs/operators";
4
+ import { ViewportService } from "./viewport.service";
5
+ import { isViewportSizeMatcherExpression, isViewportSizeMatcherTupleExpression, isViewportConditionMatch } from "./viewport.util";
6
+ export class SsvViewportMatcherContext {
7
+ constructor() {
8
+ this.sizeType = null;
9
+ this.sizeTypeExclude = null;
10
+ }
11
+ }
12
+ export class SsvViewportMatcherDirective {
13
+ constructor(viewport, renderer, viewContainer, cdr, templateRef) {
14
+ this.viewport = viewport;
15
+ this.renderer = renderer;
16
+ this.viewContainer = viewContainer;
17
+ this.cdr = cdr;
18
+ this._context = new SsvViewportMatcherContext();
19
+ this._thenTemplateRef = null;
20
+ this._elseTemplateRef = null;
21
+ this._thenViewRef = null;
22
+ this._elseViewRef = null;
23
+ this.sizeType$$ = Subscription.EMPTY;
24
+ this.cssClass$$ = Subscription.EMPTY;
25
+ this._update$ = new Subject();
26
+ this._thenTemplateRef = templateRef;
27
+ }
28
+ set ssvViewportMatcher(value) {
29
+ if (isViewportSizeMatcherExpression(value)) {
30
+ this._context.expression = value;
31
+ }
32
+ else if (isViewportSizeMatcherTupleExpression(value)) {
33
+ const [op, size] = value;
34
+ this._context.expression = {
35
+ operation: op,
36
+ size
37
+ };
38
+ }
39
+ else {
40
+ this._context.sizeType = value;
41
+ }
42
+ if (this.sizeInfo) {
43
+ this._update$.next(this._context);
44
+ }
45
+ }
46
+ set ssvViewportMatcherExclude(value) {
47
+ this._context.sizeTypeExclude = value;
48
+ if (this.sizeInfo) {
49
+ this._update$.next(this._context);
50
+ }
51
+ }
52
+ set ssvViewportMatcherElse(templateRef) {
53
+ this._elseTemplateRef = templateRef;
54
+ this._elseViewRef = null; // clear previous view if any.
55
+ if (this.sizeInfo) {
56
+ this._update$.next(this._context);
57
+ }
58
+ }
59
+ ngOnInit() {
60
+ // console.log("ssvViewportMatcher init");
61
+ this._update$
62
+ .pipe(
63
+ // tap(x => console.log(">>> ssvViewportMatcher - update triggered", x)),
64
+ filter(() => !!this.sizeInfo),
65
+ // tap(x => console.log(">>> ssvViewportMatcher - updating...", x)),
66
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
67
+ tap(() => this._updateView(this.sizeInfo)), tap(() => this.cdr.markForCheck()))
68
+ .subscribe();
69
+ this.sizeType$$ = this.viewport.sizeType$
70
+ .pipe(
71
+ // tap(x => console.log("ssvViewportMatcher - sizeType changed", x)),
72
+ tap(x => this.sizeInfo = x), tap(() => this._update$.next(this._context)))
73
+ .subscribe();
74
+ this.cssClass$$ = this.viewport.sizeType$
75
+ .pipe(startWith(undefined), filter(() => !!(this._thenViewRef || this._elseViewRef)), pairwise(), tap(([prev, curr]) => {
76
+ var _a;
77
+ const el = this._thenViewRef
78
+ ? this._thenViewRef.rootNodes[0]
79
+ : (_a = this._elseViewRef) === null || _a === void 0 ? void 0 : _a.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 === null || curr === void 0 ? void 0 : 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.decorators = [
117
+ { type: Directive, args: [{
118
+ selector: "[ssvViewportMatcher]",
119
+ exportAs: "ssvViewportMatcher",
120
+ },] }
121
+ ];
122
+ SsvViewportMatcherDirective.ctorParameters = () => [
123
+ { type: ViewportService },
124
+ { type: Renderer2 },
125
+ { type: ViewContainerRef },
126
+ { type: ChangeDetectorRef },
127
+ { type: TemplateRef }
128
+ ];
129
+ SsvViewportMatcherDirective.propDecorators = {
130
+ ssvViewportMatcher: [{ type: Input }],
131
+ ssvViewportMatcherExclude: [{ type: Input }],
132
+ ssvViewportMatcherElse: [{ type: Input }]
133
+ };
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtbWF0Y2hlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiQzovZGV2L2dpdC9Ac3N2Lm5neC51eC9zcmMvIiwic291cmNlcyI6WyJ2aWV3cG9ydC92aWV3cG9ydC1tYXRjaGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR04sU0FBUyxFQUNULFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsS0FBSyxFQUVMLFdBQVcsRUFDWCxpQkFBaUIsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQ04sK0JBQStCLEVBQy9CLG9DQUFvQyxFQUNwQyx3QkFBd0IsRUFDeEIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixNQUFNLE9BQU8seUJBQXlCO0lBQXRDO1FBRUMsYUFBUSxHQUE2QixJQUFJLENBQUM7UUFDMUMsb0JBQWUsR0FBNkIsSUFBSSxDQUFDO0lBR2xELENBQUM7Q0FBQTtBQU1ELE1BQU0sT0FBTywyQkFBMkI7SUErQ3ZDLFlBQ1MsUUFBeUIsRUFDekIsUUFBbUIsRUFDbkIsYUFBK0IsRUFDL0IsR0FBc0IsRUFDOUIsV0FBbUQ7UUFKM0MsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQ3ZCLGFBQVEsR0FBOEIsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1FBQ3RFLHFCQUFnQixHQUFrRCxJQUFJLENBQUM7UUFDdkUscUJBQWdCLEdBQWtELElBQUksQ0FBQztR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QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFFekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDeEQsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsUUFBUSxDQUNiLENBQUM7aUJBQ0Y7YUFDRDtTQUNEO2FBQU07WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBRXpCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO29CQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQ3hELElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FDYixDQUFDO2lCQUNGO2FBQ0Q7U0FDRDtJQUNGLENBQUM7OztZQXpJRCxTQUFTLFNBQUM7Z0JBQ1YsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjthQUM5Qjs7O1lBbkJRLGVBQWU7WUFWdkIsU0FBUztZQUNULGdCQUFnQjtZQUloQixpQkFBaUI7WUFEakIsV0FBVzs7O2lDQXVDVixLQUFLO3dDQWtCTCxLQUFLO3FDQVFMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdE9uSW5pdCxcclxuXHRPbkRlc3Ryb3ksXHJcblx0RGlyZWN0aXZlLFxyXG5cdFJlbmRlcmVyMixcclxuXHRWaWV3Q29udGFpbmVyUmVmLFxyXG5cdElucHV0LFxyXG5cdEVtYmVkZGVkVmlld1JlZixcclxuXHRUZW1wbGF0ZVJlZixcclxuXHRDaGFuZ2VEZXRlY3RvclJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YXAsIGZpbHRlciwgcGFpcndpc2UsIHN0YXJ0V2l0aCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG5cdGlzVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24sXHJcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uLFxyXG5cdGlzVmlld3BvcnRDb25kaXRpb25NYXRjaFxyXG59IGZyb20gXCIuL3ZpZXdwb3J0LnV0aWxcIjtcclxuaW1wb3J0IHsgVmlld3BvcnRTaXplVHlwZUluZm8sIFZpZXdwb3J0TWF0Y2hDb25kaXRpb25zLCBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbiB9IGZyb20gXCIuL3ZpZXdwb3J0Lm1vZGVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dCBpbXBsZW1lbnRzIFZpZXdwb3J0TWF0Y2hDb25kaXRpb25zIHtcclxuXHJcblx0c2l6ZVR5cGU6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XHJcblx0c2l6ZVR5cGVFeGNsdWRlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xyXG5cdGV4cHJlc3Npb24/OiBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbjtcclxuXHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG5cdHNlbGVjdG9yOiBcIltzc3ZWaWV3cG9ydE1hdGNoZXJdXCIsXHJcblx0ZXhwb3J0QXM6IFwic3N2Vmlld3BvcnRNYXRjaGVyXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTc3ZWaWV3cG9ydE1hdGNoZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblxyXG5cdHNpemVJbmZvOiBWaWV3cG9ydFNpemVUeXBlSW5mbyB8IHVuZGVmaW5lZDtcclxuXHJcblx0cHJpdmF0ZSBfY29udGV4dDogU3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dCA9IG5ldyBTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0KCk7XHJcblx0cHJpdmF0ZSBfdGhlblRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PiB8IG51bGwgPSBudWxsO1xyXG5cdHByaXZhdGUgX2Vsc2VUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsID0gbnVsbDtcclxuXHRwcml2YXRlIF90aGVuVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQ+IHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBfZWxzZVZpZXdSZWY6IEVtYmVkZGVkVmlld1JlZjxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PiB8IG51bGwgPSBudWxsO1xyXG5cdHByaXZhdGUgc2l6ZVR5cGUkJCA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcclxuXHRwcml2YXRlIGNzc0NsYXNzJCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XHJcblx0cHJpdmF0ZSByZWFkb25seSBfdXBkYXRlJCA9IG5ldyBTdWJqZWN0PFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQ+KCk7XHJcblxyXG5cdEBJbnB1dCgpIHNldCBzc3ZWaWV3cG9ydE1hdGNoZXIodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24pIHtcclxuXHRcdGlmIChpc1ZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uKHZhbHVlKSkge1xyXG5cdFx0XHR0aGlzLl9jb250ZXh0LmV4cHJlc3Npb24gPSB2YWx1ZTtcclxuXHRcdH0gZWxzZSBpZiAoaXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uKHZhbHVlKSkge1xyXG5cdFx0XHRjb25zdCBbb3AsIHNpemVdID0gdmFsdWU7XHJcblx0XHRcdHRoaXMuX2NvbnRleHQuZXhwcmVzc2lvbiA9IHtcclxuXHRcdFx0XHRvcGVyYXRpb246IG9wLFxyXG5cdFx0XHRcdHNpemVcclxuXHRcdFx0fTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuX2NvbnRleHQuc2l6ZVR5cGUgPSB2YWx1ZTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5zaXplSW5mbykge1xyXG5cdFx0XHR0aGlzLl91cGRhdGUkLm5leHQodGhpcy5fY29udGV4dCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRASW5wdXQoKSBzZXQgc3N2Vmlld3BvcnRNYXRjaGVyRXhjbHVkZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcclxuXHRcdHRoaXMuX2NvbnRleHQuc2l6ZVR5cGVFeGNsdWRlID0gdmFsdWU7XHJcblxyXG5cdFx0aWYgKHRoaXMuc2l6ZUluZm8pIHtcclxuXHRcdFx0dGhpcy5fdXBkYXRlJC5uZXh0KHRoaXMuX2NvbnRleHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0QElucHV0KCkgc2V0IHNzdlZpZXdwb3J0TWF0Y2hlckVsc2UodGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQ+IHwgbnVsbCkge1xyXG5cdFx0dGhpcy5fZWxzZVRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XHJcblx0XHR0aGlzLl9lbHNlVmlld1JlZiA9IG51bGw7IC8vIGNsZWFyIHByZXZpb3VzIHZpZXcgaWYgYW55LlxyXG5cdFx0aWYgKHRoaXMuc2l6ZUluZm8pIHtcclxuXHRcdFx0dGhpcy5fdXBkYXRlJC5uZXh0KHRoaXMuX2NvbnRleHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHZpZXdwb3J0OiBWaWV3cG9ydFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcblx0XHRwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcblx0XHRwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHR0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4sXHJcblx0KSB7XHJcblx0XHR0aGlzLl90aGVuVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0Ly8gY29uc29sZS5sb2coXCJzc3ZWaWV3cG9ydE1hdGNoZXIgaW5pdFwiKTtcclxuXHJcblx0XHR0aGlzLl91cGRhdGUkXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdC8vIHRhcCh4ID0+IGNvbnNvbGUubG9nKFwiPj4+IHNzdlZpZXdwb3J0TWF0Y2hlciAtIHVwZGF0ZSB0cmlnZ2VyZWRcIiwgeCkpLFxyXG5cdFx0XHRcdGZpbHRlcigoKSA9PiAhIXRoaXMuc2l6ZUluZm8pLFxyXG5cdFx0XHRcdC8vIHRhcCh4ID0+IGNvbnNvbGUubG9nKFwiPj4+IHNzdlZpZXdwb3J0TWF0Y2hlciAtIHVwZGF0aW5nLi4uXCIsIHgpKSxcclxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG5cdFx0XHRcdHRhcCgoKSA9PiB0aGlzLl91cGRhdGVWaWV3KHRoaXMuc2l6ZUluZm8hKSksXHJcblx0XHRcdFx0dGFwKCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKVxyXG5cdFx0XHQpXHJcblx0XHRcdC5zdWJzY3JpYmUoKTtcclxuXHJcblx0XHR0aGlzLnNpemVUeXBlJCQgPSB0aGlzLnZpZXdwb3J0LnNpemVUeXBlJFxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHQvLyB0YXAoeCA9PiBjb25zb2xlLmxvZyhcInNzdlZpZXdwb3J0TWF0Y2hlciAtIHNpemVUeXBlIGNoYW5nZWRcIiwgeCkpLFxyXG5cdFx0XHRcdHRhcCh4ID0+IHRoaXMuc2l6ZUluZm8gPSB4KSxcclxuXHRcdFx0XHR0YXAoKCkgPT4gdGhpcy5fdXBkYXRlJC5uZXh0KHRoaXMuX2NvbnRleHQpKSxcclxuXHRcdFx0KVxyXG5cdFx0XHQuc3Vic2NyaWJlKCk7XHJcblxyXG5cdFx0dGhpcy5jc3NDbGFzcyQkID0gdGhpcy52aWV3cG9ydC5zaXplVHlwZSRcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0c3RhcnRXaXRoPFZpZXdwb3J0U2l6ZVR5cGVJbmZvIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpLFxyXG5cdFx0XHRcdGZpbHRlcigoKSA9PiAhISh0aGlzLl90aGVuVmlld1JlZiB8fCB0aGlzLl9lbHNlVmlld1JlZikpLFxyXG5cdFx0XHRcdHBhaXJ3aXNlKCksXHJcblx0XHRcdFx0dGFwKChbcHJldiwgY3Vycl0pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IGVsOiBFbGVtZW50ID0gdGhpcy5fdGhlblZpZXdSZWZcclxuXHRcdFx0XHRcdFx0PyB0aGlzLl90aGVuVmlld1JlZi5yb290Tm9kZXNbMF1cclxuXHRcdFx0XHRcdFx0OiB0aGlzLl9lbHNlVmlld1JlZj8ucm9vdE5vZGVzWzBdO1xyXG5cclxuXHRcdFx0XHRcdGlmICghZWwuY2xhc3NMaXN0KSB7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChwcmV2KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsIGBzc3YtdnAtc2l6ZS0tJHtwcmV2Lm5hbWV9YCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsLCBgc3N2LXZwLXNpemUtLSR7Y3Vycj8ubmFtZX1gKTtcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0KVxyXG5cdFx0XHQuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuY3NzQ2xhc3MkJC51bnN1YnNjcmliZSgpO1xyXG5cdFx0dGhpcy5zaXplVHlwZSQkLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR0aGlzLl91cGRhdGUkLmNvbXBsZXRlKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIF91cGRhdGVWaWV3KHNpemVJbmZvOiBWaWV3cG9ydFNpemVUeXBlSW5mbykge1xyXG5cdFx0aWYgKGlzVmlld3BvcnRDb25kaXRpb25NYXRjaChzaXplSW5mbywgdGhpcy5fY29udGV4dCwgdGhpcy52aWV3cG9ydC5zaXplVHlwZU1hcCkpIHtcclxuXHRcdFx0aWYgKCF0aGlzLl90aGVuVmlld1JlZikge1xyXG5cdFx0XHRcdHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xyXG5cdFx0XHRcdHRoaXMuX2Vsc2VWaWV3UmVmID0gbnVsbDtcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMuX3RoZW5UZW1wbGF0ZVJlZikge1xyXG5cdFx0XHRcdFx0dGhpcy5fdGhlblZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KFxyXG5cdFx0XHRcdFx0XHR0aGlzLl90aGVuVGVtcGxhdGVSZWYsXHJcblx0XHRcdFx0XHRcdHRoaXMuX2NvbnRleHQsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCF0aGlzLl9lbHNlVmlld1JlZikge1xyXG5cdFx0XHRcdHRoaXMudmlld0NvbnRhaW5lci5jbGVhcigpO1xyXG5cdFx0XHRcdHRoaXMuX3RoZW5WaWV3UmVmID0gbnVsbDtcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZikge1xyXG5cdFx0XHRcdFx0dGhpcy5fZWxzZVZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KFxyXG5cdFx0XHRcdFx0XHR0aGlzLl9lbHNlVGVtcGxhdGVSZWYsXHJcblx0XHRcdFx0XHRcdHRoaXMuX2NvbnRleHQsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuIl19