ngx-obelisco-example
Version:
Componentes funcionales y reutilizables para Angular.
176 lines • 42.8 kB
JavaScript
import { Component, EventEmitter, Injectable, Input, Output } from '@angular/core';
import { NgbDatepickerI18n } from '@ng-bootstrap/ng-bootstrap';
import { I18N_VALUES } from './i18n.constans';
import { Subject, takeUntil } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@ng-bootstrap/ng-bootstrap";
import * as i2 from "ngx-obelisco-example/core/services";
import * as i3 from "@angular/common";
import * as i4 from "@angular/forms";
import * as i5 from "ngx-obelisco-example/button";
const NOW = new Date();
export class I18n {
constructor() {
this.language = 'ar';
}
}
I18n.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: I18n, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
I18n.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: I18n });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: I18n, decorators: [{
type: Injectable
}] });
export class CustomDatepickerI18n extends NgbDatepickerI18n {
constructor(_i18n) {
super();
this._i18n = _i18n;
}
getWeekdayLabel(weekday) {
return I18N_VALUES[this._i18n.language].weekdays[weekday - 1];
}
getWeekLabel() {
return I18N_VALUES[this._i18n.language].weekLabel;
}
getMonthShortName(month) {
return I18N_VALUES[this._i18n.language].months[month - 1];
}
getMonthFullName(month) {
return this.getMonthShortName(month);
}
getDayAriaLabel(date) {
return `${date.day}-${date.month}-${date.year}`;
}
}
CustomDatepickerI18n.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomDatepickerI18n, deps: [{ token: I18n }], target: i0.ɵɵFactoryTarget.Injectable });
CustomDatepickerI18n.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomDatepickerI18n });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CustomDatepickerI18n, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: I18n }]; } });
export class ODatepickerComponent {
constructor(calendar, taskService) {
this.calendar = calendar;
this.taskService = taskService;
this.isPopUp = false;
this.firstDayOfWeek = 7;
this.outsideDays = 'hidden';
this.minDate = { year: new Date().getFullYear(), month: 1, day: 1 };
this.maxDate = { year: new Date().getFullYear() + 5, month: 12, day: 31 };
this.startDate = {
year: NOW.getFullYear(),
month: NOW.getMonth() + 1,
day: NOW.getDate()
};
this.disabledWeekends = false;
this.disabledDates = [];
this.dateSelected = new EventEmitter();
this.taskSelected = new EventEmitter();
this.model = { year: NOW.getFullYear(), month: NOW.getMonth() + 1, day: NOW.getDate() };
this.onDestroy$ = new Subject();
}
ngOnInit() {
if (!this.startDate) {
this.startDate = {
year: NOW.getFullYear(),
month: NOW.getMonth() + 1,
day: NOW.getDate()
};
}
this.model = this.startDate;
}
selectToday() {
this.model = {
year: NOW.getFullYear(),
month: NOW.getMonth() + 1,
day: NOW.getDate()
};
}
isWeekend(date) {
const d = new Date(date.year, date.month - 1, date.day);
return d.getDay() === 0 || d.getDay() === 6;
}
isDisabled(date, current) {
if (this.disabledWeekends && this.isWeekend(date)) {
return true;
}
return date.month !== current.month || this.isDateDisabled(date);
}
isDateDisabled(date) {
return this.disabledDates.some((disabledDate) => disabledDate.year === date.year && disabledDate.month === date.month && disabledDate.day === date.day);
}
hasTask(date) {
return this.dateHasTask(date);
}
showTasks(date, event) {
if (this.isDateDisabled(date) || (this.disabledWeekends && this.isWeekend(date))) {
event.preventDefault();
event.stopPropagation();
return;
}
this.taskService.task$.value.filter((task) => {
const taskDate = task.date ? new Date(task.date.year, task.date.month - 1, task.date.day) : new Date();
return (taskDate.getDate() === date.day &&
taskDate.getMonth() + 1 === date.month &&
taskDate.getFullYear() === date.year);
});
}
dateHasTask(date) {
return this.taskService.task$.value.some((task) => {
const taskDate = task.date ? new Date(task.date.year, task.date.month - 1, task.date.day) : new Date();
return (taskDate.getDate() === date.day &&
taskDate.getMonth() + 1 === date.month &&
taskDate.getFullYear() === date.year);
});
}
gettaskSelected(selectedDate) {
let taskOfDate = [];
this.taskService.task$.pipe(takeUntil(this.onDestroy$)).subscribe((tasks) => {
tasks.forEach((task) => {
const taskDate = new Date(task.date.year, task.date.month - 1, task.date.day);
if (taskDate.getDate() === selectedDate.day &&
taskDate.getMonth() + 1 === selectedDate.month &&
taskDate.getFullYear() === selectedDate.year) {
taskOfDate = task.task ? task.task : [];
}
});
});
return taskOfDate;
}
onDateChange(newDate) {
if (this.disabledWeekends && this.isWeekend(newDate)) {
return;
}
this.dateSelected.emit(newDate);
const tasks = this.gettaskSelected(newDate);
this.taskSelected.emit(tasks);
}
ngOnDestroy() {
this.onDestroy$.next();
this.onDestroy$.complete();
}
}
ODatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ODatepickerComponent, deps: [{ token: i1.NgbCalendar }, { token: i2.TasksService }], target: i0.ɵɵFactoryTarget.Component });
ODatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ODatepickerComponent, selector: "o-datepicker", inputs: { isPopUp: "isPopUp", firstDayOfWeek: "firstDayOfWeek", outsideDays: "outsideDays", minDate: "minDate", maxDate: "maxDate", startDate: "startDate", disabledWeekends: "disabledWeekends", disabledDates: "disabledDates" }, outputs: { dateSelected: "dateSelected", taskSelected: "taskSelected" }, providers: [I18n, { provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n }], ngImport: i0, template: "<!-- PopUp = false -->\r\n<ngb-datepicker\r\n #dp\r\n *ngIf=\"!isPopUp\"\r\n [(ngModel)]=\"model\"\r\n [dayTemplate]=\"customDay\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [outsideDays]=\"outsideDays\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [startDate]=\"startDate\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n></ngb-datepicker>\r\n\r\n<!-- PopUp -->\r\n<form class=\"form-inline\" *ngIf=\"isPopUp\">\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <input\r\n class=\"form-control\"\r\n placeholder=\"dd-mm-yyyy\"\r\n name=\"dp\"\r\n ngbDatepicker\r\n #d=\"ngbDatepicker\"\r\n [(ngModel)]=\"model\"\r\n [dayTemplate]=\"customDay\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [outsideDays]=\"outsideDays\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [startDate]=\"startDate\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n />\r\n <div class=\"input-group-append\">\r\n <o-button ariaLabel=\"calendario\" (click)=\"d.toggle()\">\r\n <i class=\"bx bxs-calendar\"></i>\r\n </o-button>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<!-- Custom Day -->\r\n<ng-template\r\n #customDay\r\n let-date\r\n let-currentMonth=\"currentMonth\"\r\n let-selected=\"selected\"\r\n let-disabled=\"disabled\"\r\n let-focused=\"focused\"\r\n>\r\n <span\r\n class=\"custom-day\"\r\n [class.focused]=\"focused\"\r\n [class.bg-primary]=\"selected\"\r\n [class.hidden]=\"date.month !== currentMonth\"\r\n [class.has-task]=\"hasTask(date)\"\r\n (click)=\"showTasks(date, $event)\"\r\n [class.disabled]=\"disabled || (disabledWeekends && isWeekend(date)) || isDateDisabled(date)\"\r\n >\r\n {{ date.day }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- En popup siempre esta fijo el dia actual -->\r\n<!-- En popup el formato de la fecha -->\r\n", styles: ["::ng-deep o-datepicker{padding:.5rem .25rem;font-family:Nunito,sans-serif;font-weight:600}::ng-deep o-datepicker ngb-datepicker{background-color:#fff}::ng-deep o-datepicker .ngb-dp-month:first-child .ngb-dp-week,::ng-deep o-datepicker .ngb-dp-month:last-child .ngb-dp-week{padding:0}::ng-deep o-datepicker .ngb-dp-arrow{display:none}::ng-deep o-datepicker .ngb-dp-navigation-select{border:none;margin-bottom:1rem}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select{border:none;color:#38485c;font-size:21px;margin-top:8px;cursor:pointer;padding-left:0}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar{width:6px}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar-track{border-radius:10px;background:rgba(0,0,0,.1)}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar-thumb:hover{background:rgba(150,150,150,.9)}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar-thumb:active{background:rgba(150,150,150,.9)}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select~.form-select{width:100px;min-width:100px;max-width:100px;text-align:center}::ng-deep o-datepicker ngb-datepicker-month{font-size:17px;color:#505e70}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-day,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-weekday{width:40px;height:40px;max-height:40px;text-align:center;display:flex;align-items:center;justify-content:center;margin:.25rem 0;padding:0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week{gap:8px;padding:.25rem 0;display:flex;align-items:center;justify-content:center;margin:auto;border-radius:0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week.ngb-dp-weekdays{justify-content:space-between;padding:.25rem 0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week.ngb-dp-weekdays .ngb-dp-weekday{font-weight:700;font-size:17px;font-style:normal}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week:nth-child(even){background-color:#fff;margin:.25rem 0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week.ngb-dp-week:nth-child(odd){background-color:#f5f9fc}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day{border-radius:50%;display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:100%}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.has-task{color:#fff;background-color:#38485c}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day:hover,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.focused,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.bg-primary{background-color:#007bc7;color:#fff}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.bg-primary{background-color:#007bc7!important}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.hidden{color:#9eaab8}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.focused{box-shadow:0 0 0 .125rem #005387}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled-weekend,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled.bg-primary{cursor:not-allowed;background:transparent;color:#9eaab8}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled-weekend:hover,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled-weekend.focused,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled:hover,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled.focused,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled.bg-primary:hover,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled.bg-primary.focused{background-color:transparent;color:#9eaab8;border-radius:0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .ngb-dp-day.ngb-dp-today:focus{outline:none}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .ngb-dp-day.ngb-dp-today:focus .custom-day{box-shadow:0 0 0 .125rem #005387}::ng-deep o-datepicker .form-inline,::ng-deep o-datepicker .form-group,::ng-deep o-datepicker .input-group{display:flex;flex-direction:row}::ng-deep o-datepicker .form-inline .form-control,::ng-deep o-datepicker .form-group .form-control,::ng-deep o-datepicker .input-group .form-control{height:40px;min-height:40px;max-height:40px;margin-right:8px}::ng-deep o-datepicker .form-inline input,::ng-deep o-datepicker .form-group input,::ng-deep o-datepicker .input-group input{width:275px;min-width:275px;max-width:275px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i1.NgbDatepicker, selector: "ngb-datepicker", inputs: ["dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "maxDate", "minDate", "navigation", "outsideDays", "showWeekNumbers", "startDate", "weekdays"], outputs: ["navigate", "dateSelect"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "component", type: i5.OButtonComponent, selector: "o-button", inputs: ["type", "isOutline", "size", "isExpandable", "hasIcon", "hasSpinner", "ariaLabel", "customClasses", "route", "link", "target", "download", "rel", "isDisabled", "dataTarget", "dataToggle", "dataDismiss"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ODatepickerComponent, decorators: [{
type: Component,
args: [{ selector: 'o-datepicker', providers: [I18n, { provide: NgbDatepickerI18n, useClass: CustomDatepickerI18n }], template: "<!-- PopUp = false -->\r\n<ngb-datepicker\r\n #dp\r\n *ngIf=\"!isPopUp\"\r\n [(ngModel)]=\"model\"\r\n [dayTemplate]=\"customDay\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [outsideDays]=\"outsideDays\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [startDate]=\"startDate\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n></ngb-datepicker>\r\n\r\n<!-- PopUp -->\r\n<form class=\"form-inline\" *ngIf=\"isPopUp\">\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <input\r\n class=\"form-control\"\r\n placeholder=\"dd-mm-yyyy\"\r\n name=\"dp\"\r\n ngbDatepicker\r\n #d=\"ngbDatepicker\"\r\n [(ngModel)]=\"model\"\r\n [dayTemplate]=\"customDay\"\r\n [firstDayOfWeek]=\"firstDayOfWeek\"\r\n [outsideDays]=\"outsideDays\"\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [startDate]=\"startDate\"\r\n (ngModelChange)=\"onDateChange($event)\"\r\n />\r\n <div class=\"input-group-append\">\r\n <o-button ariaLabel=\"calendario\" (click)=\"d.toggle()\">\r\n <i class=\"bx bxs-calendar\"></i>\r\n </o-button>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<!-- Custom Day -->\r\n<ng-template\r\n #customDay\r\n let-date\r\n let-currentMonth=\"currentMonth\"\r\n let-selected=\"selected\"\r\n let-disabled=\"disabled\"\r\n let-focused=\"focused\"\r\n>\r\n <span\r\n class=\"custom-day\"\r\n [class.focused]=\"focused\"\r\n [class.bg-primary]=\"selected\"\r\n [class.hidden]=\"date.month !== currentMonth\"\r\n [class.has-task]=\"hasTask(date)\"\r\n (click)=\"showTasks(date, $event)\"\r\n [class.disabled]=\"disabled || (disabledWeekends && isWeekend(date)) || isDateDisabled(date)\"\r\n >\r\n {{ date.day }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- En popup siempre esta fijo el dia actual -->\r\n<!-- En popup el formato de la fecha -->\r\n", styles: ["::ng-deep o-datepicker{padding:.5rem .25rem;font-family:Nunito,sans-serif;font-weight:600}::ng-deep o-datepicker ngb-datepicker{background-color:#fff}::ng-deep o-datepicker .ngb-dp-month:first-child .ngb-dp-week,::ng-deep o-datepicker .ngb-dp-month:last-child .ngb-dp-week{padding:0}::ng-deep o-datepicker .ngb-dp-arrow{display:none}::ng-deep o-datepicker .ngb-dp-navigation-select{border:none;margin-bottom:1rem}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select{border:none;color:#38485c;font-size:21px;margin-top:8px;cursor:pointer;padding-left:0}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar{width:6px}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar-track{border-radius:10px;background:rgba(0,0,0,.1)}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar-thumb{border-radius:10px;background:rgba(0,0,0,.2)}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar-thumb:hover{background:rgba(150,150,150,.9)}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select::-webkit-scrollbar-thumb:active{background:rgba(150,150,150,.9)}::ng-deep o-datepicker .ngb-dp-navigation-select .form-select~.form-select{width:100px;min-width:100px;max-width:100px;text-align:center}::ng-deep o-datepicker ngb-datepicker-month{font-size:17px;color:#505e70}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-day,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-weekday{width:40px;height:40px;max-height:40px;text-align:center;display:flex;align-items:center;justify-content:center;margin:.25rem 0;padding:0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week{gap:8px;padding:.25rem 0;display:flex;align-items:center;justify-content:center;margin:auto;border-radius:0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week.ngb-dp-weekdays{justify-content:space-between;padding:.25rem 0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week.ngb-dp-weekdays .ngb-dp-weekday{font-weight:700;font-size:17px;font-style:normal}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week:nth-child(even){background-color:#fff;margin:.25rem 0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week.ngb-dp-week:nth-child(odd){background-color:#f5f9fc}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day{border-radius:50%;display:flex;justify-content:center;align-items:center;width:100%;height:100%;min-width:100%}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.has-task{color:#fff;background-color:#38485c}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day:hover,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.focused,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.bg-primary{background-color:#007bc7;color:#fff}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.bg-primary{background-color:#007bc7!important}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.hidden{color:#9eaab8}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.focused{box-shadow:0 0 0 .125rem #005387}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled-weekend,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled.bg-primary{cursor:not-allowed;background:transparent;color:#9eaab8}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled-weekend:hover,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled-weekend.focused,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled:hover,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled.focused,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled.bg-primary:hover,::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .custom-day.disabled.bg-primary.focused{background-color:transparent;color:#9eaab8;border-radius:0}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .ngb-dp-day.ngb-dp-today:focus{outline:none}::ng-deep o-datepicker ngb-datepicker-month .ngb-dp-week .ngb-dp-day.ngb-dp-today:focus .custom-day{box-shadow:0 0 0 .125rem #005387}::ng-deep o-datepicker .form-inline,::ng-deep o-datepicker .form-group,::ng-deep o-datepicker .input-group{display:flex;flex-direction:row}::ng-deep o-datepicker .form-inline .form-control,::ng-deep o-datepicker .form-group .form-control,::ng-deep o-datepicker .input-group .form-control{height:40px;min-height:40px;max-height:40px;margin-right:8px}::ng-deep o-datepicker .form-inline input,::ng-deep o-datepicker .form-group input,::ng-deep o-datepicker .input-group input{width:275px;min-width:275px;max-width:275px}\n"] }]
}], ctorParameters: function () { return [{ type: i1.NgbCalendar }, { type: i2.TasksService }]; }, propDecorators: { isPopUp: [{
type: Input
}], firstDayOfWeek: [{
type: Input
}], outsideDays: [{
type: Input
}], minDate: [{
type: Input
}], maxDate: [{
type: Input
}], startDate: [{
type: Input
}], disabledWeekends: [{
type: Input
}], disabledDates: [{
type: Input
}], dateSelected: [{
type: Output
}], taskSelected: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vYmVsaXNjby9kYXRlcGlja2VyL28tZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtb2JlbGlzY28vZGF0ZXBpY2tlci9vLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxpQkFBaUIsRUFBdUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFHMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUd2QixNQUFNLE9BQU8sSUFBSTtJQURqQjtRQUVFLGFBQVEsR0FBRyxJQUFJLENBQUM7S0FDakI7O2lHQUZZLElBQUk7cUdBQUosSUFBSTsyRkFBSixJQUFJO2tCQURoQixVQUFVOztBQU1YLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxpQkFBaUI7SUFDekQsWUFBb0IsS0FBVztRQUM3QixLQUFLLEVBQUUsQ0FBQztRQURVLFVBQUssR0FBTCxLQUFLLENBQU07SUFFL0IsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFlO1FBQzdCLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ1EsWUFBWTtRQUNuQixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFD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QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDOztpSEE1SFUsb0JBQW9CO3FHQUFwQixvQkFBb0Isb1ZBRnBCLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLDBCQ3pDbkYsNjZEQWtFQTsyRkR2QmEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGNBQWMsYUFHYixDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQzs2SEFHakUsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRVcsWUFBWTtzQkFBNUIsTUFBTTtnQkFDVSxZQUFZO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkRhdGVwaWNrZXJJMThuLCBOZ2JDYWxlbmRhciwgTmdiRGF0ZVN0cnVjdCwgTmdiRGF0ZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgVGFza3NTZXJ2aWNlIH0gZnJvbSAnbmd4LW9iZWxpc2NvLWV4YW1wbGUvY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEkxOE5fVkFMVUVTIH0gZnJvbSAnLi9pMThuLmNvbnN0YW5zJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJUYXNrLCBEYXRlcGlja2VyRGF0ZSB9IGZyb20gJ25neC1vYmVsaXNjby1leGFtcGxlL2NvcmUvbW9kZWxzJztcclxuXHJcbmNvbnN0IE5PVyA9IG5ldyBEYXRlKCk7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBJMThuIHtcclxuICBsYW5ndWFnZSA9ICdhcic7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVwaWNrZXJJMThuIGV4dGVuZHMgTmdiRGF0ZXBpY2tlckkxOG4ge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2kxOG46IEkxOG4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRXZWVrZGF5TGFiZWwod2Vla2RheTogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBJMThOX1ZBTFVFU1t0aGlzLl9pMThuLmxhbmd1YWdlXS53ZWVrZGF5c1t3ZWVrZGF5IC0gMV07XHJcbiAgfVxyXG4gIG92ZXJyaWRlIGdldFdlZWtMYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEkxOE5fVkFMVUVTW3RoaXMuX2kxOG4ubGFuZ3VhZ2VdLndlZWtMYWJlbDtcclxuICB9XHJcbiAgZ2V0TW9udGhTaG9ydE5hbWUobW9udGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gSTE4Tl9WQUxVRVNbdGhpcy5faTE4bi5sYW5ndWFnZV0ubW9udGhzW21vbnRoIC0gMV07XHJcbiAgfVxyXG4gIGdldE1vbnRoRnVsbE5hbWUobW9udGg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRNb250aFNob3J0TmFtZShtb250aCk7XHJcbiAgfVxyXG4gIGdldERheUFyaWFMYWJlbChkYXRlOiBEYXRlcGlja2VyRGF0ZSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7ZGF0ZS5kYXl9LSR7ZGF0ZS5tb250aH0tJHtkYXRlLnllYXJ9YDtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnby1kYXRlcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vby1kYXRlcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9vLWRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtJMThuLCB7IHByb3ZpZGU6IE5nYkRhdGVwaWNrZXJJMThuLCB1c2VDbGFzczogQ3VzdG9tRGF0ZXBpY2tlckkxOG4gfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE9EYXRlcGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpc1BvcFVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSA3O1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBvdXRzaWRlRGF5czogJ3Zpc2libGUnIHwgJ2hpZGRlbicgPSAnaGlkZGVuJztcclxuICBASW5wdXQoKSBwdWJsaWMgbWluRGF0ZTogRGF0ZXBpY2tlckRhdGUgPSB7IHllYXI6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSwgbW9udGg6IDEsIGRheTogMSB9O1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtYXhEYXRlOiBEYXRlcGlja2VyRGF0ZSA9IHsgeWVhcjogbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICsgNSwgbW9udGg6IDEyLCBkYXk6IDMxIH07XHJcbiAgQElucHV0KCkgcHVibGljIHN0YXJ0RGF0ZTogRGF0ZXBpY2tlckRhdGUgPSB7XHJcbiAgICB5ZWFyOiBOT1cuZ2V0RnVsbFllYXIoKSxcclxuICAgIG1vbnRoOiBOT1cuZ2V0TW9udGgoKSArIDEsXHJcbiAgICBkYXk6IE5PVy5nZXREYXRlKClcclxuICB9O1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZFdlZWtlbmRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkRGF0ZXM6IERhdGVwaWNrZXJEYXRlW10gPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBkYXRlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxEYXRlcGlja2VyRGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVwaWNrZXJEYXRlPigpO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgdGFza1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8RGF0ZVBpY2tlclRhc2tbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVQaWNrZXJUYXNrW10+KCk7XHJcblxyXG4gIG1vZGVsOiBEYXRlcGlja2VyRGF0ZSA9IHsgeWVhcjogTk9XLmdldEZ1bGxZZWFyKCksIG1vbnRoOiBOT1cuZ2V0TW9udGgoKSArIDEsIGRheTogTk9XLmdldERhdGUoKSB9O1xyXG4gIHByaXZhdGUgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsZW5kYXI6IE5nYkNhbGVuZGFyLCBwcml2YXRlIHRhc2tTZXJ2aWNlOiBUYXNrc1NlcnZpY2UpIHt9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSkge1xyXG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHtcclxuICAgICAgICB5ZWFyOiBOT1cuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgICBtb250aDogTk9XLmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICAgIGRheTogTk9XLmdldERhdGUoKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RlbCA9IHRoaXMuc3RhcnREYXRlO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VG9kYXkoKSB7XHJcbiAgICB0aGlzLm1vZGVsID0ge1xyXG4gICAgICB5ZWFyOiBOT1cuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IE5PVy5nZXRNb250aCgpICsgMSxcclxuICAgICAgZGF5OiBOT1cuZ2V0RGF0ZSgpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgaXNXZWVrZW5kKGRhdGU6IERhdGVwaWNrZXJEYXRlKSB7XHJcbiAgICBjb25zdCBkID0gbmV3IERhdGUoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoIC0gMSwgZGF0ZS5kYXkpO1xyXG4gICAgcmV0dXJuIGQuZ2V0RGF5KCkgPT09IDAgfHwgZC5nZXREYXkoKSA9PT0gNjtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWQoZGF0ZTogRGF0ZXBpY2tlckRhdGUsIGN1cnJlbnQ6IHsgbW9udGg6IG51bWJlciB9KSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZFdlZWtlbmRzICYmIHRoaXMuaXNXZWVrZW5kKGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlLm1vbnRoICE9PSBjdXJyZW50Lm1vbnRoIHx8IHRoaXMuaXNEYXRlRGlzYWJsZWQoZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBpc0RhdGVEaXNhYmxlZChkYXRlOiBEYXRlcGlja2VyRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKFxyXG4gICAgICAoZGlzYWJsZWREYXRlKSA9PlxyXG4gICAgICAgIGRpc2FibGVkRGF0ZS55ZWFyID09PSBkYXRlLnllYXIgJiYgZGlzYWJsZWREYXRlLm1vbnRoID09PSBkYXRlLm1vbnRoICYmIGRpc2FibGVkRGF0ZS5kYXkgPT09IGRhdGUuZGF5XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaGFzVGFzayhkYXRlOiBEYXRlcGlja2VyRGF0ZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0ZUhhc1Rhc2soZGF0ZSk7XHJcbiAgfVxyXG5cclxuICBzaG93VGFza3MoZGF0ZTogRGF0ZXBpY2tlckRhdGUsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pc0RhdGVEaXNhYmxlZChkYXRlKSB8fCAodGhpcy5kaXNhYmxlZFdlZWtlbmRzICYmIHRoaXMuaXNXZWVrZW5kKGRhdGUpKSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGFza1NlcnZpY2UudGFzayQudmFsdWUuZmlsdGVyKCh0YXNrKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhc2tEYXRlID0gdGFzay5kYXRlID8gbmV3IERhdGUodGFzay5kYXRlLnllYXIsIHRhc2suZGF0ZS5tb250aCAtIDEsIHRhc2suZGF0ZS5kYXkpIDogbmV3IERhdGUoKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICB0YXNrRGF0ZS5nZXREYXRlKCkgPT09IGRhdGUuZGF5ICYmXHJcbiAgICAgICAgdGFza0RhdGUuZ2V0TW9udGgoKSArIDEgPT09IGRhdGUubW9udGggJiZcclxuICAgICAgICB0YXNrRGF0ZS5nZXRGdWxsWWVhcigpID09PSBkYXRlLnllYXJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUhhc1Rhc2soZGF0ZTogRGF0ZXBpY2tlckRhdGUpIHtcclxuICAgIHJldHVybiB0aGlzLnRhc2tTZXJ2aWNlLnRhc2skLnZhbHVlLnNvbWUoKHRhc2spID0+IHtcclxuICAgICAgY29uc3QgdGFza0RhdGUgPSB0YXNrLmRhdGUgPyBuZXcgRGF0ZSh0YXNrLmRhdGUueWVhciwgdGFzay5kYXRlLm1vbnRoIC0gMSwgdGFzay5kYXRlLmRheSkgOiBuZXcgRGF0ZSgpO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRhc2tEYXRlLmdldERhdGUoKSA9PT0gZGF0ZS5kYXkgJiZcclxuICAgICAgICB0YXNrRGF0ZS5nZXRNb250aCgpICsgMSA9PT0gZGF0ZS5tb250aCAmJlxyXG4gICAgICAgIHRhc2tEYXRlLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUueWVhclxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXR0YXNrU2VsZWN0ZWQoc2VsZWN0ZWREYXRlOiBEYXRlcGlja2VyRGF0ZSk6IERhdGVQaWNrZXJUYXNrW10ge1xyXG4gICAgbGV0IHRhc2tPZkRhdGU6IERhdGVQaWNrZXJUYXNrW10gPSBbXTtcclxuICAgIHRoaXMudGFza1NlcnZpY2UudGFzayQucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0YXNrcykgPT4ge1xyXG4gICAgICB0YXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGFza0RhdGUgPSBuZXcgRGF0ZSh0YXNrLmRhdGUhLnllYXIsIHRhc2suZGF0ZSEubW9udGggLSAxLCB0YXNrLmRhdGUhLmRheSk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGFza0RhdGUuZ2V0RGF0ZSgpID09PSBzZWxlY3RlZERhdGUuZGF5ICYmXHJcbiAgICAgICAgICB0YXNrRGF0ZS5nZXRNb250aCgpICsgMSA9PT0gc2VsZWN0ZWREYXRlLm1vbnRoICYmXHJcbiAgICAgICAgICB0YXNrRGF0ZS5nZXRGdWxsWWVhcigpID09PSBzZWxlY3RlZERhdGUueWVhclxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGFza09mRGF0ZSA9IHRhc2sudGFzayA/IHRhc2sudGFzayA6IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGFza09mRGF0ZTtcclxuICB9XHJcblxyXG4gIG9uRGF0ZUNoYW5nZShuZXdEYXRlOiBEYXRlcGlja2VyRGF0ZSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWRXZWVrZW5kcyAmJiB0aGlzLmlzV2Vla2VuZChuZXdEYXRlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdChuZXdEYXRlKTtcclxuICAgIGNvbnN0IHRhc2tzID0gdGhpcy5nZXR0YXNrU2VsZWN0ZWQobmV3RGF0ZSk7XHJcbiAgICB0aGlzLnRhc2tTZWxlY3RlZC5lbWl0KHRhc2tzKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMub25EZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tIFBvcFVwID0gZmFsc2UgLS0+XHJcbjxuZ2ItZGF0ZXBpY2tlclxyXG4gICNkcFxyXG4gICpuZ0lmPVwiIWlzUG9wVXBcIlxyXG4gIFsobmdNb2RlbCldPVwibW9kZWxcIlxyXG4gIFtkYXlUZW1wbGF0ZV09XCJjdXN0b21EYXlcIlxyXG4gIFtmaXJzdERheU9mV2Vla109XCJmaXJzdERheU9mV2Vla1wiXHJcbiAgW291dHNpZGVEYXlzXT1cIm91dHNpZGVEYXlzXCJcclxuICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcclxuICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcclxuICBbc3RhcnREYXRlXT1cInN0YXJ0RGF0ZVwiXHJcbiAgKG5nTW9kZWxDaGFuZ2UpPVwib25EYXRlQ2hhbmdlKCRldmVudClcIlxyXG4+PC9uZ2ItZGF0ZXBpY2tlcj5cclxuXHJcbjwhLS0gUG9wVXAgLS0+XHJcbjxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmVcIiAqbmdJZj1cImlzUG9wVXBcIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cImRkLW1tLXl5eXlcIlxyXG4gICAgICAgIG5hbWU9XCJkcFwiXHJcbiAgICAgICAgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICNkPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJtb2RlbFwiXHJcbiAgICAgICAgW2RheVRlbXBsYXRlXT1cImN1c3RvbURheVwiXHJcbiAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cImZpcnN0RGF5T2ZXZWVrXCJcclxuICAgICAgICBbb3V0c2lkZURheXNdPVwib3V0c2lkZURheXNcIlxyXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxyXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgICAgIFtzdGFydERhdGVdPVwic3RhcnREYXRlXCJcclxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cclxuICAgICAgICA8by1idXR0b24gYXJpYUxhYmVsPVwiY2FsZW5kYXJpb1wiIChjbGljayk9XCJkLnRvZ2dsZSgpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImJ4IGJ4cy1jYWxlbmRhclwiPjwvaT5cclxuICAgICAgICA8L28tYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcblxyXG48IS0tIEN1c3RvbSBEYXkgLS0+XHJcbjxuZy10ZW1wbGF0ZVxyXG4gICNjdXN0b21EYXlcclxuICBsZXQtZGF0ZVxyXG4gIGxldC1jdXJyZW50TW9udGg9XCJjdXJyZW50TW9udGhcIlxyXG4gIGxldC1zZWxlY3RlZD1cInNlbGVjdGVkXCJcclxuICBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXHJcbiAgbGV0LWZvY3VzZWQ9XCJmb2N1c2VkXCJcclxuPlxyXG4gIDxzcGFuXHJcbiAgICBjbGFzcz1cImN1c3RvbS1kYXlcIlxyXG4gICAgW2NsYXNzLmZvY3VzZWRdPVwiZm9jdXNlZFwiXHJcbiAgICBbY2xhc3MuYmctcHJpbWFyeV09XCJzZWxlY3RlZFwiXHJcbiAgICBbY2xhc3MuaGlkZGVuXT1cImRhdGUubW9udGggIT09IGN1cnJlbnRNb250aFwiXHJcbiAgICBbY2xhc3MuaGFzLXRhc2tdPVwiaGFzVGFzayhkYXRlKVwiXHJcbiAgICAoY2xpY2spPVwic2hvd1Rhc2tzKGRhdGUsICRldmVudClcIlxyXG4gICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkIHx8IChkaXNhYmxlZFdlZWtlbmRzICYmIGlzV2Vla2VuZChkYXRlKSkgfHwgaXNEYXRlRGlzYWJsZWQoZGF0ZSlcIlxyXG4gID5cclxuICAgIHt7IGRhdGUuZGF5IH19XHJcbiAgPC9zcGFuPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBFbiBwb3B1cCBzaWVtcHJlIGVzdGEgZmlqbyBlbCBkaWEgYWN0dWFsIC0tPlxyXG48IS0tIEVuIHBvcHVwIGVsIGZvcm1hdG8gZGUgbGEgZmVjaGEgICAtLT5cclxuIl19