@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.
Files changed (75) hide show
  1. package/CHANGELOG.md +149 -142
  2. package/LICENSE +21 -21
  3. package/README.md +297 -297
  4. package/bundles/ssv-ngx.ux.umd.js +1154 -1154
  5. package/bundles/ssv-ngx.ux.umd.js.map +1 -1
  6. package/bundles/ssv-ngx.ux.umd.min.js +1 -1
  7. package/bundles/ssv-ngx.ux.umd.min.js.map +1 -1
  8. package/config.d.ts +7 -7
  9. package/esm2015/config.js +7 -7
  10. package/esm2015/index.js +5 -5
  11. package/esm2015/internal/internal.model.js +2 -2
  12. package/esm2015/module.js +50 -50
  13. package/esm2015/platform/window.js +28 -28
  14. package/esm2015/ssv-ngx.ux.js +7 -7
  15. package/esm2015/version.js +2 -2
  16. package/esm2015/viewport/index.js +9 -9
  17. package/esm2015/viewport/viewport-data/index.js +4 -4
  18. package/esm2015/viewport/viewport-data/viewport-data-matcher.js +108 -108
  19. package/esm2015/viewport/viewport-data/viewport-data.pipe.js +43 -43
  20. package/esm2015/viewport/viewport-data/viewport-data.service.js +38 -38
  21. package/esm2015/viewport/viewport-data/viewport-data.utils.js +100 -100
  22. package/esm2015/viewport/viewport-matcher-var.directive.js +64 -64
  23. package/esm2015/viewport/viewport-matcher.directive.js +134 -134
  24. package/esm2015/viewport/viewport-server-size.service.js +38 -38
  25. package/esm2015/viewport/viewport.const.js +18 -18
  26. package/esm2015/viewport/viewport.model.js +31 -31
  27. package/esm2015/viewport/viewport.service.js +69 -69
  28. package/esm2015/viewport/viewport.util.js +117 -117
  29. package/esm2020/config.mjs +7 -0
  30. package/esm2020/index.mjs +5 -0
  31. package/esm2020/internal/internal.model.mjs +2 -0
  32. package/esm2020/module.mjs +65 -0
  33. package/esm2020/platform/window.mjs +30 -0
  34. package/esm2020/ssv-ngx.ux.mjs +5 -0
  35. package/esm2020/version.mjs +2 -0
  36. package/esm2020/viewport/index.mjs +9 -0
  37. package/esm2020/viewport/viewport-data/index.mjs +4 -0
  38. package/esm2020/viewport/viewport-data/viewport-data-matcher.mjs +108 -0
  39. package/esm2020/viewport/viewport-data/viewport-data.pipe.mjs +43 -0
  40. package/esm2020/viewport/viewport-data/viewport-data.service.mjs +37 -0
  41. package/esm2020/viewport/viewport-data/viewport-data.utils.mjs +100 -0
  42. package/esm2020/viewport/viewport-matcher-var.directive.mjs +63 -0
  43. package/esm2020/viewport/viewport-matcher.directive.mjs +131 -0
  44. package/esm2020/viewport/viewport-server-size.service.mjs +43 -0
  45. package/esm2020/viewport/viewport.const.mjs +18 -0
  46. package/esm2020/viewport/viewport.model.mjs +31 -0
  47. package/esm2020/viewport/viewport.service.mjs +67 -0
  48. package/esm2020/viewport/viewport.util.mjs +117 -0
  49. package/fesm2015/ssv-ngx.ux.js +770 -770
  50. package/fesm2015/ssv-ngx.ux.js.map +1 -1
  51. package/fesm2015/ssv-ngx.ux.mjs +829 -0
  52. package/fesm2015/ssv-ngx.ux.mjs.map +1 -0
  53. package/fesm2020/ssv-ngx.ux.mjs +823 -0
  54. package/fesm2020/ssv-ngx.ux.mjs.map +1 -0
  55. package/index.d.ts +4 -4
  56. package/internal/internal.model.d.ts +9 -9
  57. package/module.d.ts +19 -12
  58. package/package.json +21 -9
  59. package/platform/window.d.ts +13 -10
  60. package/ssv-ngx.ux.d.ts +6 -6
  61. package/ssv-ngx.ux.metadata.json +1 -1
  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 -15
  67. package/viewport/viewport-data/viewport-data.service.d.ts +20 -17
  68. package/viewport/viewport-data/viewport-data.utils.d.ts +21 -21
  69. package/viewport/viewport-matcher-var.directive.d.ts +25 -22
  70. package/viewport/viewport-matcher.directive.d.ts +33 -30
  71. package/viewport/viewport-server-size.service.d.ts +12 -9
  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 -34
  75. package/viewport/viewport.util.d.ts +25 -25
@@ -1,100 +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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIvaG9tZS9jaXJjbGVjaS9yZXBvL3NyYy8iLCJzb3VyY2VzIjpbInZpZXdwb3J0L3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQXNCLHlCQUF5QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFReEY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUseUNBQXlDLENBQ3hELFVBQWlDLEVBQ2pDLFFBQW1DLEVBQ25DLFNBQWlDLEVBQ2pDLFdBQTZDO0lBRTdDLE1BQU0sYUFBYSxHQUFHLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDbkIsTUFBTSxLQUFLLENBQUMsaUdBQWlHLFFBQVEsR0FBRyxDQUFDLENBQUM7S0FDMUg7SUFFRCxJQUFJLFNBQVMsR0FBMkIsRUFBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFO1FBQzdCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMxRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUN2QixTQUFTO2FBQ1Q7WUFDRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQjtTQUNEO0tBQ0Q7SUFDRCxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxL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QUFTLENBQUMsQ0FBQztJQUMxRCxPQUFPLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbC9pbnRlcm5hbC5tb2RlbFwiO1xuaW1wb3J0IHsgVmlld3BvcnRTaXplVHlwZUluZm8gfSBmcm9tIFwiLi4vdmlld3BvcnQubW9kZWxcIjtcbmltcG9ydCB7IFZpZXdwb3J0RGF0YUNvbmZpZywgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEtbWF0Y2hlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0RGF0YVJ1bGU8VD4ge1xuXHRtaW4/OiBudW1iZXI7XG5cdG1heD86IG51bWJlcjtcblx0dmFsdWU6IFQ7XG59XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBydWxlcyBiYXNlZCBvbiBzdHJhdGVnaWVzLlxuICpcbiAqIEBwYXJhbSBkYXRhQ29uZmlnIERhdGEgY29uZmlnIHRvIGdlbmVyYXRlIHJ1bGVzIGJhc2VkIG9uLlxuICogQHBhcmFtIHN0cmF0ZWd5IFN0cmF0ZWd5IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHJ1bGVzLlxuICogQHBhcmFtIHNpemVUeXBlcyBBdmFpbGFibGUgc2l6ZSB0eXBlcyBvcmRlcmVkIGJ5IGluZGV4IHR5cGUuIChDYW4gYmUgb2J0YWluZWQgZnJvbSBgVmlld3BvcnRTZXJ2aWNlYClcbiAqIEBwYXJhbSBzaXplVHlwZU1hcCBBdmFpbGFibGUgc2l6ZSB0eXBlIG1hcC4gKENhbiBiZSBvYnRhaW5lZCBmcm9tIGBWaWV3cG9ydFNlcnZpY2VgKVxuICogQHJldHVybnMgUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgcnVsZXMgKG9yZGVyZWQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVWaWV3cG9ydFJ1bGVzUmFuZ2VGcm9tRGF0YU1hdGNoZXI8VD4oXG5cdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcblx0c3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3ksXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcblx0c2l6ZVR5cGVNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+LFxuKTogVmlld3BvcnREYXRhUnVsZTxUPltdIHtcblx0Y29uc3QgcnVsZUJ1aWxkZXJGbiA9IG1hdGNoU3RyYXRlZ3lIYW5kbGVyTWFwW3N0cmF0ZWd5XTtcblx0aWYgKCFydWxlQnVpbGRlckZuKSB7XG5cdFx0dGhyb3cgRXJyb3IoYGdlbmVyYXRlVmlld3BvcnRSdWxlc1JhbmdlRnJvbURhdGFNYXRjaGVyOiBWaWV3cG9ydCBEYXRhIHN0cmF0ZWd5IG5vdCBpbXBsZW1lbnRlZC4gU3RyYXRlZ3k6ICcke3N0cmF0ZWd5fSdgKTtcblx0fVxuXG5cdGxldCBkYXRhU2l6ZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10gPSBbXTtcblx0Zm9yIChjb25zdCBrZXkgaW4gZGF0YUNvbmZpZykge1xuXHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YUNvbmZpZywga2V5KSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IGRhdGFDb25maWdba2V5XTtcblx0XHRcdGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzaXplID0gc2l6ZVR5cGVNYXBba2V5XTtcblx0XHRcdGlmIChzaXplKSB7XG5cdFx0XHRcdGRhdGFTaXplcy5wdXNoKHNpemUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRkYXRhU2l6ZXMgPSBkYXRhU2l6ZXMuc29ydCgoeyB0eXBlOiB0eXBlQSB9LCB7IHR5cGU6IHR5cGVCIH0pID0+IHR5cGVBIC0gdHlwZUIpO1xuXG5cdGNvbnN0IHJ1bGVzOiBWaWV3cG9ydERhdGFSdWxlPFQ+W10gPSBbXTtcblx0aWYgKGRhdGFDb25maWcuZGVmYXVsdCkge1xuXHRcdHJ1bGVzLnB1c2goeyB2YWx1ZTogZGF0YUNvbmZpZy5kZWZhdWx0LCBtaW46IHVuZGVmaW5lZCwgbWF4OiB1bmRlZmluZWQgfSk7XG5cdH1cblxuXHRsZXQgcHJldlJ1bGU6IFZpZXdwb3J0RGF0YVJ1bGU8VD4gfCB1bmRlZmluZWQ7XG5cdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhU2l6ZXMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0Y29uc3QgcHJldkRhdGFTaXplID0gZGF0YVNpemVzW2luZGV4IC0gMV07XG5cdFx0Y29uc3QgbmV4dERhdGFTaXplID0gZGF0YVNpemVzW2luZGV4ICsgMV07XG5cdFx0Y29uc3QgZGF0YVNpemUgPSBkYXRhU2l6ZXNbaW5kZXhdO1xuXHRcdGNvbnN0IHByZXZTaXplID0gc2l6ZVR5cGVzW2RhdGFTaXplLnR5cGUgLSAxXTtcblx0XHQvLyBjb25zdCBuZXh0U2l6ZSA9IHNpemVUeXBlc1tkYXRhU2l6ZS50eXBlICsgMV07XG5cdFx0Y29uc3QgZGF0YSA9IGRhdGFDb25maWdbZGF0YVNpemUubmFtZV07XG5cdFx0Y29uc3QgcnVsZTogVmlld3BvcnREYXRhUnVsZTxUPiA9IHtcblx0XHRcdHZhbHVlOiBkYXRhLFxuXHRcdFx0bWluOiB1bmRlZmluZWQsXG5cdFx0XHRtYXg6IHVuZGVmaW5lZCxcblx0XHR9O1xuXG5cdFx0cnVsZUJ1aWxkZXJGbihydWxlLCBkYXRhU2l6ZSwgbmV4dERhdGFTaXplLCBwcmV2RGF0YVNpemUsIHByZXZTaXplLCBwcmV2UnVsZSwgc2l6ZVR5cGVzKTtcblxuXHRcdHByZXZSdWxlID0gcnVsZTtcblx0XHRydWxlcy5wdXNoKHJ1bGUpO1xuXHR9XG5cdHJldHVybiBydWxlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydFJ1bGVSYW5nZUJ1aWxkZXI8VCA9IHVua25vd24+IHtcblx0KFxuXHRcdHJ1bGU6IFZpZXdwb3J0RGF0YVJ1bGU8VD4sXG5cdFx0ZGF0YVNpemU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxuXHRcdG5leHREYXRhU2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQsXG5cdFx0cHJldkRhdGFTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyB8IHVuZGVmaW5lZCxcblx0XHRwcmV2U2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQsXG5cdFx0cHJldlJ1bGU6IFZpZXdwb3J0RGF0YVJ1bGU8VD4gfCB1bmRlZmluZWQsXG5cdFx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxuXHQpOiB2b2lkO1xufVxuXG5jb25zdCBtYXRjaFN0cmF0ZWd5SGFuZGxlck1hcDogRGljdGlvbmFyeTxWaWV3cG9ydFJ1bGVSYW5nZUJ1aWxkZXI+ID0ge1xuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5leGFjdF06IChydWxlLCBkYXRhU2l6ZSwgX25leHREYXRhU2l6ZSwgX3ByZXZEYXRhU2l6ZSwgcHJldlNpemUpID0+IHtcblx0XHRydWxlLm1heCA9IGRhdGFTaXplLndpZHRoVGhyZXNob2xkO1xuXHRcdGlmIChwcmV2U2l6ZSkge1xuXHRcdFx0cnVsZS5taW4gPSBwcmV2U2l6ZS53aWR0aFRocmVzaG9sZCArIDE7XG5cdFx0fVxuXHR9LFxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5zbWFsbGVyXTogKHJ1bGUsIGRhdGFTaXplLCBuZXh0RGF0YVNpemUsIF9wcmV2RGF0YVNpemUsIHByZXZTaXplKSA9PiB7XG5cdFx0aWYgKG5leHREYXRhU2l6ZSkge1xuXHRcdFx0cnVsZS5tYXggPSBkYXRhU2l6ZS53aWR0aFRocmVzaG9sZDtcblx0XHR9XG5cdFx0aWYgKHByZXZTaXplKSB7XG5cdFx0XHRydWxlLm1pbiA9IHByZXZTaXplLndpZHRoVGhyZXNob2xkICsgMTtcblx0XHR9XG5cdH0sXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5Lmxhcmdlcl06IChydWxlLCBkYXRhU2l6ZSwgX25leHREYXRhU2l6ZSwgcHJldkRhdGFTaXplKSA9PiB7XG5cdFx0aWYgKGRhdGFTaXplKSB7XG5cdFx0XHRydWxlLm1heCA9IGRhdGFTaXplLndpZHRoVGhyZXNob2xkO1xuXHRcdH1cblx0XHRpZiAocHJldkRhdGFTaXplKSB7XG5cdFx0XHRydWxlLm1pbiA9IHByZXZEYXRhU2l6ZS53aWR0aFRocmVzaG9sZCArIDE7XG5cdFx0fVxuXHR9LFxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5jbG9zZXN0U21hbGxlckZpcnN0XTogKHJ1bGUsIGRhdGFTaXplLCBuZXh0RGF0YVNpemUsIF9wcmV2RGF0YVNpemUsIF9wcmV2U2l6ZSwgcHJldlJ1bGUsIHNpemVUeXBlcykgPT4ge1xuXHRcdGlmIChuZXh0RGF0YVNpemUpIHtcblx0XHRcdHJ1bGUubWF4ID0gY2FsY3VsYXRlQ2xvc2VzdFdpZHRoVGhyZXNob2xkKG5leHREYXRhU2l6ZSwgZGF0YVNpemUsIHNpemVUeXBlcywgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChwcmV2UnVsZT8ubWF4KSB7XG5cdFx0XHRydWxlLm1pbiA9IHByZXZSdWxlLm1heCArIDE7XG5cdFx0fVxuXHR9LFxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5jbG9zZXN0TGFyZ2VyRmlyc3RdOiAocnVsZSwgZGF0YVNpemUsIG5leHREYXRhU2l6ZSwgX3ByZXZEYXRhU2l6ZSwgX3ByZXZTaXplLCBwcmV2UnVsZSwgc2l6ZVR5cGVzKSA9PiB7XG5cdFx0aWYgKG5leHREYXRhU2l6ZSkge1xuXHRcdFx0cnVsZS5tYXggPSBjYWxjdWxhdGVDbG9zZXN0V2lkdGhUaHJlc2hvbGQobmV4dERhdGFTaXplLCBkYXRhU2l6ZSwgc2l6ZVR5cGVzLCBmYWxzZSk7XG5cdFx0fVxuXHRcdGlmIChwcmV2UnVsZT8ubWF4KSB7XG5cdFx0XHRydWxlLm1pbiA9IHByZXZSdWxlLm1heCArIDE7XG5cdFx0fVxuXHR9LFxufTtcblxuZnVuY3Rpb24gY2FsY3VsYXRlQ2xvc2VzdFdpZHRoVGhyZXNob2xkKFxuXHRuZXh0RGF0YVNpemU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxuXHRkYXRhU2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8sXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcblx0aXNTbWFsbGVyUHJlZmVycmVkOiBib29sZWFuLFxuKSB7XG5cdGNvbnN0IGZuID0gaXNTbWFsbGVyUHJlZmVycmVkID8gTWF0aC5jZWlsIDogTWF0aC5mbG9vcjtcblx0Ly8gZ2V0IGNsb3Nlc3QgYmV0d2VlbiBjdXJyIGFuZCBuZXh0XG5cdGNvbnN0IGRpZmZJbmRleCA9IGZuKChuZXh0RGF0YVNpemUudHlwZSAtIGRhdGFTaXplLnR5cGUgLSAxKSAvIDIpO1xuXHRjb25zdCBkaWZmTmV4dFNpemUgPSBzaXplVHlwZXNbZGF0YVNpemUudHlwZSArIGRpZmZJbmRleF07XG5cdHJldHVybiAoZGlmZk5leHRTaXplIHx8IGRhdGFTaXplKS53aWR0aFRocmVzaG9sZDtcbn1cbiJdfQ==
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=
@@ -1,64 +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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtbWF0Y2hlci12YXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Ii9ob21lL2NpcmNsZWNpL3JlcG8vc3JjLyIsInNvdXJjZXMiOlsidmlld3BvcnQvdmlld3BvcnQtbWF0Y2hlci12YXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTixTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxnQkFBZ0IsR0FFaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQ04sK0JBQStCLEVBQy9CLG9DQUFvQyxFQUNwQyx3QkFBd0IsRUFDeEIsTUFBTSxpQkFBaUIsQ0FBQztBQUd6QixNQUFNLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQztBQUUzQyxNQUFNLE9BQU8sNEJBQTRCO0lBRXhDLFlBQ1EsWUFBWSxLQUFLO1FBQWpCLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDckIsQ0FBQztDQUVMO0FBS0QsTUFBTSxPQUFPLDhCQUE4QjtJQXdCMUMsWUFDUyxRQUF5QixFQUN6QixhQUErQixFQUMvQixXQUFzRDtRQUZ0RCxhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsZ0JBQVcsR0FBWCxXQUFXLENBQTJDO1FBekJ2RCxxQkFBZ0IsR0FBNEIsRUFBRSxDQUFDO1FBQy9DLGFBQVEsR0FBRyxJQUFJLDRCQUE0QixFQUFFLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsYUFBUSxHQUFHLElBQUksYUFBYSxDQUFPLENBQUMsQ0FBQyxDQUFDO0lBd0J2RCxDQUFDO0lBckJELElBQWdDLFNBQVMsQ0FBQyxLQUF3RDtRQUNqRyxJQUFJLCtCQUErQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxvQ0FBb0MsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2RCxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHO2dCQUNsQyxTQUFTLEVBQUUsRUFBRTtnQkFDYixJQUFJO2FBQ0osQ0FBQztTQUNGO2FBQU07WUFDTixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN2QztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQVNELFFBQVE7UUFDUCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzRCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsRUFDekcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQ3pCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU8sVUFBVTtRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RixDQUFDOzs7WUFwREQsU0FBUyxTQUFDO2dCQUNWLFFBQVEsRUFBRSxJQUFJLFVBQVUsR0FBRzthQUMzQjs7O1lBcEJRLGVBQWU7WUFOdkIsZ0JBQWdCO1lBRGhCLFdBQVc7Ozt3QkFvQ1YsS0FBSyxTQUFDLEdBQUcsVUFBVSxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0T25Jbml0LFxuXHRPbkRlc3Ryb3ksXG5cdERpcmVjdGl2ZSxcblx0SW5wdXQsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRFbWJlZGRlZFZpZXdSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IHRhcCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQuc2VydmljZVwiO1xuaW1wb3J0IHtcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbixcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uLFxuXHRpc1ZpZXdwb3J0Q29uZGl0aW9uTWF0Y2hcbn0gZnJvbSBcIi4vdmlld3BvcnQudXRpbFwiO1xuaW1wb3J0IHsgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMsIFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcblxuY29uc3QgTkFNRV9DQU1FTCA9IFwic3N2Vmlld3BvcnRNYXRjaGVyVmFyXCI7XG5cbmV4cG9ydCBjbGFzcyBTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0IHtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwdWJsaWMgJGltcGxpY2l0ID0gZmFsc2UsXG5cdCkgeyB9XG5cbn1cblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiBgWyR7TkFNRV9DQU1FTH1dYCxcbn0pXG5leHBvcnQgY2xhc3MgU3N2Vmlld3BvcnRNYXRjaGVyVmFyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG5cdHByaXZhdGUgX21hdGNoQ29uZGl0aW9uczogVmlld3BvcnRNYXRjaENvbmRpdGlvbnMgPSB7fTtcblx0cHJpdmF0ZSBfY29udGV4dCA9IG5ldyBTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfdXBkYXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuXHRwcml2YXRlIF92aWV3UmVmITogRW1iZWRkZWRWaWV3UmVmPFNzdlZpZXdwb3J0TWF0Y2hlclZhckNvbnRleHQ+O1xuXG5cdEBJbnB1dChgJHtOQU1FX0NBTUVMfVdoZW5gKSBzZXQgY29uZGl0aW9uKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uKSB7XG5cdFx0aWYgKGlzVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24odmFsdWUpKSB7XG5cdFx0XHR0aGlzLl9tYXRjaENvbmRpdGlvbnMuZXhwcmVzc2lvbiA9IHZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoaXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgW29wLCBzaXplXSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fbWF0Y2hDb25kaXRpb25zLmV4cHJlc3Npb24gPSB7XG5cdFx0XHRcdG9wZXJhdGlvbjogb3AsXG5cdFx0XHRcdHNpemVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX21hdGNoQ29uZGl0aW9ucy5zaXplVHlwZSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMuX3VwZGF0ZSQubmV4dCgpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB2aWV3cG9ydDogVmlld3BvcnRTZXJ2aWNlLFxuXHRcdHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcblx0XHRwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0Pixcblx0KSB7XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnVwZGF0ZVZpZXcoKTtcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLnZpZXdwb3J0LnNpemVUeXBlJCwgdGhpcy5fdXBkYXRlJF0pLnBpcGUoXG5cdFx0XHRtYXAoKFtzaXplVHlwZV0pID0+IGlzVmlld3BvcnRDb25kaXRpb25NYXRjaChzaXplVHlwZSwgdGhpcy5fbWF0Y2hDb25kaXRpb25zLCB0aGlzLnZpZXdwb3J0LnNpemVUeXBlTWFwKSksXG5cdFx0XHR0YXAoeCA9PiB0aGlzLl9jb250ZXh0LiRpbXBsaWNpdCA9IHgpLFxuXHRcdFx0dGFwKCgpID0+IHRoaXMuX3ZpZXdSZWYubWFya0ZvckNoZWNrKCkpLFxuXHRcdFx0dGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcblx0XHQpLnN1YnNjcmliZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5fZGVzdHJveSQubmV4dCgpO1xuXHRcdHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVZpZXcoKTogdm9pZCB7XG5cdFx0dGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG5cdFx0dGhpcy5fdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZiwgdGhpcy5fY29udGV4dCk7XG5cdH1cblxufVxuIl19
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=