UNPKG

@universal-material/angular

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.

136 lines 20.3 kB
import { Component, forwardRef, Inject, Input, LOCALE_ID, Optional, ViewChild, ViewEncapsulation } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { FormFieldComponent } from '../../form-field/form-field.component'; import { DropdownMenuDirective } from '../../dropdown/dropdown-menu.directive'; import { DatepickerBaseComponent } from '../datepicker-base.component'; import { DATEPICKER_DEFAULT_OPTIONS } from '../datepicker-config.model'; import { DatepickerAdapter } from '../datepicker-adapter'; import { DropdownDirective } from '../../dropdown/dropdown.directive'; import * as i0 from "@angular/core"; import * as i1 from "../default-datepicker-adapter"; import * as i2 from "@angular/common"; import * as i3 from "../../dropdown/dropdown.directive"; import * as i4 from "../../dropdown/dropdown-menu.directive"; import * as i5 from "../datepicker-content/datepicker-content.component"; import * as i6 from "../datepicker-adapter"; import * as i7 from "../../form-field/form-field.component"; const DatepickerInputValueAcessor = { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatepickerInputComponent), multi: true }; export class DatepickerInputComponent extends DatepickerBaseComponent { // get focused(): boolean { // return this._dropdownMenu && this._dropdownMenu.show; // } get empty() { return !this.date; } get disabled() { return this._disabled; } constructor(elementRef, _locale, datepickerAdapter, _defaultConfig, defaultDatepickerAdapter, formField) { super(_locale, _defaultConfig, datepickerAdapter, defaultDatepickerAdapter); this.autoClose = 'outside'; this.placeholder = null; this.direction = 'auto'; this.tabIndex = null; this.inputFormatter = null; this.date = null; this._disabled = false; this.focused = false; this._onTouched = () => { }; this._onChange = (_) => { }; elementRef.nativeElement.classList.add('u-text-input'); if (!formField) { return; } formField.selectionField = true; formField._input = this; } _setDate(date) { super._setDate(date); if (!this._onChange) { return; } this._onChange(date); if (this.autoClose && this._dropdownMenu) { this._dropdownMenu.show = false; } } focus() { this._dropdown.toggle(); this.toggle.nativeElement.focus(); } registerOnChange(fn) { this._onChange = fn; } registerOnTouched(fn) { this._onTouched = fn; } writeValue(value) { this._setDate(value); } setDisabledState(isDisabled) { this._disabled = isDisabled; } _focusChanged(focused) { if (focused === this.focused) { return; } this.focused = focused; if (!focused) { this._dropdown.close(); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerInputComponent, deps: [{ token: i0.ElementRef }, { token: LOCALE_ID }, { token: DatepickerAdapter, optional: true }, { token: DATEPICKER_DEFAULT_OPTIONS, optional: true }, { token: i1.DefaultDatepickerAdapter }, { token: forwardRef(() => FormFieldComponent), optional: true }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerInputComponent, selector: "u-datepicker-input", inputs: { autoClose: "autoClose", placeholder: "placeholder", direction: "direction", tabIndex: "tabIndex", inputFormatter: "inputFormatter" }, providers: [ DatepickerInputValueAcessor, { provide: DatepickerBaseComponent, useExisting: DatepickerInputComponent } ], viewQueries: [{ propertyName: "toggle", first: true, predicate: ["toggle"], descendants: true }, { propertyName: "_dropdown", first: true, predicate: DropdownDirective, descendants: true }, { propertyName: "_dropdownMenu", first: true, predicate: DropdownMenuDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"u-dropdown\" uDropdown [autoClose]=\"autoClose\">\n <button\n #toggle\n class=\"u-text-input u-dropdown-toggle\"\n type=\"button\"\n [disabled]=\"_disabled\"\n [attr.tabindex]=\"tabIndex\"\n (click)=\"focus()\"\n (focus)=\"_focusChanged(true)\"\n (blur)=\"_focusChanged(false)\">\n <div class=\"u-text-input-value\" *ngIf=\"date; else inputPlaceholder\">{{inputFormatter ? inputFormatter(date) : formattedDate}}</div>\n <ng-template #inputPlaceholder>\n <div class=\"u-text-input-placeholder\">{{placeholder}}</div>\n </ng-template>\n </button>\n <div class=\"u-dropdown-menu\" uDropdownMenu [direction]=\"direction\">\n <u-datepicker-content [disabled]=\"!focused\"></u-datepicker-content>\n </div>\n</div>\n", styles: ["u-datepicker-input{display:block;pointer-events:none}u-datepicker-input .u-dropdown-toggle{width:100%}@media (max-width: 991.99px),(max-height: 800px){u-datepicker-input .u-dropdown-menu{position:fixed;inset:0!important;display:flex;align-items:center;justify-content:center;background:#00000080;z-index:9999;transform:none!important;transition:opacity .25s!important;pointer-events:none!important}}u-datepicker-input .u-dropdown-menu{padding:0}u-datepicker-input .u-dropdown-menu.show .u-datepicker{pointer-events:auto;border-radius:4px;overflow:hidden}button.u-text-input{padding:0!important}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DropdownDirective, selector: "[uDropdown]", inputs: ["autoClose"] }, { kind: "directive", type: i4.DropdownMenuDirective, selector: "[uDropdownMenu]", inputs: ["direction"] }, { kind: "component", type: i5.DatepickerContentComponent, selector: "u-datepicker-content", inputs: ["disabled"] }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerInputComponent, decorators: [{ type: Component, args: [{ selector: 'u-datepicker-input', providers: [ DatepickerInputValueAcessor, { provide: DatepickerBaseComponent, useExisting: DatepickerInputComponent } ], encapsulation: ViewEncapsulation.None, template: "<div class=\"u-dropdown\" uDropdown [autoClose]=\"autoClose\">\n <button\n #toggle\n class=\"u-text-input u-dropdown-toggle\"\n type=\"button\"\n [disabled]=\"_disabled\"\n [attr.tabindex]=\"tabIndex\"\n (click)=\"focus()\"\n (focus)=\"_focusChanged(true)\"\n (blur)=\"_focusChanged(false)\">\n <div class=\"u-text-input-value\" *ngIf=\"date; else inputPlaceholder\">{{inputFormatter ? inputFormatter(date) : formattedDate}}</div>\n <ng-template #inputPlaceholder>\n <div class=\"u-text-input-placeholder\">{{placeholder}}</div>\n </ng-template>\n </button>\n <div class=\"u-dropdown-menu\" uDropdownMenu [direction]=\"direction\">\n <u-datepicker-content [disabled]=\"!focused\"></u-datepicker-content>\n </div>\n</div>\n", styles: ["u-datepicker-input{display:block;pointer-events:none}u-datepicker-input .u-dropdown-toggle{width:100%}@media (max-width: 991.99px),(max-height: 800px){u-datepicker-input .u-dropdown-menu{position:fixed;inset:0!important;display:flex;align-items:center;justify-content:center;background:#00000080;z-index:9999;transform:none!important;transition:opacity .25s!important;pointer-events:none!important}}u-datepicker-input .u-dropdown-menu{padding:0}u-datepicker-input .u-dropdown-menu.show .u-datepicker{pointer-events:auto;border-radius:4px;overflow:hidden}button.u-text-input{padding:0!important}\n"] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID] }] }, { type: i6.DatepickerAdapter, decorators: [{ type: Optional }, { type: Inject, args: [DatepickerAdapter] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DATEPICKER_DEFAULT_OPTIONS] }] }, { type: i1.DefaultDatepickerAdapter }, { type: i7.FormFieldComponent, decorators: [{ type: Optional }, { type: Inject, args: [forwardRef(() => FormFieldComponent)] }] }]; }, propDecorators: { autoClose: [{ type: Input }], placeholder: [{ type: Input }], direction: [{ type: Input }], tabIndex: [{ type: Input }], inputFormatter: [{ type: Input }], toggle: [{ type: ViewChild, args: ['toggle'] }], _dropdown: [{ type: ViewChild, args: [DropdownDirective] }], _dropdownMenu: [{ type: ViewChild, args: [DropdownMenuDirective] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLWlucHV0L2RhdGVwaWNrZXItaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci1pbnB1dC9kYXRlcGlja2VyLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSwwQkFBMEIsRUFBb0IsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7O0FBRXRFLE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZELEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQVlGLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSx1QkFBdUI7SUFrQm5FLDJCQUEyQjtJQUMzQiwwREFBMEQ7SUFD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RSx3SkFjVSxpQkFBaUIsZ0ZBQ2pCLHFCQUFxQix1RUMxQ2xDLGl3QkFtQkE7OzRGRFdhLHdCQUF3QjtrQkFWcEMsU0FBUzsrQkFDRSxvQkFBb0IsYUFHbkI7d0JBQ1QsMkJBQTJCO3dCQUMzQixFQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLDBCQUEwQixFQUFDO3FCQUMxRSxpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOzswQkFpQ3hCLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDcEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQywwQkFBMEI7OzBCQUU3QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQzs0Q0FqQzNELFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFHZSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBRVcsU0FBUztzQkFBdEMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ00sYUFBYTtzQkFBOUMsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIEluamVjdCwgSW5wdXQsIExPQ0FMRV9JRCwgT3B0aW9uYWwsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgSW5wdXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2lucHV0LWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1GaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbC9kaXJlY3Rpb24nO1xuaW1wb3J0IHsgRHJvcGRvd25NZW51RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vZHJvcGRvd24tbWVudS5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyBEYXRlcGlja2VyQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGVwaWNrZXItYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgREFURVBJQ0tFUl9ERUZBVUxUX09QVElPTlMsIERhdGVwaWNrZXJDb25maWcgfSBmcm9tICcuLi9kYXRlcGlja2VyLWNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlcGlja2VyQWRhcHRlciB9IGZyb20gJy4uL2RhdGVwaWNrZXItYWRhcHRlcic7XG5pbXBvcnQgeyBEZWZhdWx0RGF0ZXBpY2tlckFkYXB0ZXIgfSBmcm9tICcuLi9kZWZhdWx0LWRhdGVwaWNrZXItYWRhcHRlcic7XG5pbXBvcnQgeyBEcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IERhdGVwaWNrZXJJbnB1dFZhbHVlQWNlc3NvciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVwaWNrZXJJbnB1dENvbXBvbmVudCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd1LWRhdGVwaWNrZXItaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRGF0ZXBpY2tlcklucHV0VmFsdWVBY2Vzc29yLFxuICAgIHtwcm92aWRlOiBEYXRlcGlja2VyQmFzZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IERhdGVwaWNrZXJJbnB1dENvbXBvbmVudH1cbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VySW5wdXRDb21wb25lbnQgZXh0ZW5kcyBEYXRlcGlja2VyQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIElucHV0QmFzZUNvbXBvbmVudCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIEBJbnB1dCgpIGF1dG9DbG9zZTogYm9vbGVhbiB8ICdvdXRzaWRlJyA9ICdvdXRzaWRlJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBkaXJlY3Rpb246IERpcmVjdGlvbiA9ICdhdXRvJztcbiAgQElucHV0KCkgdGFiSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBpbnB1dEZvcm1hdHRlcjogKCh2YWx1ZTogRGF0ZSkgPT4gc3RyaW5nIHwgbnVsbCkgfCBudWxsID0gbnVsbDtcbiAgLy8gQElucHV0KCkgY29uZmlnOiBEYXRlcGlja2VySW5wdXRDb25maWc7XG5cbiAgQFZpZXdDaGlsZCgndG9nZ2xlJykgdG9nZ2xlITogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG5cbiAgQFZpZXdDaGlsZChEcm9wZG93bkRpcmVjdGl2ZSkgX2Ryb3Bkb3duITogRHJvcGRvd25EaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoRHJvcGRvd25NZW51RGlyZWN0aXZlKSBfZHJvcGRvd25NZW51ITogRHJvcGRvd25NZW51RGlyZWN0aXZlO1xuXG4gIG92ZXJyaWRlIGRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgZm9jdXNlZCA9IGZhbHNlO1xuICAvLyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fZHJvcGRvd25NZW51ICYmIHRoaXMuX2Ryb3Bkb3duTWVudS5zaG93O1xuICAvLyB9XG5cbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kYXRlO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgX2xvY2FsZTogc3RyaW5nLFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERhdGVwaWNrZXJBZGFwdGVyKSBkYXRlcGlja2VyQWRhcHRlcjogRGF0ZXBpY2tlckFkYXB0ZXIsXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoREFURVBJQ0tFUl9ERUZBVUxUX09QVElPTlMpIF9kZWZhdWx0Q29uZmlnOiBEYXRlcGlja2VyQ29uZmlnLFxuICAgICAgICAgICAgICBkZWZhdWx0RGF0ZXBpY2tlckFkYXB0ZXI6IERlZmF1bHREYXRlcGlja2VyQWRhcHRlcixcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IEZvcm1GaWVsZENvbXBvbmVudCkpIGZvcm1GaWVsZDogRm9ybUZpZWxkQ29tcG9uZW50KSB7XG4gICAgc3VwZXIoX2xvY2FsZSwgX2RlZmF1bHRDb25maWcsIGRhdGVwaWNrZXJBZGFwdGVyLCBkZWZhdWx0RGF0ZXBpY2tlckFkYXB0ZXIpO1xuXG4gICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3UtdGV4dC1pbnB1dCcpO1xuXG4gICAgaWYgKCFmb3JtRmllbGQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3JtRmllbGQuc2VsZWN0aW9uRmllbGQgPSB0cnVlO1xuICAgIGZvcm1GaWVsZC5faW5wdXQgPSB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Ub3VjaGVkID0gKCkgPT4ge307XG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgb3ZlcnJpZGUgX3NldERhdGUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIHN1cGVyLl9zZXREYXRlKGRhdGUpO1xuXG4gICAgaWYgKCF0aGlzLl9vbkNoYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX29uQ2hhbmdlKGRhdGUpO1xuXG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlICYmIHRoaXMuX2Ryb3Bkb3duTWVudSkge1xuICAgICAgdGhpcy5fZHJvcGRvd25NZW51LnNob3cgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kcm9wZG93bi50b2dnbGUoKTtcbiAgICB0aGlzLnRvZ2dsZS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGUpIHtcbiAgICB0aGlzLl9zZXREYXRlKHZhbHVlKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIF9mb2N1c0NoYW5nZWQoZm9jdXNlZDogYm9vbGVhbikge1xuICAgIGlmIChmb2N1c2VkID09PSB0aGlzLmZvY3VzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xuXG4gICAgaWYgKCFmb2N1c2VkKSB7XG4gICAgICB0aGlzLl9kcm9wZG93bi5jbG9zZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInUtZHJvcGRvd25cIiB1RHJvcGRvd24gW2F1dG9DbG9zZV09XCJhdXRvQ2xvc2VcIj5cbiAgPGJ1dHRvblxuICAgICN0b2dnbGVcbiAgICBjbGFzcz1cInUtdGV4dC1pbnB1dCB1LWRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2Rpc2FibGVkXT1cIl9kaXNhYmxlZFwiXG4gICAgW2F0dHIudGFiaW5kZXhdPVwidGFiSW5kZXhcIlxuICAgIChjbGljayk9XCJmb2N1cygpXCJcbiAgICAoZm9jdXMpPVwiX2ZvY3VzQ2hhbmdlZCh0cnVlKVwiXG4gICAgKGJsdXIpPVwiX2ZvY3VzQ2hhbmdlZChmYWxzZSlcIj5cbiAgICA8ZGl2IGNsYXNzPVwidS10ZXh0LWlucHV0LXZhbHVlXCIgKm5nSWY9XCJkYXRlOyBlbHNlIGlucHV0UGxhY2Vob2xkZXJcIj57e2lucHV0Rm9ybWF0dGVyID8gaW5wdXRGb3JtYXR0ZXIoZGF0ZSkgOiBmb3JtYXR0ZWREYXRlfX08L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI2lucHV0UGxhY2Vob2xkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwidS10ZXh0LWlucHV0LXBsYWNlaG9sZGVyXCI+e3twbGFjZWhvbGRlcn19PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9idXR0b24+XG4gIDxkaXYgY2xhc3M9XCJ1LWRyb3Bkb3duLW1lbnVcIiB1RHJvcGRvd25NZW51IFtkaXJlY3Rpb25dPVwiZGlyZWN0aW9uXCI+XG4gICAgPHUtZGF0ZXBpY2tlci1jb250ZW50IFtkaXNhYmxlZF09XCIhZm9jdXNlZFwiPjwvdS1kYXRlcGlja2VyLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=