@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.
- package/esm2022/index.mjs +4 -0
- package/esm2022/internal/internal.model.mjs +2 -0
- package/esm2022/platform/window.mjs +31 -0
- package/esm2022/ssv-ngx.ux.mjs +5 -0
- package/esm2022/ux.module.mjs +19 -0
- package/esm2022/version.mjs +2 -0
- package/esm2022/viewport/index.mjs +10 -0
- package/esm2022/viewport/viewport-data/index.mjs +4 -0
- package/esm2022/viewport/viewport-data/viewport-data-matcher.mjs +107 -0
- package/esm2022/viewport/viewport-data/viewport-data.pipe.mjs +48 -0
- package/esm2022/viewport/viewport-data/viewport-data.service.mjs +32 -0
- package/esm2022/viewport/viewport-data/viewport-data.utils.mjs +100 -0
- package/esm2022/viewport/viewport-matcher-var.directive.mjs +69 -0
- package/esm2022/viewport/viewport-matcher.directive.mjs +136 -0
- package/esm2022/viewport/viewport-server-size.service.mjs +37 -0
- package/esm2022/viewport/viewport.model.mjs +30 -0
- package/esm2022/viewport/viewport.module.mjs +27 -0
- package/esm2022/viewport/viewport.options.mjs +51 -0
- package/esm2022/viewport/viewport.service.mjs +82 -0
- package/esm2022/viewport/viewport.util.mjs +117 -0
- package/fesm2022/ssv-ngx.ux.mjs +846 -0
- package/fesm2022/ssv-ngx.ux.mjs.map +1 -0
- package/{src/index.ts → index.d.ts} +0 -1
- package/{src/internal/internal.model.ts → internal/internal.model.d.ts} +1 -1
- package/package.json +18 -3
- package/platform/window.d.ts +13 -0
- package/ux.module.d.ts +7 -0
- package/version.d.ts +1 -0
- package/{src/viewport/index.ts → viewport/index.d.ts} +1 -12
- package/viewport/viewport-data/viewport-data-matcher.d.ts +32 -0
- package/viewport/viewport-data/viewport-data.pipe.d.ts +18 -0
- package/viewport/viewport-data/viewport-data.service.d.ts +17 -0
- package/viewport/viewport-data/viewport-data.utils.d.ts +21 -0
- package/viewport/viewport-matcher-var.directive.d.ts +25 -0
- package/viewport/viewport-matcher.directive.d.ts +33 -0
- package/viewport/viewport-server-size.service.d.ts +10 -0
- package/viewport/viewport.model.d.ts +47 -0
- package/viewport/viewport.module.d.ts +9 -0
- package/viewport/viewport.options.d.ts +19 -0
- package/viewport/viewport.service.d.ts +36 -0
- package/viewport/viewport.util.d.ts +25 -0
- package/eslint.config.js +0 -43
- package/index.ts +0 -1
- package/jest.config.ts +0 -21
- package/ng-package.json +0 -7
- package/project.json +0 -36
- package/src/platform/window.ts +0 -31
- package/src/test-setup.ts +0 -8
- package/src/ux.module.ts +0 -15
- package/src/version.ts +0 -1
- package/src/viewport/viewport-data/README.md +0 -47
- package/src/viewport/viewport-data/viewport-data-matcher.spec.ts +0 -227
- package/src/viewport/viewport-data/viewport-data-matcher.ts +0 -175
- package/src/viewport/viewport-data/viewport-data.pipe.ts +0 -51
- package/src/viewport/viewport-data/viewport-data.service.ts +0 -48
- package/src/viewport/viewport-data/viewport-data.utils.spec.ts +0 -228
- package/src/viewport/viewport-data/viewport-data.utils.ts +0 -137
- package/src/viewport/viewport-matcher-var.directive.ts +0 -85
- package/src/viewport/viewport-matcher.directive.ts +0 -170
- package/src/viewport/viewport-server-size.service.ts +0 -37
- package/src/viewport/viewport.model.ts +0 -54
- package/src/viewport/viewport.module.ts +0 -19
- package/src/viewport/viewport.options.ts +0 -74
- package/src/viewport/viewport.service.ts +0 -123
- package/src/viewport/viewport.util.spec.ts +0 -254
- package/src/viewport/viewport.util.ts +0 -152
- package/tsconfig.json +0 -28
- package/tsconfig.lib.json +0 -12
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -11
- /package/{src/viewport/viewport-data/index.ts → viewport/viewport-data/index.d.ts} +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Directive, Renderer2, ViewContainerRef, Input, TemplateRef, ChangeDetectorRef, } from "@angular/core";
|
|
2
|
+
import { Subscription, Subject, tap, filter, pairwise, startWith } 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
|
+
export class SsvViewportMatcherContext {
|
|
8
|
+
sizeType = null;
|
|
9
|
+
sizeTypeExclude = null;
|
|
10
|
+
expression;
|
|
11
|
+
}
|
|
12
|
+
export class SsvViewportMatcherDirective {
|
|
13
|
+
viewport;
|
|
14
|
+
renderer;
|
|
15
|
+
viewContainer;
|
|
16
|
+
cdr;
|
|
17
|
+
sizeInfo;
|
|
18
|
+
_context = new SsvViewportMatcherContext();
|
|
19
|
+
_thenTemplateRef = null;
|
|
20
|
+
_elseTemplateRef = null;
|
|
21
|
+
_thenViewRef = null;
|
|
22
|
+
_elseViewRef = null;
|
|
23
|
+
sizeType$$ = Subscription.EMPTY;
|
|
24
|
+
cssClass$$ = Subscription.EMPTY;
|
|
25
|
+
_update$ = new Subject();
|
|
26
|
+
set ssvViewportMatcher(value) {
|
|
27
|
+
if (isViewportSizeMatcherExpression(value)) {
|
|
28
|
+
this._context.expression = value;
|
|
29
|
+
}
|
|
30
|
+
else if (isViewportSizeMatcherTupleExpression(value)) {
|
|
31
|
+
const [op, size] = value;
|
|
32
|
+
this._context.expression = {
|
|
33
|
+
operation: op,
|
|
34
|
+
size
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
this._context.sizeType = value;
|
|
39
|
+
}
|
|
40
|
+
if (this.sizeInfo) {
|
|
41
|
+
this._update$.next(this._context);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
set ssvViewportMatcherExclude(value) {
|
|
45
|
+
this._context.sizeTypeExclude = value;
|
|
46
|
+
if (this.sizeInfo) {
|
|
47
|
+
this._update$.next(this._context);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
set ssvViewportMatcherElse(templateRef) {
|
|
51
|
+
this._elseTemplateRef = templateRef;
|
|
52
|
+
this._elseViewRef = null; // clear previous view if any.
|
|
53
|
+
if (this.sizeInfo) {
|
|
54
|
+
this._update$.next(this._context);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
constructor(viewport, renderer, viewContainer, cdr, templateRef) {
|
|
58
|
+
this.viewport = viewport;
|
|
59
|
+
this.renderer = renderer;
|
|
60
|
+
this.viewContainer = viewContainer;
|
|
61
|
+
this.cdr = cdr;
|
|
62
|
+
this._thenTemplateRef = templateRef;
|
|
63
|
+
}
|
|
64
|
+
ngOnInit() {
|
|
65
|
+
// console.log("ssvViewportMatcher init");
|
|
66
|
+
this._update$
|
|
67
|
+
.pipe(
|
|
68
|
+
// tap(x => console.log(">>> ssvViewportMatcher - update triggered", x)),
|
|
69
|
+
filter(() => !!this.sizeInfo),
|
|
70
|
+
// tap(x => console.log(">>> ssvViewportMatcher - updating...", x)),
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
72
|
+
tap(() => this._updateView(this.sizeInfo)), tap(() => this.cdr.markForCheck()))
|
|
73
|
+
.subscribe();
|
|
74
|
+
this.sizeType$$ = this.viewport.sizeType$
|
|
75
|
+
.pipe(
|
|
76
|
+
// tap(x => console.log("ssvViewportMatcher - sizeType changed", x)),
|
|
77
|
+
tap(x => this.sizeInfo = x), tap(() => this._update$.next(this._context)))
|
|
78
|
+
.subscribe();
|
|
79
|
+
this.cssClass$$ = this.viewport.sizeType$
|
|
80
|
+
.pipe(startWith(undefined), filter(() => !!(this._thenViewRef || this._elseViewRef)), pairwise(), tap(([prev, curr]) => {
|
|
81
|
+
const el = this._thenViewRef
|
|
82
|
+
? this._thenViewRef.rootNodes[0]
|
|
83
|
+
: this._elseViewRef?.rootNodes[0];
|
|
84
|
+
if (!el.classList) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (prev) {
|
|
88
|
+
this.renderer.removeClass(el, `ssv-vp-size--${prev.name}`);
|
|
89
|
+
}
|
|
90
|
+
this.renderer.addClass(el, `ssv-vp-size--${curr?.name}`);
|
|
91
|
+
}))
|
|
92
|
+
.subscribe();
|
|
93
|
+
}
|
|
94
|
+
ngOnDestroy() {
|
|
95
|
+
this.cssClass$$.unsubscribe();
|
|
96
|
+
this.sizeType$$.unsubscribe();
|
|
97
|
+
this._update$.complete();
|
|
98
|
+
}
|
|
99
|
+
_updateView(sizeInfo) {
|
|
100
|
+
if (isViewportConditionMatch(sizeInfo, this._context, this.viewport.sizeTypeMap)) {
|
|
101
|
+
if (!this._thenViewRef) {
|
|
102
|
+
this.viewContainer.clear();
|
|
103
|
+
this._elseViewRef = null;
|
|
104
|
+
if (this._thenTemplateRef) {
|
|
105
|
+
this._thenViewRef = this.viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
if (!this._elseViewRef) {
|
|
111
|
+
this.viewContainer.clear();
|
|
112
|
+
this._thenViewRef = null;
|
|
113
|
+
if (this._elseTemplateRef) {
|
|
114
|
+
this._elseViewRef = this.viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.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 });
|
|
120
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.9", type: SsvViewportMatcherDirective, isStandalone: true, selector: "[ssvViewportMatcher]", inputs: { ssvViewportMatcher: "ssvViewportMatcher", ssvViewportMatcherExclude: "ssvViewportMatcherExclude", ssvViewportMatcherElse: "ssvViewportMatcherElse" }, exportAs: ["ssvViewportMatcher"], ngImport: i0 });
|
|
121
|
+
}
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvViewportMatcherDirective, decorators: [{
|
|
123
|
+
type: Directive,
|
|
124
|
+
args: [{
|
|
125
|
+
selector: "[ssvViewportMatcher]",
|
|
126
|
+
exportAs: "ssvViewportMatcher",
|
|
127
|
+
standalone: true,
|
|
128
|
+
}]
|
|
129
|
+
}], ctorParameters: () => [{ type: i1.ViewportService }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: i0.TemplateRef }], propDecorators: { ssvViewportMatcher: [{
|
|
130
|
+
type: Input
|
|
131
|
+
}], ssvViewportMatcherExclude: [{
|
|
132
|
+
type: Input
|
|
133
|
+
}], ssvViewportMatcherElse: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}] } });
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtbWF0Y2hlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC51eC9zcmMvdmlld3BvcnQvdmlld3BvcnQtbWF0Y2hlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLEtBQUssRUFFTCxXQUFXLEVBQ1gsaUJBQWlCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUNOLCtCQUErQixFQUMvQixvQ0FBb0MsRUFDcEMsd0JBQXdCLEVBQ3hCLE1BQU0saUJBQWlCLENBQUM7OztBQUd6QixNQUFNLE9BQU8seUJBQXlCO0lBRXJDLFFBQVEsR0FBNkIsSUFBSSxDQUFDO0lBQzFDLGVBQWUsR0FBNkIsSUFBSSxDQUFDO0lBQ2pELFVBQVUsQ0FBaUM7Q0FFM0M7QUFPRCxNQUFNLE9BQU8sMkJBQTJCO0lBZ0Q5QjtJQUNBO0lBQ0E7SUFDQTtJQWpEVCxRQUFRLENBQW1DO0lBRW5DLFFBQVEsR0FBOEIsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO0lBQ3RFLGdCQUFnQixHQUFrRCxJQUFJLENBQUM7SUFDdkUsZ0JBQWdCLEdBQWtELElBQUksQ0FBQztJQUN2RSxZQUFZLEdBQXNELElBQUksQ0FBQztJQUN2RSxZQUFZLEdBQXNELElBQUksQ0FBQztJQUN2RSxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNoQyxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUN2QixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQTZCLENBQUM7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QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUV6QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQ3hELElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FDYixDQUFDO2dCQUNILENBQUM7WUFDRixDQUFDO1FBQ0YsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFFekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUN4RCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxRQUFRLENBQ2IsQ0FBQztnQkFDSCxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO3VHQXJJVywyQkFBMkI7MkZBQTNCLDJCQUEyQjs7MkZBQTNCLDJCQUEyQjtrQkFMdkMsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtpQkFDaEI7cU1BY2Esa0JBQWtCO3NCQUE5QixLQUFLO2dCQWtCTyx5QkFBeUI7c0JBQXJDLEtBQUs7Z0JBUU8sc0JBQXNCO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0T25Jbml0LFxuXHRPbkRlc3Ryb3ksXG5cdERpcmVjdGl2ZSxcblx0UmVuZGVyZXIyLFxuXHRWaWV3Q29udGFpbmVyUmVmLFxuXHRJbnB1dCxcblx0RW1iZWRkZWRWaWV3UmVmLFxuXHRUZW1wbGF0ZVJlZixcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFN1YmplY3QsIHRhcCwgZmlsdGVyLCBwYWlyd2lzZSwgc3RhcnRXaXRoIH0gZnJvbSBcInJ4anNcIjtcblxuaW1wb3J0IHsgVmlld3BvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vdmlld3BvcnQuc2VydmljZVwiO1xuaW1wb3J0IHtcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbixcblx0aXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uLFxuXHRpc1ZpZXdwb3J0Q29uZGl0aW9uTWF0Y2hcbn0gZnJvbSBcIi4vdmlld3BvcnQudXRpbFwiO1xuaW1wb3J0IHsgVmlld3BvcnRTaXplVHlwZUluZm8sIFZpZXdwb3J0TWF0Y2hDb25kaXRpb25zLCBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbiB9IGZyb20gXCIuL3ZpZXdwb3J0Lm1vZGVsXCI7XG5cbmV4cG9ydCBjbGFzcyBTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0IGltcGxlbWVudHMgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMge1xuXG5cdHNpemVUeXBlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXHRzaXplVHlwZUV4Y2x1ZGU6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG5cdGV4cHJlc3Npb24/OiBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbjtcblxufVxuXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6IFwiW3NzdlZpZXdwb3J0TWF0Y2hlcl1cIixcblx0ZXhwb3J0QXM6IFwic3N2Vmlld3BvcnRNYXRjaGVyXCIsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNzdlZpZXdwb3J0TWF0Y2hlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuXHRzaXplSW5mbzogVmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQ7XG5cblx0cHJpdmF0ZSBfY29udGV4dDogU3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dCA9IG5ldyBTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0KCk7XG5cdHByaXZhdGUgX3RoZW5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBfZWxzZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PiB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIF90aGVuVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPFNzdlZpZXdwb3J0TWF0Y2hlckNvbnRleHQ+IHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgX2Vsc2VWaWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSBzaXplVHlwZSQkID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXHRwcml2YXRlIGNzc0NsYXNzJCQgPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3VwZGF0ZSQgPSBuZXcgU3ViamVjdDxTc3ZWaWV3cG9ydE1hdGNoZXJDb250ZXh0PigpO1xuXG5cdEBJbnB1dCgpIHNldCBzc3ZWaWV3cG9ydE1hdGNoZXIodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24pIHtcblx0XHRpZiAoaXNWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbih2YWx1ZSkpIHtcblx0XHRcdHRoaXMuX2NvbnRleHQuZXhwcmVzc2lvbiA9IHZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoaXNWaWV3cG9ydFNpemVNYXRjaGVyVHVwbGVFeHByZXNzaW9uKHZhbHVlKSkge1xuXHRcdFx0Y29uc3QgW29wLCBzaXplXSA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fY29udGV4dC5leHByZXNzaW9uID0ge1xuXHRcdFx0XHRvcGVyYXRpb246IG9wLFxuXHRcdFx0XHRzaXplXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9jb250ZXh0LnNpemVUeXBlID0gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuc2l6ZUluZm8pIHtcblx0XHRcdHRoaXMuX3VwZGF0ZSQubmV4dCh0aGlzLl9jb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgc3N2Vmlld3BvcnRNYXRjaGVyRXhjbHVkZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0XHR0aGlzLl9jb250ZXh0LnNpemVUeXBlRXhjbHVkZSA9IHZhbHVlO1xuXG5cdFx0aWYgKHRoaXMuc2l6ZUluZm8pIHtcblx0XHRcdHRoaXMuX3VwZGF0ZSQubmV4dCh0aGlzLl9jb250ZXh0KTtcblx0XHR9XG5cdH1cblxuXHRASW5wdXQoKSBzZXQgc3N2Vmlld3BvcnRNYXRjaGVyRWxzZSh0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4gfCBudWxsKSB7XG5cdFx0dGhpcy5fZWxzZVRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG5cdFx0dGhpcy5fZWxzZVZpZXdSZWYgPSBudWxsOyAvLyBjbGVhciBwcmV2aW91cyB2aWV3IGlmIGFueS5cblx0XHRpZiAodGhpcy5zaXplSW5mbykge1xuXHRcdFx0dGhpcy5fdXBkYXRlJC5uZXh0KHRoaXMuX2NvbnRleHQpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgdmlld3BvcnQ6IFZpZXdwb3J0U2VydmljZSxcblx0XHRwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG5cdFx0cHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcblx0XHR0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8U3N2Vmlld3BvcnRNYXRjaGVyQ29udGV4dD4sXG5cdCkge1xuXHRcdHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0Ly8gY29uc29sZS5sb2coXCJzc3ZWaWV3cG9ydE1hdGNoZXIgaW5pdFwiKTtcblxuXHRcdHRoaXMuX3VwZGF0ZSRcblx0XHRcdC5waXBlKFxuXHRcdFx0XHQvLyB0YXAoeCA9PiBjb25zb2xlLmxvZyhcIj4+PiBzc3ZWaWV3cG9ydE1hdGNoZXIgLSB1cGRhdGUgdHJpZ2dlcmVkXCIsIHgpKSxcblx0XHRcdFx0ZmlsdGVyKCgpID0+ICEhdGhpcy5zaXplSW5mbyksXG5cdFx0XHRcdC8vIHRhcCh4ID0+IGNvbnNvbGUubG9nKFwiPj4+IHNzdlZpZXdwb3J0TWF0Y2hlciAtIHVwZGF0aW5nLi4uXCIsIHgpKSxcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cblx0XHRcdFx0dGFwKCgpID0+IHRoaXMuX3VwZGF0ZVZpZXcodGhpcy5zaXplSW5mbyEpKSxcblx0XHRcdFx0dGFwKCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXG5cdFx0dGhpcy5zaXplVHlwZSQkID0gdGhpcy52aWV3cG9ydC5zaXplVHlwZSRcblx0XHRcdC5waXBlKFxuXHRcdFx0XHQvLyB0YXAoeCA9PiBjb25zb2xlLmxvZyhcInNzdlZpZXdwb3J0TWF0Y2hlciAtIHNpemVUeXBlIGNoYW5nZWRcIiwgeCkpLFxuXHRcdFx0XHR0YXAoeCA9PiB0aGlzLnNpemVJbmZvID0geCksXG5cdFx0XHRcdHRhcCgoKSA9PiB0aGlzLl91cGRhdGUkLm5leHQodGhpcy5fY29udGV4dCkpLFxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXG5cdFx0dGhpcy5jc3NDbGFzcyQkID0gdGhpcy52aWV3cG9ydC5zaXplVHlwZSRcblx0XHRcdC5waXBlKFxuXHRcdFx0XHRzdGFydFdpdGg8Vmlld3BvcnRTaXplVHlwZUluZm8gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCksXG5cdFx0XHRcdGZpbHRlcigoKSA9PiAhISh0aGlzLl90aGVuVmlld1JlZiB8fCB0aGlzLl9lbHNlVmlld1JlZikpLFxuXHRcdFx0XHRwYWlyd2lzZSgpLFxuXHRcdFx0XHR0YXAoKFtwcmV2LCBjdXJyXSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGVsOiBFbGVtZW50ID0gdGhpcy5fdGhlblZpZXdSZWZcblx0XHRcdFx0XHRcdD8gdGhpcy5fdGhlblZpZXdSZWYucm9vdE5vZGVzWzBdXG5cdFx0XHRcdFx0XHQ6IHRoaXMuX2Vsc2VWaWV3UmVmPy5yb290Tm9kZXNbMF07XG5cblx0XHRcdFx0XHRpZiAoIWVsLmNsYXNzTGlzdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocHJldikge1xuXHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgYHNzdi12cC1zaXplLS0ke3ByZXYubmFtZX1gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgYHNzdi12cC1zaXplLS0ke2N1cnI/Lm5hbWV9YCk7XG5cdFx0XHRcdH0pLFxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgpO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5jc3NDbGFzcyQkLnVuc3Vic2NyaWJlKCk7XG5cdFx0dGhpcy5zaXplVHlwZSQkLnVuc3Vic2NyaWJlKCk7XG5cdFx0dGhpcy5fdXBkYXRlJC5jb21wbGV0ZSgpO1xuXHR9XG5cblx0cHJpdmF0ZSBfdXBkYXRlVmlldyhzaXplSW5mbzogVmlld3BvcnRTaXplVHlwZUluZm8pIHtcblx0XHRpZiAoaXNWaWV3cG9ydENvbmRpdGlvbk1hdGNoKHNpemVJbmZvLCB0aGlzLl9jb250ZXh0LCB0aGlzLnZpZXdwb3J0LnNpemVUeXBlTWFwKSkge1xuXHRcdFx0aWYgKCF0aGlzLl90aGVuVmlld1JlZikge1xuXHRcdFx0XHR0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcblx0XHRcdFx0dGhpcy5fZWxzZVZpZXdSZWYgPSBudWxsO1xuXG5cdFx0XHRcdGlmICh0aGlzLl90aGVuVGVtcGxhdGVSZWYpIHtcblx0XHRcdFx0XHR0aGlzLl90aGVuVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoXG5cdFx0XHRcdFx0XHR0aGlzLl90aGVuVGVtcGxhdGVSZWYsXG5cdFx0XHRcdFx0XHR0aGlzLl9jb250ZXh0LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLl9lbHNlVmlld1JlZikge1xuXHRcdFx0XHR0aGlzLnZpZXdDb250YWluZXIuY2xlYXIoKTtcblx0XHRcdFx0dGhpcy5fdGhlblZpZXdSZWYgPSBudWxsO1xuXG5cdFx0XHRcdGlmICh0aGlzLl9lbHNlVGVtcGxhdGVSZWYpIHtcblx0XHRcdFx0XHR0aGlzLl9lbHNlVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoXG5cdFx0XHRcdFx0XHR0aGlzLl9lbHNlVGVtcGxhdGVSZWYsXG5cdFx0XHRcdFx0XHR0aGlzLl9jb250ZXh0LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxufVxuIl19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Injectable, InjectionToken, inject } from "@angular/core";
|
|
2
|
+
import { DeviceType } from "./viewport.model";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
// todo: make this configurable
|
|
5
|
+
/** Viewport size for SSR. */
|
|
6
|
+
const viewportSizeSSR = {
|
|
7
|
+
[DeviceType.desktop]: {
|
|
8
|
+
width: 1366,
|
|
9
|
+
height: 768,
|
|
10
|
+
},
|
|
11
|
+
[DeviceType.tablet]: {
|
|
12
|
+
width: 768,
|
|
13
|
+
height: 1024,
|
|
14
|
+
},
|
|
15
|
+
[DeviceType.mobile]: {
|
|
16
|
+
width: 414,
|
|
17
|
+
height: 736,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export const VIEWPORT_SSR_DEVICE = new InjectionToken("UX_VIEWPORT_SSR_DEVICE", {
|
|
21
|
+
factory: () => DeviceType.desktop,
|
|
22
|
+
});
|
|
23
|
+
export class ViewportServerSizeService {
|
|
24
|
+
deviceType = inject(VIEWPORT_SSR_DEVICE);
|
|
25
|
+
get() {
|
|
26
|
+
return viewportSizeSSR[this.deviceType] || viewportSizeSSR[DeviceType.desktop];
|
|
27
|
+
}
|
|
28
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportServerSizeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
29
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportServerSizeService, providedIn: "root" });
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportServerSizeService, decorators: [{
|
|
32
|
+
type: Injectable,
|
|
33
|
+
args: [{
|
|
34
|
+
providedIn: "root",
|
|
35
|
+
}]
|
|
36
|
+
}] });
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQtc2VydmVyLXNpemUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LnV4L3NyYy92aWV3cG9ydC92aWV3cG9ydC1zZXJ2ZXItc2l6ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLGtCQUFrQixDQUFDOztBQUU1RCwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLE1BQU0sZUFBZSxHQUFxQztJQUN6RCxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyQixLQUFLLEVBQUUsSUFBSTtRQUNYLE1BQU0sRUFBRSxHQUFHO0tBQ1g7SUFDRCxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNwQixLQUFLLEVBQUUsR0FBRztRQUNWLE1BQU0sRUFBRSxJQUFJO0tBQ1o7SUFDRCxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNwQixLQUFLLEVBQUUsR0FBRztRQUNWLE1BQU0sRUFBRSxHQUFHO0tBQ1g7Q0FDRCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQWEsd0JBQXdCLEVBQUU7SUFDM0YsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPO0NBQ2pDLENBQUMsQ0FBQztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUFFcEIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTFELEdBQUc7UUFDRixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRixDQUFDO3VHQU5XLHlCQUF5QjsyR0FBekIseUJBQXlCLGNBRnpCLE1BQU07OzJGQUVOLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgRGV2aWNlVHlwZSwgVmlld3BvcnRTaXplIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcblxuLy8gdG9kbzogbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZVxuLyoqIFZpZXdwb3J0IHNpemUgZm9yIFNTUi4gKi9cbmNvbnN0IHZpZXdwb3J0U2l6ZVNTUjogUmVjb3JkPERldmljZVR5cGUsIFZpZXdwb3J0U2l6ZT4gPSB7XG5cdFtEZXZpY2VUeXBlLmRlc2t0b3BdOiB7XG5cdFx0d2lkdGg6IDEzNjYsXG5cdFx0aGVpZ2h0OiA3NjgsXG5cdH0sXG5cdFtEZXZpY2VUeXBlLnRhYmxldF06IHtcblx0XHR3aWR0aDogNzY4LFxuXHRcdGhlaWdodDogMTAyNCxcblx0fSxcblx0W0RldmljZVR5cGUubW9iaWxlXToge1xuXHRcdHdpZHRoOiA0MTQsXG5cdFx0aGVpZ2h0OiA3MzYsXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgVklFV1BPUlRfU1NSX0RFVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEZXZpY2VUeXBlPihcIlVYX1ZJRVdQT1JUX1NTUl9ERVZJQ0VcIiwge1xuXHRmYWN0b3J5OiAoKSA9PiBEZXZpY2VUeXBlLmRlc2t0b3AsXG59KTtcblxuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgVmlld3BvcnRTZXJ2ZXJTaXplU2VydmljZSB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBkZXZpY2VUeXBlID0gaW5qZWN0KFZJRVdQT1JUX1NTUl9ERVZJQ0UpO1xuXG5cdGdldCgpOiBWaWV3cG9ydFNpemUge1xuXHRcdHJldHVybiB2aWV3cG9ydFNpemVTU1JbdGhpcy5kZXZpY2VUeXBlXSB8fCB2aWV3cG9ydFNpemVTU1JbRGV2aWNlVHlwZS5kZXNrdG9wXTtcblx0fVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
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["xlarge"] = 4] = "xlarge";
|
|
12
|
+
ViewportSizeType[ViewportSizeType["xxlarge"] = 5] = "xxlarge";
|
|
13
|
+
ViewportSizeType[ViewportSizeType["xxlarge1"] = 6] = "xxlarge1";
|
|
14
|
+
})(ViewportSizeType || (ViewportSizeType = {}));
|
|
15
|
+
export var ComparisonOperation;
|
|
16
|
+
(function (ComparisonOperation) {
|
|
17
|
+
ComparisonOperation["equals"] = "=";
|
|
18
|
+
ComparisonOperation["notEquals"] = "<>";
|
|
19
|
+
ComparisonOperation["lessThan"] = "<";
|
|
20
|
+
ComparisonOperation["lessOrEqualThan"] = "<=";
|
|
21
|
+
ComparisonOperation["greaterThan"] = ">";
|
|
22
|
+
ComparisonOperation["greaterOrEqualThan"] = ">=";
|
|
23
|
+
})(ComparisonOperation || (ComparisonOperation = {}));
|
|
24
|
+
export var DeviceType;
|
|
25
|
+
(function (DeviceType) {
|
|
26
|
+
DeviceType["desktop"] = "desktop";
|
|
27
|
+
DeviceType["mobile"] = "mobile";
|
|
28
|
+
DeviceType["tablet"] = "tablet";
|
|
29
|
+
})(DeviceType || (DeviceType = {}));
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25neC51eC9zcmMvdmlld3BvcnQvdmlld3BvcnQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBQ0gsTUFBTSxDQUFOLElBQVksZ0JBUVg7QUFSRCxXQUFZLGdCQUFnQjtJQUMzQiwyREFBVSxDQUFBO0lBQ1YseURBQVMsQ0FBQTtJQUNULDJEQUFVLENBQUE7SUFDVix5REFBUyxDQUFBO0lBQ1QsMkRBQVUsQ0FBQTtJQUNWLDZEQUFXLENBQUE7SUFDWCwrREFBWSxDQUFBO0FBQ2IsQ0FBQyxFQVJXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFRM0I7QUFFRCxNQUFNLENBQU4sSUFBWSxtQkFPWDtBQVBELFdBQVksbUJBQW1CO0lBQzlCLG1DQUFZLENBQUE7SUFDWix1Q0FBZ0IsQ0FBQTtJQUNoQixxQ0FBYyxDQUFBO0lBQ2QsNkNBQXNCLENBQUE7SUFDdEIsd0NBQWlCLENBQUE7SUFDakIsZ0RBQXlCLENBQUE7QUFDMUIsQ0FBQyxFQVBXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFPOUI7QUFNRCxNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3JCLGlDQUFtQixDQUFBO0lBQ25CLCtCQUFpQixDQUFBO0lBQ2pCLCtCQUFpQixDQUFBO0FBQ2xCLENBQUMsRUFKVyxVQUFVLEtBQVYsVUFBVSxRQUlyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGluZGljZXMgb2YgZWFjaCBicmVha3BvaW50IHByb3ZpZGVkIGJhc2VkIG9uIHRoZSBgVVhfVklFV1BPUlRfREVGQVVMVF9CUkVBS1BPSU5UU2AuXG4gKiBAc2VlIFVYX1ZJRVdQT1JUX0RFRkFVTFRfQlJFQUtQT0lOVFNcbiAqL1xuZXhwb3J0IGVudW0gVmlld3BvcnRTaXplVHlwZSB7XG5cdHhzbWFsbCA9IDAsXG5cdHNtYWxsID0gMSxcblx0bWVkaXVtID0gMixcblx0bGFyZ2UgPSAzLFxuXHR4bGFyZ2UgPSA0LFxuXHR4eGxhcmdlID0gNSxcblx0eHhsYXJnZTEgPSA2LFxufVxuXG5leHBvcnQgZW51bSBDb21wYXJpc29uT3BlcmF0aW9uIHtcblx0ZXF1YWxzID0gXCI9XCIsXG5cdG5vdEVxdWFscyA9IFwiPD5cIixcblx0bGVzc1RoYW4gPSBcIjxcIixcblx0bGVzc09yRXF1YWxUaGFuID0gXCI8PVwiLFxuXHRncmVhdGVyVGhhbiA9IFwiPlwiLFxuXHRncmVhdGVyT3JFcXVhbFRoYW4gPSBcIj49XCIsXG59XG5cbmV4cG9ydCB0eXBlIENvbXBhcmlzb25PcGVyYXRpb25LZXlUeXBlID0ga2V5b2YgdHlwZW9mIENvbXBhcmlzb25PcGVyYXRpb247XG5leHBvcnQgdHlwZSBDb21wYXJpc29uT3BlcmF0aW9uVmFsdWVUeXBlID0gXCI9XCIgfCBcIjw+XCIgfCBcIjxcIiB8IFwiPD1cIiB8IFwiPlwiIHwgXCI+PVwiOyAvLyB0b2RvOiBmaW5kIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzXG5leHBvcnQgdHlwZSBDb21wYXJpc29uT3BlcmF0aW9uTGl0ZXJhbCA9IENvbXBhcmlzb25PcGVyYXRpb25LZXlUeXBlIHwgQ29tcGFyaXNvbk9wZXJhdGlvblZhbHVlVHlwZTtcblxuZXhwb3J0IGVudW0gRGV2aWNlVHlwZSB7XG5cdGRlc2t0b3AgPSBcImRlc2t0b3BcIixcblx0bW9iaWxlID0gXCJtb2JpbGVcIixcblx0dGFibGV0ID0gXCJ0YWJsZXRcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0U2l6ZSB7XG5cdHdpZHRoOiBudW1iZXI7XG5cdGhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0U2l6ZVR5cGVJbmZvIHtcblx0dHlwZTogbnVtYmVyO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHdpZHRoVGhyZXNob2xkOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRNYXRjaENvbmRpdGlvbnMge1xuXHRzaXplVHlwZT86IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbDtcblx0c2l6ZVR5cGVFeGNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsO1xuXHRleHByZXNzaW9uPzogVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24ge1xuXHRzaXplOiBzdHJpbmc7XG5cdG9wZXJhdGlvbjogQ29tcGFyaXNvbk9wZXJhdGlvbkxpdGVyYWw7XG59XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { ViewportDataPipe } from "./viewport-data/viewport-data.pipe";
|
|
3
|
+
import { SsvViewportMatcherVarDirective } from "./viewport-matcher-var.directive";
|
|
4
|
+
import { SsvViewportMatcherDirective } from "./viewport-matcher.directive";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
const EXPORTED_IMPORTS = [
|
|
7
|
+
SsvViewportMatcherDirective,
|
|
8
|
+
SsvViewportMatcherVarDirective,
|
|
9
|
+
ViewportDataPipe,
|
|
10
|
+
];
|
|
11
|
+
export class SsvUxViewportModule {
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvUxViewportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: SsvUxViewportModule, imports: [SsvViewportMatcherDirective,
|
|
14
|
+
SsvViewportMatcherVarDirective,
|
|
15
|
+
ViewportDataPipe], exports: [SsvViewportMatcherDirective,
|
|
16
|
+
SsvViewportMatcherVarDirective,
|
|
17
|
+
ViewportDataPipe] });
|
|
18
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvUxViewportModule });
|
|
19
|
+
}
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: SsvUxViewportModule, decorators: [{
|
|
21
|
+
type: NgModule,
|
|
22
|
+
args: [{
|
|
23
|
+
imports: [EXPORTED_IMPORTS],
|
|
24
|
+
exports: [EXPORTED_IMPORTS]
|
|
25
|
+
}]
|
|
26
|
+
}] });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3gudXgvc3JjL3ZpZXdwb3J0L3ZpZXdwb3J0Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQUUzRSxNQUFNLGdCQUFnQixHQUFHO0lBQ3hCLDJCQUEyQjtJQUMzQiw4QkFBOEI7SUFDOUIsZ0JBQWdCO0NBQ2hCLENBQUM7QUFNRixNQUFNLE9BQU8sbUJBQW1CO3VHQUFuQixtQkFBbUI7d0dBQW5CLG1CQUFtQixZQVQvQiwyQkFBMkI7WUFDM0IsOEJBQThCO1lBQzlCLGdCQUFnQixhQUZoQiwyQkFBMkI7WUFDM0IsOEJBQThCO1lBQzlCLGdCQUFnQjt3R0FPSixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBSi9CLFFBQVE7bUJBQUM7b0JBQ1QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHsgVmlld3BvcnREYXRhUGlwZSB9IGZyb20gXCIuL3ZpZXdwb3J0LWRhdGEvdmlld3BvcnQtZGF0YS5waXBlXCI7XG5pbXBvcnQgeyBTc3ZWaWV3cG9ydE1hdGNoZXJWYXJEaXJlY3RpdmUgfSBmcm9tIFwiLi92aWV3cG9ydC1tYXRjaGVyLXZhci5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IFNzdlZpZXdwb3J0TWF0Y2hlckRpcmVjdGl2ZSB9IGZyb20gXCIuL3ZpZXdwb3J0LW1hdGNoZXIuZGlyZWN0aXZlXCI7XG5cbmNvbnN0IEVYUE9SVEVEX0lNUE9SVFMgPSBbXG5cdFNzdlZpZXdwb3J0TWF0Y2hlckRpcmVjdGl2ZSxcblx0U3N2Vmlld3BvcnRNYXRjaGVyVmFyRGlyZWN0aXZlLFxuXHRWaWV3cG9ydERhdGFQaXBlLFxuXTtcblxuQE5nTW9kdWxlKHtcblx0aW1wb3J0czogW0VYUE9SVEVEX0lNUE9SVFNdLFxuXHRleHBvcnRzOiBbRVhQT1JURURfSU1QT1JUU11cbn0pXG5leHBvcnQgY2xhc3MgU3N2VXhWaWV3cG9ydE1vZHVsZSB7XG5cbn0iXX0=
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { InjectionToken, makeEnvironmentProviders } from "@angular/core";
|
|
2
|
+
import { ViewportDataMatchStrategy } from "./viewport-data/viewport-data-matcher";
|
|
3
|
+
import { VIEWPORT_SSR_DEVICE } from "./viewport-server-size.service";
|
|
4
|
+
/** Default viewport breakpoints. */
|
|
5
|
+
export const UX_VIEWPORT_DEFAULT_BREAKPOINTS = {
|
|
6
|
+
xsmall: 450,
|
|
7
|
+
small: 767,
|
|
8
|
+
medium: 992,
|
|
9
|
+
large: 1200,
|
|
10
|
+
xlarge: 1500,
|
|
11
|
+
xxlarge: 1920,
|
|
12
|
+
xxlarge1: 2100,
|
|
13
|
+
};
|
|
14
|
+
const DEFAULT_OPTIONS = Object.freeze({
|
|
15
|
+
resizePollingSpeed: 33,
|
|
16
|
+
breakpoints: UX_VIEWPORT_DEFAULT_BREAKPOINTS,
|
|
17
|
+
defaultDataMatchStrategy: ViewportDataMatchStrategy.smaller,
|
|
18
|
+
});
|
|
19
|
+
export const VIEWPORT_OPTIONS = new InjectionToken("SSV_UX_VIEWPORT_OPTIONS", {
|
|
20
|
+
factory: () => DEFAULT_OPTIONS,
|
|
21
|
+
});
|
|
22
|
+
export function provideSsvUxViewportOptions(options, ...features) {
|
|
23
|
+
return makeEnvironmentProviders([
|
|
24
|
+
{
|
|
25
|
+
provide: VIEWPORT_OPTIONS,
|
|
26
|
+
useFactory: () => {
|
|
27
|
+
let opts = typeof options === "function" ? options(DEFAULT_OPTIONS) : options;
|
|
28
|
+
opts = opts
|
|
29
|
+
? {
|
|
30
|
+
...DEFAULT_OPTIONS,
|
|
31
|
+
...opts, // NOTE: breakpoints shoudn't be merged
|
|
32
|
+
}
|
|
33
|
+
: DEFAULT_OPTIONS;
|
|
34
|
+
return opts;
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
...features,
|
|
38
|
+
]);
|
|
39
|
+
}
|
|
40
|
+
export function withViewportSsrDevice(options) {
|
|
41
|
+
return makeEnvironmentProviders([
|
|
42
|
+
{
|
|
43
|
+
provide: VIEWPORT_SSR_DEVICE,
|
|
44
|
+
useFactory: () => {
|
|
45
|
+
const deviceType = typeof options === "function" ? options() : options;
|
|
46
|
+
return deviceType;
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
]);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQub3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LnV4L3NyYy92aWV3cG9ydC92aWV3cG9ydC5vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNkIsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3BHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3JFLG9DQUFvQztBQUNwQyxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBdUI7SUFDbEUsTUFBTSxFQUFFLEdBQUc7SUFDWCxLQUFLLEVBQUUsR0FBRztJQUNWLE1BQU0sRUFBRSxHQUFHO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxNQUFNLEVBQUUsSUFBSTtJQUNaLE9BQU8sRUFBRSxJQUFJO0lBQ2IsUUFBUSxFQUFFLElBQUk7Q0FDZCxDQUFDO0FBZUYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBb0I7SUFDeEQsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixXQUFXLEVBQUUsK0JBQStCO0lBQzVDLHdCQUF3QixFQUFFLHlCQUF5QixDQUFDLE9BQU87Q0FDM0QsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQW9CLHlCQUF5QixFQUFFO0lBQ2hHLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlO0NBQzlCLENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSwyQkFBMkIsQ0FDMUMsT0FBNkcsRUFDN0csR0FBRyxRQUFnQztJQUVuQyxPQUFPLHdCQUF3QixDQUFDO1FBQy9CO1lBQ0MsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNoQixJQUFJLElBQUksR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUM5RSxJQUFJLEdBQUcsSUFBSTtvQkFDVixDQUFDLENBQUM7d0JBQ0QsR0FBRyxlQUFlO3dCQUNsQixHQUFHLElBQUksRUFBRSx1Q0FBdUM7cUJBQ2hEO29CQUNELENBQUMsQ0FBQyxlQUFlLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQztTQUNEO1FBQ0QsR0FBRyxRQUFRO0tBQ1gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxPQUF3QztJQUM3RSxPQUFPLHdCQUF3QixDQUFDO1FBQy9CO1lBQ0MsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNoQixNQUFNLFVBQVUsR0FBRyxPQUFPLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3ZFLE9BQU8sVUFBVSxDQUFDO1lBQ25CLENBQUM7U0FDRDtLQUNELENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEVudmlyb25tZW50UHJvdmlkZXJzLCBJbmplY3Rpb25Ub2tlbiwgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHR5cGUgeyBEaWN0aW9uYXJ5IH0gZnJvbSBcIi4uL2ludGVybmFsL2ludGVybmFsLm1vZGVsXCI7XG5pbXBvcnQgeyBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5IH0gZnJvbSBcIi4vdmlld3BvcnQtZGF0YS92aWV3cG9ydC1kYXRhLW1hdGNoZXJcIjtcbmltcG9ydCB7IFZJRVdQT1JUX1NTUl9ERVZJQ0UgfSBmcm9tIFwiLi92aWV3cG9ydC1zZXJ2ZXItc2l6ZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEZXZpY2VUeXBlIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcblxuLyoqIERlZmF1bHQgdmlld3BvcnQgYnJlYWtwb2ludHMuICovXG5leHBvcnQgY29uc3QgVVhfVklFV1BPUlRfREVGQVVMVF9CUkVBS1BPSU5UUzogRGljdGlvbmFyeTxudW1iZXI+ID0ge1xuXHR4c21hbGw6IDQ1MCxcblx0c21hbGw6IDc2Nyxcblx0bWVkaXVtOiA5OTIsXG5cdGxhcmdlOiAxMjAwLFxuXHR4bGFyZ2U6IDE1MDAsXG5cdHh4bGFyZ2U6IDE5MjAsXG5cdHh4bGFyZ2UxOiAyMTAwLFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBVeFZpZXdwb3J0T3B0aW9ucyB7XG5cdC8qKiBQb2xsaW5nIHNwZWVkIG9uIHJlc2l6aW5nIChpbiBtaWxsaXNlY29uZHMpLiBlLmcuIHRoZSBoaWdoZXIgdGhlIG51bWJlciB0aGUgbG9uZ2VyIGl0IHRha2VzIHRvIHJlY2FsY3VsYXRlLiAqL1xuXHRyZXNpemVQb2xsaW5nU3BlZWQ6IG51bWJlcjtcblxuXHQvKiogQnJlYWtwb2ludHMgdG8gdXNlLiBLZXkgbmVlZHMgdG8gbWF0Y2ggdGhlIHNpemUgdHlwZSBhbmQgdGhlIHZhbHVlIHRoZSB3aWR0aCB0aHJlc2hvbGQuXG5cdCAqIGUuZy4gZ2l2ZW4gd2lkdGggJzEwMDAnIGFuZCBgbWVkaXVtYCBpcyBzZXQgdG8gJzk5MicgPT4gYGxhcmdlYC5cblx0ICovXG5cdGJyZWFrcG9pbnRzOiBEaWN0aW9uYXJ5PG51bWJlcj47XG5cblx0LyoqIERlZmF1bHQgZGF0YSBtYXRjaCBzdHJhdGVneSB0byB1c2UuICovXG5cdGRlZmF1bHREYXRhTWF0Y2hTdHJhdGVneTogVmlld3BvcnREYXRhTWF0Y2hTdHJhdGVneTtcbn1cblxuY29uc3QgREVGQVVMVF9PUFRJT05TID0gT2JqZWN0LmZyZWV6ZTxVeFZpZXdwb3J0T3B0aW9ucz4oe1xuXHRyZXNpemVQb2xsaW5nU3BlZWQ6IDMzLFxuXHRicmVha3BvaW50czogVVhfVklFV1BPUlRfREVGQVVMVF9CUkVBS1BPSU5UUyxcblx0ZGVmYXVsdERhdGFNYXRjaFN0cmF0ZWd5OiBWaWV3cG9ydERhdGFNYXRjaFN0cmF0ZWd5LnNtYWxsZXIsXG59KTtcblxuZXhwb3J0IGNvbnN0IFZJRVdQT1JUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48VXhWaWV3cG9ydE9wdGlvbnM+KFwiU1NWX1VYX1ZJRVdQT1JUX09QVElPTlNcIiwge1xuXHRmYWN0b3J5OiAoKSA9PiBERUZBVUxUX09QVElPTlMsXG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVTc3ZVeFZpZXdwb3J0T3B0aW9ucyhcblx0b3B0aW9uczogUGFydGlhbDxVeFZpZXdwb3J0T3B0aW9ucz4gfCAoKGRlZmF1bHRzOiBSZWFkb25seTxVeFZpZXdwb3J0T3B0aW9ucz4pID0+IFBhcnRpYWw8VXhWaWV3cG9ydE9wdGlvbnM+KSxcblx0Li4uZmVhdHVyZXM6IEVudmlyb25tZW50UHJvdmlkZXJzW11cbik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcblx0cmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogVklFV1BPUlRfT1BUSU9OUyxcblx0XHRcdHVzZUZhY3Rvcnk6ICgpID0+IHtcblx0XHRcdFx0bGV0IG9wdHMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucyhERUZBVUxUX09QVElPTlMpIDogb3B0aW9ucztcblx0XHRcdFx0b3B0cyA9IG9wdHNcblx0XHRcdFx0XHQ/IHtcblx0XHRcdFx0XHRcdC4uLkRFRkFVTFRfT1BUSU9OUyxcblx0XHRcdFx0XHRcdC4uLm9wdHMsIC8vIE5PVEU6IGJyZWFrcG9pbnRzIHNob3Vkbid0IGJlIG1lcmdlZFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQ6IERFRkFVTFRfT1BUSU9OUztcblx0XHRcdFx0cmV0dXJuIG9wdHM7XG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0Li4uZmVhdHVyZXMsXG5cdF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFZpZXdwb3J0U3NyRGV2aWNlKG9wdGlvbnM6IERldmljZVR5cGUgfCAoKCkgPT4gRGV2aWNlVHlwZSkpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG5cdHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IFZJRVdQT1JUX1NTUl9ERVZJQ0UsXG5cdFx0XHR1c2VGYWN0b3J5OiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRldmljZVR5cGUgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJmdW5jdGlvblwiID8gb3B0aW9ucygpIDogb3B0aW9ucztcblx0XHRcdFx0cmV0dXJuIGRldmljZVR5cGU7XG5cdFx0XHR9LFxuXHRcdH0sXG5cdF0pO1xufSJdfQ==
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Injectable, inject } from "@angular/core";
|
|
2
|
+
import { fromEvent, of, map, tap, distinctUntilChanged, startWith, share, shareReplay, auditTime, } from "rxjs";
|
|
3
|
+
import { WindowRef } from "../platform/window";
|
|
4
|
+
import { ViewportServerSizeService } from "./viewport-server-size.service";
|
|
5
|
+
import { generateViewportSizeTypeInfoList, generateViewportSizeTypeInfoRefs, getSizeTypeInfo } from "./viewport.util";
|
|
6
|
+
import { VIEWPORT_OPTIONS } from "./viewport.options";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../platform/window";
|
|
9
|
+
import * as i2 from "./viewport-server-size.service";
|
|
10
|
+
export class ViewportService {
|
|
11
|
+
windowRef;
|
|
12
|
+
viewportServerSize;
|
|
13
|
+
/** Window resize observable. */
|
|
14
|
+
resizeSnap$;
|
|
15
|
+
/** Window resize observable (which is also throttled). */
|
|
16
|
+
resize$;
|
|
17
|
+
/** Viewport size type observable (which is also throttled). */
|
|
18
|
+
sizeType$;
|
|
19
|
+
/** Viewport size type observable. */
|
|
20
|
+
sizeTypeSnap$;
|
|
21
|
+
/** Viewport size type snapshot of the last value. (Prefer use `sizeType$` observable when possible.) */
|
|
22
|
+
get sizeTypeSnapshot() { return this._sizeTypeSnapshot; }
|
|
23
|
+
/** Viewport size observable (which is also throttled). */
|
|
24
|
+
size$;
|
|
25
|
+
/** Viewport size observable. */
|
|
26
|
+
sizeSnap$;
|
|
27
|
+
/** Size types refs of the generated viewport size type info. */
|
|
28
|
+
get sizeTypeMap() { return this._sizeTypeMap; }
|
|
29
|
+
/** Viewport size types list ordered by type, smallest to largest. */
|
|
30
|
+
get sizeTypes() { return this._sizeTypes; }
|
|
31
|
+
_sizeTypeMap;
|
|
32
|
+
_sizeTypes;
|
|
33
|
+
_sizeTypeSnapshot;
|
|
34
|
+
constructor(windowRef, viewportServerSize) {
|
|
35
|
+
this.windowRef = windowRef;
|
|
36
|
+
this.viewportServerSize = viewportServerSize;
|
|
37
|
+
const config = inject(VIEWPORT_OPTIONS);
|
|
38
|
+
this._sizeTypes = generateViewportSizeTypeInfoList(config.breakpoints);
|
|
39
|
+
this._sizeTypeMap = generateViewportSizeTypeInfoRefs(this._sizeTypes);
|
|
40
|
+
if (windowRef.hasNative) {
|
|
41
|
+
this.resizeSnap$ = fromEvent(window, "resize").pipe(map(() => this.getViewportSize()), share());
|
|
42
|
+
this.resize$ = this.resizeSnap$.pipe(auditTime(config.resizePollingSpeed), share());
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.resizeSnap$ = this.resize$ = of(viewportServerSize.get());
|
|
46
|
+
}
|
|
47
|
+
const size = this.getViewportSize();
|
|
48
|
+
this._sizeTypeSnapshot = getSizeTypeInfo(size.width, this.sizeTypes);
|
|
49
|
+
const sizeFn = (obs$) => obs$.pipe(startWith(size), distinctUntilChanged((a, b) => a.width === b.width && a.height === b.height), shareReplay(1));
|
|
50
|
+
this.sizeSnap$ = sizeFn(this.resizeSnap$);
|
|
51
|
+
this.size$ = sizeFn(this.resize$);
|
|
52
|
+
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));
|
|
53
|
+
this.sizeType$ = sizeTypeFn(this.size$);
|
|
54
|
+
this.sizeTypeSnap$ = sizeTypeFn(this.sizeSnap$);
|
|
55
|
+
}
|
|
56
|
+
/** Returns the current viewport size */
|
|
57
|
+
getViewportSize() {
|
|
58
|
+
if (!this.windowRef.hasNative) {
|
|
59
|
+
return this.viewportServerSize.get();
|
|
60
|
+
}
|
|
61
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
62
|
+
if (ua.indexOf("safari") !== -1 && ua.indexOf("chrome") === -1) { // safari subtracts the scrollbar width
|
|
63
|
+
return {
|
|
64
|
+
width: this.windowRef.native.document.documentElement.clientWidth,
|
|
65
|
+
height: this.windowRef.native.document.documentElement.clientHeight,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
width: this.windowRef.native.innerWidth,
|
|
70
|
+
height: this.windowRef.native.innerHeight,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportService, deps: [{ token: i1.WindowRef }, { token: i2.ViewportServerSizeService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
74
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportService, providedIn: "root" });
|
|
75
|
+
}
|
|
76
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ViewportService, decorators: [{
|
|
77
|
+
type: Injectable,
|
|
78
|
+
args: [{
|
|
79
|
+
providedIn: "root",
|
|
80
|
+
}]
|
|
81
|
+
}], ctorParameters: () => [{ type: i1.WindowRef }, { type: i2.ViewportServerSizeService }] });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LnV4L3NyYy92aWV3cG9ydC92aWV3cG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFFTixTQUFTLEVBQ1QsRUFBRSxFQUNGLEdBQUcsRUFDSCxHQUFHLEVBQ0gsb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsV0FBVyxFQUNYLFNBQVMsR0FDVCxNQUFNLE1BQU0sQ0FBQztBQUdkLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsZ0NBQWdDLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFLdEQsTUFBTSxPQUFPLGVBQWU7SUFrQ2xCO0lBQ0E7SUFqQ1QsZ0NBQWdDO0lBQ3ZCLFdBQVcsQ0FBMkI7SUFFL0MsMERBQTBEO0lBQ2pELE9BQU8sQ0FBMkI7SUFFM0MsK0RBQStEO0lBQ3RELFNBQVMsQ0FBbUM7SUFFckQscUNBQXFDO0lBQzVCLGFBQWEsQ0FBbUM7SUFFekQsd0dBQXdHO0lBQ3hHLElBQUksZ0JBQWdCLEtBQTJCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUUvRSwwREFBMEQ7SUFDakQsS0FBSyxDQUEyQjtJQUV6QyxnQ0FBZ0M7SUFDdkIsU0FBUyxDQUEyQjtJQUU3QyxnRUFBZ0U7SUFDaEUsSUFBSSxXQUFXLEtBQXVDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFakYscUVBQXFF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Q0FBd0M7SUFDaEMsZUFBZTtRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM3QyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUNBQXVDO1lBQ3hHLE9BQU87Z0JBQ04sS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVztnQkFDakUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWTthQUNuRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUN2QyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVztTQUN6QyxDQUFDO0lBQ0gsQ0FBQzt1R0FoR1csZUFBZTsyR0FBZixlQUFlLGNBRmYsTUFBTTs7MkZBRU4sZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcblx0T2JzZXJ2YWJsZSxcblx0ZnJvbUV2ZW50LFxuXHRvZixcblx0bWFwLFxuXHR0YXAsXG5cdGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuXHRzdGFydFdpdGgsXG5cdHNoYXJlLFxuXHRzaGFyZVJlcGxheSxcblx0YXVkaXRUaW1lLFxufSBmcm9tIFwicnhqc1wiO1xuXG5pbXBvcnQgeyBWaWV3cG9ydFNpemVUeXBlSW5mbywgVmlld3BvcnRTaXplIH0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcbmltcG9ydCB7IFdpbmRvd1JlZiB9IGZyb20gXCIuLi9wbGF0Zm9ybS93aW5kb3dcIjtcbmltcG9ydCB7IFZpZXdwb3J0U2VydmVyU2l6ZVNlcnZpY2UgfSBmcm9tIFwiLi92aWV3cG9ydC1zZXJ2ZXItc2l6ZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGVJbmZvTGlzdCwgZ2VuZXJhdGVWaWV3cG9ydFNpemVUeXBlSW5mb1JlZnMsIGdldFNpemVUeXBlSW5mbyB9IGZyb20gXCIuL3ZpZXdwb3J0LnV0aWxcIjtcbmltcG9ydCB0eXBlIHsgRGljdGlvbmFyeSB9IGZyb20gXCIuLi9pbnRlcm5hbC9pbnRlcm5hbC5tb2RlbFwiO1xuaW1wb3J0IHsgVklFV1BPUlRfT1BUSU9OUyB9IGZyb20gXCIuL3ZpZXdwb3J0Lm9wdGlvbnNcIjtcblxuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgVmlld3BvcnRTZXJ2aWNlIHtcblxuXHQvKiogV2luZG93IHJlc2l6ZSBvYnNlcnZhYmxlLiAqL1xuXHRyZWFkb25seSByZXNpemVTbmFwJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemU+O1xuXG5cdC8qKiBXaW5kb3cgcmVzaXplIG9ic2VydmFibGUgKHdoaWNoIGlzIGFsc28gdGhyb3R0bGVkKS4gKi9cblx0cmVhZG9ubHkgcmVzaXplJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemU+O1xuXG5cdC8qKiBWaWV3cG9ydCBzaXplIHR5cGUgb2JzZXJ2YWJsZSAod2hpY2ggaXMgYWxzbyB0aHJvdHRsZWQpLiAqL1xuXHRyZWFkb25seSBzaXplVHlwZSQ6IE9ic2VydmFibGU8Vmlld3BvcnRTaXplVHlwZUluZm8+O1xuXG5cdC8qKiBWaWV3cG9ydCBzaXplIHR5cGUgb2JzZXJ2YWJsZS4gKi9cblx0cmVhZG9ubHkgc2l6ZVR5cGVTbmFwJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemVUeXBlSW5mbz47XG5cblx0LyoqIFZpZXdwb3J0IHNpemUgdHlwZSBzbmFwc2hvdCBvZiB0aGUgbGFzdCB2YWx1ZS4gKFByZWZlciB1c2UgYHNpemVUeXBlJGAgb2JzZXJ2YWJsZSB3aGVuIHBvc3NpYmxlLikgKi9cblx0Z2V0IHNpemVUeXBlU25hcHNob3QoKTogVmlld3BvcnRTaXplVHlwZUluZm8geyByZXR1cm4gdGhpcy5fc2l6ZVR5cGVTbmFwc2hvdDsgfVxuXG5cdC8qKiBWaWV3cG9ydCBzaXplIG9ic2VydmFibGUgKHdoaWNoIGlzIGFsc28gdGhyb3R0bGVkKS4gKi9cblx0cmVhZG9ubHkgc2l6ZSQ6IE9ic2VydmFibGU8Vmlld3BvcnRTaXplPjtcblxuXHQvKiogVmlld3BvcnQgc2l6ZSBvYnNlcnZhYmxlLiAqL1xuXHRyZWFkb25seSBzaXplU25hcCQ6IE9ic2VydmFibGU8Vmlld3BvcnRTaXplPjtcblxuXHQvKiogU2l6ZSB0eXBlcyByZWZzIG9mIHRoZSBnZW5lcmF0ZWQgdmlld3BvcnQgc2l6ZSB0eXBlIGluZm8uICovXG5cdGdldCBzaXplVHlwZU1hcCgpOiBEaWN0aW9uYXJ5PFZpZXdwb3J0U2l6ZVR5cGVJbmZvPiB7IHJldHVybiB0aGlzLl9zaXplVHlwZU1hcDsgfVxuXG5cdC8qKiBWaWV3cG9ydCBzaXplIHR5cGVzIGxpc3Qgb3JkZXJlZCBieSB0eXBlLCBzbWFsbGVzdCB0byBsYXJnZXN0LiAqL1xuXHRnZXQgc2l6ZVR5cGVzKCk6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW10geyByZXR1cm4gdGhpcy5fc2l6ZVR5cGVzOyB9XG5cblx0cHJpdmF0ZSBfc2l6ZVR5cGVNYXA6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+O1xuXHRwcml2YXRlIF9zaXplVHlwZXM6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvW107XG5cdHByaXZhdGUgX3NpemVUeXBlU25hcHNob3Q6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvO1xuXG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgd2luZG93UmVmOiBXaW5kb3dSZWYsXG5cdFx0cHJpdmF0ZSB2aWV3cG9ydFNlcnZlclNpemU6IFZpZXdwb3J0U2VydmVyU2l6ZVNlcnZpY2UsXG5cdCkge1xuXHRcdGNvbnN0IGNvbmZpZyA9IGluamVjdChWSUVXUE9SVF9PUFRJT05TKTtcblx0XHR0aGlzLl9zaXplVHlwZXMgPSBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGVJbmZvTGlzdChjb25maWcuYnJlYWtwb2ludHMpO1xuXHRcdHRoaXMuX3NpemVUeXBlTWFwID0gZ2VuZXJhdGVWaWV3cG9ydFNpemVUeXBlSW5mb1JlZnModGhpcy5fc2l6ZVR5cGVzKTtcblxuXHRcdGlmICh3aW5kb3dSZWYuaGFzTmF0aXZlKSB7XG5cdFx0XHR0aGlzLnJlc2l6ZVNuYXAkID0gZnJvbUV2ZW50PEV2ZW50Pih3aW5kb3csIFwicmVzaXplXCIpLnBpcGUoXG5cdFx0XHRcdG1hcCgoKSA9PiB0aGlzLmdldFZpZXdwb3J0U2l6ZSgpKSxcblx0XHRcdFx0c2hhcmUoKVxuXHRcdFx0KTtcblxuXHRcdFx0dGhpcy5yZXNpemUkID0gdGhpcy5yZXNpemVTbmFwJC5waXBlKFxuXHRcdFx0XHRhdWRpdFRpbWUoY29uZmlnLnJlc2l6ZVBvbGxpbmdTcGVlZCksXG5cdFx0XHRcdHNoYXJlKCksXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnJlc2l6ZVNuYXAkID0gdGhpcy5yZXNpemUkID0gb2Yodmlld3BvcnRTZXJ2ZXJTaXplLmdldCgpKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2l6ZSA9IHRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7XG5cdFx0dGhpcy5fc2l6ZVR5cGVTbmFwc2hvdCA9IGdldFNpemVUeXBlSW5mbyhzaXplLndpZHRoLCB0aGlzLnNpemVUeXBlcyk7XG5cblx0XHRjb25zdCBzaXplRm4gPSAob2JzJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemU+KSA9PiBvYnMkLnBpcGUoXG5cdFx0XHRzdGFydFdpdGgoc2l6ZSksXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQpLFxuXHRcdFx0c2hhcmVSZXBsYXkoMSksXG5cdFx0KTtcblxuXHRcdHRoaXMuc2l6ZVNuYXAkID0gc2l6ZUZuKHRoaXMucmVzaXplU25hcCQpO1xuXHRcdHRoaXMuc2l6ZSQgPSBzaXplRm4odGhpcy5yZXNpemUkKTtcblxuXHRcdGNvbnN0IHNpemVUeXBlRm4gPSAob2JzJDogT2JzZXJ2YWJsZTxWaWV3cG9ydFNpemU+KSA9PiBvYnMkLnBpcGUoXG5cdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYS53aWR0aCA9PT0gYi53aWR0aCksXG5cdFx0XHRtYXAoeCA9PiBnZXRTaXplVHlwZUluZm8oeC53aWR0aCwgdGhpcy5zaXplVHlwZXMpKSxcblx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG5cdFx0XHR0YXAoeCA9PiB0aGlzLl9zaXplVHlwZVNuYXBzaG90ID0geCksXG5cdFx0XHRzaGFyZVJlcGxheSgxKSxcblx0XHQpO1xuXG5cdFx0dGhpcy5zaXplVHlwZSQgPSBzaXplVHlwZUZuKHRoaXMuc2l6ZSQpO1xuXHRcdHRoaXMuc2l6ZVR5cGVTbmFwJCA9IHNpemVUeXBlRm4odGhpcy5zaXplU25hcCQpO1xuXHR9XG5cblx0LyoqIFJldHVybnMgdGhlIGN1cnJlbnQgdmlld3BvcnQgc2l6ZSAqL1xuXHRwcml2YXRlIGdldFZpZXdwb3J0U2l6ZSgpOiBWaWV3cG9ydFNpemUge1xuXHRcdGlmICghdGhpcy53aW5kb3dSZWYuaGFzTmF0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy52aWV3cG9ydFNlcnZlclNpemUuZ2V0KCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG5cdFx0aWYgKHVhLmluZGV4T2YoXCJzYWZhcmlcIikgIT09IC0xICYmIHVhLmluZGV4T2YoXCJjaHJvbWVcIikgPT09IC0xKSB7IC8vIHNhZmFyaSBzdWJ0cmFjdHMgdGhlIHNjcm9sbGJhciB3aWR0aFxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0d2lkdGg6IHRoaXMud2luZG93UmVmLm5hdGl2ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsXG5cdFx0XHRcdGhlaWdodDogdGhpcy53aW5kb3dSZWYubmF0aXZlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHR3aWR0aDogdGhpcy53aW5kb3dSZWYubmF0aXZlLmlubmVyV2lkdGgsXG5cdFx0XHRoZWlnaHQ6IHRoaXMud2luZG93UmVmLm5hdGl2ZS5pbm5lckhlaWdodCxcblx0XHR9O1xuXHR9XG5cbn1cbiJdfQ==
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LnV4L3NyYy92aWV3cG9ydC92aWV3cG9ydC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTixtQkFBbUIsRUFJbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixNQUFNLFVBQVUsK0JBQStCLENBQUMsS0FBYztJQUM3RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pDLE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUEyQyxLQUFLLENBQUM7SUFDM0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsb0NBQW9DLENBQUMsR0FBWTtJQUNoRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVixPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNqQixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNGLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNkLENBQUM7QUFHRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQWtEO0lBQy9GLENBQUMsbUJBQW1CLENB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R0FJRztBQUNILE1BQU0sVUFBVSxnQ0FBZ0MsQ0FBQyxjQUFzQztJQUN0RixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQ25CLGNBQWMsQ0FBQyxNQUFNLENBQW1DLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFO1FBQ2xGLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ3pDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQ3pDLE9BQU8sVUFBVSxDQUFDO0lBQ25CLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDTixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tIFwiLi4vaW50ZXJuYWwvaW50ZXJuYWwubW9kZWxcIjtcbmltcG9ydCB7XG5cdENvbXBhcmlzb25PcGVyYXRpb24sXG5cdFZpZXdwb3J0U2l6ZU1hdGNoZXJFeHByZXNzaW9uLFxuXHRWaWV3cG9ydFNpemVUeXBlSW5mbyxcblx0Vmlld3BvcnRNYXRjaENvbmRpdGlvbnNcbn0gZnJvbSBcIi4vdmlld3BvcnQubW9kZWxcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBWaWV3cG9ydFNpemVNYXRjaGVyRXhwcmVzc2lvbiB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgIXZhbHVlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGFyZ3M6IFBhcnRpYWw8Vmlld3BvcnRTaXplTWF0Y2hlckV4cHJlc3Npb24+ID0gdmFsdWU7XG5cdGlmIChhcmdzLnNpemUgJiYgYXJncy5vcGVyYXRpb24pIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZpZXdwb3J0U2l6ZU1hdGNoZXJUdXBsZUV4cHJlc3Npb24oYXJnOiB1bmtub3duKTogYXJnIGlzIFtDb21wYXJpc29uT3BlcmF0aW9uLCBzdHJpbmddIHtcblx0aWYgKCFhcmcpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0aWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdGlmIChhcmcubGVuZ3RoID09PSAyKSB7XG5cdFx0XHRjb25zdCBbb3BdID0gYXJnO1xuXHRcdFx0cmV0dXJuIG9wZXJhdGlvbnMuaW5jbHVkZXMob3ApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cblxuY29uc3Qgb3BlcmF0aW9ucyA9IE9iamVjdC52YWx1ZXMoQ29tcGFyaXNvbk9wZXJhdGlvbik7XG5cbmV4cG9ydCBjb25zdCBDT01QQVJJU09OX09QRVJBVElPTl9GVU5DX01BUFBJTkc6IERpY3Rpb25hcnk8KGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBib29sZWFuPiA9IHtcblx0W0NvbXBhcmlzb25PcGVyYXRpb24uZXF1YWxzXTogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhID09PSBiLFxuXHRbQ29tcGFyaXNvbk9wZXJhdGlvbi5ub3RFcXVhbHNdOiAoYTogbnVtYmVyLCBiOiBudW1iZXIpID0+IGEgIT09IGIsXG5cdFtDb21wYXJpc29uT3BlcmF0aW9uLmxlc3NUaGFuXTogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhIDwgYixcblx0W0NvbXBhcmlzb25PcGVyYXRpb24ubGVzc09yRXF1YWxUaGFuXTogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhIDw9IGIsXG5cdFtDb21wYXJpc29uT3BlcmF0aW9uLmdyZWF0ZXJUaGFuXTogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhID4gYixcblx0W0NvbXBhcmlzb25PcGVyYXRpb24uZ3JlYXRlck9yRXF1YWxUaGFuXTogKGE6IG51bWJlciwgYjogbnVtYmVyKSA9PiBhID49IGIsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNWaWV3cG9ydENvbmRpdGlvbk1hdGNoKFxuXHRldmFsdWF0ZVNpemU6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvLFxuXHRjb25kaXRpb25zOiBWaWV3cG9ydE1hdGNoQ29uZGl0aW9ucyxcblx0dmlld3BvcnRTaXplVHlwZUluZm9SZWZzOiBEaWN0aW9uYXJ5PFZpZXdwb3J0U2l6ZVR5cGVJbmZvPlxuKTogYm9vbGVhbiB7XG5cdGNvbnN0IGlzRXhjbHVkZWQgPSBtYXRjaChjb25kaXRpb25zLnNpemVUeXBlRXhjbHVkZSwgZXZhbHVhdGVTaXplLm5hbWUsIGZhbHNlKTtcblx0bGV0IGlzSW5jbHVkZWQ7XG5cdGxldCBpc0V4cHJlc3Npb25UcnV0aHk7XG5cblx0aWYgKCFpc0V4Y2x1ZGVkICYmIGNvbmRpdGlvbnMuZXhwcmVzc2lvbikge1xuXHRcdGNvbnN0IHJlZiA9IHZpZXdwb3J0U2l6ZVR5cGVJbmZvUmVmc1tjb25kaXRpb25zLmV4cHJlc3Npb24uc2l6ZV07XG5cdFx0aWYoIXJlZikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBWaWV3cG9ydCBzaXplIHR5cGUgaXMgaW52YWxpZC4gU2l6ZSB0eXBlOiAnJHtjb25kaXRpb25zLmV4cHJlc3Npb24uc2l6ZX0nYCk7XG5cdFx0fVxuXHRcdGNvbnN0IGV4cE1hdGNoZXIgPSBDT01QQVJJU09OX09QRVJBVElPTl9GVU5DX01BUFBJTkdbY29uZGl0aW9ucy5leHByZXNzaW9uLm9wZXJhdGlvbl07XG5cblx0XHRpc0V4cHJlc3Npb25UcnV0aHkgPSBleHBNYXRjaGVyKGV2YWx1YXRlU2l6ZS50eXBlLCByZWYudHlwZSk7XG5cdH0gZWxzZSB7XG5cdFx0aXNJbmNsdWRlZCA9IG1hdGNoKGNvbmRpdGlvbnMuc2l6ZVR5cGUsIGV2YWx1YXRlU2l6ZS5uYW1lLCB0cnVlKTtcblx0fVxuXG5cdGNvbnN0IHNob3VsZFJlbmRlciA9IChpc0V4cHJlc3Npb25UcnV0aHkgfHwgaXNJbmNsdWRlZCkgJiYgIWlzRXhjbHVkZWQ7XG5cdC8vIGNvbnNvbGUud2FybihcIj4+PiBzaG91bGRSZW5kZXJcIiwgeyBldmFsdWF0ZVNpemUsIGNvbmRpdGlvbnMsIHNob3VsZFJlbmRlciB9KTtcblx0cmV0dXJuICEhc2hvdWxkUmVuZGVyO1xufVxuXG5mdW5jdGlvbiBtYXRjaCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHwgdW5kZWZpbmVkLCB0YXJnZXRWYWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IGJvb2xlYW4pIHtcblx0aWYgKCF2YWx1ZSkge1xuXHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdH1cblxuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSlcblx0XHQ/IHZhbHVlLmluY2x1ZGVzKHRhcmdldFZhbHVlKVxuXHRcdDogdmFsdWUgPT09IHRhcmdldFZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2l6ZVR5cGVJbmZvKHdpZHRoOiBudW1iZXIsIHNpemVUeXBlczogVmlld3BvcnRTaXplVHlwZUluZm9bXSk6IFZpZXdwb3J0U2l6ZVR5cGVJbmZvIHtcblx0Y29uc3QgbGFzdEVudHJ5SW5kZXggPSBzaXplVHlwZXMubGVuZ3RoIC0gMTtcblxuXHRmb3IgKGxldCBpZHggPSAwOyBpZHggPCBsYXN0RW50cnlJbmRleDsgaWR4KyspIHtcblx0XHRjb25zdCB2aWV3cG9ydFNpemVUeXBlSW5mbyA9IHNpemVUeXBlc1tpZHhdO1xuXG5cdFx0aWYgKHdpZHRoIDw9IHZpZXdwb3J0U2l6ZVR5cGVJbmZvLndpZHRoVGhyZXNob2xkKSB7XG5cdFx0XHRyZXR1cm4gdmlld3BvcnRTaXplVHlwZUluZm87XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHNpemVUeXBlc1tsYXN0RW50cnlJbmRleF07XG59XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGJyZWFrcG9pbnRzIGludG8gYSAyIGRpbWVuc2lvbmFsIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5hbWUgYW5kIHdpZHRoLCBhbmQgc29ydGVkIGZyb21cbiAqICBzbWFsbGVzdCB0byBsYXJnZXN0LlxuICogQHBhcmFtIGJyZWFrcG9pbnRzIHRoZSBicmVha3BvaW50cyBvYnRhaW5lZCBmcm9tIHRoZSBjb25maWdcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBnZXRTb3J0ZWRCcmVha3BvaW50cyhicmVha3BvaW50czogRGljdGlvbmFyeTxudW1iZXI+KTogW3N0cmluZywgbnVtYmVyXVtdIHtcblx0cmV0dXJuIE9iamVjdC5lbnRyaWVzKGJyZWFrcG9pbnRzKVxuXHRcdC5zb3J0KChbLCB3aWR0aEFdLCBbLCB3aWR0aEJdKSA9PiB3aWR0aEEgLSB3aWR0aEIpO1xufVxuXG4vKipcbiAqIEEgdXRpbCBmdW5jdGlvbiB3aGljaCBnZW5lcmF0ZXMgdGhlIFZpZXdwb3J0U2l6ZVR5cGVJbmZvLnR5cGUgZm9yIGVhY2ggYnJlYWtwb2ludC5cbiAqIEBwYXJhbSBicmVha3BvaW50cyB0aGUgY3VzdG9tIGJyZWFrcG9pbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KGJyZWFrcG9pbnRzOiBUKTogVCAmIFJlY29yZDxudW1iZXIsIHN0cmluZz4ge1xuXHRyZXR1cm4gT2JqZWN0LmZyZWV6ZShcblx0XHRnZXRTb3J0ZWRCcmVha3BvaW50cyhicmVha3BvaW50cykucmVkdWNlPFJlY29yZDxudW1iZXIgfCBzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4+KFxuXHRcdFx0KGRpY3Rpb25hcnksIFtuYW1lXSwgaW5kZXgpID0+IHtcblx0XHRcdFx0ZGljdGlvbmFyeVtuYW1lXSA9IGluZGV4O1xuXHRcdFx0XHRkaWN0aW9uYXJ5W2luZGV4XSA9IG5hbWU7XG5cdFx0XHRcdHJldHVybiBkaWN0aW9uYXJ5O1xuXHRcdFx0fSwge31cblx0XHQpXG5cdCkgYXMgVCAmIFJlY29yZDxudW1iZXIsIHN0cmluZz47XG59XG5cbi8qKlxuICogUHJlLXByb2Nlc3NlcyB0aGUgZ2l2ZW4gYnJlYWtwb2ludHMgaW50byBhbiBvcmRlcmVkIGxpc3QgZnJvbSBzbWFsbGVzdCB0byBsYXJnZXN0IHdoaWxlIGdlbmVyYXRpbmdcbiAqICBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBvbiB0aGUgdmlld3BvcnQuXG4gKiBAcGFyYW0gYnJlYWtwb2ludHMgdGhlIGJyZWFrcG9pbnRzIG9idGFpbmVkIGZyb20gdGhlIGNvbmZpZ1xuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGVJbmZvTGlzdChicmVha3BvaW50czogRGljdGlvbmFyeTxudW1iZXI+KTogVmlld3BvcnRTaXplVHlwZUluZm9bXSB7XG5cdHJldHVybiBnZXRTb3J0ZWRCcmVha3BvaW50cyhicmVha3BvaW50cylcblx0XHQubWFwKChbbmFtZSwgd2lkdGhdLCBpbmRleCkgPT5cblx0XHRcdChPYmplY3QuZnJlZXplKHtcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dHlwZTogaW5kZXgsXG5cdFx0XHRcdHdpZHRoVGhyZXNob2xkOiB3aWR0aFxuXHRcdFx0fSkpXG5cdFx0KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgYnJlYWtwb2ludCBsaXN0IGludG8gYSBkaWN0aW9uYXJ5IHdoaWxlIHVzaW5nIHRoZSBuYW1lIGFzIGtleS5cbiAqIEBwYXJhbSBicmVha3BvaW50TGlzdCB0aGUgbGlzdCBvZiBicmVha3BvaW50c1xuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVZpZXdwb3J0U2l6ZVR5cGVJbmZvUmVmcyhicmVha3BvaW50TGlzdDogVmlld3BvcnRTaXplVHlwZUluZm9bXSk6IERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+IHtcblx0cmV0dXJuIE9iamVjdC5mcmVlemUoXG5cdFx0YnJlYWtwb2ludExpc3QucmVkdWNlPERpY3Rpb25hcnk8Vmlld3BvcnRTaXplVHlwZUluZm8+PigoZGljdGlvbmFyeSwgYnJlYWtwb2ludCkgPT4ge1xuXHRcdFx0ZGljdGlvbmFyeVticmVha3BvaW50Lm5hbWVdID0gYnJlYWtwb2ludDtcblx0XHRcdGRpY3Rpb25hcnlbYnJlYWtwb2ludC50eXBlXSA9IGJyZWFrcG9pbnQ7XG5cdFx0XHRyZXR1cm4gZGljdGlvbmFyeTtcblx0XHR9LCB7fSlcblx0KTtcbn1cbiJdfQ==
|