@ssv/ngx.ux 2.0.1-dev198 → 2.0.2-dev.7

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 (63) hide show
  1. package/README.md +2 -2
  2. package/esm2020/config.mjs +7 -0
  3. package/esm2020/index.mjs +5 -0
  4. package/esm2020/internal/internal.model.mjs +2 -0
  5. package/esm2020/module.mjs +65 -0
  6. package/esm2020/platform/window.mjs +30 -0
  7. package/esm2020/ssv-ngx.ux.mjs +5 -0
  8. package/esm2020/version.mjs +2 -0
  9. package/esm2020/viewport/index.mjs +9 -0
  10. package/esm2020/viewport/viewport-data/index.mjs +4 -0
  11. package/esm2020/viewport/viewport-data/viewport-data-matcher.mjs +108 -0
  12. package/esm2020/viewport/viewport-data/viewport-data.pipe.mjs +43 -0
  13. package/esm2020/viewport/viewport-data/viewport-data.service.mjs +37 -0
  14. package/esm2020/viewport/viewport-data/viewport-data.utils.mjs +100 -0
  15. package/esm2020/viewport/viewport-matcher-var.directive.mjs +63 -0
  16. package/esm2020/viewport/viewport-matcher.directive.mjs +131 -0
  17. package/esm2020/viewport/viewport-server-size.service.mjs +43 -0
  18. package/esm2020/viewport/viewport.const.mjs +18 -0
  19. package/esm2020/viewport/viewport.model.mjs +31 -0
  20. package/esm2020/viewport/viewport.service.mjs +66 -0
  21. package/esm2020/viewport/viewport.util.mjs +117 -0
  22. package/fesm2015/{ssv-ngx.ux.js → ssv-ngx.ux.mjs} +254 -233
  23. package/fesm2015/ssv-ngx.ux.mjs.map +1 -0
  24. package/fesm2020/ssv-ngx.ux.mjs +822 -0
  25. package/fesm2020/ssv-ngx.ux.mjs.map +1 -0
  26. package/module.d.ts +7 -0
  27. package/package.json +21 -9
  28. package/platform/window.d.ts +3 -0
  29. package/version.d.ts +1 -1
  30. package/viewport/viewport-data/viewport-data.pipe.d.ts +3 -0
  31. package/viewport/viewport-data/viewport-data.service.d.ts +3 -0
  32. package/viewport/viewport-matcher-var.directive.d.ts +3 -0
  33. package/viewport/viewport-matcher.directive.d.ts +3 -0
  34. package/viewport/viewport-server-size.service.d.ts +3 -0
  35. package/viewport/viewport.service.d.ts +3 -0
  36. package/CHANGELOG.md +0 -142
  37. package/bundles/ssv-ngx.ux.umd.js +0 -1219
  38. package/bundles/ssv-ngx.ux.umd.js.map +0 -1
  39. package/bundles/ssv-ngx.ux.umd.min.js +0 -16
  40. package/bundles/ssv-ngx.ux.umd.min.js.map +0 -1
  41. package/esm2015/config.js +0 -7
  42. package/esm2015/index.js +0 -5
  43. package/esm2015/internal/internal.model.js +0 -2
  44. package/esm2015/module.js +0 -50
  45. package/esm2015/platform/window.js +0 -28
  46. package/esm2015/ssv-ngx.ux.js +0 -7
  47. package/esm2015/version.js +0 -2
  48. package/esm2015/viewport/index.js +0 -9
  49. package/esm2015/viewport/viewport-data/index.js +0 -4
  50. package/esm2015/viewport/viewport-data/viewport-data-matcher.js +0 -108
  51. package/esm2015/viewport/viewport-data/viewport-data.pipe.js +0 -43
  52. package/esm2015/viewport/viewport-data/viewport-data.service.js +0 -38
  53. package/esm2015/viewport/viewport-data/viewport-data.utils.js +0 -100
  54. package/esm2015/viewport/viewport-matcher-var.directive.js +0 -64
  55. package/esm2015/viewport/viewport-matcher.directive.js +0 -134
  56. package/esm2015/viewport/viewport-server-size.service.js +0 -38
  57. package/esm2015/viewport/viewport.const.js +0 -18
  58. package/esm2015/viewport/viewport.model.js +0 -31
  59. package/esm2015/viewport/viewport.service.js +0 -69
  60. package/esm2015/viewport/viewport.util.js +0 -117
  61. package/fesm2015/ssv-ngx.ux.js.map +0 -1
  62. package/ssv-ngx.ux.d.ts +0 -6
  63. package/ssv-ngx.ux.metadata.json +0 -1
@@ -0,0 +1,131 @@
1
+ import { Directive, Input, } from "@angular/core";
2
+ import { Subscription, Subject } from "rxjs";
3
+ import { tap, filter, pairwise, startWith } from "rxjs/operators";
4
+ import { isViewportSizeMatcherExpression, isViewportSizeMatcherTupleExpression, isViewportConditionMatch } from "./viewport.util";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./viewport.service";
7
+ export class SsvViewportMatcherContext {
8
+ constructor() {
9
+ this.sizeType = null;
10
+ this.sizeTypeExclude = null;
11
+ }
12
+ }
13
+ export class SsvViewportMatcherDirective {
14
+ constructor(viewport, renderer, viewContainer, cdr, templateRef) {
15
+ this.viewport = viewport;
16
+ this.renderer = renderer;
17
+ this.viewContainer = viewContainer;
18
+ this.cdr = cdr;
19
+ this._context = new SsvViewportMatcherContext();
20
+ this._thenTemplateRef = null;
21
+ this._elseTemplateRef = null;
22
+ this._thenViewRef = null;
23
+ this._elseViewRef = null;
24
+ this.sizeType$$ = Subscription.EMPTY;
25
+ this.cssClass$$ = Subscription.EMPTY;
26
+ this._update$ = new Subject();
27
+ this._thenTemplateRef = templateRef;
28
+ }
29
+ set ssvViewportMatcher(value) {
30
+ if (isViewportSizeMatcherExpression(value)) {
31
+ this._context.expression = value;
32
+ }
33
+ else if (isViewportSizeMatcherTupleExpression(value)) {
34
+ const [op, size] = value;
35
+ this._context.expression = {
36
+ operation: op,
37
+ size
38
+ };
39
+ }
40
+ else {
41
+ this._context.sizeType = value;
42
+ }
43
+ if (this.sizeInfo) {
44
+ this._update$.next(this._context);
45
+ }
46
+ }
47
+ set ssvViewportMatcherExclude(value) {
48
+ this._context.sizeTypeExclude = value;
49
+ if (this.sizeInfo) {
50
+ this._update$.next(this._context);
51
+ }
52
+ }
53
+ set ssvViewportMatcherElse(templateRef) {
54
+ this._elseTemplateRef = templateRef;
55
+ this._elseViewRef = null; // clear previous view if any.
56
+ if (this.sizeInfo) {
57
+ this._update$.next(this._context);
58
+ }
59
+ }
60
+ ngOnInit() {
61
+ // console.log("ssvViewportMatcher init");
62
+ this._update$
63
+ .pipe(
64
+ // tap(x => console.log(">>> ssvViewportMatcher - update triggered", x)),
65
+ filter(() => !!this.sizeInfo),
66
+ // tap(x => console.log(">>> ssvViewportMatcher - updating...", x)),
67
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
68
+ tap(() => this._updateView(this.sizeInfo)), tap(() => this.cdr.markForCheck()))
69
+ .subscribe();
70
+ this.sizeType$$ = this.viewport.sizeType$
71
+ .pipe(
72
+ // tap(x => console.log("ssvViewportMatcher - sizeType changed", x)),
73
+ tap(x => this.sizeInfo = x), tap(() => this._update$.next(this._context)))
74
+ .subscribe();
75
+ this.cssClass$$ = this.viewport.sizeType$
76
+ .pipe(startWith(undefined), filter(() => !!(this._thenViewRef || this._elseViewRef)), pairwise(), tap(([prev, curr]) => {
77
+ const el = this._thenViewRef
78
+ ? this._thenViewRef.rootNodes[0]
79
+ : this._elseViewRef?.rootNodes[0];
80
+ if (!el.classList) {
81
+ return;
82
+ }
83
+ if (prev) {
84
+ this.renderer.removeClass(el, `ssv-vp-size--${prev.name}`);
85
+ }
86
+ this.renderer.addClass(el, `ssv-vp-size--${curr?.name}`);
87
+ }))
88
+ .subscribe();
89
+ }
90
+ ngOnDestroy() {
91
+ this.cssClass$$.unsubscribe();
92
+ this.sizeType$$.unsubscribe();
93
+ this._update$.complete();
94
+ }
95
+ _updateView(sizeInfo) {
96
+ if (isViewportConditionMatch(sizeInfo, this._context, this.viewport.sizeTypeMap)) {
97
+ if (!this._thenViewRef) {
98
+ this.viewContainer.clear();
99
+ this._elseViewRef = null;
100
+ if (this._thenTemplateRef) {
101
+ this._thenViewRef = this.viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
102
+ }
103
+ }
104
+ }
105
+ else {
106
+ if (!this._elseViewRef) {
107
+ this.viewContainer.clear();
108
+ this._thenViewRef = null;
109
+ if (this._elseTemplateRef) {
110
+ this._elseViewRef = this.viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ }
116
+ SsvViewportMatcherDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvViewportMatcherDirective, deps: [{ token: i1.ViewportService }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
117
+ SsvViewportMatcherDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: SsvViewportMatcherDirective, selector: "[ssvViewportMatcher]", inputs: { ssvViewportMatcher: "ssvViewportMatcher", ssvViewportMatcherExclude: "ssvViewportMatcherExclude", ssvViewportMatcherElse: "ssvViewportMatcherElse" }, exportAs: ["ssvViewportMatcher"], ngImport: i0 });
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SsvViewportMatcherDirective, decorators: [{
119
+ type: Directive,
120
+ args: [{
121
+ selector: "[ssvViewportMatcher]",
122
+ exportAs: "ssvViewportMatcher",
123
+ }]
124
+ }], ctorParameters: function () { return [{ type: i1.ViewportService }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: i0.TemplateRef }]; }, propDecorators: { ssvViewportMatcher: [{
125
+ type: Input
126
+ }], ssvViewportMatcherExclude: [{
127
+ type: Input
128
+ }], ssvViewportMatcherElse: [{
129
+ type: Input
130
+ }] } });
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtbWF0Y2hlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmlld3BvcnQvdmlld3BvcnQtbWF0Y2hlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdOLFNBQVMsRUFHVCxLQUFLLEdBSUwsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xFLE9BQU8sRUFDTiwrQkFBK0IsRUFDL0Isb0NBQW9DLEVBQ3BDLHdCQUF3QixFQUN4QixNQUFNLGlCQUFpQixDQUFDOzs7QUFHekIsTUFBTSxPQUFPLHlCQUF5QjtJQUF0QztRQUVDLGFBQVEsR0FBNkIsSUFBSSxDQUFDO1FBQzFDLG9CQUFlLEdBQTZCLElBQUksQ0FBQztJQUdsRCxDQUFDO0NBQUE7QUFNRCxNQUFNLE9BQU8sMkJBQTJCO0lBK0N2QyxZQUNTLFFBQXlCLEVBQ3pCLFFBQW1CLEVBQ25CLGFBQStCLEVBQy9CLEdBQXNCLEVBQzlCLFdBQW1EO1FBSjNDLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0N2QixhQUFRLEdBQThCLElBQUkseUJBQXlCLEVBQUUsQ0FBQztRQUN0RSxxQkFBZ0IsR0FBa0QsSUFBSSxDQUFDO1FBQ3ZFLHFCQUFnQixHQUFrRCxJQUFJLENBQUM7UUFDdkUsaUJBQVksR0FBc0QsSUFBSSxDQUFDO1FBQ3ZFLGlCQUFZLEdBQXNELElBQUksQ0FBQztRQUN2RSxlQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNoQyxlQUFV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RCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztpQkFDRjthQUNEO1NBQ0Q7YUFBTTtZQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFFekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDeEQsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsUUFBUSxDQUNiLENBQUM7aUJBQ0Y7YUFDRDtTQUNEO0lBQ0YsQ0FBQzs7d0hBcklXLDJCQUEyQjs0R0FBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjtpQkFDOUI7dU5BY2Esa0JBQWtCO3NCQUE5QixLQUFLO2dCQWtCTyx5QkFBeUI7c0JBQXJDLEtBQUs7Z0JBUU8sc0JBQXNCO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0T25Jbml0LFxuXHRPbkRlc3Ryb3ksXG5cdERpcmVjdGl2ZSxcblx0UmVuZGVyZXIyLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRJbnB1dCxcblx0RW1iZWRkZWRWaWV3UmVmLFxuXHRUZW1wbGF0ZVJlZixcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgdGFwLCBmaWx0ZXIsIHBhaXJ3aXNlLCBzdGFydFdpdGggfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQuc2VydmljZVwiO1xuaW1wb3J0IHtcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbixcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uLFxuXHRpc1ZpZXdwb3J0Q29uZGl0aW9uTWF0Y2hcbn0gZnJvbSBcIi4vdmlld3BvcnQudXRpbFwiO1xuaW1wb3J0IHsgVmlld3BvcnRTaXplVHlwZUluZm8sIFZpZXdwb3J0TWF0Y2hDb25kaXRpb25zLCBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbiB9IGZyb20gXCIuL3ZpZXdwb3J0Lm1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0IGltcGxlbWVudHMgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMge1xuXG5cdHNpemVUeXBlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXHRzaXplVHlwZUV4Y2x1ZGU6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG5cdGV4cHJlc3Npb24/OiBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbjtcblxufVxuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6IFwiW3NzdlZpZXdwb3J0TWF0Y2hlcl1cIixcblx0ZXhwb3J0QXM6IFwic3N2Vmlld3BvcnRNYXRjaGVyXCIsXG59KVxuZXhwb3J0IGNsYXNzIFNzdlZpZXdwb3J0TWF0Y2hlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuXHRzaXplSW5mbzogVmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfY29udGV4dDogU3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dCA9IG5ldyBTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0KCk7XG5cdHByaXZhdGUgX3RoZW5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBfZWxzZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIF90aGVuVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQ+IHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgX2Vsc2VWaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBzaXplVHlwZSQkID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXHRwcml2YXRlIGNzc0NsYXNzJCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3VwZGF0ZSQgPSBuZXcgU3ViamVjdDxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PigpO1xuXG5cdEBJbnB1dCgpIHNldCBzc3ZWaWV3cG9ydE1hdGNoZXIodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24pIHtcblx0XHRpZiAoaXNWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdHRoaXMuX2NvbnRleHQuZXhwcmVzc2lvbiA9IHZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoaXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgW29wLCBzaXplXSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fY29udGV4dC5leHByZXNzaW9uID0ge1xuXHRcdFx0XHRvcGVyYXRpb246IG9wLFxuXHRcdFx0XHRzaXplXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jb250ZXh0LnNpemVUeXBlID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2l6ZUluZm8pIHtcblx0XHRcdHRoaXMuX3VwZGF0ZSQubmV4dCh0aGlzLl9jb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgc3N2Vmlld3BvcnRNYXRjaGVyRXhjbHVkZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0XHR0aGlzLl9jb250ZXh0LnNpemVUeXBlRXhjbHVkZSA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMuc2l6ZUluZm8pIHtcblx0XHRcdHRoaXMuX3VwZGF0ZSQubmV4dCh0aGlzLl9jb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgc3N2Vmlld3BvcnRNYXRjaGVyRWxzZSh0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsKSB7XG5cdFx0dGhpcy5fZWxzZVRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG5cdFx0dGhpcy5fZWxzZVZpZXdSZWYgPSBudWxsOyAvLyBjbGVhciBwcmV2aW91cyB2aWV3IGlmIGFueS5cblx0XHRpZiAodGhpcy5zaXplSW5mbykge1xuXHRcdFx0dGhpcy5fdXBkYXRlJC5uZXh0KHRoaXMuX2NvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgdmlld3BvcnQ6IFZpZXdwb3J0U2VydmljZSxcblx0XHRwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG5cdFx0cHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcblx0XHR0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4sXG5cdCkge1xuXHRcdHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJzc3ZWaWV3cG9ydE1hdGNoZXIgaW5pdFwiKTtcblxuXHRcdHRoaXMuX3VwZGF0ZSRcblx0XHRcdC5waXBlKFxuXHRcdFx0XHQvLyB0YXAoeCA9PiBjb25zb2xlLmxvZyhcIj4+PiBzc3ZWaWV3cG9ydE1hdGNoZXIgLSB1cGRhdGUgdHJpZ2dlcmVkXCIsIHgpKSxcblx0XHRcdFx0ZmlsdGVyKCgpID0+ICEhdGhpcy5zaXplSW5mbyksXG5cdFx0XHRcdC8vIHRhcCh4ID0+IGNvbnNvbGUubG9nKFwiPj4+IHNzdlZpZXdwb3J0TWF0Y2hlciAtIHVwZGF0aW5nLi4uXCIsIHgpKSxcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cblx0XHRcdFx0dGFwKCgpID0+IHRoaXMuX3VwZGF0ZVZpZXcodGhpcy5zaXplSW5mbyEpKSxcblx0XHRcdFx0dGFwKCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXG5cdFx0dGhpcy5zaXplVHlwZSQkID0gdGhpcy52aWV3cG9ydC5zaXplVHlwZSRcblx0XHRcdC5waXBlKFxuXHRcdFx0XHQvLyB0YXAoeCA9PiBjb25zb2xlLmxvZyhcInNzdlZpZXdwb3J0TWF0Y2hlciAtIHNpemVUeXBlIGNoYW5nZWRcIiwgeCkpLFxuXHRcdFx0XHR0YXAoeCA9PiB0aGlzLnNpemVJbmZvID0geCksXG5cdFx0XHRcdHRhcCgoKSA9PiB0aGlzLl91cGRhdGUkLm5leHQodGhpcy5fY29udGV4dCkpLFxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXG5cdFx0dGhpcy5jc3NDbGFzcyQkID0gdGhpcy52aWV3cG9ydC5zaXplVHlwZSRcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRzdGFydFdpdGg8Vmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCksXG5cdFx0XHRcdGZpbHRlcigoKSA9PiAhISh0aGlzLl90aGVuVmlld1JlZiB8fCB0aGlzLl9lbHNlVmlld1JlZikpLFxuXHRcdFx0XHRwYWlyd2lzZSgpLFxuXHRcdFx0XHR0YXAoKFtwcmV2LCBjdXJyXSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGVsOiBFbGVtZW50ID0gdGhpcy5fdGhlblZpZXdSZWZcblx0XHRcdFx0XHRcdD8gdGhpcy5fdGhlblZpZXdSZWYucm9vdE5vZGVzWzBdXG5cdFx0XHRcdFx0XHQ6IHRoaXMuX2Vsc2VWaWV3UmVmPy5yb290Tm9kZXNbMF07XG5cblx0XHRcdFx0XHRpZiAoIWVsLmNsYXNzTGlzdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocHJldikge1xuXHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgYHNzdi12cC1zaXplLS0ke3ByZXYubmFtZX1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgYHNzdi12cC1zaXplLS0ke2N1cnI/Lm5hbWV9YCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5jc3NDbGFzcyQkLnVuc3Vic2NyaWJlKCk7XG5cdFx0dGhpcy5zaXplVHlwZSQkLnVuc3Vic2NyaWJlKCk7XG5cdFx0dGhpcy5fdXBkYXRlJC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBfdXBkYXRlVmlldyhzaXplSW5mbzogVmlld3BvcnRTaXplVHlwZUluZm8pIHtcblx0XHRpZiAoaXNWaWV3cG9ydENvbmRpdGlvbk1hdGNoKHNpemVJbmZvLCB0aGlzLl9jb250ZXh0LCB0aGlzLnZpZXdwb3J0LnNpemVUeXBlTWFwKSkge1xuXHRcdFx0aWYgKCF0aGlzLl90aGVuVmlld1JlZikge1xuXHRcdFx0XHR0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcblx0XHRcdFx0dGhpcy5fZWxzZVZpZXdSZWYgPSBudWxsO1xuXG5cdFx0XHRcdGlmICh0aGlzLl90aGVuVGVtcGxhdGVSZWYpIHtcblx0XHRcdFx0XHR0aGlzLl90aGVuVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoXG5cdFx0XHRcdFx0XHR0aGlzLl90aGVuVGVtcGxhdGVSZWYsXG5cdFx0XHRcdFx0XHR0aGlzLl9jb250ZXh0LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLl9lbHNlVmlld1JlZikge1xuXHRcdFx0XHR0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcblx0XHRcdFx0dGhpcy5fdGhlblZpZXdSZWYgPSBudWxsO1xuXG5cdFx0XHRcdGlmICh0aGlzLl9lbHNlVGVtcGxhdGVSZWYpIHtcblx0XHRcdFx0XHR0aGlzLl9lbHNlVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoXG5cdFx0XHRcdFx0XHR0aGlzLl9lbHNlVGVtcGxhdGVSZWYsXG5cdFx0XHRcdFx0XHR0aGlzLl9jb250ZXh0LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxufVxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtc2VydmVyLXNpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aWV3cG9ydC92aWV3cG9ydC1zZXJ2ZXItc2l6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHN0UsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBRzVELCtCQUErQjtBQUMvQiw2QkFBNkI7QUFDN0IsTUFBTSxlQUFlLEdBQTZCO0lBQ2pELENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3JCLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLEdBQUc7S0FDWDtJQUNELENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3BCLEtBQUssRUFBRSxHQUFHO1FBQ1YsTUFBTSxFQUFFLElBQUk7S0FDWjtJQUNELENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3BCLEtBQUssRUFBRSxHQUFHO1FBQ1YsTUFBTSxFQUFFLEdBQUc7S0FDWDtDQUNELENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBWSx3Q0FBd0MsQ0FBQyxDQUFDO0FBSzlHLE1BQU0sT0FBTyx5QkFBeUI7SUFFckMsWUFDcUQsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUUzRSxDQUFDO0lBRUQsR0FBRztRQUNGLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxlQUFlLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLENBQUM7O3NIQVRXLHlCQUF5QixrQkFHaEIsc0JBQXNCOzBIQUgvQix5QkFBeUIsY0FGekIsTUFBTTsyRkFFTix5QkFBeUI7a0JBSHJDLFVBQVU7bUJBQUM7b0JBQ1gsVUFBVSxFQUFFLE1BQU07aUJBQ2xCOzswQkFJRSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi9pbnRlcm5hbC9pbnRlcm5hbC5tb2RlbFwiO1xuaW1wb3J0IHsgRGV2aWNlVHlwZSwgVmlld3BvcnRTaXplIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcbmltcG9ydCB7IFV4T3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWdcIjtcblxuLy8gdG9kbzogbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuLyoqIFZpZXdwb3J0IHNpemUgZm9yIFNTUi4gKi9cbmNvbnN0IHZpZXdwb3J0U2l6ZVNTUjogRGljdGlvbmFyeTxWaWV3cG9ydFNpemU+ID0ge1xuXHRbRGV2aWNlVHlwZS5kZXNrdG9wXToge1xuXHRcdHdpZHRoOiAxMzY2LFxuXHRcdGhlaWdodDogNzY4LFxuXHR9LFxuXHRbRGV2aWNlVHlwZS50YWJsZXRdOiB7XG5cdFx0d2lkdGg6IDc2OCxcblx0XHRoZWlnaHQ6IDEwMjQsXG5cdH0sXG5cdFtEZXZpY2VUeXBlLm1vYmlsZV06IHtcblx0XHR3aWR0aDogNDE0LFxuXHRcdGhlaWdodDogNzM2LFxuXHR9LFxufTtcblxuZXhwb3J0IGNvbnN0IFVYX1ZJRVdQT1JUX1NTUl9ERVZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48VXhPcHRpb25zPihcIkBzc3Yvbmd4LnV4LWNvbmZpZy92aWV3cG9ydC9zc3ItZGV2aWNlXCIpO1xuXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3cG9ydFNlcnZlclNpemVTZXJ2aWNlIHtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KFVYX1ZJRVdQT1JUX1NTUl9ERVZJQ0UpIHByaXZhdGUgZGV2aWNlVHlwZTogRGV2aWNlVHlwZSxcblx0KSB7XG5cdH1cblxuXHRnZXQoKTogVmlld3BvcnRTaXplIHtcblx0XHRyZXR1cm4gdmlld3BvcnRTaXplU1NSW3RoaXMuZGV2aWNlVHlwZV0gfHwgdmlld3BvcnRTaXplU1NSW0RldmljZVR5cGUuZGVza3RvcF07XG5cdH1cblxufVxuIl19
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmlld3BvcnQvdmlld3BvcnQuY29uc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFHbEYsb0NBQW9DO0FBQ3BDLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUF1QjtJQUNsRSxNQUFNLEVBQUUsR0FBRztJQUNYLEtBQUssRUFBRSxHQUFHO0lBQ1YsTUFBTSxFQUFFLEdBQUc7SUFDWCxLQUFLLEVBQUUsSUFBSTtJQUNYLEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFLElBQUk7SUFDVCxLQUFLLEVBQUUsSUFBSTtJQUNYLEtBQUssRUFBRSxJQUFJO0NBQ1gsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFzQjtJQUM1RCxrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLFdBQVcsRUFBRSwrQkFBK0I7SUFDNUMsd0JBQXdCLEVBQUUseUJBQXlCLENBQUMsT0FBTztDQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi9pbnRlcm5hbC9pbnRlcm5hbC5tb2RlbFwiO1xuaW1wb3J0IHsgVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneSB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS1tYXRjaGVyXCI7XG5pbXBvcnQgeyBVeFZpZXdwb3J0T3B0aW9ucyB9IGZyb20gXCIuL3ZpZXdwb3J0Lm1vZGVsXCI7XG5cbi8qKiBEZWZhdWx0IHZpZXdwb3J0IGJyZWFrcG9pbnRzLiAqL1xuZXhwb3J0IGNvbnN0IFVYX1ZJRVdQT1JUX0RFRkFVTFRfQlJFQUtQT0lOVFM6IERpY3Rpb25hcnk8bnVtYmVyPiA9IHtcblx0eHNtYWxsOiA0NTAsXG5cdHNtYWxsOiA3NjcsXG5cdG1lZGl1bTogOTkyLFxuXHRsYXJnZTogMTI4MCxcblx0ZmhkOiAxOTIwLFxuXHRxaGQ6IDI1NjAsXG5cdHVoZDRrOiAzODQwLFxuXHR1aGQ4azogNzY4MCxcbn07XG5cbmV4cG9ydCBjb25zdCBVWF9WSUVXUE9SVF9ERUZBVUxUX0NPTkZJRzogVXhWaWV3cG9ydE9wdGlvbnMgPSB7XG5cdHJlc2l6ZVBvbGxpbmdTcGVlZDogMzMsXG5cdGJyZWFrcG9pbnRzOiBVWF9WSUVXUE9SVF9ERUZBVUxUX0JSRUFLUE9JTlRTLFxuXHRkZWZhdWx0RGF0YU1hdGNoU3RyYXRlZ3k6IFZpZXdwb3J0RGF0YU1hdGNoU3RyYXRlZ3kuc21hbGxlcixcbn07XG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdmlld3BvcnQvdmlld3BvcnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7OztHQUdHO0FBQ0gsTUFBTSxDQUFOLElBQVksZ0JBU1g7QUFURCxXQUFZLGdCQUFnQjtJQUMzQiwyREFBVSxDQUFBO0lBQ1YseURBQVMsQ0FBQTtJQUNULDJEQUFVLENBQUE7SUFDVix5REFBUyxDQUFBO0lBQ1QscURBQU8sQ0FBQTtJQUNQLHFEQUFPLENBQUE7SUFDUCx5REFBUyxDQUFBO0lBQ1QseURBQVMsQ0FBQTtBQUNWLENBQUMsRUFUVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBUzNCO0FBRUQsTUFBTSxDQUFOLElBQVksbUJBT1g7QUFQRCxXQUFZLG1CQUFtQjtJQUM5QixtQ0FBWSxDQUFBO0lBQ1osdUNBQWdCLENBQUE7SUFDaEIscUNBQWMsQ0FBQTtJQUNkLDZDQUFzQixDQUFBO0lBQ3RCLHdDQUFpQixDQUFBO0lBQ2pCLGdEQUF5QixDQUFBO0FBQzFCLENBQUMsRUFQVyxtQkFBbUIsS0FBbkIsbUJBQW1CLFFBTzlCO0FBRUQsTUFBTSxDQUFOLElBQVksVUFJWDtBQUpELFdBQVksVUFBVTtJQUNyQixpQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBaUIsQ0FBQTtJQUNqQiwrQkFBaUIsQ0FBQTtBQUNsQixDQUFDLEVBSlcsVUFBVSxLQUFWLFVBQVUsUUFJckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uL2ludGVybmFsL2ludGVybmFsLm1vZGVsXCI7XG5pbXBvcnQgeyBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5IH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YVwiO1xuXG4vKipcbiAqIFRoZSBpbmRpY2VzIG9mIGVhY2ggYnJlYWtwb2ludCBwcm92aWRlZCBiYXNlZCBvbiB0aGUgYFVYX1ZJRVdQT1JUX0RFRkFVTFRfQlJFQUtQT0lOVFNgLlxuICogQHNlZSBVWF9WSUVXUE9SVF9ERUZBVUxUX0JSRUFLUE9JTlRTXG4gKi9cbmV4cG9ydCBlbnVtIFZpZXdwb3J0U2l6ZVR5cGUge1xuXHR4c21hbGwgPSAwLFxuXHRzbWFsbCA9IDEsXG5cdG1lZGl1bSA9IDIsXG5cdGxhcmdlID0gMyxcblx0ZmhkID0gNCxcblx0cWhkID0gNixcblx0dWhkNGsgPSA3LFxuXHR1aGQ4ayA9IDgsXG59XG5cbmV4cG9ydCBlbnVtIENvbXBhcmlzb25PcGVyYXRpb24ge1xuXHRlcXVhbHMgPSBcIj1cIixcblx0bm90RXF1YWxzID0gXCI8PlwiLFxuXHRsZXNzVGhhbiA9IFwiPFwiLFxuXHRsZXNzT3JFcXVhbFRoYW4gPSBcIjw9XCIsXG5cdGdyZWF0ZXJUaGFuID0gXCI+XCIsXG5cdGdyZWF0ZXJPckVxdWFsVGhhbiA9IFwiPj1cIixcbn1cblxuZXhwb3J0IGVudW0gRGV2aWNlVHlwZSB7XG5cdGRlc2t0b3AgPSBcImRlc2t0b3BcIixcblx0bW9iaWxlID0gXCJtb2JpbGVcIixcblx0dGFibGV0ID0gXCJ0YWJsZXRcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFV4Vmlld3BvcnRPcHRpb25zIHtcblx0LyoqIFBvbGxpbmcgc3BlZWQgb24gcmVzaXppbmcgKGluIG1pbGxpc2Vjb25kcykuIGUuZy4gdGhlIGhpZ2hlciB0aGUgbnVtYmVyIHRoZSBsb25nZXIgaXQgdGFrZXMgdG8gcmVjYWxjdWxhdGUuICovXG5cdHJlc2l6ZVBvbGxpbmdTcGVlZDogbnVtYmVyO1xuXG5cdC8qKiBCcmVha3BvaW50cyB0byB1c2UuIEtleSBuZWVkcyB0byBtYXRjaCB0aGUgc2l6ZSB0eXBlIGFuZCB0aGUgdmFsdWUgdGhlIHdpZHRoIHRocmVzaG9sZC5cblx0ICogZS5nLiBnaXZlbiB3aWR0aCAnMTAwMCcgYW5kIGBtZWRpdW1gIGlzIHNldCB0byAnOTkyJyA9PiBgbGFyZ2VgLlxuXHQgKi9cblx0YnJlYWtwb2ludHM6IERpY3Rpb25hcnk8bnVtYmVyPjtcblxuXHQvKiogRGVmYXVsdCBkYXRhIG1hdGNoIHN0cmF0ZWd5IHRvIHVzZS4gKi9cblx0ZGVmYXVsdERhdGFNYXRjaFN0cmF0ZWd5OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0U2l6ZSB7XG5cdHdpZHRoOiBudW1iZXI7XG5cdGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0U2l6ZVR5cGVJbmZvIHtcblx0dHlwZTogbnVtYmVyO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHdpZHRoVGhyZXNob2xkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMge1xuXHRzaXplVHlwZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcblx0c2l6ZVR5cGVFeGNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuXHRleHByZXNzaW9uPzogVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24ge1xuXHRzaXplOiBzdHJpbmc7XG5cdG9wZXJhdGlvbjogQ29tcGFyaXNvbk9wZXJhdGlvbjtcbn1cbiJdfQ==
@@ -0,0 +1,66 @@
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
+ this._sizeTypes = generateViewportSizeTypeInfoList(config.viewport.breakpoints);
14
+ this._sizeTypeMap = generateViewportSizeTypeInfoRefs(this._sizeTypes);
15
+ if (windowRef.hasNative) {
16
+ this.resizeSnap$ = fromEvent(window, "resize").pipe(map(() => this.getViewportSize()), share());
17
+ this.resize$ = this.resizeSnap$.pipe(auditTime(config.viewport.resizePollingSpeed), share());
18
+ }
19
+ else {
20
+ this.resizeSnap$ = this.resize$ = of(viewportServerSize.get());
21
+ }
22
+ const size = this.getViewportSize();
23
+ this._sizeTypeSnapshot = getSizeTypeInfo(size.width, this.sizeTypes);
24
+ const sizeFn = (obs$) => obs$.pipe(startWith(size), distinctUntilChanged((a, b) => a.width === b.width && a.height === b.height), shareReplay(1));
25
+ this.sizeSnap$ = sizeFn(this.resizeSnap$);
26
+ this.size$ = sizeFn(this.resize$);
27
+ 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));
28
+ this.sizeType$ = sizeTypeFn(this.size$);
29
+ this.sizeTypeSnap$ = sizeTypeFn(this.sizeSnap$);
30
+ }
31
+ /** Viewport size type snapshot of the last value. (Prefer use `sizeType$` observable when possible.) */
32
+ get sizeTypeSnapshot() { return this._sizeTypeSnapshot; }
33
+ /** Size types refs of the generated viewport size type info. */
34
+ get sizeTypeMap() { return this._sizeTypeMap; }
35
+ /** Viewport size types list ordered by type, smallest to largest. */
36
+ get sizeTypes() { return this._sizeTypes; }
37
+ /** Returns the current viewport size */
38
+ getViewportSize() {
39
+ if (!this.windowRef.hasNative) {
40
+ return this.viewportServerSize.get();
41
+ }
42
+ const ua = navigator.userAgent.toLowerCase();
43
+ if (ua.indexOf("safari") !== -1 && ua.indexOf("chrome") === -1) { // safari subtracts the scrollbar width
44
+ return {
45
+ width: this.windowRef.native.document.documentElement.clientWidth,
46
+ height: this.windowRef.native.document.documentElement.clientHeight,
47
+ };
48
+ }
49
+ return {
50
+ width: this.windowRef.native.innerWidth,
51
+ height: this.windowRef.native.innerHeight,
52
+ };
53
+ }
54
+ }
55
+ 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 });
56
+ ViewportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportService, providedIn: "root" });
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ViewportService, decorators: [{
58
+ type: Injectable,
59
+ args: [{
60
+ providedIn: "root",
61
+ }]
62
+ }], ctorParameters: function () { return [{ type: i1.WindowRef }, { type: i2.ViewportServerSizeService }, { type: undefined, decorators: [{
63
+ type: Inject,
64
+ args: [UX_CONFIG]
65
+ }] }]; } });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aWV3cG9ydC92aWV3cG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFDTixHQUFHLEVBQ0gsR0FBRyxFQUNILG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFDWCxTQUFTLEdBQ1QsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSWpELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxnQ0FBZ0MsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQU10SCxNQUFNLE9BQU8sZUFBZTtJQWlDM0IsWUFDUyxTQUFvQixFQUNwQixrQkFBNkMsRUFDbEMsTUFBaUI7UUFGNUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQTJCO1FBR3JELElBQUksQ0FBQyxVQUFVLEdBQUcsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsWUFBWSxHQUFHLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0RSxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQVEsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FDekQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUNqQyxLQUFLLEVBQUUsQ0FDUCxDQUFDO1lBRUYsSUFB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QVEsQ0FBQyxlQUFlLENBQUMsV0FBVztnQkFDakUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWTthQUNuRSxDQUFDO1NBQ0Y7UUFFRCxPQUFPO1lBQ04sS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7WUFDdkMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVc7U0FDekMsQ0FBQztJQUNILENBQUM7OzRHQWhHVyxlQUFlLG9GQW9DbEIsU0FBUztnSEFwQ04sZUFBZSxjQUZmLE1BQU07MkZBRU4sZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEI7OzBCQXFDRSxNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50LCBvZiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuXHRtYXAsXG5cdHRhcCxcblx0ZGlzdGluY3RVbnRpbENoYW5nZWQsXG5cdHN0YXJ0V2l0aCxcblx0c2hhcmUsXG5cdHNoYXJlUmVwbGF5LFxuXHRhdWRpdFRpbWUsXG59IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBVeE9wdGlvbnMsIFVYX0NPTkZJRyB9IGZyb20gXCIuLi9jb25maWdcIjtcbmltcG9ydCB7IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLCBWaWV3cG9ydFNpemUgfSBmcm9tIFwiLi92aWV3cG9ydC5tb2RlbFwiO1xuaW1wb3J0IHsgV2luZG93UmVmIH0gZnJvbSBcIi4uL3BsYXRmb3JtL3dpbmRvd1wiO1xuaW1wb3J0IHsgVmlld3BvcnRTZXJ2ZXJTaXplU2VydmljZSB9IGZyb20gXCIuL3ZpZXdwb3J0LXNlcnZlci1zaXplLnNlcnZpY2VcIjtcbmltcG9ydCB7IGdlbmVyYXRlVmlld3BvcnRTaXplVHlwZUluZm9MaXN0LCBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGVJbmZvUmVmcywgZ2V0U2l6ZVR5cGVJbmZvIH0gZnJvbSBcIi4vdmlld3BvcnQudXRpbFwiO1xuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi9pbnRlcm5hbC9pbnRlcm5hbC5tb2RlbFwiO1xuXG5ASW5qZWN0YWJsZSh7XG5cdHByb3ZpZGVkSW46IFwicm9vdFwiLFxufSlcbmV4cG9ydCBjbGFzcyBWaWV3cG9ydFNlcnZpY2Uge1xuXG5cdC8qKiBXaW5kb3cgcmVzaXplIG9ic2VydmFibGUuICovXG5cdHJlYWRvbmx5IHJlc2l6ZVNuYXAkOiBPYnNlcnZhYmxlPFZpZXdwb3J0U2l6ZT47XG5cblx0LyoqIFdpbmRvdyByZXNpemUgb2JzZXJ2YWJsZSAod2hpY2ggaXMgYWxzbyB0aHJvdHRsZWQpLiAqL1xuXHRyZWFkb25seSByZXNpemUkOiBPYnNlcnZhYmxlPFZpZXdwb3J0U2l6ZT47XG5cblx0LyoqIFZpZXdwb3J0IHNpemUgdHlwZSBvYnNlcnZhYmxlICh3aGljaCBpcyBhbHNvIHRocm90dGxlZCkuICovXG5cdHJlYWRvbmx5IHNpemVUeXBlJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemVUeXBlSW5mbz47XG5cblx0LyoqIFZpZXdwb3J0IHNpemUgdHlwZSBvYnNlcnZhYmxlLiAqL1xuXHRyZWFkb25seSBzaXplVHlwZVNuYXAkOiBPYnNlcnZhYmxlPFZpZXdwb3J0U2l6ZVR5cGVJbmZvPjtcblxuXHQvKiogVmlld3BvcnQgc2l6ZSB0eXBlIHNuYXBzaG90IG9mIHRoZSBsYXN0IHZhbHVlLiAoUHJlZmVyIHVzZSBgc2l6ZVR5cGUkYCBvYnNlcnZhYmxlIHdoZW4gcG9zc2libGUuKSAqL1xuXHRnZXQgc2l6ZVR5cGVTbmFwc2hvdCgpOiBWaWV3cG9ydFNpemVUeXBlSW5mbyB7IHJldHVybiB0aGlzLl9zaXplVHlwZVNuYXBzaG90OyB9XG5cblx0LyoqIFZpZXdwb3J0IHNpemUgb2JzZXJ2YWJsZSAod2hpY2ggaXMgYWxzbyB0aHJvdHRsZWQpLiAqL1xuXHRyZWFkb25seSBzaXplJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemU+O1xuXG5cdC8qKiBWaWV3cG9ydCBzaXplIG9ic2VydmFibGUuICovXG5cdHJlYWRvbmx5IHNpemVTbmFwJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemU+O1xuXG5cdC8qKiBTaXplIHR5cGVzIHJlZnMgb2YgdGhlIGdlbmVyYXRlZCB2aWV3cG9ydCBzaXplIHR5cGUgaW5mby4gKi9cblx0Z2V0IHNpemVUeXBlTWFwKCk6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+IHsgcmV0dXJuIHRoaXMuX3NpemVUeXBlTWFwOyB9XG5cblx0LyoqIFZpZXdwb3J0IHNpemUgdHlwZXMgbGlzdCBvcmRlcmVkIGJ5IHR5cGUsIHNtYWxsZXN0IHRvIGxhcmdlc3QuICovXG5cdGdldCBzaXplVHlwZXMoKTogVmlld3BvcnRTaXplVHlwZUluZm9bXSB7IHJldHVybiB0aGlzLl9zaXplVHlwZXM7IH1cblxuXHRwcml2YXRlIF9zaXplVHlwZU1hcDogRGljdGlvbmFyeTxWaWV3cG9ydFNpemVUeXBlSW5mbz47XG5cdHByaXZhdGUgX3NpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXTtcblx0cHJpdmF0ZSBfc2l6ZVR5cGVTbmFwc2hvdDogVmlld3BvcnRTaXplVHlwZUluZm87XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSB3aW5kb3dSZWY6IFdpbmRvd1JlZixcblx0XHRwcml2YXRlIHZpZXdwb3J0U2VydmVyU2l6ZTogVmlld3BvcnRTZXJ2ZXJTaXplU2VydmljZSxcblx0XHRASW5qZWN0KFVYX0NPTkZJRykgY29uZmlnOiBVeE9wdGlvbnMsXG5cdCkge1xuXHRcdHRoaXMuX3NpemVUeXBlcyA9IGdlbmVyYXRlVmlld3BvcnRTaXplVHlwZUluZm9MaXN0KGNvbmZpZy52aWV3cG9ydC5icmVha3BvaW50cyk7XG5cdFx0dGhpcy5fc2l6ZVR5cGVNYXAgPSBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGVJbmZvUmVmcyh0aGlzLl9zaXplVHlwZXMpO1xuXG5cdFx0aWYgKHdpbmRvd1JlZi5oYXNOYXRpdmUpIHtcblx0XHRcdHRoaXMucmVzaXplU25hcCQgPSBmcm9tRXZlbnQ8RXZlbnQ+KHdpbmRvdywgXCJyZXNpemVcIikucGlwZShcblx0XHRcdFx0bWFwKCgpID0+IHRoaXMuZ2V0Vmlld3BvcnRTaXplKCkpLFxuXHRcdFx0XHRzaGFyZSgpXG5cdFx0XHQpO1xuXG5cdFx0XHR0aGlzLnJlc2l6ZSQgPSB0aGlzLnJlc2l6ZVNuYXAkLnBpcGUoXG5cdFx0XHRcdGF1ZGl0VGltZShjb25maWcudmlld3BvcnQucmVzaXplUG9sbGluZ1NwZWVkKSxcblx0XHRcdFx0c2hhcmUoKSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVzaXplU25hcCQgPSB0aGlzLnJlc2l6ZSQgPSBvZih2aWV3cG9ydFNlcnZlclNpemUuZ2V0KCkpO1xuXHRcdH1cblx0XHRjb25zdCBzaXplID0gdGhpcy5nZXRWaWV3cG9ydFNpemUoKTtcblx0XHR0aGlzLl9zaXplVHlwZVNuYXBzaG90ID0gZ2V0U2l6ZVR5cGVJbmZvKHNpemUud2lkdGgsIHRoaXMuc2l6ZVR5cGVzKTtcblxuXHRcdGNvbnN0IHNpemVGbiA9IChvYnMkOiBPYnNlcnZhYmxlPFZpZXdwb3J0U2l6ZT4pID0+IG9icyQucGlwZShcblx0XHRcdHN0YXJ0V2l0aChzaXplKSxcblx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodCksXG5cdFx0XHRzaGFyZVJlcGxheSgxKSxcblx0XHQpO1xuXG5cdFx0dGhpcy5zaXplU25hcCQgPSBzaXplRm4odGhpcy5yZXNpemVTbmFwJCk7XG5cdFx0dGhpcy5zaXplJCA9IHNpemVGbih0aGlzLnJlc2l6ZSQpO1xuXG5cdFx0Y29uc3Qgc2l6ZVR5cGVGbiA9IChvYnMkOiBPYnNlcnZhYmxlPFZpZXdwb3J0U2l6ZT4pID0+IG9icyQucGlwZShcblx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLndpZHRoID09PSBiLndpZHRoKSxcblx0XHRcdG1hcCh4ID0+IGdldFNpemVUeXBlSW5mbyh4LndpZHRoLCB0aGlzLnNpemVUeXBlcykpLFxuXHRcdFx0ZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcblx0XHRcdHRhcCh4ID0+IHRoaXMuX3NpemVUeXBlU25hcHNob3QgPSB4KSxcblx0XHRcdHNoYXJlUmVwbGF5KDEpLFxuXHRcdCk7XG5cblx0XHR0aGlzLnNpemVUeXBlJCA9IHNpemVUeXBlRm4odGhpcy5zaXplJCk7XG5cdFx0dGhpcy5zaXplVHlwZVNuYXAkID0gc2l6ZVR5cGVGbih0aGlzLnNpemVTbmFwJCk7XG5cdH1cblxuXHQvKiogUmV0dXJucyB0aGUgY3VycmVudCB2aWV3cG9ydCBzaXplICovXG5cdHByaXZhdGUgZ2V0Vmlld3BvcnRTaXplKCk6IFZpZXdwb3J0U2l6ZSB7XG5cdFx0aWYgKCF0aGlzLndpbmRvd1JlZi5oYXNOYXRpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLnZpZXdwb3J0U2VydmVyU2l6ZS5nZXQoKTtcblx0XHR9XG5cblx0XHRjb25zdCB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcblx0XHRpZiAodWEuaW5kZXhPZihcInNhZmFyaVwiKSAhPT0gLTEgJiYgdWEuaW5kZXhPZihcImNocm9tZVwiKSA9PT0gLTEpIHsgLy8gc2FmYXJpIHN1YnRyYWN0cyB0aGUgc2Nyb2xsYmFyIHdpZHRoXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR3aWR0aDogdGhpcy53aW5kb3dSZWYubmF0aXZlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLndpbmRvd1JlZi5uYXRpdmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHdpZHRoOiB0aGlzLndpbmRvd1JlZi5uYXRpdmUuaW5uZXJXaWR0aCxcblx0XHRcdGhlaWdodDogdGhpcy53aW5kb3dSZWYubmF0aXZlLmlubmVySGVpZ2h0LFxuXHRcdH07XG5cdH1cblxufVxuIl19
@@ -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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QUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUN6QyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztRQUN6QyxPQUFPLFVBQVUsQ0FBQztJQUNuQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ04sQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uL2ludGVybmFsL2ludGVybmFsLm1vZGVsXCI7XG5pbXBvcnQge1xuXHRDb21wYXJpc29uT3BlcmF0aW9uLFxuXHRWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbixcblx0Vmlld3BvcnRTaXplVHlwZUluZm8sXG5cdFZpZXdwb3J0TWF0Y2hDb25kaXRpb25zXG59IGZyb20gXCIuL3ZpZXdwb3J0Lm1vZGVsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24ge1xuXHRpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8ICF2YWx1ZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRjb25zdCBhcmdzOiBQYXJ0aWFsPFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uPiA9IHZhbHVlO1xuXHRpZiAoYXJncy5zaXplICYmIGFyZ3Mub3BlcmF0aW9uKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uKGFyZzogdW5rbm93bik6IGFyZyBpcyBbQ29tcGFyaXNvbk9wZXJhdGlvbiwgc3RyaW5nXSB7XG5cdGlmICghYXJnKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcblx0XHRpZiAoYXJnLmxlbmd0aCA9PT0gMikge1xuXHRcdFx0Y29uc3QgW29wXSA9IGFyZztcblx0XHRcdHJldHVybiBvcGVyYXRpb25zLmluY2x1ZGVzKG9wKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5cbmNvbnN0IG9wZXJhdGlvbnMgPSBPYmplY3QudmFsdWVzKENvbXBhcmlzb25PcGVyYXRpb24pO1xuXG5leHBvcnQgY29uc3QgQ09NUEFSSVNPTl9PUEVSQVRJT05fRlVOQ19NQVBQSU5HOiBEaWN0aW9uYXJ5PChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYm9vbGVhbj4gPSB7XG5cdFtDb21wYXJpc29uT3BlcmF0aW9uLmVxdWFsc106IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSA9PT0gYixcblx0W0NvbXBhcmlzb25PcGVyYXRpb24ubm90RXF1YWxzXTogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhICE9PSBiLFxuXHRbQ29tcGFyaXNvbk9wZXJhdGlvbi5sZXNzVGhhbl06IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSA8IGIsXG5cdFtDb21wYXJpc29uT3BlcmF0aW9uLmxlc3NPckVxdWFsVGhhbl06IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSA8PSBiLFxuXHRbQ29tcGFyaXNvbk9wZXJhdGlvbi5ncmVhdGVyVGhhbl06IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSA+IGIsXG5cdFtDb21wYXJpc29uT3BlcmF0aW9uLmdyZWF0ZXJPckVxdWFsVGhhbl06IChhOiBudW1iZXIsIGI6IG51bWJlcikgPT4gYSA+PSBiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlld3BvcnRDb25kaXRpb25NYXRjaChcblx0ZXZhbHVhdGVTaXplOiBWaWV3cG9ydFNpemVUeXBlSW5mbyxcblx0Y29uZGl0aW9uczogVmlld3BvcnRNYXRjaENvbmRpdGlvbnMsXG5cdHZpZXdwb3J0U2l6ZVR5cGVJbmZvUmVmczogRGljdGlvbmFyeTxWaWV3cG9ydFNpemVUeXBlSW5mbz5cbik6IGJvb2xlYW4ge1xuXHRjb25zdCBpc0V4Y2x1ZGVkID0gbWF0Y2goY29uZGl0aW9ucy5zaXplVHlwZUV4Y2x1ZGUsIGV2YWx1YXRlU2l6ZS5uYW1lLCBmYWxzZSk7XG5cdGxldCBpc0luY2x1ZGVkO1xuXHRsZXQgaXNFeHByZXNzaW9uVHJ1dGh5O1xuXG5cdGlmICghaXNFeGNsdWRlZCAmJiBjb25kaXRpb25zLmV4cHJlc3Npb24pIHtcblx0XHRjb25zdCByZWYgPSB2aWV3cG9ydFNpemVUeXBlSW5mb1JlZnNbY29uZGl0aW9ucy5leHByZXNzaW9uLnNpemVdO1xuXHRcdGlmKCFyZWYpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVmlld3BvcnQgc2l6ZSB0eXBlIGlzIGludmFsaWQuIFNpemUgdHlwZTogJyR7Y29uZGl0aW9ucy5leHByZXNzaW9uLnNpemV9J2ApO1xuXHRcdH1cblx0XHRjb25zdCBleHBNYXRjaGVyID0gQ09NUEFSSVNPTl9PUEVSQVRJT05fRlVOQ19NQVBQSU5HW2NvbmRpdGlvbnMuZXhwcmVzc2lvbi5vcGVyYXRpb25dO1xuXG5cdFx0aXNFeHByZXNzaW9uVHJ1dGh5ID0gZXhwTWF0Y2hlcihldmFsdWF0ZVNpemUudHlwZSwgcmVmLnR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdGlzSW5jbHVkZWQgPSBtYXRjaChjb25kaXRpb25zLnNpemVUeXBlLCBldmFsdWF0ZVNpemUubmFtZSwgdHJ1ZSk7XG5cdH1cblxuXHRjb25zdCBzaG91bGRSZW5kZXIgPSAoaXNFeHByZXNzaW9uVHJ1dGh5IHx8IGlzSW5jbHVkZWQpICYmICFpc0V4Y2x1ZGVkO1xuXHQvLyBjb25zb2xlLndhcm4oXCI+Pj4gc2hvdWxkUmVuZGVyXCIsIHsgZXZhbHVhdGVTaXplLCBjb25kaXRpb25zLCBzaG91bGRSZW5kZXIgfSk7XG5cdHJldHVybiAhIXNob3VsZFJlbmRlcjtcbn1cblxuZnVuY3Rpb24gbWF0Y2godmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB8IHVuZGVmaW5lZCwgdGFyZ2V0VmFsdWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBib29sZWFuKSB7XG5cdGlmICghdmFsdWUpIHtcblx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHR9XG5cblx0cmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpXG5cdFx0PyB2YWx1ZS5pbmNsdWRlcyh0YXJnZXRWYWx1ZSlcblx0XHQ6IHZhbHVlID09PSB0YXJnZXRWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemVUeXBlSW5mbyh3aWR0aDogbnVtYmVyLCBzaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10pOiBWaWV3cG9ydFNpemVUeXBlSW5mbyB7XG5cdGNvbnN0IGxhc3RFbnRyeUluZGV4ID0gc2l6ZVR5cGVzLmxlbmd0aCAtIDE7XG5cblx0Zm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgbGFzdEVudHJ5SW5kZXg7IGlkeCsrKSB7XG5cdFx0Y29uc3Qgdmlld3BvcnRTaXplVHlwZUluZm8gPSBzaXplVHlwZXNbaWR4XTtcblxuXHRcdGlmICh3aWR0aCA8PSB2aWV3cG9ydFNpemVUeXBlSW5mby53aWR0aFRocmVzaG9sZCkge1xuXHRcdFx0cmV0dXJuIHZpZXdwb3J0U2l6ZVR5cGVJbmZvO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzaXplVHlwZXNbbGFzdEVudHJ5SW5kZXhdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBicmVha3BvaW50cyBpbnRvIGEgMiBkaW1lbnNpb25hbCBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lIGFuZCB3aWR0aCwgYW5kIHNvcnRlZCBmcm9tXG4gKiAgc21hbGxlc3QgdG8gbGFyZ2VzdC5cbiAqIEBwYXJhbSBicmVha3BvaW50cyB0aGUgYnJlYWtwb2ludHMgb2J0YWluZWQgZnJvbSB0aGUgY29uZmlnXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0U29ydGVkQnJlYWtwb2ludHMoYnJlYWtwb2ludHM6IERpY3Rpb25hcnk8bnVtYmVyPik6IFtzdHJpbmcsIG51bWJlcl1bXSB7XG5cdHJldHVybiBPYmplY3QuZW50cmllcyhicmVha3BvaW50cylcblx0XHQuc29ydCgoWywgd2lkdGhBXSwgWywgd2lkdGhCXSkgPT4gd2lkdGhBIC0gd2lkdGhCKTtcbn1cblxuLyoqXG4gKiBBIHV0aWwgZnVuY3Rpb24gd2hpY2ggZ2VuZXJhdGVzIHRoZSBWaWV3cG9ydFNpemVUeXBlSW5mby50eXBlIGZvciBlYWNoIGJyZWFrcG9pbnQuXG4gKiBAcGFyYW0gYnJlYWtwb2ludHMgdGhlIGN1c3RvbSBicmVha3BvaW50c1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVWaWV3cG9ydFNpemVUeXBlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PihicmVha3BvaW50czogVCk6IFQgJiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+IHtcblx0cmV0dXJuIE9iamVjdC5mcmVlemUoXG5cdFx0Z2V0U29ydGVkQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpLnJlZHVjZTxSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+Pihcblx0XHRcdChkaWN0aW9uYXJ5LCBbbmFtZV0sIGluZGV4KSA9PiB7XG5cdFx0XHRcdGRpY3Rpb25hcnlbbmFtZV0gPSBpbmRleDtcblx0XHRcdFx0ZGljdGlvbmFyeVtpbmRleF0gPSBuYW1lO1xuXHRcdFx0XHRyZXR1cm4gZGljdGlvbmFyeTtcblx0XHRcdH0sIHt9XG5cdFx0KVxuXHQpIGFzIFQgJiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIFByZS1wcm9jZXNzZXMgdGhlIGdpdmVuIGJyZWFrcG9pbnRzIGludG8gYW4gb3JkZXJlZCBsaXN0IGZyb20gc21hbGxlc3QgdG8gbGFyZ2VzdCB3aGlsZSBnZW5lcmF0aW5nXG4gKiAgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gb24gdGhlIHZpZXdwb3J0LlxuICogQHBhcmFtIGJyZWFrcG9pbnRzIHRoZSBicmVha3BvaW50cyBvYnRhaW5lZCBmcm9tIHRoZSBjb25maWdcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVWaWV3cG9ydFNpemVUeXBlSW5mb0xpc3QoYnJlYWtwb2ludHM6IERpY3Rpb25hcnk8bnVtYmVyPik6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10ge1xuXHRyZXR1cm4gZ2V0U29ydGVkQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpXG5cdFx0Lm1hcCgoW25hbWUsIHdpZHRoXSwgaW5kZXgpID0+XG5cdFx0XHQoT2JqZWN0LmZyZWV6ZSh7XG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHR5cGU6IGluZGV4LFxuXHRcdFx0XHR3aWR0aFRocmVzaG9sZDogd2lkdGhcblx0XHRcdH0pKVxuXHRcdCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGJyZWFrcG9pbnQgbGlzdCBpbnRvIGEgZGljdGlvbmFyeSB3aGlsZSB1c2luZyB0aGUgbmFtZSBhcyBrZXkuXG4gKiBAcGFyYW0gYnJlYWtwb2ludExpc3QgdGhlIGxpc3Qgb2YgYnJlYWtwb2ludHNcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVWaWV3cG9ydFNpemVUeXBlSW5mb1JlZnMoYnJlYWtwb2ludExpc3Q6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10pOiBEaWN0aW9uYXJ5PFZpZXdwb3J0U2l6ZVR5cGVJbmZvPiB7XG5cdHJldHVybiBPYmplY3QuZnJlZXplKFxuXHRcdGJyZWFrcG9pbnRMaXN0LnJlZHVjZTxEaWN0aW9uYXJ5PFZpZXdwb3J0U2l6ZVR5cGVJbmZvPj4oKGRpY3Rpb25hcnksIGJyZWFrcG9pbnQpID0+IHtcblx0XHRcdGRpY3Rpb25hcnlbYnJlYWtwb2ludC5uYW1lXSA9IGJyZWFrcG9pbnQ7XG5cdFx0XHRkaWN0aW9uYXJ5W2JyZWFrcG9pbnQudHlwZV0gPSBicmVha3BvaW50O1xuXHRcdFx0cmV0dXJuIGRpY3Rpb25hcnk7XG5cdFx0fSwge30pXG5cdCk7XG59XG4iXX0=