@nova-ui/bits
Version:
SolarWinds Nova Framework
312 lines • 61.4 kB
JavaScript
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