@apipass/inputs 1.0.7 → 1.0.8
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/ace-editor/component.d.ts +52 -52
- package/ace-editor/directive.d.ts +39 -39
- package/custom-select/custom-select-item.d.ts +5 -5
- package/custom-select/custom-select.component.d.ts +51 -51
- package/debounce-model-directive/debouceInput.directive.d.ts +14 -14
- package/esm2022/ace-editor/component.mjs +200 -0
- package/esm2022/ace-editor/directive.mjs +153 -0
- package/{esm2020 → esm2022}/apipass-inputs.mjs +4 -4
- package/esm2022/custom-select/custom-select-item.mjs +9 -0
- package/esm2022/custom-select/custom-select.component.mjs +213 -0
- package/esm2022/debounce-model-directive/debouceInput.directive.mjs +34 -0
- package/esm2022/field/field.component.mjs +56 -0
- package/esm2022/input-avatar/input-avatar.component.mjs +91 -0
- package/esm2022/input-boolean/input-boolean.component.mjs +54 -0
- package/esm2022/input-file/input-file.component.mjs +82 -0
- package/esm2022/input-number/input-number.component.mjs +60 -0
- package/esm2022/input-password/input-password.component.mjs +94 -0
- package/esm2022/input-text/input-text.component.mjs +60 -0
- package/esm2022/inputs.module.mjs +150 -0
- package/{esm2020 → esm2022}/public-api.mjs +16 -16
- package/{esm2020 → esm2022}/select-box/mat-select-infinite-scroll.directive.mjs +91 -86
- package/esm2022/select-box/select-box.component.mjs +226 -0
- package/esm2022/select-enum/select-enum.component.mjs +47 -0
- package/esm2022/select-interpolation/select-interpolation.component.mjs +177 -0
- package/esm2022/value-acessor-base.mjs +30 -0
- package/fesm2022/apipass-inputs.mjs +1711 -0
- package/fesm2022/apipass-inputs.mjs.map +1 -0
- package/field/field.component.d.ts +15 -15
- package/index.d.ts +5 -5
- package/input-avatar/input-avatar.component.d.ts +29 -29
- package/input-boolean/input-boolean.component.d.ts +15 -15
- package/input-file/input-file.component.d.ts +31 -31
- package/input-number/input-number.component.d.ts +17 -17
- package/input-password/input-password.component.d.ts +28 -28
- package/input-text/input-text.component.d.ts +17 -17
- package/inputs.module.d.ts +36 -36
- package/package.json +18 -24
- package/public-api.d.ts +16 -16
- package/select-box/mat-select-infinite-scroll.directive.d.ts +26 -26
- package/select-box/select-box.component.d.ts +57 -57
- package/select-enum/select-enum.component.d.ts +12 -12
- package/select-interpolation/select-interpolation.component.d.ts +44 -44
- package/value-acessor-base.d.ts +13 -13
- package/esm2020/ace-editor/component.mjs +0 -195
- package/esm2020/ace-editor/directive.mjs +0 -148
- package/esm2020/custom-select/custom-select-item.mjs +0 -7
- package/esm2020/custom-select/custom-select.component.mjs +0 -204
- package/esm2020/debounce-model-directive/debouceInput.directive.mjs +0 -31
- package/esm2020/field/field.component.mjs +0 -51
- package/esm2020/input-avatar/input-avatar.component.mjs +0 -92
- package/esm2020/input-boolean/input-boolean.component.mjs +0 -56
- package/esm2020/input-file/input-file.component.mjs +0 -82
- package/esm2020/input-number/input-number.component.mjs +0 -62
- package/esm2020/input-password/input-password.component.mjs +0 -96
- package/esm2020/input-text/input-text.component.mjs +0 -62
- package/esm2020/inputs.module.mjs +0 -149
- package/esm2020/select-box/select-box.component.mjs +0 -225
- package/esm2020/select-enum/select-enum.component.mjs +0 -48
- package/esm2020/select-interpolation/select-interpolation.component.mjs +0 -169
- package/esm2020/value-acessor-base.mjs +0 -31
- package/fesm2015/apipass-inputs.mjs +0 -1706
- package/fesm2015/apipass-inputs.mjs.map +0 -1
- package/fesm2020/apipass-inputs.mjs +0 -1696
- package/fesm2020/apipass-inputs.mjs.map +0 -1
|
@@ -1,86 +1,91 @@
|
|
|
1
|
-
import { Directive, EventEmitter, Input, NgZone, Output } from '@angular/core';
|
|
2
|
-
import { MatSelect } from '@angular/material/select';
|
|
3
|
-
import { debounceTime, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
-
import { fromEvent, Subject } from 'rxjs';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/select";
|
|
7
|
-
/** The height of the select items in `em` units. */
|
|
8
|
-
const SELECT_ITEM_HEIGHT_EM = 3;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
this.thrPx =
|
|
44
|
-
this.thrPc =
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
1
|
+
import { Directive, EventEmitter, Input, NgZone, Output } from '@angular/core';
|
|
2
|
+
import { MatSelect } from '@angular/material/select';
|
|
3
|
+
import { debounceTime, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { fromEvent, Subject } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/select";
|
|
7
|
+
/** The height of the select items in `em` units. */
|
|
8
|
+
const SELECT_ITEM_HEIGHT_EM = 3;
|
|
9
|
+
class MatSelectInfiniteScrollDirective {
|
|
10
|
+
matSelect;
|
|
11
|
+
ngZone;
|
|
12
|
+
threshold = '15%';
|
|
13
|
+
debounceTime = 150;
|
|
14
|
+
complete;
|
|
15
|
+
infiniteScroll = new EventEmitter();
|
|
16
|
+
panel;
|
|
17
|
+
thrPx = 0;
|
|
18
|
+
thrPc = 0;
|
|
19
|
+
singleOptionHeight = SELECT_ITEM_HEIGHT_EM;
|
|
20
|
+
destroyed$ = new Subject();
|
|
21
|
+
constructor(matSelect, ngZone) {
|
|
22
|
+
this.matSelect = matSelect;
|
|
23
|
+
this.ngZone = ngZone;
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
this.evaluateThreshold();
|
|
27
|
+
}
|
|
28
|
+
ngAfterViewInit() {
|
|
29
|
+
this.matSelect.openedChange.pipe(takeUntil(this.destroyed$)).subscribe((opened) => {
|
|
30
|
+
if (opened) {
|
|
31
|
+
this.panel = this.matSelect.panel.nativeElement;
|
|
32
|
+
this.singleOptionHeight = this.getSelectItemHeightPx();
|
|
33
|
+
this.registerScrollListener();
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
ngOnDestroy() {
|
|
38
|
+
this.destroyed$.next(true);
|
|
39
|
+
this.destroyed$.complete();
|
|
40
|
+
}
|
|
41
|
+
evaluateThreshold() {
|
|
42
|
+
if (this.threshold.lastIndexOf('%') > -1) {
|
|
43
|
+
this.thrPx = 0;
|
|
44
|
+
this.thrPc = (parseFloat(this.threshold) / 100);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.thrPx = parseFloat(this.threshold);
|
|
48
|
+
this.thrPc = 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
registerScrollListener() {
|
|
52
|
+
fromEvent(this.panel, 'scroll').pipe(takeUntil(this.destroyed$), debounceTime(this.debounceTime), tap((event) => {
|
|
53
|
+
this.handleScrollEvent(event);
|
|
54
|
+
})).subscribe();
|
|
55
|
+
}
|
|
56
|
+
handleScrollEvent(event) {
|
|
57
|
+
this.ngZone.runOutsideAngular(() => {
|
|
58
|
+
if (this.complete) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const countOfRenderedOptions = this.matSelect.options.length;
|
|
62
|
+
const infiniteScrollDistance = this.singleOptionHeight * countOfRenderedOptions;
|
|
63
|
+
const threshold = this.thrPc !== 0 ? (infiniteScrollDistance * this.thrPc) : this.thrPx;
|
|
64
|
+
const scrolledDistance = this.panel.clientHeight + event.target.scrollTop;
|
|
65
|
+
if ((scrolledDistance + threshold) >= infiniteScrollDistance) {
|
|
66
|
+
this.ngZone.run(() => { this.infiniteScroll.emit(); });
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
getSelectItemHeightPx() {
|
|
71
|
+
return parseFloat(getComputedStyle(this.panel).fontSize) * SELECT_ITEM_HEIGHT_EM;
|
|
72
|
+
}
|
|
73
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MatSelectInfiniteScrollDirective, deps: [{ token: i1.MatSelect }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
|
|
74
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: MatSelectInfiniteScrollDirective, selector: "[msInfiniteScroll]", inputs: { threshold: "threshold", debounceTime: "debounceTime", complete: "complete" }, outputs: { infiniteScroll: "infiniteScroll" }, ngImport: i0 });
|
|
75
|
+
}
|
|
76
|
+
export { MatSelectInfiniteScrollDirective };
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: MatSelectInfiniteScrollDirective, decorators: [{
|
|
78
|
+
type: Directive,
|
|
79
|
+
args: [{
|
|
80
|
+
selector: '[msInfiniteScroll]'
|
|
81
|
+
}]
|
|
82
|
+
}], ctorParameters: function () { return [{ type: i1.MatSelect }, { type: i0.NgZone }]; }, propDecorators: { threshold: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], debounceTime: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], complete: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], infiniteScroll: [{
|
|
89
|
+
type: Output
|
|
90
|
+
}] } });
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXNlbGVjdC1pbmZpbml0ZS1zY3JvbGwuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9zZWxlY3QtYm94L21hdC1zZWxlY3QtaW5maW5pdGUtc2Nyb2xsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2hILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTs7O0FBRXpDLG9EQUFvRDtBQUNwRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQTtBQUUvQixNQUdhLGdDQUFnQztJQWFiO0lBQXVDO0lBWjVELFNBQVMsR0FBRyxLQUFLLENBQUE7SUFDakIsWUFBWSxHQUFHLEdBQUcsQ0FBQTtJQUNsQixRQUFRLENBQVU7SUFDakIsY0FBYyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUE7SUFFM0MsS0FBSyxDQUFVO0lBQ2YsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUNULEtBQUssR0FBRyxDQUFDLENBQUE7SUFDVCxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQTtJQUVqQyxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQTtJQUVwRCxZQUE4QixTQUFvQixFQUFtQixNQUFjO1FBQXJELGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNuRixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFFRCxl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LGdDQUFnQzsyRkFBaEMsZ0NBQWdDOztTQUFoQyxnQ0FBZ0M7MkZBQWhDLGdDQUFnQztrQkFINUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2lCQUMvQjtxSEFFVSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnXHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcydcclxuXHJcbi8qKiBUaGUgaGVpZ2h0IG9mIHRoZSBzZWxlY3QgaXRlbXMgaW4gYGVtYCB1bml0cy4gKi9cclxuY29uc3QgU0VMRUNUX0lURU1fSEVJR0hUX0VNID0gM1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbXNJbmZpbml0ZVNjcm9sbF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRTZWxlY3RJbmZpbml0ZVNjcm9sbERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSB0aHJlc2hvbGQgPSAnMTUlJ1xyXG4gIEBJbnB1dCgpIGRlYm91bmNlVGltZSA9IDE1MFxyXG4gIEBJbnB1dCgpIGNvbXBsZXRlITogYm9vbGVhblxyXG4gIEBPdXRwdXQoKSBpbmZpbml0ZVNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxyXG5cclxuICBwcml2YXRlIHBhbmVsITogRWxlbWVudFxyXG4gIHByaXZhdGUgdGhyUHggPSAwXHJcbiAgcHJpdmF0ZSB0aHJQYyA9IDBcclxuICBwcml2YXRlIHNpbmdsZU9wdGlvbkhlaWdodCA9IFNFTEVDVF9JVEVNX0hFSUdIVF9FTVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpXHJcblxyXG4gIGNvbnN0cnVjdG9yIChwcml2YXRlIHJlYWRvbmx5IG1hdFNlbGVjdDogTWF0U2VsZWN0LCBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmV2YWx1YXRlVGhyZXNob2xkKClcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCAoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdC5vcGVuZWRDaGFuZ2UucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcclxuICAgICkuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcclxuICAgICAgaWYgKG9wZW5lZCkge1xyXG4gICAgICAgIHRoaXMucGFuZWwgPSB0aGlzLm1hdFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgdGhpcy5zaW5nbGVPcHRpb25IZWlnaHQgPSB0aGlzLmdldFNlbGVjdEl0ZW1IZWlnaHRQeCgpXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlclNjcm9sbExpc3RlbmVyKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95ICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KHRydWUpXHJcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKVxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVUaHJlc2hvbGQgKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudGhyZXNob2xkLmxhc3RJbmRleE9mKCclJykgPiAtMSkge1xyXG4gICAgICB0aGlzLnRoclB4ID0gMFxyXG4gICAgICB0aGlzLnRoclBjID0gKHBhcnNlRmxvYXQodGhpcy50aHJlc2hvbGQpIC8gMTAwKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50aHJQeCA9IHBhcnNlRmxvYXQodGhpcy50aHJlc2hvbGQpXHJcbiAgICAgIHRoaXMudGhyUGMgPSAwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclNjcm9sbExpc3RlbmVyICgpOiB2b2lkIHtcclxuICAgIGZyb21FdmVudCh0aGlzLnBhbmVsLCAnc2Nyb2xsJykucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXHJcbiAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSksXHJcbiAgICAgIHRhcCgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmhhbmRsZVNjcm9sbEV2ZW50KGV2ZW50KVxyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2Nyb2xsRXZlbnQgKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29tcGxldGUpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb3VudE9mUmVuZGVyZWRPcHRpb25zID0gdGhpcy5tYXRTZWxlY3Qub3B0aW9ucy5sZW5ndGhcclxuICAgICAgY29uc3QgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSA9IHRoaXMuc2luZ2xlT3B0aW9uSGVpZ2h0ICogY291bnRPZlJlbmRlcmVkT3B0aW9uc1xyXG4gICAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLnRoclBjICE9PSAwID8gKGluZmluaXRlU2Nyb2xsRGlzdGFuY2UgKiB0aGlzLnRoclBjKSA6IHRoaXMudGhyUHhcclxuXHJcbiAgICAgIGNvbnN0IHNjcm9sbGVkRGlzdGFuY2UgPSB0aGlzLnBhbmVsLmNsaWVudEhlaWdodCArIGV2ZW50LnRhcmdldC5zY3JvbGxUb3BcclxuXHJcbiAgICAgIGlmICgoc2Nyb2xsZWREaXN0YW5jZSArIHRocmVzaG9sZCkgPj0gaW5maW5pdGVTY3JvbGxEaXN0YW5jZSkge1xyXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7IHRoaXMuaW5maW5pdGVTY3JvbGwuZW1pdCgpIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RJdGVtSGVpZ2h0UHggKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMucGFuZWwpLmZvbnRTaXplKSAqIFNFTEVDVF9JVEVNX0hFSUdIVF9FTVxyXG4gIH1cclxufVxyXG4iXX0=
|