@ssv/ngx.ux 3.0.0-dev.36 → 3.0.0-dev.38

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 (71) hide show
  1. package/esm2022/index.mjs +4 -0
  2. package/esm2022/internal/internal.model.mjs +2 -0
  3. package/esm2022/platform/window.mjs +31 -0
  4. package/esm2022/ssv-ngx.ux.mjs +5 -0
  5. package/esm2022/ux.module.mjs +19 -0
  6. package/esm2022/version.mjs +2 -0
  7. package/esm2022/viewport/index.mjs +10 -0
  8. package/esm2022/viewport/viewport-data/index.mjs +4 -0
  9. package/esm2022/viewport/viewport-data/viewport-data-matcher.mjs +107 -0
  10. package/esm2022/viewport/viewport-data/viewport-data.pipe.mjs +48 -0
  11. package/esm2022/viewport/viewport-data/viewport-data.service.mjs +32 -0
  12. package/esm2022/viewport/viewport-data/viewport-data.utils.mjs +100 -0
  13. package/esm2022/viewport/viewport-matcher-var.directive.mjs +69 -0
  14. package/esm2022/viewport/viewport-matcher.directive.mjs +136 -0
  15. package/esm2022/viewport/viewport-server-size.service.mjs +37 -0
  16. package/esm2022/viewport/viewport.model.mjs +30 -0
  17. package/esm2022/viewport/viewport.module.mjs +27 -0
  18. package/esm2022/viewport/viewport.options.mjs +51 -0
  19. package/esm2022/viewport/viewport.service.mjs +82 -0
  20. package/esm2022/viewport/viewport.util.mjs +117 -0
  21. package/fesm2022/ssv-ngx.ux.mjs +846 -0
  22. package/fesm2022/ssv-ngx.ux.mjs.map +1 -0
  23. package/{src/index.ts → index.d.ts} +0 -1
  24. package/{src/internal/internal.model.ts → internal/internal.model.d.ts} +1 -1
  25. package/package.json +18 -3
  26. package/platform/window.d.ts +13 -0
  27. package/ux.module.d.ts +7 -0
  28. package/version.d.ts +1 -0
  29. package/{src/viewport/index.ts → viewport/index.d.ts} +1 -12
  30. package/viewport/viewport-data/viewport-data-matcher.d.ts +32 -0
  31. package/viewport/viewport-data/viewport-data.pipe.d.ts +18 -0
  32. package/viewport/viewport-data/viewport-data.service.d.ts +17 -0
  33. package/viewport/viewport-data/viewport-data.utils.d.ts +21 -0
  34. package/viewport/viewport-matcher-var.directive.d.ts +25 -0
  35. package/viewport/viewport-matcher.directive.d.ts +33 -0
  36. package/viewport/viewport-server-size.service.d.ts +10 -0
  37. package/viewport/viewport.model.d.ts +47 -0
  38. package/viewport/viewport.module.d.ts +9 -0
  39. package/viewport/viewport.options.d.ts +19 -0
  40. package/viewport/viewport.service.d.ts +36 -0
  41. package/viewport/viewport.util.d.ts +25 -0
  42. package/eslint.config.js +0 -43
  43. package/index.ts +0 -1
  44. package/jest.config.ts +0 -21
  45. package/ng-package.json +0 -7
  46. package/project.json +0 -36
  47. package/src/platform/window.ts +0 -31
  48. package/src/test-setup.ts +0 -8
  49. package/src/ux.module.ts +0 -15
  50. package/src/version.ts +0 -1
  51. package/src/viewport/viewport-data/README.md +0 -47
  52. package/src/viewport/viewport-data/viewport-data-matcher.spec.ts +0 -227
  53. package/src/viewport/viewport-data/viewport-data-matcher.ts +0 -175
  54. package/src/viewport/viewport-data/viewport-data.pipe.ts +0 -51
  55. package/src/viewport/viewport-data/viewport-data.service.ts +0 -48
  56. package/src/viewport/viewport-data/viewport-data.utils.spec.ts +0 -228
  57. package/src/viewport/viewport-data/viewport-data.utils.ts +0 -137
  58. package/src/viewport/viewport-matcher-var.directive.ts +0 -85
  59. package/src/viewport/viewport-matcher.directive.ts +0 -170
  60. package/src/viewport/viewport-server-size.service.ts +0 -37
  61. package/src/viewport/viewport.model.ts +0 -54
  62. package/src/viewport/viewport.module.ts +0 -19
  63. package/src/viewport/viewport.options.ts +0 -74
  64. package/src/viewport/viewport.service.ts +0 -123
  65. package/src/viewport/viewport.util.spec.ts +0 -254
  66. package/src/viewport/viewport.util.ts +0 -152
  67. package/tsconfig.json +0 -28
  68. package/tsconfig.lib.json +0 -12
  69. package/tsconfig.lib.prod.json +0 -9
  70. package/tsconfig.spec.json +0 -11
  71. /package/{src/viewport/viewport-data/index.ts → viewport/viewport-data/index.d.ts} +0 -0
@@ -0,0 +1,4 @@
1
+ export { SsvUxModule } from "./ux.module";
2
+ export * from "./viewport/index";
3
+ export { VERSION } from "./version";
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25neC51eC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxjQUFjLGtCQUFrQixDQUFDO0FBRWpDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBTc3ZVeE1vZHVsZSB9IGZyb20gXCIuL3V4Lm1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmlld3BvcnQvaW5kZXhcIjtcblxuZXhwb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb25cIjtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC51eC9zcmMvaW50ZXJuYWwvaW50ZXJuYWwubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRGljdGlvbmFyeTxUPiB7XG5cdFtrZXk6IHN0cmluZ106IFQ7XG59XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { InjectionToken, Injectable, inject } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export const WINDOW = new InjectionToken("Window", {
4
+ factory: () => _window(),
5
+ });
6
+ export function _window() {
7
+ if (typeof window !== "undefined") {
8
+ return window;
9
+ }
10
+ return {};
11
+ }
12
+ export class WindowRef {
13
+ window = inject(WINDOW);
14
+ /** Window underlying native object. */
15
+ get native() {
16
+ return this.window;
17
+ }
18
+ /** Determines whether native element is supported or not. Generally `false` when executing in SSR. */
19
+ get hasNative() {
20
+ return !!this.native.window;
21
+ }
22
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WindowRef, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WindowRef, providedIn: "root" });
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WindowRef, decorators: [{
26
+ type: Injectable,
27
+ args: [{
28
+ providedIn: "root",
29
+ }]
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gudXgvc3JjL3BsYXRmb3JtL3dpbmRvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRW5FLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBUyxRQUFRLEVBQUU7SUFDMUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBWTtDQUNsQyxDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsT0FBTztJQUN0QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ25DLE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1gsQ0FBQztBQUtELE1BQU0sT0FBTyxTQUFTO0lBRUosTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV6Qyx1Q0FBdUM7SUFDdkMsSUFBSSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsTUFBZ0IsQ0FBQztJQUM5QixDQUFDO0lBRUQsc0dBQXNHO0lBQ3RHLElBQUksU0FBUztRQUNaLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7dUdBWlcsU0FBUzsyR0FBVCxTQUFTLGNBRlQsTUFBTTs7MkZBRU4sU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IGNvbnN0IFdJTkRPVyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxXaW5kb3c+KFwiV2luZG93XCIsIHtcblx0ZmFjdG9yeTogKCkgPT4gX3dpbmRvdygpIGFzIFdpbmRvdyxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gX3dpbmRvdygpOiB1bmtub3duIHtcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRyZXR1cm4gd2luZG93O1xuXHR9XG5cdHJldHVybiB7fTtcbn1cblxuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgV2luZG93UmVmIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChXSU5ET1cpO1xuXG5cdC8qKiBXaW5kb3cgdW5kZXJseWluZyBuYXRpdmUgb2JqZWN0LiAqL1xuXHRnZXQgbmF0aXZlKCk6IFdpbmRvdyB7XG5cdFx0cmV0dXJuIHRoaXMud2luZG93IGFzIFdpbmRvdztcblx0fVxuXG5cdC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgbmF0aXZlIGVsZW1lbnQgaXMgc3VwcG9ydGVkIG9yIG5vdC4gR2VuZXJhbGx5IGBmYWxzZWAgd2hlbiBleGVjdXRpbmcgaW4gU1NSLiAqL1xuXHRnZXQgaGFzTmF0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMubmF0aXZlLndpbmRvdztcblx0fVxuXG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3N2LW5neC51eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LnV4L3NyYy9zc3Ytbmd4LnV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,19 @@
1
+ import { NgModule } from "@angular/core";
2
+ import { SsvUxViewportModule } from "./viewport/viewport.module";
3
+ import * as i0 from "@angular/core";
4
+ const EXPORTED_IMPORTS = [
5
+ SsvUxViewportModule,
6
+ ];
7
+ export class SsvUxModule {
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvUxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: SsvUxModule, imports: [SsvUxViewportModule], exports: [SsvUxViewportModule] });
10
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvUxModule, imports: [EXPORTED_IMPORTS, SsvUxViewportModule] });
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvUxModule, decorators: [{
13
+ type: NgModule,
14
+ args: [{
15
+ imports: [EXPORTED_IMPORTS],
16
+ exports: [EXPORTED_IMPORTS]
17
+ }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXgubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9uZ3gudXgvc3JjL3V4Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVqRSxNQUFNLGdCQUFnQixHQUFHO0lBQ3hCLG1CQUFtQjtDQUNuQixDQUFDO0FBTUYsTUFBTSxPQUFPLFdBQVc7dUdBQVgsV0FBVzt3R0FBWCxXQUFXLFlBUHZCLG1CQUFtQixhQUFuQixtQkFBbUI7d0dBT1AsV0FBVyxZQUhiLGdCQUFnQixFQUoxQixtQkFBbUI7OzJGQU9QLFdBQVc7a0JBSnZCLFFBQVE7bUJBQUM7b0JBQ1QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgU3N2VXhWaWV3cG9ydE1vZHVsZSB9IGZyb20gXCIuL3ZpZXdwb3J0L3ZpZXdwb3J0Lm1vZHVsZVwiO1xuXG5jb25zdCBFWFBPUlRFRF9JTVBPUlRTID0gW1xuXHRTc3ZVeFZpZXdwb3J0TW9kdWxlLFxuXTtcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW0VYUE9SVEVEX0lNUE9SVFNdLFxuXHRleHBvcnRzOiBbRVhQT1JURURfSU1QT1JUU11cbn0pXG5leHBvcnQgY2xhc3MgU3N2VXhNb2R1bGUge1xuXG59Il19
@@ -0,0 +1,2 @@
1
+ export const VERSION = "3.0.0-dev.38";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmd4LnV4L3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMy4wLjAtZGV2LjM4XCI7XG4iXX0=
@@ -0,0 +1,10 @@
1
+ export * from "./viewport-data/index";
2
+ export { SsvUxViewportModule } from "./viewport.module";
3
+ export { provideSsvUxViewportOptions, VIEWPORT_OPTIONS, withViewportSsrDevice } from "./viewport.options";
4
+ export { SsvViewportMatcherVarDirective, SsvViewportMatcherVarContext } from "./viewport-matcher-var.directive";
5
+ export { SsvViewportMatcherDirective, SsvViewportMatcherContext } from "./viewport-matcher.directive";
6
+ export { VIEWPORT_SSR_DEVICE, ViewportServerSizeService } from "./viewport-server-size.service";
7
+ export { ComparisonOperation, DeviceType, ViewportSizeType, } from "./viewport.model";
8
+ export { ViewportService } from "./viewport.service";
9
+ export { generateViewportSizeType } from "./viewport.util";
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC51eC9zcmMvdmlld3BvcnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZ0JBQWdCLEVBQTBCLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEksT0FBTyxFQUFFLDhCQUE4QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEgsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEcsT0FBTyxFQU1OLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2hCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vdmlld3BvcnQtZGF0YS9pbmRleFwiO1xuXG5leHBvcnQgeyBTc3ZVeFZpZXdwb3J0TW9kdWxlIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kdWxlXCI7XG5leHBvcnQgeyBwcm92aWRlU3N2VXhWaWV3cG9ydE9wdGlvbnMsIFZJRVdQT1JUX09QVElPTlMsIHR5cGUgVXhWaWV3cG9ydE9wdGlvbnMsIHdpdGhWaWV3cG9ydFNzckRldmljZSB9IGZyb20gXCIuL3ZpZXdwb3J0Lm9wdGlvbnNcIjtcblxuZXhwb3J0IHsgU3N2Vmlld3BvcnRNYXRjaGVyVmFyRGlyZWN0aXZlLCBTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0IH0gZnJvbSBcIi4vdmlld3BvcnQtbWF0Y2hlci12YXIuZGlyZWN0aXZlXCI7XG5leHBvcnQgeyBTc3ZWaWV3cG9ydE1hdGNoZXJEaXJlY3RpdmUsIFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQgfSBmcm9tIFwiLi92aWV3cG9ydC1tYXRjaGVyLmRpcmVjdGl2ZVwiO1xuZXhwb3J0IHsgVklFV1BPUlRfU1NSX0RFVklDRSwgVmlld3BvcnRTZXJ2ZXJTaXplU2VydmljZSB9IGZyb20gXCIuL3ZpZXdwb3J0LXNlcnZlci1zaXplLnNlcnZpY2VcIjtcbmV4cG9ydCB7XG5cdHR5cGUgQ29tcGFyaXNvbk9wZXJhdGlvblZhbHVlVHlwZSxcblx0dHlwZSBDb21wYXJpc29uT3BlcmF0aW9uTGl0ZXJhbCxcblx0dHlwZSBDb21wYXJpc29uT3BlcmF0aW9uS2V5VHlwZSxcblx0dHlwZSBWaWV3cG9ydFNpemUsXG5cdHR5cGUgVmlld3BvcnRTaXplVHlwZUluZm8sXG5cdENvbXBhcmlzb25PcGVyYXRpb24sXG5cdERldmljZVR5cGUsXG5cdFZpZXdwb3J0U2l6ZVR5cGUsXG59IGZyb20gXCIuL3ZpZXdwb3J0Lm1vZGVsXCI7XG5leHBvcnQgeyBWaWV3cG9ydFNlcnZpY2UgfSBmcm9tIFwiLi92aWV3cG9ydC5zZXJ2aWNlXCI7XG5leHBvcnQgeyBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGUgfSBmcm9tIFwiLi92aWV3cG9ydC51dGlsXCI7XG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC51eC9zcmMvdmlld3BvcnQvdmlld3BvcnQtZGF0YS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQTJCLHlCQUF5QixFQUF5QyxNQUFNLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgVmlld3BvcnREYXRhU2VydmljZSB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEuc2VydmljZVwiO1xuZXhwb3J0IHsgVmlld3BvcnREYXRhUGlwZSB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEucGlwZVwiO1xuZXhwb3J0IHsgdHlwZSBWaWV3cG9ydERhdGFDb25maWcsIFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3ksIHR5cGUgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneUxpdGVyYWwgfSBmcm9tIFwiLi92aWV3cG9ydC1kYXRhLW1hdGNoZXJcIjtcbiJdfQ==
@@ -0,0 +1,107 @@
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
+ for (let index = 0; index < sizeTypes.length; index++) {
95
+ for (const idx of isSmallerFirst ? [--downIndex, ++upIndex] : [++upIndex, --downIndex]) {
96
+ const sizeType = sizeTypes[idx];
97
+ if (sizeType) {
98
+ data = dataConfig[sizeType.name];
99
+ if (data !== undefined) {
100
+ return data;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ return undefined;
106
+ }
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS1tYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gudXgvc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS1tYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sQ0FBTixJQUFZLHlCQWVYO0FBZkQsV0FBWSx5QkFBeUI7SUFDcEMseURBQXlEO0lBQ3pELDJFQUFLLENBQUE7SUFFTCwyRkFBMkY7SUFDM0YsK0VBQU8sQ0FBQTtJQUVQLHdGQUF3RjtJQUN4Riw2RUFBTSxDQUFBO0lBRU4sbUlBQW1JO0lBQ25JLHVHQUFtQixDQUFBO0lBRW5CLGtJQUFrSTtJQUNsSSxxR0FBa0IsQ0FBQTtBQUNuQixDQUFDLEVBZlcseUJBQXlCLEtBQXpCLHlCQUF5QixRQWVwQztBQVlEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDaEMsVUFBaUMsRUFDakMsUUFBOEIsRUFDOUIsUUFBbUMsRUFDbkMsU0FBaUMsRUFDakMsV0FBNkM7SUFFN0MsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsTUFBTSxLQUFLLENBQUMseUVBQXlFLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQU0sQ0FBQztJQUN4RSxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDM0IsQ0FBQztBQUdELE1BQU0sdUJBQXVCLEdBQW9DO0lBQ2hFLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLEVBQUUsY0FB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QUNqQyxjQUF1QjtJQUV2QixJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFDckMsSUFBSSxPQUFPLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztJQUduQyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELEtBQUssTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3hGLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNkLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxJQUFJLENBQUM7Z0JBQ2IsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpY3Rpb25hcnkgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWwvaW50ZXJuYWwubW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVmlld3BvcnRTaXplVHlwZUluZm8gfSBmcm9tIFwiLi4vdmlld3BvcnQubW9kZWxcIjtcblxuZXhwb3J0IHR5cGUgVmlld3BvcnREYXRhQ29uZmlnPFRWYWx1ZSA9IHVua25vd24sIFREYXRhID0gRGljdGlvbmFyeTxUVmFsdWU+PiA9IFREYXRhICYge1xuXHRkZWZhdWx0PzogVFZhbHVlXG59O1xuXG5leHBvcnQgZW51bSBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5IHtcblx0LyoqIEluZGljYXRlcyB0aGF0IHNpemUgc2hvdWxkIG1hdGNoIGV4YWN0IG9yIGRlZmF1bHQuICovXG5cdGV4YWN0LFxuXG5cdC8qKiBJbmRpY2F0ZXMgdGhhdCBzaXplIG1hdGNoZXMgd2hlbiBleGFjdCBtYXRjaCwgZmlyc3QgbWF0Y2ggc21hbGxlciAoZG93bikgb3IgZGVmYXVsdC4gKi9cblx0c21hbGxlcixcblxuXHQvKiogSW5kaWNhdGVzIHRoYXQgc2l6ZSBtYXRjaGVzIHdoZW4gZXhhY3QgbWF0Y2gsIGZpcnN0IG1hdGNoIGxhcmdlciAodXApIG9yIGRlZmF1bHQuICovXG5cdGxhcmdlcixcblxuXHQvKiogSW5kaWNhdGVzIHRoYXQgc2l6ZSBtYXRjaGVzIHdoZW4gZXhhY3QgbWF0Y2gsIG9yIGl0IHRyaWVzIGJvdGggc21hbGxlci9sYXJnZXIgKHNtYWxsZXIgaXMgcHJlZmVycmVkKSB1bnRpbCBtYXRjaCBvciBkZWZhdWx0LiAqL1xuXHRjbG9zZXN0U21hbGxlckZpcnN0LFxuXG5cdC8qKiBJbmRpY2F0ZXMgdGhhdCBzaXplIG1hdGNoZXMgd2hlbiBleGFjdCBtYXRjaCwgb3IgaXQgdHJpZXMgYm90aCBsYXJnZXIvc21hbGxlciAobGFyZ2VyIGlzIHByZWZlcnJlZCkgdW50aWwgbWF0Y2ggb3IgZGVmYXVsdC4gKi9cblx0Y2xvc2VzdExhcmdlckZpcnN0LFxufVxuZXhwb3J0IHR5cGUgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneUxpdGVyYWwgPSBrZXlvZiB0eXBlb2YgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneTtcblxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydERhdGFNYXRjaGVyPFQgPSB1bmtub3duPiB7XG5cdChcblx0XHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXG5cdFx0Y3VycmVudFNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcblx0XHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXG5cdFx0c2l6ZVR5cGVNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+LFxuXHQpOiBUIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gbWF0Y2ggZGF0YSBiYXNlZCBvbiBzdHJhdGVneSBhbmQgc2l6ZS5cbiAqXG4gKiBAcGFyYW0gZGF0YUNvbmZpZyBEYXRhIGNvbmZpZyB0byBnZW5lcmF0ZSBydWxlcyBiYXNlZCBvbi5cbiAqIEBwYXJhbSBzaXplVHlwZSBTaXplIHR5cGUgdG8gZ2V0IGRhdGEgZm9yLlxuICogQHBhcmFtIHN0cmF0ZWd5IFN0cmF0ZWd5IHRvIHVzZSB3aGVuIGJ1aWxkaW5nIHJ1bGVzLlxuICogQHBhcmFtIHNpemVUeXBlcyBBdmFpbGFibGUgc2l6ZSB0eXBlcyBvcmRlcmVkIGJ5IGluZGV4IHR5cGUuIChDYW4gYmUgb2J0YWluZWQgZnJvbSBgVmlld3BvcnRTZXJ2aWNlYClcbiAqIEBwYXJhbSBzaXplVHlwZU1hcCBBdmFpbGFibGUgc2l6ZSB0eXBlIG1hcC4gKENhbiBiZSBvYnRhaW5lZCBmcm9tIGBWaWV3cG9ydFNlcnZpY2VgKVxuICogQHJldHVybnMgUmV0dXJucyB0aGUgbWF0Y2hlZCBkYXRhIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hWaWV3cG9ydERhdGE8VD4oXG5cdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcblx0c2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxuXHRzdHJhdGVneTogVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSxcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxuXHRzaXplVHlwZU1hcDogRGljdGlvbmFyeTxWaWV3cG9ydFNpemVUeXBlSW5mbz4sXG4pOiBUIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWF0Y2hGbiA9IG1hdGNoU3RyYXRlZ3lIYW5kbGVyTWFwW3N0cmF0ZWd5XTtcblx0aWYgKCFtYXRjaEZuKSB7XG5cdFx0dGhyb3cgRXJyb3IoYG1hdGNoVmlld3BvcnREYXRhOiBWaWV3cG9ydCBEYXRhIHN0cmF0ZWd5IG5vdCBpbXBsZW1lbnRlZC4gU3RyYXRlZ3k6ICcke3N0cmF0ZWd5fSdgKTtcblx0fVxuXHRjb25zdCBkYXRhID0gbWF0Y2hGbihkYXRhQ29uZmlnLCBzaXplVHlwZSwgc2l6ZVR5cGVzLCBzaXplVHlwZU1hcCkgYXMgVDtcblx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cdHJldHVybiBkYXRhQ29uZmlnLmRlZmF1bHQ7XG59XG5cblxuY29uc3QgbWF0Y2hTdHJhdGVneUhhbmRsZXJNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnREYXRhTWF0Y2hlcj4gPSB7XG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LmV4YWN0XTogbWF0Y2hXaXRoRXhhY3QsXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5Lmxhcmdlcl06IG1hdGNoV2l0aExhcmdlck1hdGNoLFxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5zbWFsbGVyXTogbWF0Y2hXaXRoU21hbGxlck1hdGNoLFxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5jbG9zZXN0U21hbGxlckZpcnN0XTogbWF0Y2hXaXRoQ2xvc2VzdFNtYWxsZXJGaXJzdE1hdGNoLFxuXHRbVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneS5jbG9zZXN0TGFyZ2VyRmlyc3RdOiBtYXRjaFdpdGhDbG9zZXN0TGFyZ2VyRmlyc3RNYXRjaCxcbn07XG5cbmZ1bmN0aW9uIG1hdGNoV2l0aEV4YWN0PFQ+KFxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXG5cdGN1cnJlbnRTaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8sXG4pOiBUIHwgdW5kZWZpbmVkIHtcblx0cmV0dXJuIGRhdGFDb25maWdbY3VycmVudFNpemVUeXBlLm5hbWVdO1xufVxuXG5mdW5jdGlvbiBtYXRjaFdpdGhMYXJnZXJNYXRjaDxUPihcblx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxuXHRjdXJyZW50U2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxuXHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXG4pOiBUIHwgdW5kZWZpbmVkIHtcblx0bGV0IGRhdGEgPSBkYXRhQ29uZmlnW2N1cnJlbnRTaXplVHlwZS5uYW1lXTtcblx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBkYXRhO1xuXHR9XG5cblx0Y29uc3QgbGFyZ2VzdFR5cGVJZHggPSBzaXplVHlwZXNbc2l6ZVR5cGVzLmxlbmd0aCAtIDFdLnR5cGU7XG5cdGlmIChjdXJyZW50U2l6ZVR5cGUudHlwZSA+PSBsYXJnZXN0VHlwZUlkeCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRmb3IgKGxldCBpbmRleCA9IGN1cnJlbnRTaXplVHlwZS50eXBlOyBpbmRleCA8IHNpemVUeXBlcy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRjb25zdCBzaXplVHlwZSA9IHNpemVUeXBlc1tpbmRleF07XG5cdFx0ZGF0YSA9IGRhdGFDb25maWdbc2l6ZVR5cGUubmFtZV07XG5cdFx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbWF0Y2hXaXRoU21hbGxlck1hdGNoPFQ+KFxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXG5cdGN1cnJlbnRTaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8sXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcbik6IFQgfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YSA9IGRhdGFDb25maWdbY3VycmVudFNpemVUeXBlLm5hbWVdO1xuXHRpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRpZiAoY3VycmVudFNpemVUeXBlLnR5cGUgPD0gMCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZm9yLWRpcmVjdGlvblxuXHRmb3IgKGxldCBpbmRleCA9IGN1cnJlbnRTaXplVHlwZS50eXBlOyBpbmRleCA8IHNpemVUeXBlcy5sZW5ndGg7IGluZGV4LS0pIHtcblx0XHRjb25zdCBzaXplVHlwZSA9IHNpemVUeXBlc1tpbmRleF07XG5cdFx0ZGF0YSA9IGRhdGFDb25maWdbc2l6ZVR5cGUubmFtZV07XG5cdFx0aWYgKGRhdGEgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbWF0Y2hXaXRoQ2xvc2VzdFNtYWxsZXJGaXJzdE1hdGNoPFQ+KFxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXG5cdGN1cnJlbnRTaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8sXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcbik6IFQgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gY2xvc2VzdE1hdGNoKGRhdGFDb25maWcsIGN1cnJlbnRTaXplVHlwZSwgc2l6ZVR5cGVzLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hXaXRoQ2xvc2VzdExhcmdlckZpcnN0TWF0Y2g8VD4oXG5cdGRhdGFDb25maWc6IFZpZXdwb3J0RGF0YUNvbmZpZzxUPixcblx0Y3VycmVudFNpemVUeXBlOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxuKTogVCB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBjbG9zZXN0TWF0Y2goZGF0YUNvbmZpZywgY3VycmVudFNpemVUeXBlLCBzaXplVHlwZXMsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gY2xvc2VzdE1hdGNoPFQ+KFxuXHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXG5cdGN1cnJlbnRTaXplVHlwZTogVmlld3BvcnRTaXplVHlwZUluZm8sXG5cdHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSxcblx0aXNTbWFsbGVyRmlyc3Q6IGJvb2xlYW5cbik6IFQgfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YSA9IGRhdGFDb25maWdbY3VycmVudFNpemVUeXBlLm5hbWVdO1xuXHRpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRsZXQgZG93bkluZGV4ID0gY3VycmVudFNpemVUeXBlLnR5cGU7XG5cdGxldCB1cEluZGV4ID0gY3VycmVudFNpemVUeXBlLnR5cGU7XG5cblx0IFxuXHRmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZVR5cGVzLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdGZvciAoY29uc3QgaWR4IG9mIGlzU21hbGxlckZpcnN0ID8gWy0tZG93bkluZGV4LCArK3VwSW5kZXhdIDogWysrdXBJbmRleCwgLS1kb3duSW5kZXhdKSB7XG5cdFx0XHRjb25zdCBzaXplVHlwZSA9IHNpemVUeXBlc1tpZHhdO1xuXHRcdFx0aWYgKHNpemVUeXBlKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhQ29uZmlnW3NpemVUeXBlLm5hbWVdO1xuXHRcdFx0XHRpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
@@ -0,0 +1,48 @@
1
+ import { Subscription, tap } from "rxjs";
2
+ import { Pipe, ChangeDetectorRef } from "@angular/core";
3
+ import { ViewportDataMatchStrategy } from "./viewport-data-matcher";
4
+ import { ViewportDataService } from "./viewport-data.service";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./viewport-data.service";
7
+ export class ViewportDataPipe {
8
+ viewportData;
9
+ cdr;
10
+ markForTransform = true;
11
+ value;
12
+ data;
13
+ strategy;
14
+ data$$ = Subscription.EMPTY;
15
+ constructor(viewportData, cdr) {
16
+ this.viewportData = viewportData;
17
+ this.cdr = cdr;
18
+ }
19
+ transform(data, strategy) {
20
+ if (!this.markForTransform && data === this.data && strategy === this.strategy) {
21
+ return this.value;
22
+ }
23
+ this.data = data;
24
+ this.strategy = strategy;
25
+ this.data$$.unsubscribe();
26
+ this.data$$ = this.viewportData.get$(data, ViewportDataMatchStrategy[strategy]).pipe(tap(value => {
27
+ this.markForTransform = true;
28
+ this.value = value;
29
+ this.cdr.markForCheck();
30
+ })).subscribe();
31
+ this.markForTransform = false;
32
+ return this.value;
33
+ }
34
+ ngOnDestroy() {
35
+ this.data$$.unsubscribe();
36
+ }
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportDataPipe, deps: [{ token: i1.ViewportDataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
38
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: ViewportDataPipe, isStandalone: true, name: "ssvViewportData", pure: false });
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportDataPipe, decorators: [{
41
+ type: Pipe,
42
+ args: [{
43
+ name: "ssvViewportData",
44
+ pure: false,
45
+ standalone: true,
46
+ }]
47
+ }], ctorParameters: () => [{ type: i1.ViewportDataService }, { type: i0.ChangeDetectorRef }] });
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gudXgvc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxJQUFJLEVBQTRCLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxGLE9BQU8sRUFBc0IseUJBQXlCLEVBQW9DLE1BQU0seUJBQXlCLENBQUM7QUFDMUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQVE5RCxNQUFNLE9BQU8sZ0JBQWdCO0lBU25CO0lBQ0E7SUFSRCxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDeEIsS0FBSyxDQUFVO0lBQ2YsSUFBSSxDQUFpQztJQUNyQyxRQUFRLENBQStDO0lBQ3ZELE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBRXBDLFlBQ1MsWUFBaUMsRUFDakMsR0FBc0I7UUFEdEIsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBQ2pDLFFBQUcsR0FBSCxHQUFHLENBQW1CO0lBRS9CLENBQUM7SUFFRCxTQUFTLENBQUMsSUFBd0IsRUFBRSxRQUEwQztRQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNuRixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDWCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQ0YsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO3VHQXBDVyxnQkFBZ0I7cUdBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFMNUIsSUFBSTttQkFBQztvQkFDTCxJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixJQUFJLEVBQUUsS0FBSztvQkFDWCxVQUFVLEVBQUUsSUFBSTtpQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb24sIHRhcCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgVmlld3BvcnREYXRhQ29uZmlnLCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5TGl0ZXJhbCB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEtbWF0Y2hlclwiO1xuaW1wb3J0IHsgVmlld3BvcnREYXRhU2VydmljZSB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEuc2VydmljZVwiO1xuXG5cbkBQaXBlKHtcblx0bmFtZTogXCJzc3ZWaWV3cG9ydERhdGFcIixcblx0cHVyZTogZmFsc2UsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdwb3J0RGF0YVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtLCBPbkRlc3Ryb3kge1xuXG5cdHByaXZhdGUgbWFya0ZvclRyYW5zZm9ybSA9IHRydWU7XG5cdHByaXZhdGUgdmFsdWU6IHVua25vd247XG5cdHByaXZhdGUgZGF0YTogVmlld3BvcnREYXRhQ29uZmlnIHwgdW5kZWZpbmVkO1xuXHRwcml2YXRlIHN0cmF0ZWd5OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5TGl0ZXJhbCB8IHVuZGVmaW5lZDtcblx0cHJpdmF0ZSBkYXRhJCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB2aWV3cG9ydERhdGE6IFZpZXdwb3J0RGF0YVNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG5cdCkge1xuXHR9XG5cblx0dHJhbnNmb3JtKGRhdGE6IFZpZXdwb3J0RGF0YUNvbmZpZywgc3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3lMaXRlcmFsKTogdW5rbm93biB7XG5cdFx0aWYgKCF0aGlzLm1hcmtGb3JUcmFuc2Zvcm0gJiYgZGF0YSA9PT0gdGhpcy5kYXRhICYmIHN0cmF0ZWd5ID09PSB0aGlzLnN0cmF0ZWd5KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy52YWx1ZTtcblx0XHR9XG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcblx0XHR0aGlzLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7XG5cblx0XHR0aGlzLmRhdGEkJC51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMuZGF0YSQkID0gdGhpcy52aWV3cG9ydERhdGEuZ2V0JChkYXRhLCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5W3N0cmF0ZWd5XSkucGlwZShcblx0XHRcdHRhcCh2YWx1ZSA9PiB7XG5cdFx0XHRcdHRoaXMubWFya0ZvclRyYW5zZm9ybSA9IHRydWU7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0dGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0XHR9KSxcblx0XHQpLnN1YnNjcmliZSgpO1xuXG5cdFx0dGhpcy5tYXJrRm9yVHJhbnNmb3JtID0gZmFsc2U7XG5cdFx0cmV0dXJuIHRoaXMudmFsdWU7XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmRhdGEkJC51bnN1YnNjcmliZSgpO1xuXHR9XG5cbn1cbiJdfQ==
@@ -0,0 +1,32 @@
1
+ import { inject, Injectable } from "@angular/core";
2
+ import { distinctUntilChanged, map } from "rxjs";
3
+ import { ViewportService } from "../viewport.service";
4
+ import { matchViewportData } from "./viewport-data-matcher";
5
+ import { generateViewportRulesRangeFromDataMatcher } from "./viewport-data.utils";
6
+ import { VIEWPORT_OPTIONS } from "../viewport.options";
7
+ import * as i0 from "@angular/core";
8
+ export class ViewportDataService {
9
+ viewport = inject(ViewportService);
10
+ config = inject(VIEWPORT_OPTIONS);
11
+ /** Get data for match. */
12
+ get(dataConfig, strategy = this.config.defaultDataMatchStrategy, sizeType = this.viewport.sizeTypeSnapshot) {
13
+ return matchViewportData(dataConfig, sizeType, strategy, this.viewport.sizeTypes, this.viewport.sizeTypeMap);
14
+ }
15
+ /** Get data for match as observable. */
16
+ get$(dataConfig, strategy, throttle = true) {
17
+ return (throttle ? this.viewport.sizeType$ : this.viewport.sizeTypeSnap$).pipe(map(sizeType => this.get(dataConfig, strategy, sizeType)), distinctUntilChanged());
18
+ }
19
+ /** Generate rules based on strategies for data. */
20
+ generateRules(dataConfig, strategy = this.config.defaultDataMatchStrategy) {
21
+ return generateViewportRulesRangeFromDataMatcher(dataConfig, strategy, this.viewport.sizeTypes, this.viewport.sizeTypeMap);
22
+ }
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
24
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportDataService, providedIn: "root" });
25
+ }
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportDataService, decorators: [{
27
+ type: Injectable,
28
+ args: [{
29
+ providedIn: "root",
30
+ }]
31
+ }] });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gudXgvc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBaUQsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRyxPQUFPLEVBQUUseUNBQXlDLEVBQW9CLE1BQU0sdUJBQXVCLENBQUM7QUFDcEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBS3ZELE1BQU0sT0FBTyxtQkFBbUI7SUFFZCxRQUFRLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVuRCwwQkFBMEI7SUFDMUIsR0FBRyxDQUNGLFVBQWlDLEVBQ2pDLFdBQXNDLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQzFFLFdBQWlDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1FBRS9ELE9BQU8saUJBQWlCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLElBQUksQ0FBSSxVQUFpQyxFQUFFLFFBQW9DLEVBQUUsUUFBUSxHQUFHLElBQUk7UUFDL0YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUM3RSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFDNUQsb0JBQW9CLEVBQUUsQ0FDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsYUFBYSxDQUNaLFVBQWlDLEVBQ2pDLFdBQXNDLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCO1FBRTFFLE9BQU8seUNBQXlDLENBQy9DLFVBQVUsRUFDVixRQUFRLEVBQ1IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUN6QixDQUFDO0lBQ0gsQ0FBQzt1R0FqQ1csbUJBQW1COzJHQUFuQixtQkFBbUIsY0FGbkIsTUFBTTs7MkZBRU4sbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNYLFVBQVUsRUFBRSxNQUFNO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgVmlld3BvcnRTaXplVHlwZUluZm8gfSBmcm9tIFwiLi4vdmlld3BvcnQubW9kZWxcIjtcbmltcG9ydCB7IFZpZXdwb3J0U2VydmljZSB9IGZyb20gXCIuLi92aWV3cG9ydC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBtYXRjaFZpZXdwb3J0RGF0YSwgVmlld3BvcnREYXRhQ29uZmlnLCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5IH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS1tYXRjaGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVZpZXdwb3J0UnVsZXNSYW5nZUZyb21EYXRhTWF0Y2hlciwgVmlld3BvcnREYXRhUnVsZSB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEudXRpbHNcIjtcbmltcG9ydCB7IFZJRVdQT1JUX09QVElPTlMgfSBmcm9tIFwiLi4vdmlld3BvcnQub3B0aW9uc1wiO1xuXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3cG9ydERhdGFTZXJ2aWNlIHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IHZpZXdwb3J0ID0gaW5qZWN0KFZpZXdwb3J0U2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFZJRVdQT1JUX09QVElPTlMpO1xuXG5cdC8qKiBHZXQgZGF0YSBmb3IgbWF0Y2guICovXG5cdGdldDxUPihcblx0XHRkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sXG5cdFx0c3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kgPSB0aGlzLmNvbmZpZy5kZWZhdWx0RGF0YU1hdGNoU3RyYXRlZ3ksXG5cdFx0c2l6ZVR5cGU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvID0gdGhpcy52aWV3cG9ydC5zaXplVHlwZVNuYXBzaG90XG5cdCk6IFQgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBtYXRjaFZpZXdwb3J0RGF0YShkYXRhQ29uZmlnLCBzaXplVHlwZSwgc3RyYXRlZ3ksIHRoaXMudmlld3BvcnQuc2l6ZVR5cGVzLCB0aGlzLnZpZXdwb3J0LnNpemVUeXBlTWFwKTtcblx0fVxuXG5cdC8qKiBHZXQgZGF0YSBmb3IgbWF0Y2ggYXMgb2JzZXJ2YWJsZS4gKi9cblx0Z2V0JDxUPihkYXRhQ29uZmlnOiBWaWV3cG9ydERhdGFDb25maWc8VD4sIHN0cmF0ZWd5PzogVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSwgdGhyb3R0bGUgPSB0cnVlKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuICh0aHJvdHRsZSA/IHRoaXMudmlld3BvcnQuc2l6ZVR5cGUkIDogdGhpcy52aWV3cG9ydC5zaXplVHlwZVNuYXAkKS5waXBlKFxuXHRcdFx0bWFwKHNpemVUeXBlID0+IHRoaXMuZ2V0PFQ+KGRhdGFDb25maWcsIHN0cmF0ZWd5LCBzaXplVHlwZSkpLFxuXHRcdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqIEdlbmVyYXRlIHJ1bGVzIGJhc2VkIG9uIHN0cmF0ZWdpZXMgZm9yIGRhdGEuICovXG5cdGdlbmVyYXRlUnVsZXM8VD4oXG5cdFx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxuXHRcdHN0cmF0ZWd5OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5ID0gdGhpcy5jb25maWcuZGVmYXVsdERhdGFNYXRjaFN0cmF0ZWd5LFxuXHQpOiBWaWV3cG9ydERhdGFSdWxlPFQ+W10ge1xuXHRcdHJldHVybiBnZW5lcmF0ZVZpZXdwb3J0UnVsZXNSYW5nZUZyb21EYXRhTWF0Y2hlcihcblx0XHRcdGRhdGFDb25maWcsXG5cdFx0XHRzdHJhdGVneSxcblx0XHRcdHRoaXMudmlld3BvcnQuc2l6ZVR5cGVzLFxuXHRcdFx0dGhpcy52aWV3cG9ydC5zaXplVHlwZU1hcFxuXHRcdCk7XG5cdH1cblxufVxuIl19
@@ -0,0 +1,100 @@
1
+ import { ViewportDataMatchStrategy } from "./viewport-data-matcher";
2
+ /**
3
+ * Utility function to generate rules based on strategies.
4
+ *
5
+ * @param dataConfig Data config to generate rules based on.
6
+ * @param strategy Strategy to use when building rules.
7
+ * @param sizeTypes Available size types ordered by index type. (Can be obtained from `ViewportService`)
8
+ * @param sizeTypeMap Available size type map. (Can be obtained from `ViewportService`)
9
+ * @returns Returns a collection of rules (ordered).
10
+ */
11
+ export function generateViewportRulesRangeFromDataMatcher(dataConfig, strategy, sizeTypes, sizeTypeMap) {
12
+ const ruleBuilderFn = matchStrategyHandlerMap[strategy];
13
+ if (!ruleBuilderFn) {
14
+ throw Error(`generateViewportRulesRangeFromDataMatcher: Viewport Data strategy not implemented. Strategy: '${strategy}'`);
15
+ }
16
+ let dataSizes = [];
17
+ for (const key in dataConfig) {
18
+ if (Object.prototype.hasOwnProperty.call(dataConfig, key)) {
19
+ const data = dataConfig[key];
20
+ if (data === undefined) {
21
+ continue;
22
+ }
23
+ const size = sizeTypeMap[key];
24
+ if (size) {
25
+ dataSizes.push(size);
26
+ }
27
+ }
28
+ }
29
+ dataSizes = dataSizes.sort(({ type: typeA }, { type: typeB }) => typeA - typeB);
30
+ const rules = [];
31
+ if (dataConfig.default) {
32
+ rules.push({ value: dataConfig.default, min: undefined, max: undefined });
33
+ }
34
+ let prevRule;
35
+ for (let index = 0; index < dataSizes.length; index++) {
36
+ const prevDataSize = dataSizes[index - 1];
37
+ const nextDataSize = dataSizes[index + 1];
38
+ const dataSize = dataSizes[index];
39
+ const prevSize = sizeTypes[dataSize.type - 1];
40
+ // const nextSize = sizeTypes[dataSize.type + 1];
41
+ const data = dataConfig[dataSize.name];
42
+ const rule = {
43
+ value: data,
44
+ min: undefined,
45
+ max: undefined,
46
+ };
47
+ ruleBuilderFn(rule, dataSize, nextDataSize, prevDataSize, prevSize, prevRule, sizeTypes);
48
+ prevRule = rule;
49
+ rules.push(rule);
50
+ }
51
+ return rules;
52
+ }
53
+ const matchStrategyHandlerMap = {
54
+ [ViewportDataMatchStrategy.exact]: (rule, dataSize, _nextDataSize, _prevDataSize, prevSize) => {
55
+ rule.max = dataSize.widthThreshold;
56
+ if (prevSize) {
57
+ rule.min = prevSize.widthThreshold + 1;
58
+ }
59
+ },
60
+ [ViewportDataMatchStrategy.smaller]: (rule, dataSize, nextDataSize, _prevDataSize, prevSize) => {
61
+ if (nextDataSize) {
62
+ rule.max = dataSize.widthThreshold;
63
+ }
64
+ if (prevSize) {
65
+ rule.min = prevSize.widthThreshold + 1;
66
+ }
67
+ },
68
+ [ViewportDataMatchStrategy.larger]: (rule, dataSize, _nextDataSize, prevDataSize) => {
69
+ if (dataSize) {
70
+ rule.max = dataSize.widthThreshold;
71
+ }
72
+ if (prevDataSize) {
73
+ rule.min = prevDataSize.widthThreshold + 1;
74
+ }
75
+ },
76
+ [ViewportDataMatchStrategy.closestSmallerFirst]: (rule, dataSize, nextDataSize, _prevDataSize, _prevSize, prevRule, sizeTypes) => {
77
+ if (nextDataSize) {
78
+ rule.max = calculateClosestWidthThreshold(nextDataSize, dataSize, sizeTypes, true);
79
+ }
80
+ if (prevRule?.max) {
81
+ rule.min = prevRule.max + 1;
82
+ }
83
+ },
84
+ [ViewportDataMatchStrategy.closestLargerFirst]: (rule, dataSize, nextDataSize, _prevDataSize, _prevSize, prevRule, sizeTypes) => {
85
+ if (nextDataSize) {
86
+ rule.max = calculateClosestWidthThreshold(nextDataSize, dataSize, sizeTypes, false);
87
+ }
88
+ if (prevRule?.max) {
89
+ rule.min = prevRule.max + 1;
90
+ }
91
+ },
92
+ };
93
+ function calculateClosestWidthThreshold(nextDataSize, dataSize, sizeTypes, isSmallerPreferred) {
94
+ const fn = isSmallerPreferred ? Math.ceil : Math.floor;
95
+ // get closest between curr and next
96
+ const diffIndex = fn((nextDataSize.type - dataSize.type - 1) / 2);
97
+ const diffNextSize = sizeTypes[dataSize.type + diffIndex];
98
+ return (diffNextSize || dataSize).widthThreshold;
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtZGF0YS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LnV4L3NyYy92aWV3cG9ydC92aWV3cG9ydC1kYXRhL3ZpZXdwb3J0LWRhdGEudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFzQix5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUXhGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHlDQUF5QyxDQUN4RCxVQUFpQyxFQUNqQyxRQUFtQyxFQUNuQyxTQUFpQyxFQUNqQyxXQUE2QztJQUU3QyxNQUFNLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEIsTUFBTSxLQUFLLENBQUMsaUdBQWlHLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDM0gsQ0FBQztJQUVELElBQUksU0FBUyxHQUEyQixFQUFFLENBQUM7SUFDM0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3hCLFNBQVM7WUFDVixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1YsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QixDQUFDO1FBQ0YsQ0FBQztJQUNGLENBQUM7SUFDRCxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxF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LENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQzFELE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uLy4uL2ludGVybmFsL2ludGVybmFsLm1vZGVsXCI7XG5pbXBvcnQgeyBWaWV3cG9ydFNpemVUeXBlSW5mbyB9IGZyb20gXCIuLi92aWV3cG9ydC5tb2RlbFwiO1xuaW1wb3J0IHsgVmlld3BvcnREYXRhQ29uZmlnLCBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5IH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS1tYXRjaGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnREYXRhUnVsZTxUPiB7XG5cdG1pbj86IG51bWJlcjtcblx0bWF4PzogbnVtYmVyO1xuXHR2YWx1ZTogVDtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHJ1bGVzIGJhc2VkIG9uIHN0cmF0ZWdpZXMuXG4gKlxuICogQHBhcmFtIGRhdGFDb25maWcgRGF0YSBjb25maWcgdG8gZ2VuZXJhdGUgcnVsZXMgYmFzZWQgb24uXG4gKiBAcGFyYW0gc3RyYXRlZ3kgU3RyYXRlZ3kgdG8gdXNlIHdoZW4gYnVpbGRpbmcgcnVsZXMuXG4gKiBAcGFyYW0gc2l6ZVR5cGVzIEF2YWlsYWJsZSBzaXplIHR5cGVzIG9yZGVyZWQgYnkgaW5kZXggdHlwZS4gKENhbiBiZSBvYnRhaW5lZCBmcm9tIGBWaWV3cG9ydFNlcnZpY2VgKVxuICogQHBhcmFtIHNpemVUeXBlTWFwIEF2YWlsYWJsZSBzaXplIHR5cGUgbWFwLiAoQ2FuIGJlIG9idGFpbmVkIGZyb20gYFZpZXdwb3J0U2VydmljZWApXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBydWxlcyAob3JkZXJlZCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVZpZXdwb3J0UnVsZXNSYW5nZUZyb21EYXRhTWF0Y2hlcjxUPihcblx0ZGF0YUNvbmZpZzogVmlld3BvcnREYXRhQ29uZmlnPFQ+LFxuXHRzdHJhdGVneTogVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSxcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxuXHRzaXplVHlwZU1hcDogRGljdGlvbmFyeTxWaWV3cG9ydFNpemVUeXBlSW5mbz4sXG4pOiBWaWV3cG9ydERhdGFSdWxlPFQ+W10ge1xuXHRjb25zdCBydWxlQnVpbGRlckZuID0gbWF0Y2hTdHJhdGVneUhhbmRsZXJNYXBbc3RyYXRlZ3ldO1xuXHRpZiAoIXJ1bGVCdWlsZGVyRm4pIHtcblx0XHR0aHJvdyBFcnJvcihgZ2VuZXJhdGVWaWV3cG9ydFJ1bGVzUmFuZ2VGcm9tRGF0YU1hdGNoZXI6IFZpZXdwb3J0IERhdGEgc3RyYXRlZ3kgbm90IGltcGxlbWVudGVkLiBTdHJhdGVneTogJyR7c3RyYXRlZ3l9J2ApO1xuXHR9XG5cblx0bGV0IGRhdGFTaXplczogVmlld3BvcnRTaXplVHlwZUluZm9bXSA9IFtdO1xuXHRmb3IgKGNvbnN0IGtleSBpbiBkYXRhQ29uZmlnKSB7XG5cdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhQ29uZmlnLCBrZXkpKSB7XG5cdFx0XHRjb25zdCBkYXRhID0gZGF0YUNvbmZpZ1trZXldO1xuXHRcdFx0aWYgKGRhdGEgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHNpemUgPSBzaXplVHlwZU1hcFtrZXldO1xuXHRcdFx0aWYgKHNpemUpIHtcblx0XHRcdFx0ZGF0YVNpemVzLnB1c2goc2l6ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGRhdGFTaXplcyA9IGRhdGFTaXplcy5zb3J0KCh7IHR5cGU6IHR5cGVBIH0sIHsgdHlwZTogdHlwZUIgfSkgPT4gdHlwZUEgLSB0eXBlQik7XG5cblx0Y29uc3QgcnVsZXM6IFZpZXdwb3J0RGF0YVJ1bGU8VD5bXSA9IFtdO1xuXHRpZiAoZGF0YUNvbmZpZy5kZWZhdWx0KSB7XG5cdFx0cnVsZXMucHVzaCh7IHZhbHVlOiBkYXRhQ29uZmlnLmRlZmF1bHQsIG1pbjogdW5kZWZpbmVkLCBtYXg6IHVuZGVmaW5lZCB9KTtcblx0fVxuXG5cdGxldCBwcmV2UnVsZTogVmlld3BvcnREYXRhUnVsZTxUPiB8IHVuZGVmaW5lZDtcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRhdGFTaXplcy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRjb25zdCBwcmV2RGF0YVNpemUgPSBkYXRhU2l6ZXNbaW5kZXggLSAxXTtcblx0XHRjb25zdCBuZXh0RGF0YVNpemUgPSBkYXRhU2l6ZXNbaW5kZXggKyAxXTtcblx0XHRjb25zdCBkYXRhU2l6ZSA9IGRhdGFTaXplc1tpbmRleF07XG5cdFx0Y29uc3QgcHJldlNpemUgPSBzaXplVHlwZXNbZGF0YVNpemUudHlwZSAtIDFdO1xuXHRcdC8vIGNvbnN0IG5leHRTaXplID0gc2l6ZVR5cGVzW2RhdGFTaXplLnR5cGUgKyAxXTtcblx0XHRjb25zdCBkYXRhID0gZGF0YUNvbmZpZ1tkYXRhU2l6ZS5uYW1lXTtcblx0XHRjb25zdCBydWxlOiBWaWV3cG9ydERhdGFSdWxlPFQ+ID0ge1xuXHRcdFx0dmFsdWU6IGRhdGEsXG5cdFx0XHRtaW46IHVuZGVmaW5lZCxcblx0XHRcdG1heDogdW5kZWZpbmVkLFxuXHRcdH07XG5cblx0XHRydWxlQnVpbGRlckZuKHJ1bGUsIGRhdGFTaXplLCBuZXh0RGF0YVNpemUsIHByZXZEYXRhU2l6ZSwgcHJldlNpemUsIHByZXZSdWxlLCBzaXplVHlwZXMpO1xuXG5cdFx0cHJldlJ1bGUgPSBydWxlO1xuXHRcdHJ1bGVzLnB1c2gocnVsZSk7XG5cdH1cblx0cmV0dXJuIHJ1bGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0UnVsZVJhbmdlQnVpbGRlcjxUID0gdW5rbm93bj4ge1xuXHQoXG5cdFx0cnVsZTogVmlld3BvcnREYXRhUnVsZTxUPixcblx0XHRkYXRhU2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8sXG5cdFx0bmV4dERhdGFTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyB8IHVuZGVmaW5lZCxcblx0XHRwcmV2RGF0YVNpemU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvIHwgdW5kZWZpbmVkLFxuXHRcdHByZXZTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyB8IHVuZGVmaW5lZCxcblx0XHRwcmV2UnVsZTogVmlld3BvcnREYXRhUnVsZTxUPiB8IHVuZGVmaW5lZCxcblx0XHRzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10sXG5cdCk6IHZvaWQ7XG59XG5cbmNvbnN0IG1hdGNoU3RyYXRlZ3lIYW5kbGVyTWFwOiBEaWN0aW9uYXJ5PFZpZXdwb3J0UnVsZVJhbmdlQnVpbGRlcj4gPSB7XG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LmV4YWN0XTogKHJ1bGUsIGRhdGFTaXplLCBfbmV4dERhdGFTaXplLCBfcHJldkRhdGFTaXplLCBwcmV2U2l6ZSkgPT4ge1xuXHRcdHJ1bGUubWF4ID0gZGF0YVNpemUud2lkdGhUaHJlc2hvbGQ7XG5cdFx0aWYgKHByZXZTaXplKSB7XG5cdFx0XHRydWxlLm1pbiA9IHByZXZTaXplLndpZHRoVGhyZXNob2xkICsgMTtcblx0XHR9XG5cdH0sXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LnNtYWxsZXJdOiAocnVsZSwgZGF0YVNpemUsIG5leHREYXRhU2l6ZSwgX3ByZXZEYXRhU2l6ZSwgcHJldlNpemUpID0+IHtcblx0XHRpZiAobmV4dERhdGFTaXplKSB7XG5cdFx0XHRydWxlLm1heCA9IGRhdGFTaXplLndpZHRoVGhyZXNob2xkO1xuXHRcdH1cblx0XHRpZiAocHJldlNpemUpIHtcblx0XHRcdHJ1bGUubWluID0gcHJldlNpemUud2lkdGhUaHJlc2hvbGQgKyAxO1xuXHRcdH1cblx0fSxcblx0W1ZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kubGFyZ2VyXTogKHJ1bGUsIGRhdGFTaXplLCBfbmV4dERhdGFTaXplLCBwcmV2RGF0YVNpemUpID0+IHtcblx0XHRpZiAoZGF0YVNpemUpIHtcblx0XHRcdHJ1bGUubWF4ID0gZGF0YVNpemUud2lkdGhUaHJlc2hvbGQ7XG5cdFx0fVxuXHRcdGlmIChwcmV2RGF0YVNpemUpIHtcblx0XHRcdHJ1bGUubWluID0gcHJldkRhdGFTaXplLndpZHRoVGhyZXNob2xkICsgMTtcblx0XHR9XG5cdH0sXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LmNsb3Nlc3RTbWFsbGVyRmlyc3RdOiAocnVsZSwgZGF0YVNpemUsIG5leHREYXRhU2l6ZSwgX3ByZXZEYXRhU2l6ZSwgX3ByZXZTaXplLCBwcmV2UnVsZSwgc2l6ZVR5cGVzKSA9PiB7XG5cdFx0aWYgKG5leHREYXRhU2l6ZSkge1xuXHRcdFx0cnVsZS5tYXggPSBjYWxjdWxhdGVDbG9zZXN0V2lkdGhUaHJlc2hvbGQobmV4dERhdGFTaXplLCBkYXRhU2l6ZSwgc2l6ZVR5cGVzLCB0cnVlKTtcblx0XHR9XG5cdFx0aWYgKHByZXZSdWxlPy5tYXgpIHtcblx0XHRcdHJ1bGUubWluID0gcHJldlJ1bGUubWF4ICsgMTtcblx0XHR9XG5cdH0sXG5cdFtWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LmNsb3Nlc3RMYXJnZXJGaXJzdF06IChydWxlLCBkYXRhU2l6ZSwgbmV4dERhdGFTaXplLCBfcHJldkRhdGFTaXplLCBfcHJldlNpemUsIHByZXZSdWxlLCBzaXplVHlwZXMpID0+IHtcblx0XHRpZiAobmV4dERhdGFTaXplKSB7XG5cdFx0XHRydWxlLm1heCA9IGNhbGN1bGF0ZUNsb3Nlc3RXaWR0aFRocmVzaG9sZChuZXh0RGF0YVNpemUsIGRhdGFTaXplLCBzaXplVHlwZXMsIGZhbHNlKTtcblx0XHR9XG5cdFx0aWYgKHByZXZSdWxlPy5tYXgpIHtcblx0XHRcdHJ1bGUubWluID0gcHJldlJ1bGUubWF4ICsgMTtcblx0XHR9XG5cdH0sXG59O1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVDbG9zZXN0V2lkdGhUaHJlc2hvbGQoXG5cdG5leHREYXRhU2l6ZTogVmlld3BvcnRTaXplVHlwZUluZm8sXG5cdGRhdGFTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcblx0c2l6ZVR5cGVzOiBWaWV3cG9ydFNpemVUeXBlSW5mb1tdLFxuXHRpc1NtYWxsZXJQcmVmZXJyZWQ6IGJvb2xlYW4sXG4pIHtcblx0Y29uc3QgZm4gPSBpc1NtYWxsZXJQcmVmZXJyZWQgPyBNYXRoLmNlaWwgOiBNYXRoLmZsb29yO1xuXHQvLyBnZXQgY2xvc2VzdCBiZXR3ZWVuIGN1cnIgYW5kIG5leHRcblx0Y29uc3QgZGlmZkluZGV4ID0gZm4oKG5leHREYXRhU2l6ZS50eXBlIC0gZGF0YVNpemUudHlwZSAtIDEpIC8gMik7XG5cdGNvbnN0IGRpZmZOZXh0U2l6ZSA9IHNpemVUeXBlc1tkYXRhU2l6ZS50eXBlICsgZGlmZkluZGV4XTtcblx0cmV0dXJuIChkaWZmTmV4dFNpemUgfHwgZGF0YVNpemUpLndpZHRoVGhyZXNob2xkO1xufVxuIl19
@@ -0,0 +1,69 @@
1
+ import { Directive, Input, TemplateRef, ViewContainerRef, } from "@angular/core";
2
+ import { combineLatest, ReplaySubject, Subject, tap, map, takeUntil } from "rxjs";
3
+ import { ViewportService } from "./viewport.service";
4
+ import { isViewportSizeMatcherExpression, isViewportSizeMatcherTupleExpression, isViewportConditionMatch } from "./viewport.util";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./viewport.service";
7
+ const NAME_CAMEL = "ssvViewportMatcherVar";
8
+ export class SsvViewportMatcherVarContext {
9
+ $implicit;
10
+ constructor($implicit = false) {
11
+ this.$implicit = $implicit;
12
+ }
13
+ }
14
+ export class SsvViewportMatcherVarDirective {
15
+ viewport;
16
+ viewContainer;
17
+ templateRef;
18
+ _matchConditions = {};
19
+ _context = new SsvViewportMatcherVarContext();
20
+ _destroy$ = new Subject();
21
+ _update$ = new ReplaySubject(1);
22
+ _viewRef;
23
+ set condition(value) {
24
+ if (isViewportSizeMatcherExpression(value)) {
25
+ this._matchConditions.expression = value;
26
+ }
27
+ else if (isViewportSizeMatcherTupleExpression(value)) {
28
+ const [op, size] = value;
29
+ this._matchConditions.expression = {
30
+ operation: op,
31
+ size
32
+ };
33
+ }
34
+ else {
35
+ this._matchConditions.sizeType = value;
36
+ }
37
+ this._update$.next();
38
+ }
39
+ constructor(viewport, viewContainer, templateRef) {
40
+ this.viewport = viewport;
41
+ this.viewContainer = viewContainer;
42
+ this.templateRef = templateRef;
43
+ }
44
+ ngOnInit() {
45
+ this.updateView();
46
+ 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();
47
+ }
48
+ ngOnDestroy() {
49
+ this._destroy$.next();
50
+ this._destroy$.complete();
51
+ }
52
+ updateView() {
53
+ this.viewContainer.clear();
54
+ this._viewRef = this.viewContainer.createEmbeddedView(this.templateRef, this._context);
55
+ }
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvViewportMatcherVarDirective, deps: [{ token: i1.ViewportService }, { token: i0.ViewContainerRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
57
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.9", type: SsvViewportMatcherVarDirective, isStandalone: true, selector: "[ssvViewportMatcherVar]", inputs: { condition: ["ssvViewportMatcherVarWhen", "condition"] }, ngImport: i0 });
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvViewportMatcherVarDirective, decorators: [{
60
+ type: Directive,
61
+ args: [{
62
+ selector: `[${NAME_CAMEL}]`,
63
+ standalone: true,
64
+ }]
65
+ }], ctorParameters: () => [{ type: i1.ViewportService }, { type: i0.ViewContainerRef }, { type: i0.TemplateRef }], propDecorators: { condition: [{
66
+ type: Input,
67
+ args: [`${NAME_CAMEL}When`]
68
+ }] } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtbWF0Y2hlci12YXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gudXgvc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0LW1hdGNoZXItdmFyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR04sU0FBUyxFQUNULEtBQUssRUFDTCxXQUFXLEVBQ1gsZ0JBQWdCLEdBRWhCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNOLCtCQUErQixFQUMvQixvQ0FBb0MsRUFDcEMsd0JBQXdCLEVBQ3hCLE1BQU0saUJBQWlCLENBQUM7OztBQUd6QixNQUFNLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQztBQUUzQyxNQUFNLE9BQU8sNEJBQTRCO0lBR2hDO0lBRFIsWUFDUSxZQUFZLEtBQUs7UUFBakIsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUNyQixDQUFDO0NBRUw7QUFNRCxNQUFNLE9BQU8sOEJBQThCO0lBeUJqQztJQUNBO0lBQ0E7SUF6QkQsZ0JBQWdCLEdBQTRCLEVBQUUsQ0FBQztJQUMvQyxRQUFRLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO0lBQ3JDLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBQ2hDLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBTyxDQUFDLENBQUMsQ0FBQztJQUMvQyxRQUFRLENBQWlEO0lBRWpFLElBQWdDLFNBQVMsQ0FBQyxLQUF3RDtRQUNqRyxJQUFJLCtCQUErQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksb0NBQW9DLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxHQUFHO2dCQUNsQyxTQUFTLEVBQUUsRUFBRTtnQkFDYixJQUFJO2FBQ0osQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDeEMsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQ1MsUUFBeUIsRUFDekIsYUFBK0IsRUFDL0IsV0FBc0Q7UUFGdEQsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUEyQztJQUUvRCxDQUFDO0lBRUQsUUFBUTtRQUNQLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzNELEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUN6RyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFDckMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsRUFDdkMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDekIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxVQUFVO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7dUdBakRXLDhCQUE4QjsyRkFBOUIsOEJBQThCOzsyRkFBOUIsOEJBQThCO2tCQUoxQyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxJQUFJLFVBQVUsR0FBRztvQkFDM0IsVUFBVSxFQUFFLElBQUk7aUJBQ2hCOzZJQVNnQyxTQUFTO3NCQUF4QyxLQUFLO3VCQUFDLEdBQUcsVUFBVSxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0T25Jbml0LFxuXHRPbkRlc3Ryb3ksXG5cdERpcmVjdGl2ZSxcblx0SW5wdXQsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRFbWJlZGRlZFZpZXdSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0LCB0YXAsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQuc2VydmljZVwiO1xuaW1wb3J0IHtcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbixcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uLFxuXHRpc1ZpZXdwb3J0Q29uZGl0aW9uTWF0Y2hcbn0gZnJvbSBcIi4vdmlld3BvcnQudXRpbFwiO1xuaW1wb3J0IHsgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMsIFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcblxuY29uc3QgTkFNRV9DQU1FTCA9IFwic3N2Vmlld3BvcnRNYXRjaGVyVmFyXCI7XG5cbmV4cG9ydCBjbGFzcyBTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0IHtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwdWJsaWMgJGltcGxpY2l0ID0gZmFsc2UsXG5cdCkgeyB9XG5cbn1cblxuQERpcmVjdGl2ZSh7XG5cdHNlbGVjdG9yOiBgWyR7TkFNRV9DQU1FTH1dYCxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU3N2Vmlld3BvcnRNYXRjaGVyVmFyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG5cdHByaXZhdGUgX21hdGNoQ29uZGl0aW9uczogVmlld3BvcnRNYXRjaENvbmRpdGlvbnMgPSB7fTtcblx0cHJpdmF0ZSBfY29udGV4dCA9IG5ldyBTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0KCk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfdXBkYXRlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuXHRwcml2YXRlIF92aWV3UmVmITogRW1iZWRkZWRWaWV3UmVmPFNzdlZpZXdwb3J0TWF0Y2hlclZhckNvbnRleHQ+O1xuXG5cdEBJbnB1dChgJHtOQU1FX0NBTUVMfVdoZW5gKSBzZXQgY29uZGl0aW9uKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uKSB7XG5cdFx0aWYgKGlzVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24odmFsdWUpKSB7XG5cdFx0XHR0aGlzLl9tYXRjaENvbmRpdGlvbnMuZXhwcmVzc2lvbiA9IHZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoaXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgW29wLCBzaXplXSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fbWF0Y2hDb25kaXRpb25zLmV4cHJlc3Npb24gPSB7XG5cdFx0XHRcdG9wZXJhdGlvbjogb3AsXG5cdFx0XHRcdHNpemVcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX21hdGNoQ29uZGl0aW9ucy5zaXplVHlwZSA9IHZhbHVlO1xuXHRcdH1cblxuXHRcdHRoaXMuX3VwZGF0ZSQubmV4dCgpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB2aWV3cG9ydDogVmlld3BvcnRTZXJ2aWNlLFxuXHRcdHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcblx0XHRwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxTc3ZWaWV3cG9ydE1hdGNoZXJWYXJDb250ZXh0Pixcblx0KSB7XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnVwZGF0ZVZpZXcoKTtcblx0XHRjb21iaW5lTGF0ZXN0KFt0aGlzLnZpZXdwb3J0LnNpemVUeXBlJCwgdGhpcy5fdXBkYXRlJF0pLnBpcGUoXG5cdFx0XHRtYXAoKFtzaXplVHlwZV0pID0+IGlzVmlld3BvcnRDb25kaXRpb25NYXRjaChzaXplVHlwZSwgdGhpcy5fbWF0Y2hDb25kaXRpb25zLCB0aGlzLnZpZXdwb3J0LnNpemVUeXBlTWFwKSksXG5cdFx0XHR0YXAoeCA9PiB0aGlzLl9jb250ZXh0LiRpbXBsaWNpdCA9IHgpLFxuXHRcdFx0dGFwKCgpID0+IHRoaXMuX3ZpZXdSZWYubWFya0ZvckNoZWNrKCkpLFxuXHRcdFx0dGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcblx0XHQpLnN1YnNjcmliZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5fZGVzdHJveSQubmV4dCgpO1xuXHRcdHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVZpZXcoKTogdm9pZCB7XG5cdFx0dGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG5cdFx0dGhpcy5fdmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZiwgdGhpcy5fY29udGV4dCk7XG5cdH1cblxufVxuIl19