@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
@@ -0,0 +1,43 @@
1
+ import { Injectable, Inject, InjectionToken, Optional } from "@angular/core";
2
+ import { DeviceType } from "./viewport.model";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./viewport.model";
5
+ // todo: make this configurable
6
+ /** Viewport size for SSR. */
7
+ const viewportSizeSSR = {
8
+ [DeviceType.desktop]: {
9
+ width: 1366,
10
+ height: 768,
11
+ },
12
+ [DeviceType.tablet]: {
13
+ width: 768,
14
+ height: 1024,
15
+ },
16
+ [DeviceType.mobile]: {
17
+ width: 414,
18
+ height: 736,
19
+ },
20
+ };
21
+ export const UX_VIEWPORT_SSR_DEVICE = new InjectionToken("@ssv/ngx.ux-config/viewport/ssr-device");
22
+ export class ViewportServerSizeService {
23
+ constructor(deviceType) {
24
+ this.deviceType = deviceType;
25
+ }
26
+ get() {
27
+ return viewportSizeSSR[this.deviceType] || viewportSizeSSR[DeviceType.desktop];
28
+ }
29
+ }
30
+ ViewportServerSizeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportServerSizeService, deps: [{ token: UX_VIEWPORT_SSR_DEVICE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
31
+ ViewportServerSizeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportServerSizeService, providedIn: "root" });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportServerSizeService, decorators: [{
33
+ type: Injectable,
34
+ args: [{
35
+ providedIn: "root",
36
+ }]
37
+ }], ctorParameters: function () { return [{ type: i1.DeviceType, decorators: [{
38
+ type: Optional
39
+ }, {
40
+ type: Inject,
41
+ args: [UX_VIEWPORT_SSR_DEVICE]
42
+ }] }]; } });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtc2VydmVyLXNpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aWV3cG9ydC92aWV3cG9ydC1zZXJ2ZXItc2l6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHN0UsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRzVELCtCQUErQjtBQUMvQiw2QkFBNkI7QUFDN0IsTUFBTSxlQUFlLEdBQTZCO0lBQ2pELENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3JCLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLEdBQUc7S0FDWDtJQUNELENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3BCLEtBQUssRUFBRSxHQUFHO1FBQ1YsTUFBTSxFQUFFLElBQUk7S0FDWjtJQUNELENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3BCLEtBQUssRUFBRSxHQUFHO1FBQ1YsTUFBTSxFQUFFLEdBQUc7S0FDWDtDQUNELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBWSx3Q0FBd0MsQ0FBQyxDQUFDO0FBSzlHLE1BQU0sT0FBTyx5QkFBeUI7SUFFckMsWUFDcUQsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUUzRSxDQUFDO0lBRUQsR0FBRztRQUNGLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxlQUFlLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLENBQUM7O3NIQVRXLHlCQUF5QixrQkFHaEIsc0JBQXNCOzBIQUgvQix5QkFBeUIsY0FGekIsTUFBTTsyRkFFTix5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCOzswQkFJRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaW50ZXJuYWwubW9kZWxcIjtcclxuaW1wb3J0IHsgRGV2aWNlVHlwZSwgVmlld3BvcnRTaXplIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcclxuaW1wb3J0IHsgVXhPcHRpb25zIH0gZnJvbSBcIi4uL2NvbmZpZ1wiO1xyXG5cclxuLy8gdG9kbzogbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxyXG4vKiogVmlld3BvcnQgc2l6ZSBmb3IgU1NSLiAqL1xyXG5jb25zdCB2aWV3cG9ydFNpemVTU1I6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplPiA9IHtcclxuXHRbRGV2aWNlVHlwZS5kZXNrdG9wXToge1xyXG5cdFx0d2lkdGg6IDEzNjYsXHJcblx0XHRoZWlnaHQ6IDc2OCxcclxuXHR9LFxyXG5cdFtEZXZpY2VUeXBlLnRhYmxldF06IHtcclxuXHRcdHdpZHRoOiA3NjgsXHJcblx0XHRoZWlnaHQ6IDEwMjQsXHJcblx0fSxcclxuXHRbRGV2aWNlVHlwZS5tb2JpbGVdOiB7XHJcblx0XHR3aWR0aDogNDE0LFxyXG5cdFx0aGVpZ2h0OiA3MzYsXHJcblx0fSxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBVWF9WSUVXUE9SVF9TU1JfREVWSUNFID0gbmV3IEluamVjdGlvblRva2VuPFV4T3B0aW9ucz4oXCJAc3N2L25neC51eC1jb25maWcvdmlld3BvcnQvc3NyLWRldmljZVwiKTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdwb3J0U2VydmVyU2l6ZVNlcnZpY2Uge1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdEBPcHRpb25hbCgpIEBJbmplY3QoVVhfVklFV1BPUlRfU1NSX0RFVklDRSkgcHJpdmF0ZSBkZXZpY2VUeXBlOiBEZXZpY2VUeXBlLFxyXG5cdCkge1xyXG5cdH1cclxuXHJcblx0Z2V0KCk6IFZpZXdwb3J0U2l6ZSB7XHJcblx0XHRyZXR1cm4gdmlld3BvcnRTaXplU1NSW3RoaXMuZGV2aWNlVHlwZV0gfHwgdmlld3BvcnRTaXplU1NSW0RldmljZVR5cGUuZGVza3RvcF07XHJcblx0fVxyXG5cclxufVxyXG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { ViewportDataMatchStrategy } from "./viewport-data/viewport-data-matcher";
2
+ /** Default viewport breakpoints. */
3
+ export const UX_VIEWPORT_DEFAULT_BREAKPOINTS = {
4
+ xsmall: 450,
5
+ small: 767,
6
+ medium: 992,
7
+ large: 1280,
8
+ fhd: 1920,
9
+ qhd: 2560,
10
+ uhd4k: 3840,
11
+ uhd8k: 7680,
12
+ };
13
+ export const UX_VIEWPORT_DEFAULT_CONFIG = {
14
+ resizePollingSpeed: 33,
15
+ breakpoints: UX_VIEWPORT_DEFAULT_BREAKPOINTS,
16
+ defaultDataMatchStrategy: ViewportDataMatchStrategy.smaller,
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmlld3BvcnQvdmlld3BvcnQuY29uc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHbEYsb0NBQW9DO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUF1QjtJQUNsRSxNQUFNLEVBQUUsR0FBRztJQUNYLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7SUFDWCxLQUFLLEVBQUUsSUFBSTtJQUNYLEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxLQUFLLEVBQUUsSUFBSTtJQUNYLEtBQUssRUFBRSxJQUFJO0NBQ1gsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFzQjtJQUM1RCxrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLFdBQVcsRUFBRSwrQkFBK0I7SUFDNUMsd0JBQXdCLEVBQUUseUJBQXlCLENBQUMsT0FBTztDQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi9pbnRlcm5hbC9pbnRlcm5hbC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5IH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS92aWV3cG9ydC1kYXRhLW1hdGNoZXJcIjtcclxuaW1wb3J0IHsgVXhWaWV3cG9ydE9wdGlvbnMgfSBmcm9tIFwiLi92aWV3cG9ydC5tb2RlbFwiO1xyXG5cclxuLyoqIERlZmF1bHQgdmlld3BvcnQgYnJlYWtwb2ludHMuICovXHJcbmV4cG9ydCBjb25zdCBVWF9WSUVXUE9SVF9ERUZBVUxUX0JSRUFLUE9JTlRTOiBEaWN0aW9uYXJ5PG51bWJlcj4gPSB7XHJcblx0eHNtYWxsOiA0NTAsXHJcblx0c21hbGw6IDc2NyxcclxuXHRtZWRpdW06IDk5MixcclxuXHRsYXJnZTogMTI4MCxcclxuXHRmaGQ6IDE5MjAsXHJcblx0cWhkOiAyNTYwLFxyXG5cdHVoZDRrOiAzODQwLFxyXG5cdHVoZDhrOiA3NjgwLFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFVYX1ZJRVdQT1JUX0RFRkFVTFRfQ09ORklHOiBVeFZpZXdwb3J0T3B0aW9ucyA9IHtcclxuXHRyZXNpemVQb2xsaW5nU3BlZWQ6IDMzLFxyXG5cdGJyZWFrcG9pbnRzOiBVWF9WSUVXUE9SVF9ERUZBVUxUX0JSRUFLUE9JTlRTLFxyXG5cdGRlZmF1bHREYXRhTWF0Y2hTdHJhdGVneTogVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5zbWFsbGVyLFxyXG59O1xyXG4iXX0=
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The indices of each breakpoint provided based on the `UX_VIEWPORT_DEFAULT_BREAKPOINTS`.
3
+ * @see UX_VIEWPORT_DEFAULT_BREAKPOINTS
4
+ */
5
+ export var ViewportSizeType;
6
+ (function (ViewportSizeType) {
7
+ ViewportSizeType[ViewportSizeType["xsmall"] = 0] = "xsmall";
8
+ ViewportSizeType[ViewportSizeType["small"] = 1] = "small";
9
+ ViewportSizeType[ViewportSizeType["medium"] = 2] = "medium";
10
+ ViewportSizeType[ViewportSizeType["large"] = 3] = "large";
11
+ ViewportSizeType[ViewportSizeType["fhd"] = 4] = "fhd";
12
+ ViewportSizeType[ViewportSizeType["qhd"] = 6] = "qhd";
13
+ ViewportSizeType[ViewportSizeType["uhd4k"] = 7] = "uhd4k";
14
+ ViewportSizeType[ViewportSizeType["uhd8k"] = 8] = "uhd8k";
15
+ })(ViewportSizeType || (ViewportSizeType = {}));
16
+ export var ComparisonOperation;
17
+ (function (ComparisonOperation) {
18
+ ComparisonOperation["equals"] = "=";
19
+ ComparisonOperation["notEquals"] = "<>";
20
+ ComparisonOperation["lessThan"] = "<";
21
+ ComparisonOperation["lessOrEqualThan"] = "<=";
22
+ ComparisonOperation["greaterThan"] = ">";
23
+ ComparisonOperation["greaterOrEqualThan"] = ">=";
24
+ })(ComparisonOperation || (ComparisonOperation = {}));
25
+ export var DeviceType;
26
+ (function (DeviceType) {
27
+ DeviceType["desktop"] = "desktop";
28
+ DeviceType["mobile"] = "mobile";
29
+ DeviceType["tablet"] = "tablet";
30
+ })(DeviceType || (DeviceType = {}));
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmlld3BvcnQvdmlld3BvcnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7OztHQUdHO0FBQ0gsTUFBTSxDQUFOLElBQVksZ0JBU1g7QUFURCxXQUFZLGdCQUFnQjtJQUMzQiwyREFBVSxDQUFBO0lBQ1YseURBQVMsQ0FBQTtJQUNULDJEQUFVLENBQUE7SUFDVix5REFBUyxDQUFBO0lBQ1QscURBQU8sQ0FBQTtJQUNQLHFEQUFPLENBQUE7SUFDUCx5REFBUyxDQUFBO0lBQ1QseURBQVMsQ0FBQTtBQUNWLENBQUMsRUFUVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBUzNCO0FBRUQsTUFBTSxDQUFOLElBQVksbUJBT1g7QUFQRCxXQUFZLG1CQUFtQjtJQUM5QixtQ0FBWSxDQUFBO0lBQ1osdUNBQWdCLENBQUE7SUFDaEIscUNBQWMsQ0FBQTtJQUNkLDZDQUFzQixDQUFBO0lBQ3RCLHdDQUFpQixDQUFBO0lBQ2pCLGdEQUF5QixDQUFBO0FBQzFCLENBQUMsRUFQVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBTzlCO0FBRUQsTUFBTSxDQUFOLElBQVksVUFJWDtBQUpELFdBQVksVUFBVTtJQUNyQixpQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBaUIsQ0FBQTtJQUNqQiwrQkFBaUIsQ0FBQTtBQUNsQixDQUFDLEVBSlcsVUFBVSxLQUFWLFVBQVUsUUFJckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uL2ludGVybmFsL2ludGVybmFsLm1vZGVsXCI7XHJcbmltcG9ydCB7IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhXCI7XHJcblxyXG4vKipcclxuICogVGhlIGluZGljZXMgb2YgZWFjaCBicmVha3BvaW50IHByb3ZpZGVkIGJhc2VkIG9uIHRoZSBgVVhfVklFV1BPUlRfREVGQVVMVF9CUkVBS1BPSU5UU2AuXHJcbiAqIEBzZWUgVVhfVklFV1BPUlRfREVGQVVMVF9CUkVBS1BPSU5UU1xyXG4gKi9cclxuZXhwb3J0IGVudW0gVmlld3BvcnRTaXplVHlwZSB7XHJcblx0eHNtYWxsID0gMCxcclxuXHRzbWFsbCA9IDEsXHJcblx0bWVkaXVtID0gMixcclxuXHRsYXJnZSA9IDMsXHJcblx0ZmhkID0gNCxcclxuXHRxaGQgPSA2LFxyXG5cdHVoZDRrID0gNyxcclxuXHR1aGQ4ayA9IDgsXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIENvbXBhcmlzb25PcGVyYXRpb24ge1xyXG5cdGVxdWFscyA9IFwiPVwiLFxyXG5cdG5vdEVxdWFscyA9IFwiPD5cIixcclxuXHRsZXNzVGhhbiA9IFwiPFwiLFxyXG5cdGxlc3NPckVxdWFsVGhhbiA9IFwiPD1cIixcclxuXHRncmVhdGVyVGhhbiA9IFwiPlwiLFxyXG5cdGdyZWF0ZXJPckVxdWFsVGhhbiA9IFwiPj1cIixcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRGV2aWNlVHlwZSB7XHJcblx0ZGVza3RvcCA9IFwiZGVza3RvcFwiLFxyXG5cdG1vYmlsZSA9IFwibW9iaWxlXCIsXHJcblx0dGFibGV0ID0gXCJ0YWJsZXRcIlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFV4Vmlld3BvcnRPcHRpb25zIHtcclxuXHQvKiogUG9sbGluZyBzcGVlZCBvbiByZXNpemluZyAoaW4gbWlsbGlzZWNvbmRzKS4gZS5nLiB0aGUgaGlnaGVyIHRoZSBudW1iZXIgdGhlIGxvbmdlciBpdCB0YWtlcyB0byByZWNhbGN1bGF0ZS4gKi9cclxuXHRyZXNpemVQb2xsaW5nU3BlZWQ6IG51bWJlcjtcclxuXHJcblx0LyoqIEJyZWFrcG9pbnRzIHRvIHVzZS4gS2V5IG5lZWRzIHRvIG1hdGNoIHRoZSBzaXplIHR5cGUgYW5kIHRoZSB2YWx1ZSB0aGUgd2lkdGggdGhyZXNob2xkLlxyXG5cdCAqIGUuZy4gZ2l2ZW4gd2lkdGggJzEwMDAnIGFuZCBgbWVkaXVtYCBpcyBzZXQgdG8gJzk5MicgPT4gYGxhcmdlYC5cclxuXHQgKi9cclxuXHRicmVha3BvaW50czogRGljdGlvbmFyeTxudW1iZXI+O1xyXG5cclxuXHQvKiogRGVmYXVsdCBkYXRhIG1hdGNoIHN0cmF0ZWd5IHRvIHVzZS4gKi9cclxuXHRkZWZhdWx0RGF0YU1hdGNoU3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3k7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRTaXplIHtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0U2l6ZVR5cGVJbmZvIHtcclxuXHR0eXBlOiBudW1iZXI7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHdpZHRoVGhyZXNob2xkOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMge1xyXG5cdHNpemVUeXBlPzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xyXG5cdHNpemVUeXBlRXhjbHVkZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcclxuXHRleHByZXNzaW9uPzogVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb247XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24ge1xyXG5cdHNpemU6IHN0cmluZztcclxuXHRvcGVyYXRpb246IENvbXBhcmlzb25PcGVyYXRpb247XHJcbn1cclxuIl19
@@ -0,0 +1,67 @@
1
+ import { Injectable, Inject } from "@angular/core";
2
+ import { fromEvent, of } from "rxjs";
3
+ import { map, tap, distinctUntilChanged, startWith, share, shareReplay, auditTime, } from "rxjs/operators";
4
+ import { UX_CONFIG } from "../config";
5
+ import { generateViewportSizeTypeInfoList, generateViewportSizeTypeInfoRefs, getSizeTypeInfo } from "./viewport.util";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../platform/window";
8
+ import * as i2 from "./viewport-server-size.service";
9
+ export class ViewportService {
10
+ constructor(windowRef, viewportServerSize, config) {
11
+ this.windowRef = windowRef;
12
+ this.viewportServerSize = viewportServerSize;
13
+ console.warn(">>>> yolo service");
14
+ this._sizeTypes = generateViewportSizeTypeInfoList(config.viewport.breakpoints);
15
+ this._sizeTypeMap = generateViewportSizeTypeInfoRefs(this._sizeTypes);
16
+ if (windowRef.hasNative) {
17
+ this.resizeSnap$ = fromEvent(window, "resize").pipe(map(() => this.getViewportSize()), share());
18
+ this.resize$ = this.resizeSnap$.pipe(auditTime(config.viewport.resizePollingSpeed), share());
19
+ }
20
+ else {
21
+ this.resizeSnap$ = this.resize$ = of(viewportServerSize.get());
22
+ }
23
+ const size = this.getViewportSize();
24
+ this._sizeTypeSnapshot = getSizeTypeInfo(size.width, this.sizeTypes);
25
+ const sizeFn = (obs$) => obs$.pipe(startWith(size), distinctUntilChanged((a, b) => a.width === b.width && a.height === b.height), shareReplay(1));
26
+ this.sizeSnap$ = sizeFn(this.resizeSnap$);
27
+ this.size$ = sizeFn(this.resize$);
28
+ const sizeTypeFn = (obs$) => obs$.pipe(distinctUntilChanged((a, b) => a.width === b.width), map(x => getSizeTypeInfo(x.width, this.sizeTypes)), distinctUntilChanged(), tap(x => this._sizeTypeSnapshot = x), shareReplay(1));
29
+ this.sizeType$ = sizeTypeFn(this.size$);
30
+ this.sizeTypeSnap$ = sizeTypeFn(this.sizeSnap$);
31
+ }
32
+ /** Viewport size type snapshot of the last value. (Prefer use `sizeType$` observable when possible.) */
33
+ get sizeTypeSnapshot() { return this._sizeTypeSnapshot; }
34
+ /** Size types refs of the generated viewport size type info. */
35
+ get sizeTypeMap() { return this._sizeTypeMap; }
36
+ /** Viewport size types list ordered by type, smallest to largest. */
37
+ get sizeTypes() { return this._sizeTypes; }
38
+ /** Returns the current viewport size */
39
+ getViewportSize() {
40
+ if (!this.windowRef.hasNative) {
41
+ return this.viewportServerSize.get();
42
+ }
43
+ const ua = navigator.userAgent.toLowerCase();
44
+ if (ua.indexOf("safari") !== -1 && ua.indexOf("chrome") === -1) { // safari subtracts the scrollbar width
45
+ return {
46
+ width: this.windowRef.native.document.documentElement.clientWidth,
47
+ height: this.windowRef.native.document.documentElement.clientHeight,
48
+ };
49
+ }
50
+ return {
51
+ width: this.windowRef.native.innerWidth,
52
+ height: this.windowRef.native.innerHeight,
53
+ };
54
+ }
55
+ }
56
+ ViewportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportService, deps: [{ token: i1.WindowRef }, { token: i2.ViewportServerSizeService }, { token: UX_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
57
+ ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportService, providedIn: "root" });
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportService, decorators: [{
59
+ type: Injectable,
60
+ args: [{
61
+ providedIn: "root",
62
+ }]
63
+ }], ctorParameters: function () { return [{ type: i1.WindowRef }, { type: i2.ViewportServerSizeService }, { type: undefined, decorators: [{
64
+ type: Inject,
65
+ args: [UX_CONFIG]
66
+ }] }]; } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aWV3cG9ydC92aWV3cG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFDTixHQUFHLEVBQ0gsR0FBRyxFQUNILG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEdBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSWpELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQU10SCxNQUFNLE9BQU8sZUFBZTtJQWlDM0IsWUFDUyxTQUFvQixFQUNwQixrQkFBNkMsRUFDbEMsTUFBaUI7UUFGNUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQTJCO1FBR3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLGdDQUFnQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLFlBQVksR0FBRyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEUsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFRLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3pELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxF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LEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVc7Z0JBQ2pFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVk7YUFDbkUsQ0FBQztTQUNGO1FBRUQsT0FBTztZQUNOLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQ3ZDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXO1NBQ3pDLENBQUM7SUFDSCxDQUFDOzs0R0FqR1csZUFBZSxvRkFvQ2xCLFNBQVM7Z0hBcENOLGVBQWUsY0FGZixNQUFNOzJGQUVOLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCOzswQkFxQ0UsTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50LCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7XHJcblx0bWFwLFxyXG5cdHRhcCxcclxuXHRkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuXHRzdGFydFdpdGgsXHJcblx0c2hhcmUsXHJcblx0c2hhcmVSZXBsYXksXHJcblx0YXVkaXRUaW1lLFxyXG59IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHsgVXhPcHRpb25zLCBVWF9DT05GSUcgfSBmcm9tIFwiLi4vY29uZmlnXCI7XHJcbmltcG9ydCB7IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLCBWaWV3cG9ydFNpemUgfSBmcm9tIFwiLi92aWV3cG9ydC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBXaW5kb3dSZWYgfSBmcm9tIFwiLi4vcGxhdGZvcm0vd2luZG93XCI7XHJcbmltcG9ydCB7IFZpZXdwb3J0U2VydmVyU2l6ZVNlcnZpY2UgfSBmcm9tIFwiLi92aWV3cG9ydC1zZXJ2ZXItc2l6ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGdlbmVyYXRlVmlld3BvcnRTaXplVHlwZUluZm9MaXN0LCBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGVJbmZvUmVmcywgZ2V0U2l6ZVR5cGVJbmZvIH0gZnJvbSBcIi4vdmlld3BvcnQudXRpbFwiO1xyXG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uL2ludGVybmFsL2ludGVybmFsLm1vZGVsXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaWV3cG9ydFNlcnZpY2Uge1xyXG5cclxuXHQvKiogV2luZG93IHJlc2l6ZSBvYnNlcnZhYmxlLiAqL1xyXG5cdHJlYWRvbmx5IHJlc2l6ZVNuYXAkOiBPYnNlcnZhYmxlPFZpZXdwb3J0U2l6ZT47XHJcblxyXG5cdC8qKiBXaW5kb3cgcmVzaXplIG9ic2VydmFibGUgKHdoaWNoIGlzIGFsc28gdGhyb3R0bGVkKS4gKi9cclxuXHRyZWFkb25seSByZXNpemUkOiBPYnNlcnZhYmxlPFZpZXdwb3J0U2l6ZT47XHJcblxyXG5cdC8qKiBWaWV3cG9ydCBzaXplIHR5cGUgb2JzZXJ2YWJsZSAod2hpY2ggaXMgYWxzbyB0aHJvdHRsZWQpLiAqL1xyXG5cdHJlYWRvbmx5IHNpemVUeXBlJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemVUeXBlSW5mbz47XHJcblxyXG5cdC8qKiBWaWV3cG9ydCBzaXplIHR5cGUgb2JzZXJ2YWJsZS4gKi9cclxuXHRyZWFkb25seSBzaXplVHlwZVNuYXAkOiBPYnNlcnZhYmxlPFZpZXdwb3J0U2l6ZVR5cGVJbmZvPjtcclxuXHJcblx0LyoqIFZpZXdwb3J0IHNpemUgdHlwZSBzbmFwc2hvdCBvZiB0aGUgbGFzdCB2YWx1ZS4gKFByZWZlciB1c2UgYHNpemVUeXBlJGAgb2JzZXJ2YWJsZSB3aGVuIHBvc3NpYmxlLikgKi9cclxuXHRnZXQgc2l6ZVR5cGVTbmFwc2hvdCgpOiBWaWV3cG9ydFNpemVUeXBlSW5mbyB7IHJldHVybiB0aGlzLl9zaXplVHlwZVNuYXBzaG90OyB9XHJcblxyXG5cdC8qKiBWaWV3cG9ydCBzaXplIG9ic2VydmFibGUgKHdoaWNoIGlzIGFsc28gdGhyb3R0bGVkKS4gKi9cclxuXHRyZWFkb25seSBzaXplJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemU+O1xyXG5cclxuXHQvKiogVmlld3BvcnQgc2l6ZSBvYnNlcnZhYmxlLiAqL1xyXG5cdHJlYWRvbmx5IHNpemVTbmFwJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemU+O1xyXG5cclxuXHQvKiogU2l6ZSB0eXBlcyByZWZzIG9mIHRoZSBnZW5lcmF0ZWQgdmlld3BvcnQgc2l6ZSB0eXBlIGluZm8uICovXHJcblx0Z2V0IHNpemVUeXBlTWFwKCk6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+IHsgcmV0dXJuIHRoaXMuX3NpemVUeXBlTWFwOyB9XHJcblxyXG5cdC8qKiBWaWV3cG9ydCBzaXplIHR5cGVzIGxpc3Qgb3JkZXJlZCBieSB0eXBlLCBzbWFsbGVzdCB0byBsYXJnZXN0LiAqL1xyXG5cdGdldCBzaXplVHlwZXMoKTogVmlld3BvcnRTaXplVHlwZUluZm9bXSB7IHJldHVybiB0aGlzLl9zaXplVHlwZXM7IH1cclxuXHJcblx0cHJpdmF0ZSBfc2l6ZVR5cGVNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+O1xyXG5cdHByaXZhdGUgX3NpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXTtcclxuXHRwcml2YXRlIF9zaXplVHlwZVNuYXBzaG90OiBWaWV3cG9ydFNpemVUeXBlSW5mbztcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHdpbmRvd1JlZjogV2luZG93UmVmLFxyXG5cdFx0cHJpdmF0ZSB2aWV3cG9ydFNlcnZlclNpemU6IFZpZXdwb3J0U2VydmVyU2l6ZVNlcnZpY2UsXHJcblx0XHRASW5qZWN0KFVYX0NPTkZJRykgY29uZmlnOiBVeE9wdGlvbnMsXHJcblx0KSB7XHJcblx0XHRjb25zb2xlLndhcm4oXCI+Pj4+IHlvbG8gc2VydmljZVwiKTtcclxuXHRcdHRoaXMuX3NpemVUeXBlcyA9IGdlbmVyYXRlVmlld3BvcnRTaXplVHlwZUluZm9MaXN0KGNvbmZpZy52aWV3cG9ydC5icmVha3BvaW50cyk7XHJcblx0XHR0aGlzLl9zaXplVHlwZU1hcCA9IGdlbmVyYXRlVmlld3BvcnRTaXplVHlwZUluZm9SZWZzKHRoaXMuX3NpemVUeXBlcyk7XHJcblxyXG5cdFx0aWYgKHdpbmRvd1JlZi5oYXNOYXRpdmUpIHtcclxuXHRcdFx0dGhpcy5yZXNpemVTbmFwJCA9IGZyb21FdmVudDxFdmVudD4od2luZG93LCBcInJlc2l6ZVwiKS5waXBlKFxyXG5cdFx0XHRcdG1hcCgoKSA9PiB0aGlzLmdldFZpZXdwb3J0U2l6ZSgpKSxcclxuXHRcdFx0XHRzaGFyZSgpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLnJlc2l6ZSQgPSB0aGlzLnJlc2l6ZVNuYXAkLnBpcGUoXHJcblx0XHRcdFx0YXVkaXRUaW1lKGNvbmZpZy52aWV3cG9ydC5yZXNpemVQb2xsaW5nU3BlZWQpLFxyXG5cdFx0XHRcdHNoYXJlKCksXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnJlc2l6ZVNuYXAkID0gdGhpcy5yZXNpemUkID0gb2Yodmlld3BvcnRTZXJ2ZXJTaXplLmdldCgpKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHNpemUgPSB0aGlzLmdldFZpZXdwb3J0U2l6ZSgpO1xyXG5cdFx0dGhpcy5fc2l6ZVR5cGVTbmFwc2hvdCA9IGdldFNpemVUeXBlSW5mbyhzaXplLndpZHRoLCB0aGlzLnNpemVUeXBlcyk7XHJcblxyXG5cdFx0Y29uc3Qgc2l6ZUZuID0gKG9icyQ6IE9ic2VydmFibGU8Vmlld3BvcnRTaXplPikgPT4gb2JzJC5waXBlKFxyXG5cdFx0XHRzdGFydFdpdGgoc2l6ZSksXHJcblx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodCksXHJcblx0XHRcdHNoYXJlUmVwbGF5KDEpLFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnNpemVTbmFwJCA9IHNpemVGbih0aGlzLnJlc2l6ZVNuYXAkKTtcclxuXHRcdHRoaXMuc2l6ZSQgPSBzaXplRm4odGhpcy5yZXNpemUkKTtcclxuXHJcblx0XHRjb25zdCBzaXplVHlwZUZuID0gKG9icyQ6IE9ic2VydmFibGU8Vmlld3BvcnRTaXplPikgPT4gb2JzJC5waXBlKFxyXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYS53aWR0aCA9PT0gYi53aWR0aCksXHJcblx0XHRcdG1hcCh4ID0+IGdldFNpemVUeXBlSW5mbyh4LndpZHRoLCB0aGlzLnNpemVUeXBlcykpLFxyXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG5cdFx0XHR0YXAoeCA9PiB0aGlzLl9zaXplVHlwZVNuYXBzaG90ID0geCksXHJcblx0XHRcdHNoYXJlUmVwbGF5KDEpLFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnNpemVUeXBlJCA9IHNpemVUeXBlRm4odGhpcy5zaXplJCk7XHJcblx0XHR0aGlzLnNpemVUeXBlU25hcCQgPSBzaXplVHlwZUZuKHRoaXMuc2l6ZVNuYXAkKTtcclxuXHR9XHJcblxyXG5cdC8qKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZpZXdwb3J0IHNpemUgKi9cclxuXHRwcml2YXRlIGdldFZpZXdwb3J0U2l6ZSgpOiBWaWV3cG9ydFNpemUge1xyXG5cdFx0aWYgKCF0aGlzLndpbmRvd1JlZi5oYXNOYXRpdmUpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMudmlld3BvcnRTZXJ2ZXJTaXplLmdldCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0aWYgKHVhLmluZGV4T2YoXCJzYWZhcmlcIikgIT09IC0xICYmIHVhLmluZGV4T2YoXCJjaHJvbWVcIikgPT09IC0xKSB7IC8vIHNhZmFyaSBzdWJ0cmFjdHMgdGhlIHNjcm9sbGJhciB3aWR0aFxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdHdpZHRoOiB0aGlzLndpbmRvd1JlZi5uYXRpdmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLFxyXG5cdFx0XHRcdGhlaWdodDogdGhpcy53aW5kb3dSZWYubmF0aXZlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0d2lkdGg6IHRoaXMud2luZG93UmVmLm5hdGl2ZS5pbm5lcldpZHRoLFxyXG5cdFx0XHRoZWlnaHQ6IHRoaXMud2luZG93UmVmLm5hdGl2ZS5pbm5lckhlaWdodCxcclxuXHRcdH07XHJcblx0fVxyXG5cclxufVxyXG4iXX0=
@@ -0,0 +1,117 @@
1
+ import { ComparisonOperation } from "./viewport.model";
2
+ export function isViewportSizeMatcherExpression(value) {
3
+ if (typeof value !== "object" || !value) {
4
+ return false;
5
+ }
6
+ const args = value;
7
+ if (args.size && args.operation) {
8
+ return true;
9
+ }
10
+ return false;
11
+ }
12
+ export function isViewportSizeMatcherTupleExpression(arg) {
13
+ if (!arg) {
14
+ return false;
15
+ }
16
+ if (Array.isArray(arg)) {
17
+ if (arg.length === 2) {
18
+ const [op] = arg;
19
+ return operations.includes(op);
20
+ }
21
+ }
22
+ return false;
23
+ }
24
+ const operations = Object.values(ComparisonOperation);
25
+ export const COMPARISON_OPERATION_FUNC_MAPPING = {
26
+ [ComparisonOperation.equals]: (a, b) => a === b,
27
+ [ComparisonOperation.notEquals]: (a, b) => a !== b,
28
+ [ComparisonOperation.lessThan]: (a, b) => a < b,
29
+ [ComparisonOperation.lessOrEqualThan]: (a, b) => a <= b,
30
+ [ComparisonOperation.greaterThan]: (a, b) => a > b,
31
+ [ComparisonOperation.greaterOrEqualThan]: (a, b) => a >= b,
32
+ };
33
+ export function isViewportConditionMatch(evaluateSize, conditions, viewportSizeTypeInfoRefs) {
34
+ const isExcluded = match(conditions.sizeTypeExclude, evaluateSize.name, false);
35
+ let isIncluded;
36
+ let isExpressionTruthy;
37
+ if (!isExcluded && conditions.expression) {
38
+ const ref = viewportSizeTypeInfoRefs[conditions.expression.size];
39
+ if (!ref) {
40
+ throw new Error(`Viewport size type is invalid. Size type: '${conditions.expression.size}'`);
41
+ }
42
+ const expMatcher = COMPARISON_OPERATION_FUNC_MAPPING[conditions.expression.operation];
43
+ isExpressionTruthy = expMatcher(evaluateSize.type, ref.type);
44
+ }
45
+ else {
46
+ isIncluded = match(conditions.sizeType, evaluateSize.name, true);
47
+ }
48
+ const shouldRender = (isExpressionTruthy || isIncluded) && !isExcluded;
49
+ // console.warn(">>> shouldRender", { evaluateSize, conditions, shouldRender });
50
+ return !!shouldRender;
51
+ }
52
+ function match(value, targetValue, defaultValue) {
53
+ if (!value) {
54
+ return defaultValue;
55
+ }
56
+ return Array.isArray(value)
57
+ ? value.includes(targetValue)
58
+ : value === targetValue;
59
+ }
60
+ export function getSizeTypeInfo(width, sizeTypes) {
61
+ const lastEntryIndex = sizeTypes.length - 1;
62
+ for (let idx = 0; idx < lastEntryIndex; idx++) {
63
+ const viewportSizeTypeInfo = sizeTypes[idx];
64
+ if (width <= viewportSizeTypeInfo.widthThreshold) {
65
+ return viewportSizeTypeInfo;
66
+ }
67
+ }
68
+ return sizeTypes[lastEntryIndex];
69
+ }
70
+ /**
71
+ * Converts the breakpoints into a 2 dimensional array containing the name and width, and sorted from
72
+ * smallest to largest.
73
+ * @param breakpoints the breakpoints obtained from the config
74
+ * @internal
75
+ */
76
+ function getSortedBreakpoints(breakpoints) {
77
+ return Object.entries(breakpoints)
78
+ .sort(([, widthA], [, widthB]) => widthA - widthB);
79
+ }
80
+ /**
81
+ * A util function which generates the ViewportSizeTypeInfo.type for each breakpoint.
82
+ * @param breakpoints the custom breakpoints
83
+ */
84
+ export function generateViewportSizeType(breakpoints) {
85
+ return Object.freeze(getSortedBreakpoints(breakpoints).reduce((dictionary, [name], index) => {
86
+ dictionary[name] = index;
87
+ dictionary[index] = name;
88
+ return dictionary;
89
+ }, {}));
90
+ }
91
+ /**
92
+ * Pre-processes the given breakpoints into an ordered list from smallest to largest while generating
93
+ * all the necessary information on the viewport.
94
+ * @param breakpoints the breakpoints obtained from the config
95
+ * @internal
96
+ */
97
+ export function generateViewportSizeTypeInfoList(breakpoints) {
98
+ return getSortedBreakpoints(breakpoints)
99
+ .map(([name, width], index) => (Object.freeze({
100
+ name,
101
+ type: index,
102
+ widthThreshold: width
103
+ })));
104
+ }
105
+ /**
106
+ * Converts the breakpoint list into a dictionary while using the name as key.
107
+ * @param breakpointList the list of breakpoints
108
+ * @internal
109
+ */
110
+ export function generateViewportSizeTypeInfoRefs(breakpointList) {
111
+ return Object.freeze(breakpointList.reduce((dictionary, breakpoint) => {
112
+ dictionary[breakpoint.name] = breakpoint;
113
+ dictionary[breakpoint.type] = breakpoint;
114
+ return dictionary;
115
+ }, {}));
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aWV3cG9ydC92aWV3cG9ydC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTixtQkFBbUIsRUFJbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixNQUFNLFVBQVUsK0JBQStCLENBQUMsS0FBYztJQUM3RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUN4QyxPQUFPLEtBQUssQ0FBQztLQUNiO0lBQ0QsTUFBTSxJQUFJLEdBQTJDLEtBQUssQ0FBQztJQUMzRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNoQyxPQUFPLElBQUksQ0FBQztLQUNaO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLEdBQVk7SUFDaEUsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNULE9BQU8sS0FBSyxDQUFDO0tBQ2I7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2pCLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMvQjtLQUNEO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZCxDQUFDO0FBR0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFrRDtJQUMvRixDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7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QUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUN6QyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUN6QyxPQUFPLFVBQVUsQ0FBQztJQUNuQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ04sQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uL2ludGVybmFsL2ludGVybmFsLm1vZGVsXCI7XHJcbmltcG9ydCB7XHJcblx0Q29tcGFyaXNvbk9wZXJhdGlvbixcclxuXHRWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbixcclxuXHRWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRWaWV3cG9ydE1hdGNoQ29uZGl0aW9uc1xyXG59IGZyb20gXCIuL3ZpZXdwb3J0Lm1vZGVsXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uIHtcclxuXHRpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8ICF2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRjb25zdCBhcmdzOiBQYXJ0aWFsPFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uPiA9IHZhbHVlO1xyXG5cdGlmIChhcmdzLnNpemUgJiYgYXJncy5vcGVyYXRpb24pIHtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXdwb3J0U2l6ZU1hdGNoZXJUdXBsZUV4cHJlc3Npb24oYXJnOiB1bmtub3duKTogYXJnIGlzIFtDb21wYXJpc29uT3BlcmF0aW9uLCBzdHJpbmddIHtcclxuXHRpZiAoIWFyZykge1xyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XHJcblx0XHRpZiAoYXJnLmxlbmd0aCA9PT0gMikge1xyXG5cdFx0XHRjb25zdCBbb3BdID0gYXJnO1xyXG5cdFx0XHRyZXR1cm4gb3BlcmF0aW9ucy5pbmNsdWRlcyhvcCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuXHJcbmNvbnN0IG9wZXJhdGlvbnMgPSBPYmplY3QudmFsdWVzKENvbXBhcmlzb25PcGVyYXRpb24pO1xyXG5cclxuZXhwb3J0IGNvbnN0IENPTVBBUklTT05fT1BFUkFUSU9OX0ZVTkNfTUFQUElORzogRGljdGlvbmFyeTwoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGJvb2xlYW4+ID0ge1xyXG5cdFtDb21wYXJpc29uT3BlcmF0aW9uLmVxdWFsc106IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSA9PT0gYixcclxuXHRbQ29tcGFyaXNvbk9wZXJhdGlvbi5ub3RFcXVhbHNdOiAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgIT09IGIsXHJcblx0W0NvbXBhcmlzb25PcGVyYXRpb24ubGVzc1RoYW5dOiAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgPCBiLFxyXG5cdFtDb21wYXJpc29uT3BlcmF0aW9uLmxlc3NPckVxdWFsVGhhbl06IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSA8PSBiLFxyXG5cdFtDb21wYXJpc29uT3BlcmF0aW9uLmdyZWF0ZXJUaGFuXTogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhID4gYixcclxuXHRbQ29tcGFyaXNvbk9wZXJhdGlvbi5ncmVhdGVyT3JFcXVhbFRoYW5dOiAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgPj0gYixcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXdwb3J0Q29uZGl0aW9uTWF0Y2goXHJcblx0ZXZhbHVhdGVTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcclxuXHRjb25kaXRpb25zOiBWaWV3cG9ydE1hdGNoQ29uZGl0aW9ucyxcclxuXHR2aWV3cG9ydFNpemVUeXBlSW5mb1JlZnM6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+XHJcbik6IGJvb2xlYW4ge1xyXG5cdGNvbnN0IGlzRXhjbHVkZWQgPSBtYXRjaChjb25kaXRpb25zLnNpemVUeXBlRXhjbHVkZSwgZXZhbHVhdGVTaXplLm5hbWUsIGZhbHNlKTtcclxuXHRsZXQgaXNJbmNsdWRlZDtcclxuXHRsZXQgaXNFeHByZXNzaW9uVHJ1dGh5O1xyXG5cclxuXHRpZiAoIWlzRXhjbHVkZWQgJiYgY29uZGl0aW9ucy5leHByZXNzaW9uKSB7XHJcblx0XHRjb25zdCByZWYgPSB2aWV3cG9ydFNpemVUeXBlSW5mb1JlZnNbY29uZGl0aW9ucy5leHByZXNzaW9uLnNpemVdO1xyXG5cdFx0aWYoIXJlZikge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFZpZXdwb3J0IHNpemUgdHlwZSBpcyBpbnZhbGlkLiBTaXplIHR5cGU6ICcke2NvbmRpdGlvbnMuZXhwcmVzc2lvbi5zaXplfSdgKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGV4cE1hdGNoZXIgPSBDT01QQVJJU09OX09QRVJBVElPTl9GVU5DX01BUFBJTkdbY29uZGl0aW9ucy5leHByZXNzaW9uLm9wZXJhdGlvbl07XHJcblxyXG5cdFx0aXNFeHByZXNzaW9uVHJ1dGh5ID0gZXhwTWF0Y2hlcihldmFsdWF0ZVNpemUudHlwZSwgcmVmLnR5cGUpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRpc0luY2x1ZGVkID0gbWF0Y2goY29uZGl0aW9ucy5zaXplVHlwZSwgZXZhbHVhdGVTaXplLm5hbWUsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0Y29uc3Qgc2hvdWxkUmVuZGVyID0gKGlzRXhwcmVzc2lvblRydXRoeSB8fCBpc0luY2x1ZGVkKSAmJiAhaXNFeGNsdWRlZDtcclxuXHQvLyBjb25zb2xlLndhcm4oXCI+Pj4gc2hvdWxkUmVuZGVyXCIsIHsgZXZhbHVhdGVTaXplLCBjb25kaXRpb25zLCBzaG91bGRSZW5kZXIgfSk7XHJcblx0cmV0dXJuICEhc2hvdWxkUmVuZGVyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBtYXRjaCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkLCB0YXJnZXRWYWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IGJvb2xlYW4pIHtcclxuXHRpZiAoIXZhbHVlKSB7XHJcblx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG5cdH1cclxuXHJcblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpXHJcblx0XHQ/IHZhbHVlLmluY2x1ZGVzKHRhcmdldFZhbHVlKVxyXG5cdFx0OiB2YWx1ZSA9PT0gdGFyZ2V0VmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTaXplVHlwZUluZm8od2lkdGg6IG51bWJlciwgc2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdKTogVmlld3BvcnRTaXplVHlwZUluZm8ge1xyXG5cdGNvbnN0IGxhc3RFbnRyeUluZGV4ID0gc2l6ZVR5cGVzLmxlbmd0aCAtIDE7XHJcblxyXG5cdGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxhc3RFbnRyeUluZGV4OyBpZHgrKykge1xyXG5cdFx0Y29uc3Qgdmlld3BvcnRTaXplVHlwZUluZm8gPSBzaXplVHlwZXNbaWR4XTtcclxuXHJcblx0XHRpZiAod2lkdGggPD0gdmlld3BvcnRTaXplVHlwZUluZm8ud2lkdGhUaHJlc2hvbGQpIHtcclxuXHRcdFx0cmV0dXJuIHZpZXdwb3J0U2l6ZVR5cGVJbmZvO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHNpemVUeXBlc1tsYXN0RW50cnlJbmRleF07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgYnJlYWtwb2ludHMgaW50byBhIDIgZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyB0aGUgbmFtZSBhbmQgd2lkdGgsIGFuZCBzb3J0ZWQgZnJvbVxyXG4gKiAgc21hbGxlc3QgdG8gbGFyZ2VzdC5cclxuICogQHBhcmFtIGJyZWFrcG9pbnRzIHRoZSBicmVha3BvaW50cyBvYnRhaW5lZCBmcm9tIHRoZSBjb25maWdcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTb3J0ZWRCcmVha3BvaW50cyhicmVha3BvaW50czogRGljdGlvbmFyeTxudW1iZXI+KTogW3N0cmluZywgbnVtYmVyXVtdIHtcclxuXHRyZXR1cm4gT2JqZWN0LmVudHJpZXMoYnJlYWtwb2ludHMpXHJcblx0XHQuc29ydCgoWywgd2lkdGhBXSwgWywgd2lkdGhCXSkgPT4gd2lkdGhBIC0gd2lkdGhCKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgdXRpbCBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZXMgdGhlIFZpZXdwb3J0U2l6ZVR5cGVJbmZvLnR5cGUgZm9yIGVhY2ggYnJlYWtwb2ludC5cclxuICogQHBhcmFtIGJyZWFrcG9pbnRzIHRoZSBjdXN0b20gYnJlYWtwb2ludHNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KGJyZWFrcG9pbnRzOiBUKTogVCAmIFJlY29yZDxudW1iZXIsIHN0cmluZz4ge1xyXG5cdHJldHVybiBPYmplY3QuZnJlZXplKFxyXG5cdFx0Z2V0U29ydGVkQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpLnJlZHVjZTxSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+PihcclxuXHRcdFx0KGRpY3Rpb25hcnksIFtuYW1lXSwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRkaWN0aW9uYXJ5W25hbWVdID0gaW5kZXg7XHJcblx0XHRcdFx0ZGljdGlvbmFyeVtpbmRleF0gPSBuYW1lO1xyXG5cdFx0XHRcdHJldHVybiBkaWN0aW9uYXJ5O1xyXG5cdFx0XHR9LCB7fVxyXG5cdFx0KVxyXG5cdCkgYXMgVCAmIFJlY29yZDxudW1iZXIsIHN0cmluZz47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcmUtcHJvY2Vzc2VzIHRoZSBnaXZlbiBicmVha3BvaW50cyBpbnRvIGFuIG9yZGVyZWQgbGlzdCBmcm9tIHNtYWxsZXN0IHRvIGxhcmdlc3Qgd2hpbGUgZ2VuZXJhdGluZ1xyXG4gKiAgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gb24gdGhlIHZpZXdwb3J0LlxyXG4gKiBAcGFyYW0gYnJlYWtwb2ludHMgdGhlIGJyZWFrcG9pbnRzIG9idGFpbmVkIGZyb20gdGhlIGNvbmZpZ1xyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGVJbmZvTGlzdChicmVha3BvaW50czogRGljdGlvbmFyeTxudW1iZXI+KTogVmlld3BvcnRTaXplVHlwZUluZm9bXSB7XHJcblx0cmV0dXJuIGdldFNvcnRlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzKVxyXG5cdFx0Lm1hcCgoW25hbWUsIHdpZHRoXSwgaW5kZXgpID0+XHJcblx0XHRcdChPYmplY3QuZnJlZXplKHtcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdHR5cGU6IGluZGV4LFxyXG5cdFx0XHRcdHdpZHRoVGhyZXNob2xkOiB3aWR0aFxyXG5cdFx0XHR9KSlcclxuXHRcdCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyB0aGUgYnJlYWtwb2ludCBsaXN0IGludG8gYSBkaWN0aW9uYXJ5IHdoaWxlIHVzaW5nIHRoZSBuYW1lIGFzIGtleS5cclxuICogQHBhcmFtIGJyZWFrcG9pbnRMaXN0IHRoZSBsaXN0IG9mIGJyZWFrcG9pbnRzXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVmlld3BvcnRTaXplVHlwZUluZm9SZWZzKGJyZWFrcG9pbnRMaXN0OiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdKTogRGljdGlvbmFyeTxWaWV3cG9ydFNpemVUeXBlSW5mbz4ge1xyXG5cdHJldHVybiBPYmplY3QuZnJlZXplKFxyXG5cdFx0YnJlYWtwb2ludExpc3QucmVkdWNlPERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+PigoZGljdGlvbmFyeSwgYnJlYWtwb2ludCkgPT4ge1xyXG5cdFx0XHRkaWN0aW9uYXJ5W2JyZWFrcG9pbnQubmFtZV0gPSBicmVha3BvaW50O1xyXG5cdFx0XHRkaWN0aW9uYXJ5W2JyZWFrcG9pbnQudHlwZV0gPSBicmVha3BvaW50O1xyXG5cdFx0XHRyZXR1cm4gZGljdGlvbmFyeTtcclxuXHRcdH0sIHt9KVxyXG5cdCk7XHJcbn1cclxuIl19