ng-devui
Version:
DevUI components based on Angular
354 lines • 65.3 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Component, ContentChild, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, TemplateRef, ViewChild } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { EN_US, I18nFormat, I18nService } from 'ng-devui/i18n';
import { DefaultDateConverter, DevConfigService, WithConfig } from 'ng-devui/utils';
import { fromEvent, Subject } from 'rxjs';
import { debounceTime, takeUntil } from 'rxjs/operators';
import { DatepickerProService } from './datepicker-pro.service';
import * as i0 from "@angular/core";
import * as i1 from "ng-devui/i18n";
import * as i2 from "./datepicker-pro.service";
import * as i3 from "ng-devui/utils";
import * as i4 from "@angular/common";
import * as i5 from "@angular/forms";
import * as i6 from "ng-devui/dropdown";
import * as i7 from "./datepicker-panel.component";
export class DatepickerProComponent {
get hasGlowStyle() {
return this.showGlowStyle;
}
;
set calenderRange(value) {
this.pickerSrv.calendarRange = value || [1970, 2099];
}
set minDate(value) {
if (!value) {
this.pickerSrv.resetMin();
return;
}
this.pickerSrv.minDate = value;
}
set maxDate(value) {
if (!value) {
this.pickerSrv.resetMax();
return;
}
this.pickerSrv.maxDate = value;
}
set markedRangeDateList(value) {
this.pickerSrv.markedRangeDateList = value;
}
;
set markedDateList(value) {
this.pickerSrv.markedDateList = value;
}
set markDateInfoTemplate(tmp) {
this.pickerSrv.markDateInfoTemplate = tmp;
}
;
get dateConfig() {
return {
dateConverter: this.datepickerConvert,
min: this.pickerSrv.minDate || new Date(this.pickerSrv.calendarRange[0] + '-01-01'),
max: this.pickerSrv.maxDate || new Date(this.pickerSrv.calendarRange[1] + '-12-31'),
format: {
date: this.format || this.i18nFormat.short,
time: this.format || this.i18nFormat.long,
month: this.format || (this.i18nLocale === EN_US ? 'MMM dd' : this.i18nFormat.ultraShort),
year: 'y',
},
};
}
get curFormat() {
if (this.mode === 'year') {
return this.dateConfig.format.year;
}
else if (this.mode === 'month') {
return this.dateConfig.format.month;
}
else {
return this.showTime ? this.dateConfig.format.time : this.dateConfig.format.date;
}
}
constructor(i18n, pickerSrv, devConfigService) {
this.i18n = i18n;
this.pickerSrv = pickerSrv;
this.devConfigService = devConfigService;
this.mode = 'date';
this.showTime = false;
this.disabled = false;
this.autoOpen = false;
this.showAnimation = true;
this.appendToBody = true;
this.allowClear = true;
this.dropdownToggle = new EventEmitter();
this.confirmEvent = new EventEmitter();
this.showGlowStyle = true;
this.dateValue = '';
this.unsubscribe$ = new Subject();
this.isOpen = false;
this.onChange = (_) => null;
this.onTouched = () => null;
this.datepickerConvert = new DefaultDateConverter();
}
ngOnInit() {
this.initSrvStatus();
this.setI18nText();
setTimeout(() => {
this.isOpen = this.autoOpen;
});
}
ngAfterViewInit() {
this.initObservable();
}
initSrvStatus() {
this.pickerSrv.showTime = this.showTime;
this.pickerSrv.isRange = false;
}
initObservable() {
this.pickerSrv.selectedDateChange.pipe(takeUntil(this.unsubscribe$)).subscribe(change => {
this.dateValue = this.formatDateToString(change.value);
this.pickerSrv.curDate = change.value;
this.onChange(change.value);
});
this.pickerSrv.selectedTimeChange.pipe(takeUntil(this.unsubscribe$)).subscribe(time => {
if (this.dateValue) {
const curTime = this.datepickerConvert.parse(this.dateValue, this.curFormat).setHours(time.hour, time.min, time.seconds);
const curDate = new Date(curTime);
this.pickerSrv.curDate = curDate;
this.dateValue = this.formatDateToString(curDate);
this.onChange(curDate);
}
else {
this.writeValue(new Date(new Date().setHours(time.hour, time.min, time.seconds)));
this.onChange(this.pickerSrv.curDate);
}
});
this.pickerSrv.closeDropdownEvent.pipe(takeUntil(this.unsubscribe$)).subscribe(isConfirm => {
this.isOpen = false;
this.dropdownToggle.emit(false);
if (isConfirm) {
this.confirmEvent.emit(this.pickerSrv.curDate);
}
});
if (!this.hostTemplate) {
fromEvent(this.datepickerInput.nativeElement, 'input').pipe(takeUntil(this.unsubscribe$), debounceTime(300)).subscribe((event) => {
if (!this.dateValue) {
return;
}
const inputDate = this.datepickerConvert.parse(this.dateValue, this.curFormat);
if (inputDate instanceof Date && inputDate.getTime() === this.pickerSrv.curDate?.getTime()) {
return;
}
if (this.validateDate(this.dateValue)) {
this.pickerSrv.curDate = inputDate;
this.pickerSrv.updateDateValue.next({
type: 'single',
value: inputDate
});
this.onChange(inputDate);
if (this.showTime) {
this.pickerSrv.updateTimeChange.next({
hour: inputDate.getHours(),
min: inputDate.getMinutes(),
seconds: inputDate.getSeconds()
});
}
}
});
fromEvent(this.datepickerInput.nativeElement, 'blur').pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
if (!this.validateDate(this.dateValue)) {
this.dateValue = this.pickerSrv.curDate ?
this.datepickerConvert.format(this.pickerSrv.curDate, this.curFormat, this.i18nLocale) :
'';
}
});
}
}
setI18nText() {
this.setI18nTextDetail(this.i18n.getI18nText());
this.i18n
.langChange()
.pipe(takeUntil(this.unsubscribe$))
.subscribe((data) => {
this.setI18nTextDetail(data);
if (this.pickerSrv.curDate) {
this.dateValue = this.formatDateToString(this.pickerSrv.curDate);
}
});
}
setI18nTextDetail(data) {
this.i18nText = data.datePickerPro;
this.i18nLocale = data.locale;
this.i18nFormat = I18nFormat.localFormat[this.i18nLocale];
}
validateDate(value) {
const valueDate = this.datepickerConvert.parse(value, this.curFormat);
const valueFormat = valueDate && !isNaN(valueDate.getTime()) &&
this.datepickerConvert.format(valueDate, this.curFormat, this.i18nLocale);
if (!valueDate || value !== valueFormat ||
(value === valueFormat && !this.pickerSrv.dateInRange(valueDate))) {
return false;
}
else {
return true;
}
}
formatDateToString(date) {
return this.datepickerConvert.format(date, this.curFormat);
}
clear(event, isHandle) {
if (event) {
event.stopPropagation();
}
if (this.disabled && isHandle) {
return;
}
this.pickerSrv.updateDateValue.next({
type: 'single',
value: null
});
this.pickerSrv.updateTimeChange.next({
hour: null,
min: null,
seconds: null
});
this.dateValue = null;
this.pickerSrv.curDate = null;
if (event) {
this.onChange(this.pickerSrv.curDate);
}
}
onToggle(isOpen) {
if (isOpen !== this.isOpen || isOpen) {
this.dropdownToggle.emit(isOpen);
}
this.isOpen = isOpen;
this.pickerSrv.toggleEvent.next(isOpen);
}
openDropdown(event) {
if (this.isOpen) {
event.stopPropagation();
}
if (this.disabled) {
return;
}
this.isOpen = true;
setTimeout(() => {
if (this.datepickerInput?.nativeElement) {
this.datepickerInput.nativeElement.focus();
}
});
}
writeValue(value) {
if (!value) {
this.clear();
return;
}
this.dateValue = this.formatDateToString(value);
this.pickerSrv.curDate = value;
this.pickerSrv.updateDateValue.next({
type: 'single',
value
});
if (this.showTime) {
this.pickerSrv.updateTimeChange.next({
hour: value.getHours(),
min: value.getMinutes(),
seconds: value.getSeconds()
});
}
}
registerOnChange(fn) {
this.onChange = fn;
}
registerOnTouched(fn) {
this.onTouched = fn;
}
ngOnDestroy() {
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerProComponent, deps: [{ token: i1.I18nService }, { token: i2.DatepickerProService }, { token: i3.DevConfigService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatepickerProComponent, selector: "d-datepicker-pro", inputs: { mode: "mode", showTime: "showTime", disabled: "disabled", autoOpen: "autoOpen", format: "format", cssClass: "cssClass", showAnimation: "showAnimation", appendToBody: "appendToBody", width: "width", placeholder: "placeholder", allowClear: "allowClear", showGlowStyle: "showGlowStyle", calenderRange: "calenderRange", minDate: "minDate", maxDate: "maxDate", markedRangeDateList: "markedRangeDateList", markedDateList: "markedDateList" }, outputs: { dropdownToggle: "dropdownToggle", confirmEvent: "confirmEvent" }, host: { properties: { "class.devui-glow-style": "this.hasGlowStyle" } }, providers: [
DatepickerProService,
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => DatepickerProComponent),
multi: true
}
], queries: [{ propertyName: "customTemplate", first: true, predicate: ["customTemplate"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footerTemplate"], descendants: true }, { propertyName: "hostTemplate", first: true, predicate: ["hostTemplate"], descendants: true }, { propertyName: "markDateInfoTemplate", first: true, predicate: ["markDateInfoTemplate"], descendants: true }], viewQueries: [{ propertyName: "datepickerInput", first: true, predicate: ["dateInput"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"devui-datepicker-pro-wrapper {{ cssClass }}\"\r\n *ngIf=\"appendToBody; else normal\"\r\n dDropDown\r\n appendToBody\r\n [disabled]=\"disabled\"\r\n [isOpen]=\"isOpen\"\r\n [trigger]=\"'manually'\"\r\n (toggleEvent)=\"onToggle($event)\"\r\n (click)=\"openDropdown($event)\"\r\n [closeScope]=\"'blank'\"\r\n [showAnimation]=\"showAnimation\"\r\n [ngStyle]=\"{ width: width || '250px' }\"\r\n>\r\n <div dDropDownToggle>\r\n <ng-template [ngTemplateOutlet]=\"hostTemplate || default\" [ngTemplateOutletContext]=\"{ value: dateValue }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"devui-datepicker-pro-dropdown-panel\" [ngStyle]=\"{ paddingBottom: !showTime && !footerTemplate ? 0 : '4px' }\" dDropDownMenu>\r\n <d-datepicker-panel\r\n [isRangeType]=\"false\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n [mode]=\"mode\"\r\n >\r\n </d-datepicker-panel>\r\n </div>\r\n</div>\r\n\r\n<ng-template #normal>\r\n <div\r\n class=\"devui-datepicker-pro-wrapper {{ cssClass }}\"\r\n dDropDown\r\n [disabled]=\"disabled\"\r\n [isOpen]=\"isOpen\"\r\n [trigger]=\"'manually'\"\r\n (toggleEvent)=\"onToggle($event)\"\r\n (click)=\"openDropdown($event)\"\r\n [closeScope]=\"'blank'\"\r\n [showAnimation]=\"showAnimation\"\r\n [ngStyle]=\"{ width: width || '250px' }\"\r\n >\r\n <div dDropDownToggle>\r\n <ng-template [ngTemplateOutlet]=\"hostTemplate || default\" [ngTemplateOutletContext]=\"{ value: dateValue }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"devui-datepicker-pro-dropdown-panel\" [ngStyle]=\"{ paddingBottom: !showTime && !footerTemplate ? 0 : '4px' }\" dDropDownMenu>\r\n <d-datepicker-panel\r\n [isRangeType]=\"false\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n [mode]=\"mode\"\r\n >\r\n </d-datepicker-panel>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #default>\r\n <div\r\n class=\"devui-single-picker devui-input-group devui-dropdown-origin\"\r\n [ngClass]=\"{\r\n 'devui-disabled': disabled,\r\n 'devui-has-value': dateValue,\r\n 'devui-allow-clear': allowClear\r\n }\"\r\n >\r\n <input\r\n #dateInput\r\n class=\"devui-input devui-form-control\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder || i18nText?.placeholder\"\r\n [(ngModel)]=\"dateValue\"\r\n autocomplete=\"off\"\r\n />\r\n <div *ngIf=\"allowClear\" class=\"devui-input-group-addon close-icon-wrapper\" (click)=\"clear($event, true)\">\r\n <div class=\"close-icon\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M8,1 C11.8659932,1 15,4.13400675 15,8 C15,11.8659932 11.8659932,15 8,15 C4.13400675,15 1,11.8659932 1,8 C1,4.13400675 4.13400675,1 8,1 Z M5.87867966,5.17157288 C5.68341751,4.97631073 5.36683502,4.97631073 5.17157288,5.17157288 C4.99800652,5.34513923 4.97872137,5.61456363 5.11371742,5.80943177 L5.17157288,5.87867966 L7.29218611,7.99929289 L5.17157288,10.1213203 C4.97631073,10.3165825 4.97631073,10.633165 5.17157288,10.8284271 C5.34513923,11.0019935 5.61456363,11.0212786 5.80943177,10.8862826 L5.87867966,10.8284271 L7.99929289,8.70639967 L10.1213203,10.8284271 C10.3165825,11.0236893 10.633165,11.0236893 10.8284271,10.8284271 C11.0019935,10.6548608 11.0212786,10.3854364 10.8862826,10.1905682 L10.8284271,10.1213203 L8.70710678,8 L10.8284271,5.87867966 C11.0236893,5.68341751 11.0236893,5.36683502 10.8284271,5.17157288 C10.6548608,4.99800652 10.3854364,4.97872137 10.1905682,5.11371742 L10.1213203,5.17157288 L8,7.29289322 L5.87867966,5.17157288 Z\"\r\n fill-rule=\"nonzero\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"date-icon-wrapper\">\r\n <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\" class=\"devui-single-picker-icon\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M5,0 L5,1 L11,1 L11,0 L12,0 L12,1 L14,1 C15.1045695,1 16,1.8954305 16,3 L16,14 C16,15.1045695 15.1045695,16 14,16 L2,16 C0.8954305,16 0,15.1045695 0,14 L0,3 C0,1.8954305 0.8954305,1 2,1 L4,1 L4,0 L5,0 Z M15,5 L1,5 L1,14 C1,14.5522847 1.44771525,15 2,15 L14,15 C14.5522847,15 15,14.5522847 15,14 L15,5 Z M6,7 C6.55228475,7 7,7.44771525 7,8 L7,10 C7,10.5522847 6.55228475,11 6,11 L4,11 C3.44771525,11 3,10.5522847 3,10 L3,8 C3,7.44771525 3.44771525,7 4,7 L6,7 Z M6,8 L4,8 L4,10 L6,10 L6,8 Z M4,2 L2,2 C1.44771525,2 1,2.44771525 1,3 L1,4 L15,4 L15,3 C15,2.44771525 14.5522847,2 14,2 L12,2 L12,3 L11,3 L11,2 L5,2 L5,3 L4,3 L4,2 Z\"\r\n fill=\"var(--devui-icon-fill-weak, #BABBC0)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".devui-datepicker-pro-wrapper{display:inline-block;background-color:var(--devui-base-bg, #ffffff)}.devui-datepicker-pro-wrapper .devui-single-picker{position:relative;box-sizing:border-box;width:100%;min-height:24px;display:flex;align-items:center}.devui-datepicker-pro-wrapper .devui-single-picker .devui-input{padding:4px 8px;width:calc(100% - 16px)}.devui-datepicker-pro-wrapper .devui-single-picker-icon{vertical-align:text-bottom;height:16px}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper{padding:0 8px;vertical-align:baseline;display:none}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper .close-icon{width:16px;height:16px;display:inline-block;line-height:12px}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper .close-icon svg{vertical-align:middle;position:relative;top:-.1em}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper .close-icon svg path{fill:var(--devui-shape-icon-fill, #c2c2c2)}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper .close-icon:hover svg path{fill:var(--devui-shape-icon-fill-active, #808080)}.devui-datepicker-pro-wrapper .devui-single-picker .date-icon-wrapper{padding:0 8px;display:block}.devui-datepicker-pro-wrapper .devui-single-picker .date-icon-wrapper path{fill:var(--devui-icon-fill-weak, #808080)}.devui-datepicker-pro-wrapper .devui-single-picker.devui-has-value.devui-allow-clear:hover:not(.devui-disabled) .close-icon-wrapper{display:block}.devui-datepicker-pro-wrapper .devui-single-picker.devui-has-value.devui-allow-clear:hover:not(.devui-disabled) .date-icon-wrapper{display:none}.devui-datepicker-pro-wrapper .devui-single-picker:not(.devui-disabled) .close-icon-wrapper{cursor:pointer}.devui-datepicker-pro-wrapper .devui-input-group>.devui-input{display:inline-block}.devui-datepicker-pro-wrapper .devui-input-group>.devui-input::-ms-clear{display:none}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.DropDownDirective, selector: "[dDropDown]", inputs: ["isOpen", "disabled", "showAnimation", "trigger", "closeScope", "closeOnMouseLeaveMenu", "autofocusToggleElement"], outputs: ["toggleEvent"], exportAs: ["d-dropdown"] }, { kind: "directive", type: i6.DropDownMenuDirective, selector: "[dDropDownMenu]", exportAs: ["d-dropdown-menu"] }, { kind: "directive", type: i6.DropDownToggleDirective, selector: "[dDropDownToggle]", inputs: ["toggleOnFocus", "autoFocus"], exportAs: ["d-dropdown-toggle"] }, { kind: "component", type: i6.DropDownAppendToBodyComponent, selector: "[dDropDown][appendToBody]", inputs: ["alignOrigin", "appendToBodyDirections", "appendToBodyScrollStrategy"], exportAs: ["d-dropdown-append-to-body"] }, { kind: "component", type: i7.DatepickerPanelComponent, selector: "d-datepicker-panel", inputs: ["isRangeType", "showTime", "showCustom", "customTemplate", "footerTemplate", "mode"] }] }); }
}
__decorate([
WithConfig(),
__metadata("design:type", Object)
], DatepickerProComponent.prototype, "showGlowStyle", void 0);
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerProComponent, decorators: [{
type: Component,
args: [{ selector: 'd-datepicker-pro', providers: [
DatepickerProService,
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => DatepickerProComponent),
multi: true
}
], preserveWhitespaces: false, template: "<div\r\n class=\"devui-datepicker-pro-wrapper {{ cssClass }}\"\r\n *ngIf=\"appendToBody; else normal\"\r\n dDropDown\r\n appendToBody\r\n [disabled]=\"disabled\"\r\n [isOpen]=\"isOpen\"\r\n [trigger]=\"'manually'\"\r\n (toggleEvent)=\"onToggle($event)\"\r\n (click)=\"openDropdown($event)\"\r\n [closeScope]=\"'blank'\"\r\n [showAnimation]=\"showAnimation\"\r\n [ngStyle]=\"{ width: width || '250px' }\"\r\n>\r\n <div dDropDownToggle>\r\n <ng-template [ngTemplateOutlet]=\"hostTemplate || default\" [ngTemplateOutletContext]=\"{ value: dateValue }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"devui-datepicker-pro-dropdown-panel\" [ngStyle]=\"{ paddingBottom: !showTime && !footerTemplate ? 0 : '4px' }\" dDropDownMenu>\r\n <d-datepicker-panel\r\n [isRangeType]=\"false\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n [mode]=\"mode\"\r\n >\r\n </d-datepicker-panel>\r\n </div>\r\n</div>\r\n\r\n<ng-template #normal>\r\n <div\r\n class=\"devui-datepicker-pro-wrapper {{ cssClass }}\"\r\n dDropDown\r\n [disabled]=\"disabled\"\r\n [isOpen]=\"isOpen\"\r\n [trigger]=\"'manually'\"\r\n (toggleEvent)=\"onToggle($event)\"\r\n (click)=\"openDropdown($event)\"\r\n [closeScope]=\"'blank'\"\r\n [showAnimation]=\"showAnimation\"\r\n [ngStyle]=\"{ width: width || '250px' }\"\r\n >\r\n <div dDropDownToggle>\r\n <ng-template [ngTemplateOutlet]=\"hostTemplate || default\" [ngTemplateOutletContext]=\"{ value: dateValue }\"></ng-template>\r\n </div>\r\n\r\n <div class=\"devui-datepicker-pro-dropdown-panel\" [ngStyle]=\"{ paddingBottom: !showTime && !footerTemplate ? 0 : '4px' }\" dDropDownMenu>\r\n <d-datepicker-panel\r\n [isRangeType]=\"false\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n [mode]=\"mode\"\r\n >\r\n </d-datepicker-panel>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #default>\r\n <div\r\n class=\"devui-single-picker devui-input-group devui-dropdown-origin\"\r\n [ngClass]=\"{\r\n 'devui-disabled': disabled,\r\n 'devui-has-value': dateValue,\r\n 'devui-allow-clear': allowClear\r\n }\"\r\n >\r\n <input\r\n #dateInput\r\n class=\"devui-input devui-form-control\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder || i18nText?.placeholder\"\r\n [(ngModel)]=\"dateValue\"\r\n autocomplete=\"off\"\r\n />\r\n <div *ngIf=\"allowClear\" class=\"devui-input-group-addon close-icon-wrapper\" (click)=\"clear($event, true)\">\r\n <div class=\"close-icon\">\r\n <svg\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M8,1 C11.8659932,1 15,4.13400675 15,8 C15,11.8659932 11.8659932,15 8,15 C4.13400675,15 1,11.8659932 1,8 C1,4.13400675 4.13400675,1 8,1 Z M5.87867966,5.17157288 C5.68341751,4.97631073 5.36683502,4.97631073 5.17157288,5.17157288 C4.99800652,5.34513923 4.97872137,5.61456363 5.11371742,5.80943177 L5.17157288,5.87867966 L7.29218611,7.99929289 L5.17157288,10.1213203 C4.97631073,10.3165825 4.97631073,10.633165 5.17157288,10.8284271 C5.34513923,11.0019935 5.61456363,11.0212786 5.80943177,10.8862826 L5.87867966,10.8284271 L7.99929289,8.70639967 L10.1213203,10.8284271 C10.3165825,11.0236893 10.633165,11.0236893 10.8284271,10.8284271 C11.0019935,10.6548608 11.0212786,10.3854364 10.8862826,10.1905682 L10.8284271,10.1213203 L8.70710678,8 L10.8284271,5.87867966 C11.0236893,5.68341751 11.0236893,5.36683502 10.8284271,5.17157288 C10.6548608,4.99800652 10.3854364,4.97872137 10.1905682,5.11371742 L10.1213203,5.17157288 L8,7.29289322 L5.87867966,5.17157288 Z\"\r\n fill-rule=\"nonzero\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"date-icon-wrapper\">\r\n <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\" class=\"devui-single-picker-icon\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <path\r\n d=\"M5,0 L5,1 L11,1 L11,0 L12,0 L12,1 L14,1 C15.1045695,1 16,1.8954305 16,3 L16,14 C16,15.1045695 15.1045695,16 14,16 L2,16 C0.8954305,16 0,15.1045695 0,14 L0,3 C0,1.8954305 0.8954305,1 2,1 L4,1 L4,0 L5,0 Z M15,5 L1,5 L1,14 C1,14.5522847 1.44771525,15 2,15 L14,15 C14.5522847,15 15,14.5522847 15,14 L15,5 Z M6,7 C6.55228475,7 7,7.44771525 7,8 L7,10 C7,10.5522847 6.55228475,11 6,11 L4,11 C3.44771525,11 3,10.5522847 3,10 L3,8 C3,7.44771525 3.44771525,7 4,7 L6,7 Z M6,8 L4,8 L4,10 L6,10 L6,8 Z M4,2 L2,2 C1.44771525,2 1,2.44771525 1,3 L1,4 L15,4 L15,3 C15,2.44771525 14.5522847,2 14,2 L12,2 L12,3 L11,3 L11,2 L5,2 L5,3 L4,3 L4,2 Z\"\r\n fill=\"var(--devui-icon-fill-weak, #BABBC0)\"\r\n ></path>\r\n </g>\r\n </svg>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".devui-datepicker-pro-wrapper{display:inline-block;background-color:var(--devui-base-bg, #ffffff)}.devui-datepicker-pro-wrapper .devui-single-picker{position:relative;box-sizing:border-box;width:100%;min-height:24px;display:flex;align-items:center}.devui-datepicker-pro-wrapper .devui-single-picker .devui-input{padding:4px 8px;width:calc(100% - 16px)}.devui-datepicker-pro-wrapper .devui-single-picker-icon{vertical-align:text-bottom;height:16px}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper{padding:0 8px;vertical-align:baseline;display:none}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper .close-icon{width:16px;height:16px;display:inline-block;line-height:12px}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper .close-icon svg{vertical-align:middle;position:relative;top:-.1em}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper .close-icon svg path{fill:var(--devui-shape-icon-fill, #c2c2c2)}.devui-datepicker-pro-wrapper .devui-single-picker .close-icon-wrapper .close-icon:hover svg path{fill:var(--devui-shape-icon-fill-active, #808080)}.devui-datepicker-pro-wrapper .devui-single-picker .date-icon-wrapper{padding:0 8px;display:block}.devui-datepicker-pro-wrapper .devui-single-picker .date-icon-wrapper path{fill:var(--devui-icon-fill-weak, #808080)}.devui-datepicker-pro-wrapper .devui-single-picker.devui-has-value.devui-allow-clear:hover:not(.devui-disabled) .close-icon-wrapper{display:block}.devui-datepicker-pro-wrapper .devui-single-picker.devui-has-value.devui-allow-clear:hover:not(.devui-disabled) .date-icon-wrapper{display:none}.devui-datepicker-pro-wrapper .devui-single-picker:not(.devui-disabled) .close-icon-wrapper{cursor:pointer}.devui-datepicker-pro-wrapper .devui-input-group>.devui-input{display:inline-block}.devui-datepicker-pro-wrapper .devui-input-group>.devui-input::-ms-clear{display:none}\n"] }]
}], ctorParameters: () => [{ type: i1.I18nService }, { type: i2.DatepickerProService }, { type: i3.DevConfigService }], propDecorators: { mode: [{
type: Input
}], showTime: [{
type: Input
}], disabled: [{
type: Input
}], autoOpen: [{
type: Input
}], format: [{
type: Input
}], cssClass: [{
type: Input
}], showAnimation: [{
type: Input
}], appendToBody: [{
type: Input
}], width: [{
type: Input
}], placeholder: [{
type: Input
}], allowClear: [{
type: Input
}], dropdownToggle: [{
type: Output
}], confirmEvent: [{
type: Output
}], showGlowStyle: [{
type: Input
}], hasGlowStyle: [{
type: HostBinding,
args: ['class.devui-glow-style']
}], calenderRange: [{
type: Input
}], minDate: [{
type: Input
}], maxDate: [{
type: Input
}], markedRangeDateList: [{
type: Input
}], markedDateList: [{
type: Input
}], customTemplate: [{
type: ContentChild,
args: ['customTemplate']
}], footerTemplate: [{
type: ContentChild,
args: ['footerTemplate']
}], hostTemplate: [{
type: ContentChild,
args: ['hostTemplate']
}], markDateInfoTemplate: [{
type: ContentChild,
args: ['markDateInfoTemplate']
}], datepickerInput: [{
type: ViewChild,
args: ['dateInput']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1wcm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvZGF0ZXBpY2tlci1wcm8vZGF0ZXBpY2tlci1wcm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvZGF0ZXBpY2tlci1wcm8vZGF0ZXBpY2tlci1wcm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBR0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFpQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7OztBQWlCaEUsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQyxJQUEyQyxZQUFZO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBQUEsQ0FBQztJQUNGLElBQWEsYUFBYSxDQUFFLEtBQUs7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxJQUFh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LHVCQUF1QixDQUFDOzRCQUNyRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRix1QkFDb0IsS0FBSztrSkFHakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDZ0IsYUFBYTtzQkFBbkMsS0FBSztnQkFDcUMsWUFBWTtzQkFBdEQsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBR3hCLGFBQWE7c0JBQXpCLEtBQUs7Z0JBR08sT0FBTztzQkFBbkIsS0FBSztnQkFPTyxPQUFPO3NCQUFuQixLQUFLO2dCQU9PLG1CQUFtQjtzQkFBL0IsS0FBSztnQkFHTyxjQUFjO3NCQUExQixLQUFLO2dCQUcwQixjQUFjO3NCQUE3QyxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDRSxjQUFjO3NCQUE3QyxZQUFZO3VCQUFDLGdCQUFnQjtnQkFDQSxZQUFZO3NCQUF6QyxZQUFZO3VCQUFDLGNBQWM7Z0JBQ2Msb0JBQW9CO3NCQUE3RCxZQUFZO3VCQUFDLHNCQUFzQjtnQkFHWixlQUFlO3NCQUF0QyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFTl9VUywgSTE4bkZvcm1hdCwgSTE4bkludGVyZmFjZSwgSTE4blNlcnZpY2UgfSBmcm9tICduZy1kZXZ1aS9pMThuJztcbmltcG9ydCB7IERlZmF1bHREYXRlQ29udmVydGVyLCBEZXZDb25maWdTZXJ2aWNlLCBXaXRoQ29uZmlnIH0gZnJvbSAnbmctZGV2dWkvdXRpbHMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGVwaWNrZXJQcm9TZXJ2aWNlIH0gZnJvbSAnLi9kYXRlcGlja2VyLXByby5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVDb25maWcgfSBmcm9tICcuL2xpYi9kYXRlcGlja2VyLXByby50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZC1kYXRlcGlja2VyLXBybycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLXByby5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItcHJvLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIERhdGVwaWNrZXJQcm9TZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXBpY2tlclByb0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVwaWNrZXJQcm9Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBtb2RlOiAneWVhcicgfCAnbW9udGgnIHwgJ2RhdGUnID0gJ2RhdGUnO1xuICBASW5wdXQoKSBzaG93VGltZSA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXRvT3BlbiA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtYXQ6IHN0cmluZztcbiAgQElucHV0KCkgY3NzQ2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgc2hvd0FuaW1hdGlvbiA9IHRydWU7XG4gIEBJbnB1dCgpIGFwcGVuZFRvQm9keSA9IHRydWU7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFsbG93Q2xlYXIgPSB0cnVlO1xuICBAT3V0cHV0KCkgZHJvcGRvd25Ub2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBjb25maXJtRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG4gIEBJbnB1dCgpIEBXaXRoQ29uZmlnKCkgc2hvd0dsb3dTdHlsZSA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGV2dWktZ2xvdy1zdHlsZScpIGdldCBoYXNHbG93U3R5bGUgKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dHbG93U3R5bGU7XG4gIH07XG4gIEBJbnB1dCgpIHNldCBjYWxlbmRlclJhbmdlICh2YWx1ZSkge1xuICAgIHRoaXMucGlja2VyU3J2LmNhbGVuZGFyUmFuZ2UgPSB2YWx1ZSB8fCBbMTk3MCwgMjA5OV07XG4gIH1cbiAgQElucHV0KCkgc2V0IG1pbkRhdGUodmFsdWU6IERhdGUpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLnBpY2tlclNydi5yZXNldE1pbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBpY2tlclNydi5taW5EYXRlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2V0IG1heERhdGUodmFsdWU6IERhdGUpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLnBpY2tlclNydi5yZXNldE1heCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBpY2tlclNydi5tYXhEYXRlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgc2V0IG1hcmtlZFJhbmdlRGF0ZUxpc3QodmFsdWU6IERhdGVbXVtdKSB7XG4gICAgdGhpcy5waWNrZXJTcnYubWFya2VkUmFuZ2VEYXRlTGlzdCA9IHZhbHVlO1xuICB9O1xuICBASW5wdXQoKSBzZXQgbWFya2VkRGF0ZUxpc3QodmFsdWU6IERhdGVbXSkge1xuICAgIHRoaXMucGlja2VyU3J2Lm1hcmtlZERhdGVMaXN0ID0gdmFsdWU7XG4gIH1cbiAgQENvbnRlbnRDaGlsZCgnY3VzdG9tVGVtcGxhdGUnKSBjdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZCgnZm9vdGVyVGVtcGxhdGUnKSBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZCgnaG9zdFRlbXBsYXRlJykgaG9zdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAQ29udGVudENoaWxkKCdtYXJrRGF0ZUluZm9UZW1wbGF0ZScpIHNldCBtYXJrRGF0ZUluZm9UZW1wbGF0ZSh0bXA6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLnBpY2tlclNydi5tYXJrRGF0ZUluZm9UZW1wbGF0ZSA9IHRtcDtcbiAgfTtcbiAgQFZpZXdDaGlsZCgnZGF0ZUlucHV0JykgZGF0ZXBpY2tlcklucHV0OiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgaTE4bkxvY2FsZTogSTE4bkludGVyZmFjZVsnbG9jYWxlJ107XG5cbiAgaTE4blRleHQ7XG4gIGkxOG5Gb3JtYXQ7XG4gIGRhdGVWYWx1ZSA9ICcnO1xuICBkYXRlcGlja2VyQ29udmVydDogRGVmYXVsdERhdGVDb252ZXJ0ZXI7XG4gIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGlzT3BlbiA9IGZhbHNlO1xuXG4gIGdldCBkYXRlQ29uZmlnKCk6IERhdGVDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRlQ29udmVydGVyOiB0aGlzLmRhdGVwaWNrZXJDb252ZXJ0LFxuICAgICAgbWluOiB0aGlzLnBpY2tlclNydi5taW5EYXRlIHx8IG5ldyBEYXRlKHRoaXMucGlja2VyU3J2LmNhbGVuZGFyUmFuZ2VbMF0gKyAnLTAxLTAxJyksXG4gICAgICBtYXg6IHRoaXMucGlja2VyU3J2Lm1heERhdGUgfHwgbmV3IERhdGUodGhpcy5waWNrZXJTcnYuY2FsZW5kYXJSYW5nZVsxXSArICctMTItMzEnKSxcbiAgICAgIGZvcm1hdDoge1xuICAgICAgICBkYXRlOiB0aGlzLmZvcm1hdCB8fCB0aGlzLmkxOG5Gb3JtYXQuc2hvcnQsXG4gICAgICAgIHRpbWU6IHRoaXMuZm9ybWF0IHx8IHRoaXMuaTE4bkZvcm1hdC5sb25nLFxuICAgICAgICBtb250aDogdGhpcy5mb3JtYXQgfHwgKHRoaXMuaTE4bkxvY2FsZSA9PT0gRU5fVVMgPyAnTU1NIGRkJyA6IHRoaXMuaTE4bkZvcm1hdC51bHRyYVNob3J0KSxcbiAgICAgICAgeWVhcjogJ3knLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGN1ckZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICd5ZWFyJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUNvbmZpZy5mb3JtYXQueWVhcjtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ21vbnRoJykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZUNvbmZpZy5mb3JtYXQubW9udGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dUaW1lID8gdGhpcy5kYXRlQ29uZmlnLmZvcm1hdC50aW1lIDogdGhpcy5kYXRlQ29uZmlnLmZvc