UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

312 lines 61.4 kB
import { ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild, ViewEncapsulation, } from "@angular/core"; import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from "@angular/forms"; import _defaults from "lodash/defaults"; import _isEqual from "lodash/isEqual"; import _isNil from "lodash/isNil"; import _isNull from "lodash/isNull"; import moment from "moment/moment"; import { Subject } from "rxjs"; import { debounceTime, takeUntil } from "rxjs/operators"; import { DatePickerInnerComponent } from "./date-picker-inner.component"; import { datePickerDateFormats, datePickerDefaults, } from "./public-api"; import { NuiValidators } from "../../validators"; import { NuiFormFieldControl } from "../form-field/public-api"; import { OVERLAY_WITH_POPUP_STYLES_CLASS } from "../overlay/constants"; import { OverlayComponent } from "../overlay/overlay-component/overlay.component"; import { TextboxComponent } from "../textbox/textbox.component"; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; import * as i2 from "../textbox/textbox.component"; import * as i3 from "../icon/icon.component"; import * as i4 from "../overlay/overlay-component/overlay.component"; import * as i5 from "./date-picker-year-picker.component"; import * as i6 from "./date-picker-month-picker.component"; import * as i7 from "./date-picker-inner.component"; import * as i8 from "./date-picker-day-picker.component"; // <example-url>./../examples/index.html#/date-picker</example-url><br /> export class DatePickerComponent { /** currently active date */ get value() { return this._value; } set value(value) { if (!this.preserveInsignificant && value) { value.set({ hour: 0, minute: 0, second: 0, millisecond: 0 }); } if (!value || (value && value.isSame(this._value))) { return; } this.setDate(value); this.updateTextboxValue(); } constructor(cd) { this.cd = cd; /** Input to set aria label text */ this.ariaLabel = "Date Picker"; /** sets date-picker mode, supports: `day`, `month`, `year` */ this.datepickerMode = "day"; /** if false week numbers will be hidden */ this.showWeeks = false; /** number of months displayed in a single row of month picker */ this.preserveInsignificant = false; this.selectionDone = new EventEmitter(); /** callback to invoke when the value is changed. */ this.valueChange = new EventEmitter(); this.calendarNavigated = new EventEmitter(); this.inputBlurred = new EventEmitter(); this.onDestroy$ = new Subject(); this.overlayConfig = { panelClass: [OVERLAY_WITH_POPUP_STYLES_CLASS], }; this._todayDate = moment(); this.inputChanged = new Subject(); } ngOnInit() { _defaults(this, datePickerDefaults); this.selectedDate = this._value; this.initDate = this.value && this.value.clone(); this.setDateFormat(); this.inputChanged.pipe(debounceTime(500)).subscribe((value) => { const momentValue = moment(value, datePickerDateFormats, true); this.onTouched(); // In case of FormControl absence we still need to perform validation const templateDrivenControlValid = !this.formControl && _isNull(NuiValidators.dateFormat(momentValue)); const reactiveDrivenControlValid = this.formControl && this.formControl.valid && _isNull(NuiValidators.dateFormat(momentValue)); const isInputValid = (templateDrivenControlValid || reactiveDrivenControlValid) && !this.isDateDisabled(momentValue); this.setDate(momentValue); this.setErrorState(!isInputValid); if (this.value.isValid() && !_isEqual(this.value.format(this.momentDateFormat), value)) { this.updateTextboxValue(); } }); this.onAppendToBodyChange(this.appendToBody); } ngOnChanges(changes) { if (changes.appendToBody) { this.onAppendToBodyChange(changes.appendToBody.currentValue); } } ngAfterViewInit() { this.calendarChanged = this._datePicker.calendarMoved.subscribe((value) => this.calendarNavigated.emit(value)); this.updateTextboxValue(); this.cd.detectChanges(); if (this.overlay) { this.overlay.clickOutside .pipe(takeUntil(this.onDestroy$)) .subscribe((_) => this.overlay.hide()); // Sets innerDatePicker 'value' to 'null' on popup close and refreshView() on popup open, // so in case datePicker.value is invalid it will build the calendar from the scratch // and not keep its previous state. this.overlay.show$ .pipe(takeUntil(this.onDestroy$)) .subscribe((_) => this._datePicker.refreshView()); this.overlay.hide$ .pipe(takeUntil(this.onDestroy$)) .subscribe((_) => { const currentDateValid = this.value?.isValid(); if (!currentDateValid) { this._datePicker.value = undefined; this._datePicker.datepickerMode = "day"; } }); } } updateTouchedState() { setTimeout(() => this.inputBlurred.emit(), 100); this.onTouched(); } onUpdate(event) { this.value = event; this.selectionDone.emit(event); this.setErrorState(false); } setDate(value) { this._value = value; this.selectedDate = value; this.valueChange.emit(value); this.onChange(value); } onInputActiveDateChanged(value) { this.inputChanged.next(value); } getIconColor() { return this.isDisabled ? "gray" : "primary-blue"; } onChange(value) { } onTouched() { } validate(control) { this.formControl = control; return NuiValidators.dateFormat(control.value); } writeValue(value) { this.value = value; } registerOnChange(fn) { this.onChange = fn; } registerOnTouched(fn) { this.onTouched = fn; } setDisabledState(isDisabled) { this.isDisabled = isDisabled; } setErrorState(isInErrorState) { this.isInErrorState = isInErrorState; } onSelectionDone(value) { this.value = value; this.overlay?.hide(); } updateTextboxValue(value = this._value) { if (!this.textbox || !value) { return; } this.textbox.writeValue(moment(value).format(this.momentDateFormat)); } isDateDisabled(value) { return this._datePicker.isDisabled(value); } setDateFormat() { const isCustomFormatValid = !_isNil(this.dateFormat) && moment(this._todayDate.format(this.dateFormat), datePickerDateFormats, true).isValid(); this.momentDateFormat = isCustomFormatValid ? this.dateFormat : datePickerDefaults.dateFormat; } ngOnDestroy() { // The following resolves a known 'Error during cleanup of component:' error during unit tests // Details: https://github.com/angular/angular/issues/17013 if (this.calendarChanged) { this.calendarChanged.unsubscribe(); } if (this.overlay?.showing) { this.overlay.hide(); } this.onDestroy$.next(); this.onDestroy$.complete(); } onAppendToBodyChange(appendToBody) { this.customContainer = appendToBody ? undefined : this.popupArea; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DatePickerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DatePickerComponent, selector: "nui-date-picker", inputs: { inline: "inline", isRequired: "isRequired", isDisabled: "isDisabled", isInErrorState: "isInErrorState", ariaLabel: "ariaLabel", locale: "locale", datepickerMode: "datepickerMode", minDate: "minDate", maxDate: "maxDate", minMode: "minMode", maxMode: "maxMode", showWeeks: "showWeeks", dateFormat: "dateFormat", formatDay: "formatDay", formatMonth: "formatMonth", formatYear: "formatYear", formatDayHeader: "formatDayHeader", formatDayTitle: "formatDayTitle", formatMonthTitle: "formatMonthTitle", startingDay: "startingDay", yearRange: "yearRange", onlyCurrentMonth: "onlyCurrentMonth", preserveInsignificant: "preserveInsignificant", disabledDates: "disabledDates", handleTimezone: "handleTimezone", appendToBody: "appendToBody", value: "value" }, outputs: { selectionDone: "selectionDone", valueChange: "valueChange", calendarNavigated: "calendarNavigated", inputBlurred: "inputBlurred" }, host: { properties: { "class.nui-datepicker--inline": "this.inline" } }, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePickerComponent), multi: true, }, { provide: NG_VALIDATORS, useExisting: forwardRef(() => DatePickerComponent), multi: true, }, { provide: NuiFormFieldControl, useExisting: forwardRef(() => DatePickerComponent), multi: true, }, ], viewQueries: [{ propertyName: "_datePicker", first: true, predicate: DatePickerInnerComponent, descendants: true }, { propertyName: "textbox", first: true, predicate: ["date"], descendants: true }, { propertyName: "popupArea", first: true, predicate: ["popupArea"], descendants: true, static: true }, { propertyName: "overlay", first: true, predicate: OverlayComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"nui-datepicker\">\n <ng-container *ngIf=\"!inline\">\n <div\n #toggleRef\n class=\"nui-datepicker__container\"\n [class.disabled]=\"isDisabled\"\n (click)=\"!isDisabled && overlay.toggle()\"\n >\n <nui-textbox\n #date\n autocomplete=\"off\"\n [disabled]=\"isDisabled\"\n [isInErrorState]=\"isInErrorState\"\n (textChange)=\"onInputActiveDateChanged($event)\"\n (blurred)=\"updateTouchedState()\"\n [ariaLabel]=\"ariaLabel\"\n >\n </nui-textbox>\n <nui-icon\n class=\"nui-datepicker__icon\"\n icon=\"calendar\"\n aria-hidden=\"true\"\n [iconColor]=\"getIconColor()\"\n ></nui-icon>\n </div>\n <nui-overlay\n #overlay\n [toggleReference]=\"toggleRef\"\n [overlayConfig]=\"overlayConfig\"\n [customContainer]=\"customContainer\"\n >\n <ng-container *ngTemplateOutlet=\"datePickerInner\"></ng-container>\n </nui-overlay>\n </ng-container>\n\n <div *ngIf=\"inline\">\n <ng-container *ngTemplateOutlet=\"datePickerInner\"></ng-container>\n </div>\n\n <div #popupArea></div>\n</div>\n<ng-template #datePickerInner>\n <nui-date-picker-inner\n [preserveInsignificant]=\"preserveInsignificant\"\n [selectedDate]=\"selectedDate\"\n [inline]=\"inline\"\n (update)=\"onUpdate($event)\"\n (selectionDone)=\"onSelectionDone($event)\"\n [locale]=\"locale\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [dateFormat]=\"dateFormat\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [disabledDates]=\"disabledDates\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [handleTimezone]=\"handleTimezone\"\n [value]=\"value\"\n >\n <nui-day-picker tabindex=\"0\"></nui-day-picker>\n <nui-month-picker tabindex=\"0\"></nui-month-picker>\n <nui-year-picker tabindex=\"0\"></nui-year-picker>\n </nui-date-picker-inner>\n</ng-template>\n", styles: [".nui .nui-datepicker__textbox.ng-invalid-date{border-color:var(--nui-color-line-critical,#dd2c00)}.nui .nui-datepicker{display:inline-block}.nui .nui-datepicker--inline{display:inline-flex}.nui .nui-datepicker .nui-textbox .has-feedback{width:135px}.nui .nui-datepicker .nui-textbox .has-feedback .nui-textbox__input{line-height:14px}.nui .nui-datepicker__textbox{color:var(--nui-color-active-hover,#006d99)}.nui .nui-datepicker__textbox:disabled{pointer-events:none}.nui .nui-datepicker__textbox:not(:focus){cursor:pointer}.nui .nui-datepicker__container{position:relative}.nui .nui-datepicker__container.disabled .nui-icon{cursor:not-allowed;pointer-events:auto}.nui .nui-datepicker.has-error .nui-datepicker__messages div[ng-message]{clear:both;font-size:11px;font-weight:600;line-height:18px;margin:0 0 7px}.nui .nui-datepicker__icon{cursor:pointer;pointer-events:auto;position:absolute;right:7px;top:7px;z-index:501}.nui .nui-datepicker__icon.disabled{pointer-events:none}.nui .nui-datepicker-inner{min-height:290px;min-width:230px;padding:8px 10px}.nui .nui-datepicker-inner table{outline:none;background-color:transparent}.nui .nui-datepicker-inner table button.btn.btn-action{font-size:13px;outline:none}.nui .nui-datepicker-inner table button.btn.btn-action span{display:block}.nui .nui-datepicker-inner table button.btn.btn-action span.text-info{color:#0079aa;width:100%;color:var(--nui-color-text-link,#0079aa)}.nui .nui-datepicker-inner table button.btn.btn-action span.text-muted{color:var(--nui-color-text-secondary,rgba(17, 17, 17, .6))}.nui .nui-datepicker-inner table button.btn.btn-action span.today{border-bottom:2px solid;border-bottom-color:var(--nui-color-line-active,#0079aa);font-weight:700}.nui .nui-datepicker-inner table button.btn.btn-action span.today:not(.text-info).text-muted{border-bottom-color:#b3b3b3}.nui .nui-datepicker-inner table button.btn.btn-action:disabled{color:var(--nui-color-text-disabled,rgba(17, 17, 17, .3))}.nui .nui-datepicker-inner table button.btn.btn-action:disabled span.text-muted{color:var(--nui-color-text-disabled,rgba(17, 17, 17, .3))}.nui .nui-datepicker-inner table button.btn.btn-action.selected{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:var(--nui-color-selected-contrast,#00c4d2);color:#fff}.nui .nui-datepicker-inner table button.btn.btn-action.selected:hover{background-color:var(--nui-color-selected-contrast-hover,#00b0bd);border-color:transparent}.nui .nui-datepicker-inner table button.btn.btn-action.selected span{color:#fff}.nui .nui-datepicker-inner table button.btn.btn-action.selected span.today,.nui .nui-datepicker-inner table button.btn.btn-action.selected span.today.text-muted{border-bottom-color:#fff}.nui .nui-datepicker-inner table button span{font-weight:400}.nui .nui-datepicker-inner table th button.btn.btn-action{height:30px;width:100%}.nui .nui-datepicker-inner table th button.btn.btn-action.is-empty{width:30px}.nui .nui-datepicker-inner table th>button.title{width:100%}.nui .nui-datepicker-inner table th>button.title:disabled{opacity:1;color:var(--nui-color-off,#4d4d4d)}.nui .nui-datepicker-inner table th:last-of-type{text-align:right}.nui .nui-datepicker-inner table td.day>.btn.btn-action{height:30px;min-width:30px;padding:0 7px}.nui .nui-datepicker-inner table td.day>.btn.btn-action .nui-button__content{width:100%}.nui .nui-datepicker-inner table td.month>.btn.btn-action{height:52.5px;min-width:70px;padding:0}.nui .nui-datepicker-inner table td.year>.btn.btn-action{height:52.5px;min-width:42px;padding:0}.nui .nui-datepicker-inner table td>button:disabled span.today:not(.text-info){border-bottom-color:#b3b3b3}.nui .nui-datepicker-inner table .today-button{height:30px;max-width:none;width:100%}.nui .nui-datepicker-inner table .today-button:focus{background-color:transparent}.nui .nui-datepicker-inner table .day-label{color:var(--nui-color-text-default,#111);align-items:center;display:flex;height:30px;justify-content:center;min-width:30px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.TextboxComponent, selector: "nui-textbox", inputs: ["caption", "autocomplete", "info", "customBoxWidth", "disabled", "hint", "name", "placeholder", "readonly", "rows", "type", "value", "isInErrorState", "ariaLabel", "isBusy"], outputs: ["textChange", "blurred"] }, { kind: "component", type: i3.IconComponent, selector: "nui-icon", inputs: ["iconColor", "brushType", "iconHoverColor", "iconSize", "cssClass", "fillContainer", "status", "childStatus", "icon", "counter"] }, { kind: "component", type: i4.OverlayComponent, selector: "nui-overlay", inputs: ["overlayConfig", "toggleReference", "viewportMargin", "customContainer", "roleAttr"], outputs: ["clickOutside"] }, { kind: "component", type: i5.YearPickerComponent, selector: "nui-year-picker" }, { kind: "component", type: i6.MonthPickerComponent, selector: "nui-month-picker" }, { kind: "component", type: i7.DatePickerInnerComponent, selector: "nui-date-picker-inner", inputs: ["locale", "datepickerMode", "startingDay", "yearRange", "minDate", "maxDate", "minMode", "maxMode", "showWeeks", "dateFormat", "formatDay", "formatMonth", "formatYear", "formatDayHeader", "formatDayTitle", "formatMonthTitle", "onlyCurrentMonth", "preserveInsignificant", "disabledDates", "initDate", "inline", "selectedDate", "handleTimezone", "value"], outputs: ["selectionDone", "update"] }, { kind: "component", type: i8.DayPickerComponent, selector: "nui-day-picker" }], encapsulation: i0.ViewEncapsulation.None }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DatePickerComponent, decorators: [{ type: Component, args: [{ selector: "nui-date-picker", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePickerComponent), multi: true, }, { provide: NG_VALIDATORS, useExisting: forwardRef(() => DatePickerComponent), multi: true, }, { provide: NuiFormFieldControl, useExisting: forwardRef(() => DatePickerComponent), multi: true, }, ], encapsulation: ViewEncapsulation.None, template: "<div class=\"nui-datepicker\">\n <ng-container *ngIf=\"!inline\">\n <div\n #toggleRef\n class=\"nui-datepicker__container\"\n [class.disabled]=\"isDisabled\"\n (click)=\"!isDisabled && overlay.toggle()\"\n >\n <nui-textbox\n #date\n autocomplete=\"off\"\n [disabled]=\"isDisabled\"\n [isInErrorState]=\"isInErrorState\"\n (textChange)=\"onInputActiveDateChanged($event)\"\n (blurred)=\"updateTouchedState()\"\n [ariaLabel]=\"ariaLabel\"\n >\n </nui-textbox>\n <nui-icon\n class=\"nui-datepicker__icon\"\n icon=\"calendar\"\n aria-hidden=\"true\"\n [iconColor]=\"getIconColor()\"\n ></nui-icon>\n </div>\n <nui-overlay\n #overlay\n [toggleReference]=\"toggleRef\"\n [overlayConfig]=\"overlayConfig\"\n [customContainer]=\"customContainer\"\n >\n <ng-container *ngTemplateOutlet=\"datePickerInner\"></ng-container>\n </nui-overlay>\n </ng-container>\n\n <div *ngIf=\"inline\">\n <ng-container *ngTemplateOutlet=\"datePickerInner\"></ng-container>\n </div>\n\n <div #popupArea></div>\n</div>\n<ng-template #datePickerInner>\n <nui-date-picker-inner\n [preserveInsignificant]=\"preserveInsignificant\"\n [selectedDate]=\"selectedDate\"\n [inline]=\"inline\"\n (update)=\"onUpdate($event)\"\n (selectionDone)=\"onSelectionDone($event)\"\n [locale]=\"locale\"\n [datepickerMode]=\"datepickerMode\"\n [initDate]=\"initDate\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [minMode]=\"minMode\"\n [maxMode]=\"maxMode\"\n [showWeeks]=\"showWeeks\"\n [dateFormat]=\"dateFormat\"\n [formatDay]=\"formatDay\"\n [formatMonth]=\"formatMonth\"\n [formatYear]=\"formatYear\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatDayTitle]=\"formatDayTitle\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDay]=\"startingDay\"\n [yearRange]=\"yearRange\"\n [disabledDates]=\"disabledDates\"\n [onlyCurrentMonth]=\"onlyCurrentMonth\"\n [handleTimezone]=\"handleTimezone\"\n [value]=\"value\"\n >\n <nui-day-picker tabindex=\"0\"></nui-day-picker>\n <nui-month-picker tabindex=\"0\"></nui-month-picker>\n <nui-year-picker tabindex=\"0\"></nui-year-picker>\n </nui-date-picker-inner>\n</ng-template>\n", styles: [".nui .nui-datepicker__textbox.ng-invalid-date{border-color:var(--nui-color-line-critical,#dd2c00)}.nui .nui-datepicker{display:inline-block}.nui .nui-datepicker--inline{display:inline-flex}.nui .nui-datepicker .nui-textbox .has-feedback{width:135px}.nui .nui-datepicker .nui-textbox .has-feedback .nui-textbox__input{line-height:14px}.nui .nui-datepicker__textbox{color:var(--nui-color-active-hover,#006d99)}.nui .nui-datepicker__textbox:disabled{pointer-events:none}.nui .nui-datepicker__textbox:not(:focus){cursor:pointer}.nui .nui-datepicker__container{position:relative}.nui .nui-datepicker__container.disabled .nui-icon{cursor:not-allowed;pointer-events:auto}.nui .nui-datepicker.has-error .nui-datepicker__messages div[ng-message]{clear:both;font-size:11px;font-weight:600;line-height:18px;margin:0 0 7px}.nui .nui-datepicker__icon{cursor:pointer;pointer-events:auto;position:absolute;right:7px;top:7px;z-index:501}.nui .nui-datepicker__icon.disabled{pointer-events:none}.nui .nui-datepicker-inner{min-height:290px;min-width:230px;padding:8px 10px}.nui .nui-datepicker-inner table{outline:none;background-color:transparent}.nui .nui-datepicker-inner table button.btn.btn-action{font-size:13px;outline:none}.nui .nui-datepicker-inner table button.btn.btn-action span{display:block}.nui .nui-datepicker-inner table button.btn.btn-action span.text-info{color:#0079aa;width:100%;color:var(--nui-color-text-link,#0079aa)}.nui .nui-datepicker-inner table button.btn.btn-action span.text-muted{color:var(--nui-color-text-secondary,rgba(17, 17, 17, .6))}.nui .nui-datepicker-inner table button.btn.btn-action span.today{border-bottom:2px solid;border-bottom-color:var(--nui-color-line-active,#0079aa);font-weight:700}.nui .nui-datepicker-inner table button.btn.btn-action span.today:not(.text-info).text-muted{border-bottom-color:#b3b3b3}.nui .nui-datepicker-inner table button.btn.btn-action:disabled{color:var(--nui-color-text-disabled,rgba(17, 17, 17, .3))}.nui .nui-datepicker-inner table button.btn.btn-action:disabled span.text-muted{color:var(--nui-color-text-disabled,rgba(17, 17, 17, .3))}.nui .nui-datepicker-inner table button.btn.btn-action.selected{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;background-color:var(--nui-color-selected-contrast,#00c4d2);color:#fff}.nui .nui-datepicker-inner table button.btn.btn-action.selected:hover{background-color:var(--nui-color-selected-contrast-hover,#00b0bd);border-color:transparent}.nui .nui-datepicker-inner table button.btn.btn-action.selected span{color:#fff}.nui .nui-datepicker-inner table button.btn.btn-action.selected span.today,.nui .nui-datepicker-inner table button.btn.btn-action.selected span.today.text-muted{border-bottom-color:#fff}.nui .nui-datepicker-inner table button span{font-weight:400}.nui .nui-datepicker-inner table th button.btn.btn-action{height:30px;width:100%}.nui .nui-datepicker-inner table th button.btn.btn-action.is-empty{width:30px}.nui .nui-datepicker-inner table th>button.title{width:100%}.nui .nui-datepicker-inner table th>button.title:disabled{opacity:1;color:var(--nui-color-off,#4d4d4d)}.nui .nui-datepicker-inner table th:last-of-type{text-align:right}.nui .nui-datepicker-inner table td.day>.btn.btn-action{height:30px;min-width:30px;padding:0 7px}.nui .nui-datepicker-inner table td.day>.btn.btn-action .nui-button__content{width:100%}.nui .nui-datepicker-inner table td.month>.btn.btn-action{height:52.5px;min-width:70px;padding:0}.nui .nui-datepicker-inner table td.year>.btn.btn-action{height:52.5px;min-width:42px;padding:0}.nui .nui-datepicker-inner table td>button:disabled span.today:not(.text-info){border-bottom-color:#b3b3b3}.nui .nui-datepicker-inner table .today-button{height:30px;max-width:none;width:100%}.nui .nui-datepicker-inner table .today-button:focus{background-color:transparent}.nui .nui-datepicker-inner table .day-label{color:var(--nui-color-text-default,#111);align-items:center;display:flex;height:30px;justify-content:center;min-width:30px}\n"] }] }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { inline: [{ type: HostBinding, args: ["class.nui-datepicker--inline"] }, { type: Input }], isRequired: [{ type: Input }], isDisabled: [{ type: Input }], isInErrorState: [{ type: Input }], ariaLabel: [{ type: Input }], locale: [{ type: Input }], datepickerMode: [{ type: Input }], minDate: [{ type: Input }], maxDate: [{ type: Input }], minMode: [{ type: Input }], maxMode: [{ type: Input }], showWeeks: [{ type: Input }], dateFormat: [{ type: Input }], formatDay: [{ type: Input }], formatMonth: [{ type: Input }], formatYear: [{ type: Input }], formatDayHeader: [{ type: Input }], formatDayTitle: [{ type: Input }], formatMonthTitle: [{ type: Input }], startingDay: [{ type: Input }], yearRange: [{ type: Input }], onlyCurrentMonth: [{ type: Input }], preserveInsignificant: [{ type: Input }], disabledDates: [{ type: Input }], handleTimezone: [{ type: Input }], appendToBody: [{ type: Input }], value: [{ type: Input }], selectionDone: [{ type: Output }], valueChange: [{ type: Output }], calendarNavigated: [{ type: Output }], inputBlurred: [{ type: Output }], _datePicker: [{ type: ViewChild, args: [DatePickerInnerComponent] }], textbox: [{ type: ViewChild, args: ["date"] }], popupArea: [{ type: ViewChild, args: ["popupArea", { static: true }] }], overlay: [{ type: ViewChild, args: [OverlayComponent] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFCQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFHSCxhQUFhLEVBQ2IsaUJBQWlCLEdBRXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxTQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDeEMsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFDO0FBQ2xDLE9BQU8sT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUNwQyxPQUFPLE1BQWtCLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUNILHFCQUFxQixFQUNyQixrQkFBa0IsR0FFckIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHNCQUFzQixDQUFD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VixTQUFTO3VCQUFDLHdCQUF3QjtnQkFHaEIsT0FBTztzQkFBekIsU0FBUzt1QkFBQyxNQUFNO2dCQUV5QixTQUFTO3NCQUFsRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0osT0FBTztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDCqSAyMDIyIFNvbGFyV2luZHMgV29ybGR3aWRlLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4vLyAgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGVcbi8vICByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Jcbi8vICBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vICBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyAgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyAgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHsgT3ZlcmxheUNvbmZpZyB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgTkdfVkFMSURBVE9SUyxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBWYWxpZGF0aW9uRXJyb3JzLFxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCBfZGVmYXVsdHMgZnJvbSBcImxvZGFzaC9kZWZhdWx0c1wiO1xuaW1wb3J0IF9pc0VxdWFsIGZyb20gXCJsb2Rhc2gvaXNFcXVhbFwiO1xuaW1wb3J0IF9pc05pbCBmcm9tIFwibG9kYXNoL2lzTmlsXCI7XG5pbXBvcnQgX2lzTnVsbCBmcm9tIFwibG9kYXNoL2lzTnVsbFwiO1xuaW1wb3J0IG1vbWVudCwgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50L21vbWVudFwiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmltcG9ydCB7IERhdGVQaWNrZXJJbm5lckNvbXBvbmVudCB9IGZyb20gXCIuL2RhdGUtcGlja2VyLWlubmVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtcbiAgICBkYXRlUGlja2VyRGF0ZUZvcm1hdHMsXG4gICAgZGF0ZVBpY2tlckRlZmF1bHRzLFxuICAgIElEYXRlUGlja2VyRGlzYWJsZWREYXRlLFxufSBmcm9tIFwiLi9wdWJsaWMtYXBpXCI7XG5pbXBvcnQgeyBOdWlWYWxpZGF0b3JzIH0gZnJvbSBcIi4uLy4uL3ZhbGlkYXRvcnNcIjtcbmltcG9ydCB7IE51aUZvcm1GaWVsZENvbnRyb2wgfSBmcm9tIFwiLi4vZm9ybS1maWVsZC9wdWJsaWMtYXBpXCI7XG5pbXBvcnQgeyBPVkVSTEFZX1dJVEhfUE9QVVBfU1RZTEVTX0NMQVNTIH0gZnJvbSBcIi4uL292ZXJsYXkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPdmVybGF5Q29tcG9uZW50IH0gZnJvbSBcIi4uL292ZXJsYXkvb3ZlcmxheS1jb21wb25lbnQvb3ZlcmxheS5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tIFwiLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudFwiO1xuXG4vLyA8ZXhhbXBsZS11cmw+Li8uLi9leGFtcGxlcy9pbmRleC5odG1sIy9kYXRlLXBpY2tlcjwvZXhhbXBsZS11cmw+PGJyIC8+XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJudWktZGF0ZS1waWNrZXJcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sXCIsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE51aUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgc3R5bGVVcmxzOiBbXCIuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5sZXNzXCJdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIERhdGVQaWNrZXJDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzXG4gICAgICAgIE9uQ2hhbmdlcyxcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgTnVpRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICAgICAgT25EZXN0cm95XG57XG4gICAgLyoqIHNldHMgZGF0ZS1waWNrZXIgaW5saW5lIG1vZGUgKi9cbiAgICBASG9zdEJpbmRpbmcoXCJjbGFzcy5udWktZGF0ZXBpY2tlci0taW5saW5lXCIpXG4gICAgQElucHV0KClcbiAgICBpbmxpbmU6IGJvb2xlYW47XG4gICAgLyoqIGNoZWNrcyBpZiB2YWx1ZSBpbiBkYXRlcGlja2VyIGlzIHJlcXVpcmVkICovXG4gICAgQElucHV0KCkgaXNSZXF1aXJlZDogYm9vbGVhbjtcbiAgICAvKiogT3B0aW9uIHRvIGRpc2FibGVkIGRhdGVwaWNrZXIuICovXG4gICAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgICAvKiogdG8gYXBwbHkgZXJyb3Igc3RhdGUgc3R5bGVzICovXG4gICAgQElucHV0KCkgaXNJbkVycm9yU3RhdGU6IGJvb2xlYW47XG4gICAgLyoqIElucHV0IHRvIHNldCBhcmlhIGxhYmVsIHRleHQgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXJpYUxhYmVsOiBzdHJpbmcgPSBcIkRhdGUgUGlja2VyXCI7XG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBpbmplY3RpbmcgbG9jYWxlIHRocm91Z2ggTE9DQUxFX0lEIEluamVjdGlvbiBUb2tlblxuICAgIC8qKiB0byBkYXRlIGZvcm1hdCBsb2NhbGUgKi9cbiAgICBASW5wdXQoKSBsb2NhbGU6IHN0cmluZztcbiAgICAvKiogc2V0cyBkYXRlLXBpY2tlciBtb2RlLCBzdXBwb3J0czogYGRheWAsIGBtb250aGAsIGB5ZWFyYCAqL1xuICAgIEBJbnB1dCgpIGRhdGVwaWNrZXJNb2RlID0gXCJkYXlcIjtcbiAgICAvKiogIGVhcmxpZXN0IHNlbGVjdGFibGUgZGF0ZSAqL1xuICAgIEBJbnB1dCgpIG1pbkRhdGU6IE1vbWVudDtcbiAgICAvKiogbGF0ZXN0IHNlbGVjdGFibGUgZGF0ZSAqL1xuICAgIEBJbnB1dCgpIG1heERhdGU6IE1vbWVudDtcbiAgICAvKiogc2V0IGxvd2VyIGRhdGUtcGlja2VyIG1vZGUsIHN1cHBvcnRzOiBgZGF5YCwgYG1vbnRoYCwgYHllYXJgICovXG4gICAgQElucHV0KCkgbWluTW9kZTogc3RyaW5nO1xuICAgIC8qKiBzZXRzIHVwcGVyIGRhdGUtcGlja2VyIG1vZGUsIHN1cHBvcnRzOiBgZGF5YCwgYG1vbnRoYCwgYHllYXJgICovXG4gICAgQElucHV0KCkgbWF4TW9kZTogc3RyaW5nO1xuICAgIC8qKiBpZiBmYWxzZSB3ZWVrIG51bWJlcnMgd2lsbCBiZSBoaWRkZW4gKi9cbiAgICBASW5wdXQoKSBzaG93V2Vla3MgPSBmYWxzZTtcbiAgICAvKiogZGF0ZSBmb3JtYXQsIHVzZWQgdG8gZm9ybWF0IHNlbGVjdGVkIGRhdGUgKi9cbiAgICBASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gICAgLyoqIGZvcm1hdCBvZiBkYXkgaW4gbW9udGggKi9cbiAgICBASW5wdXQoKSBmb3JtYXREYXk6IHN0cmluZztcbiAgICAvKiogZm9ybWF0IG9mIG1vbnRoIGluIHllYXIgKi9cbiAgICBASW5wdXQoKSBmb3JtYXRNb250aDogc3RyaW5nO1xuICAgIC8qKiBmb3JtYXQgb2YgeWVhciBpbiB5ZWFyIHJhbmdlICovXG4gICAgQElucHV0KCkgZm9ybWF0WWVhcjogc3RyaW5nO1xuICAgIC8qKiBmb3JtYXQgb2YgZGF5IGluIHdlZWsgaGVhZGVyICovXG4gICAgQElucHV0KCkgZm9ybWF0RGF5SGVhZGVyOiBzdHJpbmc7XG4gICAgLyoqIGZvcm1hdCBvZiB0aXRsZSB3aGVuIHNlbGVjdGluZyBkYXkgKi9cbiAgICBASW5wdXQoKSBmb3JtYXREYXlUaXRsZTogc3RyaW5nO1xuICAgIC8qKiBmb3JtYXQgb2YgdGl0bGUgd2hlbiBzZWxlY3RpbmcgbW9udGggKi9cbiAgICBASW5wdXQoKSBmb3JtYXRNb250aFRpdGxlOiBzdHJpbmc7XG4gICAgLyoqIHN0YXJ0aW5nIGRheSBvZiB0aGUgd2VlayBmcm9tIDAtNiAoMD1TdW5kYXksIC4uLiwgNj1TYXR1cmRheSkgKi9cbiAgICBASW5wdXQoKSBzdGFydGluZ0RheTogbnVtYmVyO1xuICAgIC8qKiBudW1iZXIgb2YgeWVhcnMgZGlzcGxheWVkIGluIHllYXIgc2VsZWN0aW9uICovXG4gICAgQElucHV0KCkgeWVhclJhbmdlOiBudW1iZXI7XG4gICAgLyoqIGlmIHRydWUgb25seSBkYXRlcyBmcm9tIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIG1vbnRoIHdpbGwgYmUgc2hvd24gKi9cbiAgICBASW5wdXQoKSBvbmx5Q3VycmVudE1vbnRoOiBib29sZWFuO1xuICAgIC8qKiBudW1iZXIgb2YgbW9udGhzIGRpc3BsYXllZCBpbiBhIHNpbmdsZSByb3cgb2YgbW9udGggcGlja2VyICovXG4gICAgQElucHV0KCkgcHJlc2VydmVJbnNpZ25pZmljYW50ID0gZmFsc2U7XG4gICAgLyoqIGFycmF5IG9mIGN1c3RvbSBjc3MgY2xhc3NlcyB0byBiZSBhcHBsaWVkIHRvIHRhcmdldGVkIGRhdGVzICovXG4gICAgQElucHV0KCkgZGlzYWJsZWREYXRlczogSURhdGVQaWNrZXJEaXNhYmxlZERhdGVbXTtcbiAgICAvKiogSXMgdXNlZCB0byBoYW5kbGUgdGltZXpvbmUgb2YgZGF0ZSB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpIGhhbmRsZVRpbWV6b25lOiBib29sZWFuO1xuICAgIC8qKiBBbGxvd3MgcG9wdXAgYm94IHRvIGJlIGF0dGFjaGVkIHRvIGRvY3VtZW50LmJvZHkgKi9cbiAgICBASW5wdXQoKSBhcHBlbmRUb0JvZHk6IGJvb2xlYW47XG5cbiAgICAvKiogY3VycmVudGx5IGFjdGl2ZSBkYXRlICovXG4gICAgQElucHV0KClcbiAgICBnZXQgdmFsdWUoKTogTW9tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIHNldCB2YWx1ZSh2YWx1ZTogTW9tZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5wcmVzZXJ2ZUluc2lnbmlmaWNhbnQgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlLnNldCh7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbHVlIHx8ICh2YWx1ZSAmJiB2YWx1ZS5pc1NhbWUodGhpcy5fdmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlVGV4dGJveFZhbHVlKCk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0aW9uRG9uZTogRXZlbnRFbWl0dGVyPE1vbWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1vbWVudD4oKTtcblxuICAgIC8qKiBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPE1vbWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1vbWVudD4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIGNhbGVuZGFyTmF2aWdhdGVkOiBFdmVudEVtaXR0ZXI8TW9tZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW9tZW50PigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgaW5wdXRCbHVycmVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8TW9tZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZChEYXRlUGlja2VySW5uZXJDb21wb25lbnQpXG4gICAgX2RhdGVQaWNrZXI6IERhdGVQaWNrZXJJbm5lckNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoXCJkYXRlXCIpIHRleHRib3g6IFRleHRib3hDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKFwicG9wdXBBcmVhXCIsIHsgc3RhdGljOiB0cnVlIH0pIHBvcHVwQXJlYTogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKE92ZXJsYXlDb21wb25lbnQpIHB1YmxpYyBvdmVybGF5OiBPdmVybGF5Q29tcG9uZW50O1xuXG4gICAgcHVibGljIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAgIHB1YmxpYyBjdXN0b21Db250YWluZXI6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIHNlbGVjdGVkRGF0ZTogTW9tZW50O1xuICAgIHB1YmxpYyBpbml0RGF0ZTogTW9tZW50O1xuICAgIHB1YmxpYyBvdmVybGF5Q29uZmlnOiBPdmVybGF5Q29uZmlnID0ge1xuICAgICAgICBwYW5lbENsYXNzOiBbT1ZFUkxBWV9XSVRIX1BPUFVQX1NUWUxFU19DTEFTU10sXG4gICAgfTtcblxuICAgIHByb3RlY3RlZCBfdmFsdWU6IE1vbWVudDtcbiAgICBwcm90ZWN0ZWQgX3RvZGF5RGF0ZTogTW9tZW50ID0gbW9tZW50KCk7XG5cbiAgICBwcml2YXRlIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgICBwcml2YXRlIGlucHV0Q2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgbW9tZW50RGF0ZUZvcm1hdDogc3RyaW5nO1xuICAgIHByaXZhdGUgY2FsZW5kYXJDaGFu