ng-devui
Version:
DevUI components based on Angular
354 lines • 60.5 kB
JavaScript
import { Component, ContentChild, ElementRef, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { I18nFormat, I18nService } from 'ng-devui/i18n';
import { DefaultDateConverter } from 'ng-devui/utils';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { DatepickerProService } from './datepicker-pro.service';
import * as i0 from "@angular/core";
import * as i1 from "./datepicker-pro.service";
import * as i2 from "ng-devui/i18n";
import * as i3 from "@angular/common";
import * as i4 from "@angular/forms";
import * as i5 from "./datepicker-panel.component";
export class DatepickerProCalendarComponent {
set activeRangeType(type) {
this.pickerSrv.currentActiveInput = type;
this.focusChange(type);
this.pickerSrv.activeInputChange.next(type);
}
get curActiveDate() {
if (this.pickerSrv.currentActiveInput === 'start') {
return this.pickerSrv.curRangeDate[0] || this.pickerSrv.curRangeDate[1] || new Date();
}
else {
return this.pickerSrv.curRangeDate[1] || this.pickerSrv.curRangeDate[0] || new Date();
}
}
set currentActiveInput(value) {
this.pickerSrv.currentActiveInput = value;
}
get currentActiveInput() {
return this.pickerSrv.currentActiveInput;
}
get dateValue() {
return this._dateValue;
}
set dateValue(value) {
this._dateValue = value;
this.getStrWidth();
}
get curFormat() {
if (this.mode === 'year') {
return 'y';
}
else if (this.mode === 'month') {
return this.i18nFormat.ultraShort;
}
else {
return this.showTime ? this.i18nFormat.long : this.i18nFormat.short;
}
}
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;
}
;
constructor(pickerSrv, i18n) {
this.pickerSrv = pickerSrv;
this.i18n = i18n;
this.isRangeType = false;
this.showTime = false;
this.mode = 'date';
this.startIndexOfWeek = 0;
this.splitter = '-';
this.showRangeHeader = true;
this.allowClear = true;
this.confirmEvent = new EventEmitter();
this.cancelEvent = new EventEmitter();
this.strWidth = 0;
this._dateValue = [];
this.unsubscribe$ = new Subject();
this.onChange = (_) => null;
this.onTouched = () => null;
this.datepickerConvert = new DefaultDateConverter();
}
ngOnInit() {
this.setI18nText();
this.initSrvStatus();
this.initObservable();
}
ngAfterViewInit() {
this.updateCurPosition();
}
setI18nText() {
this.setI18nTextDetail(this.i18n.getI18nText());
this.i18n
.langChange()
.pipe(takeUntil(this.unsubscribe$))
.subscribe((data) => this.setI18nTextDetail(data));
}
setI18nTextDetail(data) {
this.i18nText = data.datePickerPro;
this.i18nLocale = data.locale;
this.i18nFormat = I18nFormat.localFormat[this.i18nLocale];
}
updateCurPosition() {
this.pickerSrv.toggleEvent.next(true);
}
clear(event) {
if (event) {
event.stopPropagation();
}
this.pickerSrv.updateDateValue.next({
type: this.isRangeType ? 'range' : 'single',
value: this.isRangeType ? [] : null
});
this.pickerSrv.updateTimeChange.next({
hour: null,
min: null,
seconds: null
});
if (this.isRangeType) {
this.dateValue = [];
this.pickerSrv.curRangeDate = [];
this.currentActiveInput = 'start';
if (event) {
this.onChange(this.pickerSrv.curRangeDate);
}
}
else {
this.pickerSrv.curDate = null;
if (event) {
this.onChange(this.pickerSrv.curDate);
}
}
}
initSrvStatus() {
this.pickerSrv.showTime = this.showTime;
this.pickerSrv.isRange = this.isRangeType;
this.pickerSrv.startIndexOfWeek = this.startIndexOfWeek;
}
formatDateToString(date) {
if (!date) {
return '';
}
return this.datepickerConvert.format(date, this.curFormat);
}
initObservable() {
this.pickerSrv.selectedDateChange.pipe(takeUntil(this.unsubscribe$)).subscribe(change => {
if (this.isRangeType) {
this.pickerSrv.curRangeDate = change.value;
this.dateValue = change.value.map(d => this.formatDateToString(d));
this.onChange(this.pickerSrv.curRangeDate);
}
else {
this.pickerSrv.curDate = change.value;
this.onChange(change.value);
}
});
this.pickerSrv.selectedTimeChange.pipe(takeUntil(this.unsubscribe$)).subscribe(time => {
if (this.isRangeType) {
const curTime = new Date(this.curActiveDate.getTime()).setHours(time.hour, time.min, time.seconds);
const curDate = new Date(curTime);
if (time.activeInput === 'start') {
this.pickerSrv.curRangeDate[0] = curDate;
if (this.isSameDateAndTimeWrong()) {
this.pickerSrv.curRangeDate[1] = curDate;
this.dateValue[1] = this.formatDateToString(curDate);
}
this.dateValue = [this.formatDateToString(curDate), this.dateValue[1]];
}
else {
this.pickerSrv.curRangeDate[1] = curDate;
if (this.isSameDateAndTimeWrong()) {
this.pickerSrv.curRangeDate[0] = curDate;
this.dateValue[0] = this.formatDateToString(curDate);
}
this.dateValue = [this.dateValue[0], this.formatDateToString(curDate)];
}
this.onChange(this.pickerSrv.curRangeDate);
}
else {
const curDate = new Date((this.pickerSrv.curDate || new Date()).setHours(time.hour, time.min, time.seconds));
this.pickerSrv.curDate = curDate;
this.onChange(curDate);
}
});
this.pickerSrv.closeDropdownEvent.pipe(takeUntil(this.unsubscribe$)).subscribe(isConfirm => {
if (isConfirm) {
this.confirmEvent.emit(this.pickerSrv.curDate || this.pickerSrv.curRangeDate);
}
else {
this.cancelEvent.emit();
}
});
}
focusChange(type) {
this.currentActiveInput = type;
this.pickerSrv.activeInputChange.next(type);
if (type === 'start') {
setTimeout(() => {
if (this.datepickerInputStart?.nativeElement) {
this.datepickerInputStart.nativeElement.focus();
}
});
}
else {
setTimeout(() => {
if (this.datepickerInputEnd?.nativeElement) {
this.datepickerInputEnd.nativeElement.focus();
}
});
}
}
isSameDateAndTimeWrong() {
if (this.pickerSrv.curRangeDate[0]?.toDateString() === this.pickerSrv.curRangeDate[1]?.toDateString()) {
return this.pickerSrv.curRangeDate[0].getTime() > this.pickerSrv.curRangeDate[1].getTime();
}
return false;
}
writeValue(value) {
if (this.isRangeType) {
this.writeRangeValue(value);
}
else {
this.writeSingleValue(value);
}
}
writeRangeValue(value) {
if (!value || !value.length) {
this.clear();
return;
}
this.dateValue = value.map(d => {
return d ? this.datepickerConvert.format(d, this.curFormat) : '';
});
this.pickerSrv.curRangeDate = value;
this.pickerSrv.updateDateValue.next({
type: 'range',
value
});
}
writeSingleValue(value) {
if (!value) {
this.clear();
return;
}
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();
}
getStrWidth() {
let str = this.pickerSrv.currentActiveInput === 'start' ? this.dateValue[0] : this.dateValue[1];
if (!str || !str.length) {
str = this.pickerSrv.currentActiveInput === 'start' ? this.i18nText.startPlaceholder : this.i18nText.endPlaceholder;
}
this.strWidth = this.pickerSrv.mearsureStrWidth(str);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerProCalendarComponent, deps: [{ token: i1.DatepickerProService }, { token: i2.I18nService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatepickerProCalendarComponent, selector: "d-datepicker-calendar", inputs: { activeRangeType: "activeRangeType", isRangeType: "isRangeType", showTime: "showTime", mode: "mode", startIndexOfWeek: "startIndexOfWeek", splitter: "splitter", showRangeHeader: "showRangeHeader", placeholder: "placeholder", allowClear: "allowClear", minDate: "minDate", maxDate: "maxDate", markedRangeDateList: "markedRangeDateList", markedDateList: "markedDateList" }, outputs: { confirmEvent: "confirmEvent", cancelEvent: "cancelEvent" }, providers: [
DatepickerProService,
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => DatepickerProCalendarComponent),
multi: true
}
], queries: [{ propertyName: "customTemplate", first: true, predicate: ["customTemplate"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footerTemplate"], descendants: true }, { propertyName: "markDateInfoTemplate", first: true, predicate: ["markDateInfoTemplate"], descendants: true }], viewQueries: [{ propertyName: "datepickerInputStart", first: true, predicate: ["dateInputStart"], descendants: true }, { propertyName: "datepickerInputEnd", first: true, predicate: ["dateInputEnd"], descendants: true }], ngImport: i0, template: "<div class=\"devui-calendar-header\" *ngIf=\"showRangeHeader && isRangeType\" [ngStyle]=\"{ width: showTime ? 'auto' : '330px' }\">\r\n <div\r\n class=\"devui-range-picker devui-input-group devui-dropdown-origin\"\r\n [ngClass]=\"{\r\n 'devui-has-value': dateValue[0] || dateValue[1]\r\n }\"\r\n >\r\n <i class=\"devui-range-picker-icon\">\r\n <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\">\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 </i>\r\n <input\r\n #dateInputStart\r\n class=\"devui-input devui-form-control devui-date-start\"\r\n [ngClass]=\"{ 'devui-active-input': currentActiveInput === 'start' }\"\r\n [placeholder]=\"(placeholder && placeholder[0]) || i18nText.startPlaceholder\"\r\n [(ngModel)]=\"dateValue[0]\"\r\n (click)=\"focusChange('start')\"\r\n autocomplete=\"off\"\r\n />\r\n <span> {{ splitter }} </span>\r\n <input\r\n #dateInputEnd\r\n class=\"devui-input devui-form-control devui-date-end\"\r\n [ngClass]=\"{ 'devui-active-input': currentActiveInput === 'end' }\"\r\n [placeholder]=\"(placeholder && placeholder[1]) || i18nText.endPlaceholder\"\r\n [(ngModel)]=\"dateValue[1]\"\r\n (click)=\"focusChange('end')\"\r\n autocomplete=\"off\"\r\n />\r\n <div\r\n class=\"devui-date-input-active-bar\"\r\n [style.width.px]=\"strWidth\"\r\n [ngClass]=\"{\r\n 'devui-start-side': currentActiveInput === 'start',\r\n 'devui-end-side': currentActiveInput === 'end'\r\n }\"\r\n ></div>\r\n <div *ngIf=\"allowClear\" class=\"devui-input-group-addon close-icon-wrapper\" (click)=\"clear($event)\">\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>\r\n</div>\r\n<d-datepicker-panel\r\n [isRangeType]=\"isRangeType\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n></d-datepicker-panel>\r\n", styles: [":host{display:inline-block}.devui-calendar-header{padding:8px 16px;border-bottom:1px solid var(--devui-dividing-line, #f0f0f0)}.devui-range-picker{padding:0 8px;position:relative;box-sizing:border-box;width:100%;min-height:24px}.devui-range-picker .devui-input{height:26px;padding:4px 8px;width:calc(50% - 18px)}.devui-range-picker .devui-input.devui-active-input{color:var(--devui-brand, #0a59f7)}.devui-range-picker .devui-date-input-active-bar{display:block;max-width:calc(50% - 48px);height:1px;background-color:var(--devui-brand-foil, #f2f2f3);position:absolute;bottom:0}.devui-range-picker .devui-date-input-active-bar.devui-start-side{left:35px}.devui-range-picker .devui-date-input-active-bar.devui-end-side{left:calc(50% + 20px)}.devui-range-picker-icon{vertical-align:bottom}.devui-range-picker .close-icon-wrapper{padding:0 8px;visibility:hidden;position:absolute;right:0;top:0;line-height:25px}.devui-range-picker .close-icon-wrapper .close-icon{width:16px;height:16px;display:inline-block;line-height:16px}.devui-range-picker .close-icon-wrapper .close-icon svg{vertical-align:middle;position:relative;top:-.1em}.devui-range-picker .close-icon-wrapper .close-icon svg path{fill:var(--devui-shape-icon-fill, #c2c2c2)}.devui-range-picker .close-icon-wrapper .close-icon:hover svg path{fill:var(--devui-shape-icon-fill-active, #808080)}.devui-range-picker.devui-has-value:hover .close-icon-wrapper{visibility:visible}.devui-range-picker:not(.devui-disabled) .close-icon-wrapper{cursor:pointer}.devui-input-group>.devui-input{display:inline-block}.devui-input-group>.devui-input::-ms-clear{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.DatepickerPanelComponent, selector: "d-datepicker-panel", inputs: ["isRangeType", "showTime", "showCustom", "customTemplate", "footerTemplate", "mode"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatepickerProCalendarComponent, decorators: [{
type: Component,
args: [{ selector: 'd-datepicker-calendar', providers: [
DatepickerProService,
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => DatepickerProCalendarComponent),
multi: true
}
], preserveWhitespaces: false, template: "<div class=\"devui-calendar-header\" *ngIf=\"showRangeHeader && isRangeType\" [ngStyle]=\"{ width: showTime ? 'auto' : '330px' }\">\r\n <div\r\n class=\"devui-range-picker devui-input-group devui-dropdown-origin\"\r\n [ngClass]=\"{\r\n 'devui-has-value': dateValue[0] || dateValue[1]\r\n }\"\r\n >\r\n <i class=\"devui-range-picker-icon\">\r\n <svg width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\" version=\"1.1\">\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 </i>\r\n <input\r\n #dateInputStart\r\n class=\"devui-input devui-form-control devui-date-start\"\r\n [ngClass]=\"{ 'devui-active-input': currentActiveInput === 'start' }\"\r\n [placeholder]=\"(placeholder && placeholder[0]) || i18nText.startPlaceholder\"\r\n [(ngModel)]=\"dateValue[0]\"\r\n (click)=\"focusChange('start')\"\r\n autocomplete=\"off\"\r\n />\r\n <span> {{ splitter }} </span>\r\n <input\r\n #dateInputEnd\r\n class=\"devui-input devui-form-control devui-date-end\"\r\n [ngClass]=\"{ 'devui-active-input': currentActiveInput === 'end' }\"\r\n [placeholder]=\"(placeholder && placeholder[1]) || i18nText.endPlaceholder\"\r\n [(ngModel)]=\"dateValue[1]\"\r\n (click)=\"focusChange('end')\"\r\n autocomplete=\"off\"\r\n />\r\n <div\r\n class=\"devui-date-input-active-bar\"\r\n [style.width.px]=\"strWidth\"\r\n [ngClass]=\"{\r\n 'devui-start-side': currentActiveInput === 'start',\r\n 'devui-end-side': currentActiveInput === 'end'\r\n }\"\r\n ></div>\r\n <div *ngIf=\"allowClear\" class=\"devui-input-group-addon close-icon-wrapper\" (click)=\"clear($event)\">\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>\r\n</div>\r\n<d-datepicker-panel\r\n [isRangeType]=\"isRangeType\"\r\n [showTime]=\"showTime\"\r\n [customTemplate]=\"customTemplate\"\r\n [footerTemplate]=\"footerTemplate\"\r\n></d-datepicker-panel>\r\n", styles: [":host{display:inline-block}.devui-calendar-header{padding:8px 16px;border-bottom:1px solid var(--devui-dividing-line, #f0f0f0)}.devui-range-picker{padding:0 8px;position:relative;box-sizing:border-box;width:100%;min-height:24px}.devui-range-picker .devui-input{height:26px;padding:4px 8px;width:calc(50% - 18px)}.devui-range-picker .devui-input.devui-active-input{color:var(--devui-brand, #0a59f7)}.devui-range-picker .devui-date-input-active-bar{display:block;max-width:calc(50% - 48px);height:1px;background-color:var(--devui-brand-foil, #f2f2f3);position:absolute;bottom:0}.devui-range-picker .devui-date-input-active-bar.devui-start-side{left:35px}.devui-range-picker .devui-date-input-active-bar.devui-end-side{left:calc(50% + 20px)}.devui-range-picker-icon{vertical-align:bottom}.devui-range-picker .close-icon-wrapper{padding:0 8px;visibility:hidden;position:absolute;right:0;top:0;line-height:25px}.devui-range-picker .close-icon-wrapper .close-icon{width:16px;height:16px;display:inline-block;line-height:16px}.devui-range-picker .close-icon-wrapper .close-icon svg{vertical-align:middle;position:relative;top:-.1em}.devui-range-picker .close-icon-wrapper .close-icon svg path{fill:var(--devui-shape-icon-fill, #c2c2c2)}.devui-range-picker .close-icon-wrapper .close-icon:hover svg path{fill:var(--devui-shape-icon-fill-active, #808080)}.devui-range-picker.devui-has-value:hover .close-icon-wrapper{visibility:visible}.devui-range-picker:not(.devui-disabled) .close-icon-wrapper{cursor:pointer}.devui-input-group>.devui-input{display:inline-block}.devui-input-group>.devui-input::-ms-clear{display:none}\n"] }]
}], ctorParameters: () => [{ type: i1.DatepickerProService }, { type: i2.I18nService }], propDecorators: { activeRangeType: [{
type: Input
}], isRangeType: [{
type: Input
}], showTime: [{
type: Input
}], mode: [{
type: Input
}], startIndexOfWeek: [{
type: Input
}], splitter: [{
type: Input
}], showRangeHeader: [{
type: Input
}], placeholder: [{
type: Input
}], allowClear: [{
type: Input
}], minDate: [{
type: Input
}], maxDate: [{
type: Input
}], markedRangeDateList: [{
type: Input
}], markedDateList: [{
type: Input
}], confirmEvent: [{
type: Output
}], cancelEvent: [{
type: Output
}], customTemplate: [{
type: ContentChild,
args: ['customTemplate']
}], footerTemplate: [{
type: ContentChild,
args: ['footerTemplate']
}], markDateInfoTemplate: [{
type: ContentChild,
args: ['markDateInfoTemplate']
}], datepickerInputStart: [{
type: ViewChild,
args: ['dateInputStart']
}], datepickerInputEnd: [{
type: ViewChild,
args: ['dateInputEnd']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1wcm8tY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2dWkvZGF0ZXBpY2tlci1wcm8vZGF0ZXBpY2tlci1wcm8tY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2dWkvZGF0ZXBpY2tlci1wcm8vZGF0ZXBpY2tlci1wcm8tY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUdMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQWdCaEUsTUFBTSxPQUFPLDhCQUE4QjtJQUN6QyxJQUFhLGVBQWUsQ0FBQyxJQUFxQjtRQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixJQUFJLElBQUksQ0FBQyxTQUFT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LE1BQU07Z0JBRXlCLGNBQWM7c0JBQTdDLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQUNFLGNBQWM7c0JBQTdDLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQUNZLG9CQUFvQjtzQkFBN0QsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBSVAsb0JBQW9CO3NCQUFoRCxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDQSxrQkFBa0I7c0JBQTVDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJMThuRm9ybWF0LCBJMThuSW50ZXJmYWNlLCBJMThuU2VydmljZSB9IGZyb20gJ25nLWRldnVpL2kxOG4nO1xuaW1wb3J0IHsgRGVmYXVsdERhdGVDb252ZXJ0ZXIgfSBmcm9tICduZy1kZXZ1aS91dGlscyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEYXRlcGlja2VyUHJvU2VydmljZSB9IGZyb20gJy4vZGF0ZXBpY2tlci1wcm8uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2QtZGF0ZXBpY2tlci1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlcGlja2VyLXByby1jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGVwaWNrZXItcHJvLWNhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIERhdGVwaWNrZXJQcm9TZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXBpY2tlclByb0NhbGVuZGFyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlclByb0NhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzZXQgYWN0aXZlUmFuZ2VUeXBlKHR5cGU6ICdzdGFydCcgfCAnZW5kJykge1xuICAgIHRoaXMucGlja2VyU3J2LmN1cnJlbnRBY3RpdmVJbnB1dCA9IHR5cGU7XG4gICAgdGhpcy5mb2N1c0NoYW5nZSh0eXBlKTtcbiAgICB0aGlzLnBpY2tlclNydi5hY3RpdmVJbnB1dENoYW5nZS5uZXh0KHR5cGUpO1xuICB9XG5cbiAgZ2V0IGN1ckFjdGl2ZURhdGUoKTogRGF0ZSB7XG4gICAgaWYgKHRoaXMucGlja2VyU3J2LmN1cnJlbnRBY3RpdmVJbnB1dCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgcmV0dXJuIHRoaXMucGlja2VyU3J2LmN1clJhbmdlRGF0ZVswXSB8fCB0aGlzLnBpY2tlclNydi5jdXJSYW5nZURhdGVbMV0gfHwgbmV3IERhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucGlja2VyU3J2LmN1clJhbmdlRGF0ZVsxXSB8fCB0aGlzLnBpY2tlclNydi5jdXJSYW5nZURhdGVbMF0gfHwgbmV3IERhdGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXQgY3VycmVudEFjdGl2ZUlucHV0KHZhbHVlOiAnc3RhcnQnIHwgJ2VuZCcpIHtcbiAgICB0aGlzLnBpY2tlclNydi5jdXJyZW50QWN0aXZlSW5wdXQgPSB2YWx1ZTtcbiAgfVxuICBnZXQgY3VycmVudEFjdGl2ZUlucHV0KCk6ICdzdGFydCcgfCAnZW5kJyB7XG4gICAgcmV0dXJuIHRoaXMucGlja2VyU3J2LmN1cnJlbnRBY3RpdmVJbnB1dDtcbiAgfVxuXG4gIGdldCBkYXRlVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVWYWx1ZTtcbiAgfVxuXG4gIHNldCBkYXRlVmFsdWUodmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5fZGF0ZVZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5nZXRTdHJXaWR0aCgpO1xuICB9XG5cbiAgZ2V0IGN1ckZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICd5ZWFyJykge1xuICAgICAgcmV0dXJuICd5JztcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PT0gJ21vbnRoJykge1xuICAgICAgcmV0dXJuIHRoaXMuaTE4bkZvcm1hdC51bHRyYVNob3J0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93VGltZSA/IHRoaXMuaTE4bkZvcm1hdC5sb25nIDogdGhpcy5pMThuRm9ybWF0LnNob3J0O1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpIGlzUmFuZ2VUeXBlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dUaW1lID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1vZGU6ICd5ZWFyJyB8ICdtb250aCcgfCAnZGF0ZScgfCAnd2VlaycgPSAnZGF0ZSc7XG4gIEBJbnB1dCgpIHN0YXJ0SW5kZXhPZldlZWsgPSAwO1xuICBASW5wdXQoKSBzcGxpdHRlciA9ICctJztcbiAgQElucHV0KCkgc2hvd1JhbmdlSGVhZGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBhbGxvd0NsZWFyID0gdHJ1ZTtcblxuICBASW5wdXQoKSBzZXQgbWluRGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMucGlja2VyU3J2LnJlc2V0TWluKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGlja2VyU3J2Lm1pbkRhdGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBzZXQgbWF4RGF0ZSh2YWx1ZTogRGF0ZSkge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMucGlja2VyU3J2LnJlc2V0TWF4KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGlja2VyU3J2Lm1heERhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBtYXJrZWRSYW5nZURhdGVMaXN0KHZhbHVlOiBEYXRlW11bXSkge1xuICAgIHRoaXMucGlja2VyU3J2Lm1hcmtlZFJhbmdlRGF0ZUxpc3QgPSB2YWx1ZTtcbiAgfTtcbiAgQElucHV0KCkgc2V0IG1hcmtlZERhdGVMaXN0KHZhbHVlOiBEYXRlW10pIHtcbiAgICB0aGlzLnBpY2tlclNydi5tYXJrZWREYXRlTGlzdCA9IHZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIGNvbmZpcm1FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZSB8IERhdGVbXT4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbVRlbXBsYXRlJykgY3VzdG9tVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoJ2Zvb3RlclRlbXBsYXRlJykgZm9vdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBDb250ZW50Q2hpbGQoJ21hcmtEYXRlSW5mb1RlbXBsYXRlJykgc2V0IG1hcmtEYXRlSW5mb1RlbXBsYXRlKHRtcDogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIHRoaXMucGlja2VyU3J2Lm1hcmtEYXRlSW5mb1RlbXBsYXRlID0gdG1wO1xuICB9O1xuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVJbnB1dFN0YXJ0JykgZGF0ZXBpY2tlcklucHV0U3RhcnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVJbnB1dEVuZCcpIGRhdGVwaWNrZXJJbnB1dEVuZDogRWxlbWVudFJlZjtcblxuICBzdHJXaWR0aCA9IDA7XG4gIF9kYXRlVmFsdWUgPSBbXTtcbiAgaTE4blRleHQ6IGFueTtcbiAgaTE4bkZvcm1hdDogYW55O1xuICBkYXRlcGlja2VyQ29udmVydDogRGVmYXVsdERhdGVDb252ZXJ0ZXI7XG4gIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgaTE4bkxvY2FsZTogSTE4bkludGVyZmFjZVsnbG9jYWxlJ107XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZSA9IChfOiBhbnkpID0+IG51bGw7XG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGlja2VyU3J2OiBEYXRlcGlja2VyUHJvU2VydmljZSwgcHJpdmF0ZSBpMThuOiBJMThuU2VydmljZSkge1xuICAgIHRoaXMuZGF0ZXBpY2tlckNvbnZlcnQgPSBuZXcgRGVmYXVsdERhdGVDb252ZXJ0ZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0STE4blRleHQoKTtcbiAgICB0aGlzLmluaXRTcnZTdGF0dXMoKTtcbiAgICB0aGlzLmluaXRPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDdXJQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJMThuVGV4dCgpIHtcbiAgICB0aGlzLnNldEkxOG5UZXh0RGV0YWlsKHRoaXMuaTE4bi5nZXRJMThuVGV4dCgpKTtcbiAgICB0aGlzLmkxOG5cbiAgICAgIC5sYW5nQ2hhbmdlKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLnNldEkxOG5UZXh0RGV0YWlsKGRhdGEpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0STE4blRleHREZXRhaWwoZGF0YSkge1xuICAgIHRoaXMuaTE4blRleHQgPSBkYXRhLmRhdGVQaWNrZXJQcm87XG4gICAgdGhpcy5pMThuTG9jYWxlID0gZGF0YS5sb2NhbGU7XG4gICAgdGhpcy5pMThuRm9ybWF0ID0gSTE4bkZvcm1hdC5sb2NhbEZvcm1hdFt0aGlzLmkxOG5Mb2NhbGVdO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUN1clBvc2l0aW9uKCkge1xuICAgIHRoaXMucGlja2VyU3J2LnRvZ2dsZUV2ZW50Lm5leHQodHJ1ZSk7XG4gIH1cblxuICBjbGVhcihldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnBpY2tlclNydi51cGRhdGVEYXRlVmFsdWUubmV4dCh7XG4gICAgICB0eXBlOiB0aGlzLmlzUmFuZ2VUeXBlID8gJ3JhbmdlJyA6ICdzaW5nbGUnLFxuICAgICAgdmFsdWU6IHRoaXMuaXNSYW5nZVR5cGUgPyBbXSA6IG51bGxcbiAgICB9KTtcblxuICAgIHRoaXMucGlja2VyU3J2LnVwZGF0ZVRpbWVDaGFuZ2UubmV4dCh7XG4gICAgICBob3VyOiBudWxsLFxuICAgICAgbWluOiBudWxsLFxuICAgICAgc2Vjb25kczogbnVsbFxuICAgIH0pO1xuICAgIGlmICh0aGlzLmlzUmFuZ2VUeXBlKSB7XG4gICAgICB0aGlzLmRhdGVWYWx1ZSA9IFtdO1xuICAgICAgdGhpcy5waWNrZXJTcnYuY3VyUmFuZ2VEYXRlID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRBY3RpdmVJbnB1dCA9ICdzdGFydCc7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnBpY2tlclNydi5jdXJSYW5nZURhdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBpY2tlclNydi5jdXJEYXRlID0gbnVsbDtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucGlja2VyU3J2LmN1ckRhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNydlN0YXR1cygpIHtcbiAgICB0aGlzLnBpY2tlclNydi5zaG93VGltZSA9IHRoaXMuc2hvd1RpbWU7XG4gICAgdGhpcy5waWNrZXJTcnYuaXNSYW5nZSA9IHRoaXMuaXNSYW5nZVR5cGU7XG4gICAgdGhpcy5waWNrZXJTcnYuc3RhcnRJbmRleE9mV2VlayA9IHRoaXMuc3RhcnRJbmRleE9mV2VlaztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZVRvU3RyaW5nKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRlcGlja2VyQ29udmVydC5mb3JtYXQoZGF0ZSwgdGhpcy5jdXJGb3JtYXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0T2JzZXJ2YWJsZSgpIHtcbiAgICB0aGlzLnBpY2tlclNydi5zZWxlY3RlZERhdGVDaGFuZ2UucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICApLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSYW5nZVR5cGUpIHtcbiAgICAgICAgdGhpcy5waWNrZXJTcnYuY3VyUmFuZ2VEYXRlID0gY2hhbmdlLnZhbHVlIGFzIERhdGVbXTtcbiAgICAgICAgdGhpcy5kYXRlVmFsdWUgPSAoY2hhbmdlLnZhbHVlIGFzIERhdGVbXSkubWFwKGQgPT4gdGhpcy5mb3JtYXREYXRlVG9TdHJpbmcoZCkpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMucGlja2VyU3J2LmN1clJhbmdlRGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBpY2tlclNydi5jdXJEYXRlID0gY2hhbmdlLnZhbHVlIGFzIERhdGU7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoY2hhbmdlLnZhbHVlKTtcbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgdGhpcy5waWNrZXJTcnYuc2VsZWN0ZWRUaW1lQ2hhbmdlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpXG4gICAgKS5zdWJzY3JpYmUodGltZSA9PiB7XG4gICAgICBpZiAodGhpcy5pc1JhbmdlVHlwZSkge1xuICAgICAgICBjb25zdCBjdXJUaW1lID0gbmV3IERhdGUodGhpcy5jdXJBY3RpdmVEYXRlLmdldFRpbWUoKSkuc2V0SG91cnModGltZS5ob3VyLCB0aW1lLm1pbiwgdGltZS5zZWNvbmRzKTtcbiAgICAgICAgY29uc3QgY3VyRGF0ZSA9IG5ldyBEYXRlKGN1clRpbWUpO1xuICAgICAgICBpZiAodGltZS5hY3RpdmVJbnB1dCA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIHR