@nakedobjects/gemini
Version:
Single Page Application client for a Naked Objects application.
272 lines • 80 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { validateDate } from '@nakedobjects/view-models';
import concat from 'lodash-es/concat';
import { DateTime } from 'luxon';
import { BehaviorSubject } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import { focus, safeUnsubscribe } from '../helpers-components';
import { fixedDateFormat, supportedDateFormats } from '@nakedobjects/services';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@angular/forms";
import * as i3 from "../clear.directive";
export class DatePickerOptions {
firstWeekdaySunday;
format;
class;
constructor(obj) {
this.firstWeekdaySunday = obj && obj.firstWeekdaySunday ? obj.firstWeekdaySunday : false;
this.format = obj && obj.format ? obj.format : fixedDateFormat;
this.class = obj && obj.class;
}
}
export class DatePickerComponent {
options;
inputEvents;
outputEvents;
id;
description;
opened;
days;
inputField;
constructor() {
this.opened = false;
this.options = { format: fixedDateFormat };
this.days = [];
this.dateModelValue = null;
this.outputEvents = new EventEmitter();
}
validInputFormats = supportedDateFormats.concat(fixedDateFormat);
dateModelValue;
modelValue = '';
bSubject;
sub;
set model(s) {
this.modelValue = s;
if (this.bSubject) {
this.bSubject.next(s);
}
}
get model() {
return this.modelValue;
}
get currentDate() {
return this.dateModelValue || DateTime.now();
}
set dateModel(date) {
if (date) {
this.dateModelValue = date;
this.outputEvents.emit({ type: 'dateChanged', data: this.dateModel });
}
else {
this.dateModelValue = null;
this.outputEvents.emit({ type: 'dateCleared', data: '' });
}
}
get dateModel() {
return this.dateModelValue;
}
eventsSub;
validateDate(newValue) {
return validateDate(newValue, this.validInputFormats);
}
setDateIfChanged(newDate) {
const currentDate = this.dateModel;
if (!currentDate || !newDate.equals(currentDate)) {
this.setValue(newDate);
setTimeout(() => this.model = this.formatDate());
}
}
inputChanged(newValue) {
const dt = this.validateDate(newValue);
if (dt && dt.isValid) {
this.setDateIfChanged(dt);
}
else {
this.setValue(null);
if (newValue) {
this.outputEvents.emit({ type: 'dateInvalid', data: newValue });
}
}
}
ngOnInit() {
this.options = new DatePickerOptions(this.options);
const optionFormats = this.options.format ? [this.options.format] : [];
this.validInputFormats = concat(optionFormats, this.validInputFormats);
this.outputEvents.emit({ type: 'default', data: 'init' });
if (this.inputEvents) {
this.eventsSub = this.inputEvents.subscribe((e) => {
switch (e.type) {
case 'action': {
if (e.data === 'toggle') {
this.toggle();
}
if (e.data === 'close') {
this.close();
}
if (e.data === 'open') {
this.open();
}
break;
}
case 'setDate': {
const date = this.validateDate(e.data);
if (date && date.isValid) {
this.selectDate(date);
}
else {
throw new Error(`Invalid date: ${e.data}`);
}
break;
}
}
});
}
}
isSame(dt1, dt2) {
return dt1.day === dt2.day && dt1.month === dt2.month && dt1.year === dt2.year;
}
generateCalendar() {
const month = this.currentDate.month;
const year = this.currentDate.year;
let n = 1;
const firstdow = this.currentDate.startOf('month').weekday;
let firstWeekDay = firstdow + 1;
if (firstWeekDay === 8) {
firstWeekDay = 1;
}
if (firstWeekDay !== 1) {
n -= (firstWeekDay + 6) % 7;
}
this.days = [];
const endOfMonth = this.currentDate.endOf('month');
for (let i = n; i <= endOfMonth.day; i += 1) {
const date = DateTime.local(year, month, i);
const today = this.isSame(DateTime.now(), date);
const selected = !!this.dateModel && this.isSame(this.dateModel, date);
const day = {
day: i > 0 ? i : null,
month: i > 0 ? month : null,
year: i > 0 ? year : null,
enabled: i > 0,
today: i > 0 && today,
selected: i > 0 && selected,
dateTime: date
};
this.days.push(day);
}
}
setValue(date) {
this.dateModel = date;
}
formatDate() {
return this.dateModel ? this.dateModel.toFormat(this.options.format) : '';
}
selectDate(date, e) {
if (e) {
e.preventDefault();
}
setTimeout(() => {
this.setValue(date);
this.model = this.formatDate();
});
this.opened = false;
}
writeValue(date) {
if (!date) {
return;
}
this.dateModelValue = date;
}
prevMonth() {
const date = this.currentDate.minus({ month: 1 });
this.setValue(date);
this.model = this.formatDate();
this.generateCalendar();
}
nextMonth() {
const date = this.currentDate.plus({ month: 1 });
this.setValue(date);
this.model = this.formatDate();
this.generateCalendar();
}
prevYear() {
const date = this.currentDate.minus({ year: 1 });
this.setValue(date);
this.model = this.formatDate();
this.generateCalendar();
}
nextYear() {
const date = this.currentDate.plus({ year: 1 });
this.setValue(date);
this.model = this.formatDate();
this.generateCalendar();
}
today() {
this.selectDate(DateTime.now());
}
toggle() {
const change = this.opened ? this.close : this.open;
change();
}
open = () => {
this.generateCalendar();
this.opened = true;
this.outputEvents.emit({ type: 'default', data: 'opened' });
};
close = () => {
this.opened = false;
this.outputEvents.emit({ type: 'default', data: 'closed' });
};
clear() {
this.selectDate(null);
this.model = '';
this.close();
}
get subject() {
if (!this.bSubject) {
const initialValue = this.model;
this.bSubject = new BehaviorSubject(initialValue);
this.sub = this.bSubject
.pipe(debounceTime(1000)).subscribe((data) => this.inputChanged(data));
}
return this.bSubject;
}
classes() {
return {
'datepicker-input': true,
[this.options.class ?? '']: !!(this.options && this.options.class)
};
}
ngOnDestroy() {
safeUnsubscribe(this.sub);
safeUnsubscribe(this.eventsSub);
}
focus() {
return focus(this.inputField);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatePickerComponent, selector: "nof-date-picker", inputs: { options: "options", inputEvents: "inputEvents", id: "id", description: "description" }, outputs: { outputEvents: "outputEvents" }, viewQueries: [{ propertyName: "inputField", first: true, predicate: ["inp"], descendants: true }], ngImport: i0, template: "<div class=\"datepicker-container u-is-unselectable\">\n <div class=\"datepicker-input-container\">\n <input #inp type=\"text\" [ngClass]=\"classes()\" [id]=\"id\" [(ngModel)]=\"model\" [nofClear]=\"subject\" (clear)=\"clear()\" placeholder=\"{{description}}\">\n <div class=\"datepicker-input-icon\" (click)=\"toggle()\">\n <i>\n <svg width=\"58px\" height=\"58px\" viewBox=\"0 0 58 58\" version=\"1.1\">\n <g id=\"calendar\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"Group\" fill-rule=\"nonzero\" fill=\"#000000\">\n <path d=\"M42.899,4.5 C42.434,2.221 40.415,0.5 38,0.5 C37.447,0.5 37,0.947 37,1.5 C37,2.053 37.447,2.5 38,2.5 C39.654,2.5 41,3.846 41,5.5 C41,7.154 39.654,8.5 38,8.5 C37.447,8.5 37,8.947 37,9.5 C37,10.053 37.447,10.5 38,10.5 C40.414,10.5 42.434,8.779 42.899,6.5 L56,6.5 L56,15.5 L2,15.5 L2,6.5 L16,6.5 L19,6.5 C19.553,6.5 20,6.053 20,5.5 C20,4.947 19.553,4.5 19,4.5 L17.184,4.5 C17.598,3.338 18.698,2.5 20,2.5 C21.654,2.5 23,3.846 23,5.5 C23,7.154 21.654,8.5 20,8.5 C19.447,8.5 19,8.947 19,9.5 C19,10.053 19.447,10.5 20,10.5 C22.757,10.5 25,8.257 25,5.5 C25,2.743 22.757,0.5 20,0.5 C17.586,0.5 15.566,2.221 15.101,4.5 L0,4.5 L0,17.5 L0,57.5 L58,57.5 L58,17.5 L58,4.5 L42.899,4.5 Z M56,55.5 L2,55.5 L2,17.5 L56,17.5 L56,55.5 Z\" id=\"Shape\"></path>\n <path d=\"M26,2.5 C27.654,2.5 29,3.846 29,5.5 C29,7.154 27.654,8.5 26,8.5 C25.447,8.5 25,8.947 25,9.5 C25,10.053 25.447,10.5 26,10.5 C28.757,10.5 31,8.257 31,5.5 C31,2.743 28.757,0.5 26,0.5 C25.447,0.5 25,0.947 25,1.5 C25,2.053 25.447,2.5 26,2.5 Z\" id=\"Shape\"></path>\n <path d=\"M32,2.5 C33.654,2.5 35,3.846 35,5.5 C35,7.154 33.654,8.5 32,8.5 C31.447,8.5 31,8.947 31,9.5 C31,10.053 31.447,10.5 32,10.5 C34.757,10.5 37,8.257 37,5.5 C37,2.743 34.757,0.5 32,0.5 C31.447,0.5 31,0.947 31,1.5 C31,2.053 31.447,2.5 32,2.5 Z\" id=\"Shape\"></path>\n <circle id=\"Oval\" cx=\"22\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"29\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"36\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"43\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"50\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"8\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"15\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"22\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"29\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"36\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"43\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"50\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"8\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"15\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"22\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"29\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"36\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"43\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"50\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"8\" cy=\"47.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"15\" cy=\"47.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"22\" cy=\"47.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"29\" cy=\"47.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"36\" cy=\"47.5\" r=\"1\"></circle>\n </g>\n </g>\n </svg>\n </i>\n </div>\n </div>\n <div class=\"datepicker-calendar\" *ngIf=\"opened\">\n <div class=\"datepicker-calendar-top\">\n <i (click)=\"prevYear()\">\n <svg class=\"prevYear\" width=\"190px\" height=\"306px\" viewBox=\"58 0 190 306\" version=\"1.1\">\n <g id=\"keyboard-left-arrow-button\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(58.000000, 0.000000)\">\n <g id=\"chevron-left\" fill-rule=\"nonzero\" fill=\"#000000\">\n <polygon id=\"Shape\" points=\"189.35 35.7 153.65 0 0.65 153 153.65 306 189.35 270.3 72.05 153\"></polygon>\n </g>\n </g>\n </svg>\n </i>\n <span class=\"year-title\">{{ currentDate.toFormat('yyyy') }}</span>\n <i (click)=\"nextYear()\">\n <svg class = \"nextYear\" width=\"190px\" height=\"306px\" viewBox=\"58 0 190 306\" version=\"1.1\">\n <g id=\"keyboard-right-arrow-button\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(58.000000, 0.000000)\">\n <g id=\"chevron-right\" fill-rule=\"nonzero\" fill=\"#000000\">\n <polygon id=\"Shape\" points=\"36.35 0 0.65 35.7 117.95 153 0.65 270.3 36.35 306 189.35 153\"></polygon>\n </g>\n </g>\n </svg>\n </i>\n </div>\n <div class=\"datepicker-calendar-container\">\n <div>\n <div class=\"datepicker-calendar-month-section\">\n <i (click)=\"prevMonth()\">\n <svg width=\"190px\" height=\"306px\" viewBox=\"58 0 190 306\" version=\"1.1\">\n <g id=\"keyboard-left-arrow-button\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(58.000000, 0.000000)\">\n <g id=\"chevron-left\" fill-rule=\"nonzero\" fill=\"#000000\">\n <polygon id=\"Shape\" points=\"189.35 35.7 153.65 0 0.65 153 153.65 306 189.35 270.3 72.05 153\"></polygon>\n </g>\n </g>\n </svg>\n </i>\n <span class=\"month-title\">{{ currentDate.toFormat('MMMM') }}</span>\n <i (click)=\"nextMonth()\">\n <svg width=\"190px\" height=\"306px\" viewBox=\"58 0 190 306\" version=\"1.1\">\n <g id=\"keyboard-right-arrow-button\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(58.000000, 0.000000)\">\n <g id=\"chevron-right\" fill-rule=\"nonzero\" fill=\"#000000\">\n <polygon id=\"Shape\" points=\"36.35 0 0.65 35.7 117.95 153 0.65 270.3 36.35 306 189.35 153\"></polygon>\n </g>\n </g>\n </svg>\n </i>\n </div>\n <div class=\"datepicker-calendar-day-names\">\n <span>S</span>\n <span>M</span>\n <span>T</span>\n <span>W</span>\n <span>T</span>\n <span>F</span>\n <span>S</span>\n </div>\n <div class=\"datepicker-calendar-days-container\">\n <span class=\"day\" *ngFor=\"let d of days; let i = index\" (click)=\"selectDate(d.dateTime, $event)\" [ngClass]=\"{ 'disabled': !d.enabled, 'today': d.today, 'selected': d.selected }\">\n {{ d.day }}\n </span>\n </div>\n <div class=\"datepicker-buttons\">\n <button type=\"button\" class=\"a-button u-is-secondary u-is-small\" (click)=\"clear()\" value=\"Clear\">Clear</button>\n <button type=\"button\" class=\"a-button u-is-primary u-is-small\" (click)=\"today()\" value=\"Today\">Today</button>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".datepicker-container{display:inline-block}.datepicker-container .datepicker-input-container{display:inline-block;background:transparent}.datepicker-input{width:calc(var(--field-value-width) - 30px);height:20px}.datepicker-container .datepicker-input-container .datepicker-input-icon{display:inline-block}.datepicker-container .datepicker-input-container .datepicker-input-icon:before{background-color:#fff;padding-left:var(--space-1);font-family:iconFont;font-size:16px;font-weight:var(--font-weight-1);font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline-block;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0;position:relative;cursor:pointer;content:\"\\e020\";color:#000}.datepicker-input-icon{padding-left:5px}.datepicker-container .datepicker-input-container .datepicker-input-icon i{cursor:pointer}.datepicker-container .datepicker-input-container .datepicker-input-icon i svg{display:none}.datepicker-container .datepicker-input-container .datepicker-input-icon i svg g g{fill:#000}.datepicker-container .datepicker-calendar{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:var(--field-value-width);z-index:99;background:#fff;border-radius:0;box-shadow:0 2px 5px #00000080}.datepicker-container .datepicker-calendar .datepicker-calendar-top{width:100%;background:#000;display:inline-block;position:relative}.datepicker-container .datepicker-calendar .datepicker-calendar-top .year-title{display:block;color:#fff;font-size:18px;text-align:center}.datepicker-container .datepicker-calendar .datepicker-calendar-top button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;margin:0 auto;color:#fff;text-transform:uppercase;background:transparent;border:none;outline:none;font-size:12px;cursor:pointer;position:relative}.datepicker-container .datepicker-calendar .datepicker-calendar-top button svg{display:block;float:left;width:15px;height:15px;top:2px;left:12px}.datepicker-container .datepicker-calendar .datepicker-calendar-top button svg g{fill:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-top button svg g path{fill:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-top .close{top:5px;right:5px;font-size:20px;color:#fff;cursor:pointer}.datepicker-container .datepicker-calendar .datepicker-calendar-top .close svg{width:12px;height:12px}.datepicker-container .datepicker-calendar .datepicker-calendar-top .close svg g path{fill:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-container{display:inline-block;width:100%;padding:var(--space-4);background:#222628}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-month-section{width:100%;display:flex;justify-content:space-between;font-size:14px;color:#ddd;text-transform:uppercase}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-month-section i{cursor:pointer}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-month-section i:first-child{margin-left:12px}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-month-section i:last-child{margin-right:12px}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-day-names{width:230px;margin-top:var(--space-4);display:inline-block;border:1px solid transparent;color:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-day-names span{font-size:12px;display:block;float:left;width:calc(100% / 7);text-align:center}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container{width:230px;margin-top:5px;display:inline-block;border:1px solid transparent}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day{display:flex;justify-content:center;align-items:center;float:left;font-size:14px;color:#8e8e8e;width:calc(100% / 7);height:33px;text-align:center;border-radius:0;cursor:pointer}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day:hover:not(.disabled),.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day.selected{background:#222628;border:1px solid white;border-radius:0}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day.disabled{pointer-events:none}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day.today{color:#366aab}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-years-container{width:100%;height:240px}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-years-container .year{display:flex;justify-content:center;align-items:center;float:left;font-size:14px;color:#8e8e8e;width:25%;height:50px;text-align:center;border-radius:0;cursor:pointer}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-years-container .year:hover,.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-years-container .year.selected{background:#222628;border:1px solid #366aab;border-radius:0}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons{width:235px;display:flex;justify-content:center}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button{width:100%;outline:none;display:inline-block;background:#099268;color:#fff;margin-right:5px;cursor:pointer;text-align:center;padding:5px var(--space-4);border:1px solid #366aab;border-radius:0}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-primary{background:#366aab}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-primary:active{background:#222628}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-secondary{background:#222628;color:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-secondary:active{background:#366aab;color:#ddd}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-secondary:hover{color:#fff}.datepicker-container svg{display:block;width:20px;height:20px}.datepicker-container svg g{fill:#fff}.datepicker-container svg g g{fill:#fff}input{width:var(--field-value-width);padding-left:2px}input.datepicker-parameter{border-style:solid;border-color:#000;border-width:1px}input.datepicker-property{border:none}.ng-clearable{background-image:var(--clearable-image);background-repeat:no-repeat;background-position:right -10px;background-size:8px}.ng-clearable[class*=link-color]{background-image:var(--clearable-link-image)}.ng-clearable.ng-x{background-position:right 2px center}.ng-clearable.ng-onX{cursor:pointer}input::-ms-clear{display:none}.datepicker-calendar-top{padding-top:5px;padding-bottom:5px}.prevYear{margin-left:20px;float:left}.year-title{width:170px;align-content:center;float:left}.nextYear{float:right;margin-right:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.ClearDirective, selector: "[nofClear]", inputs: ["nofClear"], outputs: ["clear"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatePickerComponent, decorators: [{
type: Component,
args: [{ selector: 'nof-date-picker', template: "<div class=\"datepicker-container u-is-unselectable\">\n <div class=\"datepicker-input-container\">\n <input #inp type=\"text\" [ngClass]=\"classes()\" [id]=\"id\" [(ngModel)]=\"model\" [nofClear]=\"subject\" (clear)=\"clear()\" placeholder=\"{{description}}\">\n <div class=\"datepicker-input-icon\" (click)=\"toggle()\">\n <i>\n <svg width=\"58px\" height=\"58px\" viewBox=\"0 0 58 58\" version=\"1.1\">\n <g id=\"calendar\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"Group\" fill-rule=\"nonzero\" fill=\"#000000\">\n <path d=\"M42.899,4.5 C42.434,2.221 40.415,0.5 38,0.5 C37.447,0.5 37,0.947 37,1.5 C37,2.053 37.447,2.5 38,2.5 C39.654,2.5 41,3.846 41,5.5 C41,7.154 39.654,8.5 38,8.5 C37.447,8.5 37,8.947 37,9.5 C37,10.053 37.447,10.5 38,10.5 C40.414,10.5 42.434,8.779 42.899,6.5 L56,6.5 L56,15.5 L2,15.5 L2,6.5 L16,6.5 L19,6.5 C19.553,6.5 20,6.053 20,5.5 C20,4.947 19.553,4.5 19,4.5 L17.184,4.5 C17.598,3.338 18.698,2.5 20,2.5 C21.654,2.5 23,3.846 23,5.5 C23,7.154 21.654,8.5 20,8.5 C19.447,8.5 19,8.947 19,9.5 C19,10.053 19.447,10.5 20,10.5 C22.757,10.5 25,8.257 25,5.5 C25,2.743 22.757,0.5 20,0.5 C17.586,0.5 15.566,2.221 15.101,4.5 L0,4.5 L0,17.5 L0,57.5 L58,57.5 L58,17.5 L58,4.5 L42.899,4.5 Z M56,55.5 L2,55.5 L2,17.5 L56,17.5 L56,55.5 Z\" id=\"Shape\"></path>\n <path d=\"M26,2.5 C27.654,2.5 29,3.846 29,5.5 C29,7.154 27.654,8.5 26,8.5 C25.447,8.5 25,8.947 25,9.5 C25,10.053 25.447,10.5 26,10.5 C28.757,10.5 31,8.257 31,5.5 C31,2.743 28.757,0.5 26,0.5 C25.447,0.5 25,0.947 25,1.5 C25,2.053 25.447,2.5 26,2.5 Z\" id=\"Shape\"></path>\n <path d=\"M32,2.5 C33.654,2.5 35,3.846 35,5.5 C35,7.154 33.654,8.5 32,8.5 C31.447,8.5 31,8.947 31,9.5 C31,10.053 31.447,10.5 32,10.5 C34.757,10.5 37,8.257 37,5.5 C37,2.743 34.757,0.5 32,0.5 C31.447,0.5 31,0.947 31,1.5 C31,2.053 31.447,2.5 32,2.5 Z\" id=\"Shape\"></path>\n <circle id=\"Oval\" cx=\"22\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"29\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"36\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"43\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"50\" cy=\"24.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"8\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"15\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"22\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"29\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"36\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"43\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"50\" cy=\"32.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"8\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"15\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"22\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"29\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"36\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"43\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"50\" cy=\"39.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"8\" cy=\"47.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"15\" cy=\"47.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"22\" cy=\"47.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"29\" cy=\"47.5\" r=\"1\"></circle>\n <circle id=\"Oval\" cx=\"36\" cy=\"47.5\" r=\"1\"></circle>\n </g>\n </g>\n </svg>\n </i>\n </div>\n </div>\n <div class=\"datepicker-calendar\" *ngIf=\"opened\">\n <div class=\"datepicker-calendar-top\">\n <i (click)=\"prevYear()\">\n <svg class=\"prevYear\" width=\"190px\" height=\"306px\" viewBox=\"58 0 190 306\" version=\"1.1\">\n <g id=\"keyboard-left-arrow-button\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(58.000000, 0.000000)\">\n <g id=\"chevron-left\" fill-rule=\"nonzero\" fill=\"#000000\">\n <polygon id=\"Shape\" points=\"189.35 35.7 153.65 0 0.65 153 153.65 306 189.35 270.3 72.05 153\"></polygon>\n </g>\n </g>\n </svg>\n </i>\n <span class=\"year-title\">{{ currentDate.toFormat('yyyy') }}</span>\n <i (click)=\"nextYear()\">\n <svg class = \"nextYear\" width=\"190px\" height=\"306px\" viewBox=\"58 0 190 306\" version=\"1.1\">\n <g id=\"keyboard-right-arrow-button\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(58.000000, 0.000000)\">\n <g id=\"chevron-right\" fill-rule=\"nonzero\" fill=\"#000000\">\n <polygon id=\"Shape\" points=\"36.35 0 0.65 35.7 117.95 153 0.65 270.3 36.35 306 189.35 153\"></polygon>\n </g>\n </g>\n </svg>\n </i>\n </div>\n <div class=\"datepicker-calendar-container\">\n <div>\n <div class=\"datepicker-calendar-month-section\">\n <i (click)=\"prevMonth()\">\n <svg width=\"190px\" height=\"306px\" viewBox=\"58 0 190 306\" version=\"1.1\">\n <g id=\"keyboard-left-arrow-button\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(58.000000, 0.000000)\">\n <g id=\"chevron-left\" fill-rule=\"nonzero\" fill=\"#000000\">\n <polygon id=\"Shape\" points=\"189.35 35.7 153.65 0 0.65 153 153.65 306 189.35 270.3 72.05 153\"></polygon>\n </g>\n </g>\n </svg>\n </i>\n <span class=\"month-title\">{{ currentDate.toFormat('MMMM') }}</span>\n <i (click)=\"nextMonth()\">\n <svg width=\"190px\" height=\"306px\" viewBox=\"58 0 190 306\" version=\"1.1\">\n <g id=\"keyboard-right-arrow-button\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(58.000000, 0.000000)\">\n <g id=\"chevron-right\" fill-rule=\"nonzero\" fill=\"#000000\">\n <polygon id=\"Shape\" points=\"36.35 0 0.65 35.7 117.95 153 0.65 270.3 36.35 306 189.35 153\"></polygon>\n </g>\n </g>\n </svg>\n </i>\n </div>\n <div class=\"datepicker-calendar-day-names\">\n <span>S</span>\n <span>M</span>\n <span>T</span>\n <span>W</span>\n <span>T</span>\n <span>F</span>\n <span>S</span>\n </div>\n <div class=\"datepicker-calendar-days-container\">\n <span class=\"day\" *ngFor=\"let d of days; let i = index\" (click)=\"selectDate(d.dateTime, $event)\" [ngClass]=\"{ 'disabled': !d.enabled, 'today': d.today, 'selected': d.selected }\">\n {{ d.day }}\n </span>\n </div>\n <div class=\"datepicker-buttons\">\n <button type=\"button\" class=\"a-button u-is-secondary u-is-small\" (click)=\"clear()\" value=\"Clear\">Clear</button>\n <button type=\"button\" class=\"a-button u-is-primary u-is-small\" (click)=\"today()\" value=\"Today\">Today</button>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".datepicker-container{display:inline-block}.datepicker-container .datepicker-input-container{display:inline-block;background:transparent}.datepicker-input{width:calc(var(--field-value-width) - 30px);height:20px}.datepicker-container .datepicker-input-container .datepicker-input-icon{display:inline-block}.datepicker-container .datepicker-input-container .datepicker-input-icon:before{background-color:#fff;padding-left:var(--space-1);font-family:iconFont;font-size:16px;font-weight:var(--font-weight-1);font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;display:inline-block;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0;position:relative;cursor:pointer;content:\"\\e020\";color:#000}.datepicker-input-icon{padding-left:5px}.datepicker-container .datepicker-input-container .datepicker-input-icon i{cursor:pointer}.datepicker-container .datepicker-input-container .datepicker-input-icon i svg{display:none}.datepicker-container .datepicker-input-container .datepicker-input-icon i svg g g{fill:#000}.datepicker-container .datepicker-calendar{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:var(--field-value-width);z-index:99;background:#fff;border-radius:0;box-shadow:0 2px 5px #00000080}.datepicker-container .datepicker-calendar .datepicker-calendar-top{width:100%;background:#000;display:inline-block;position:relative}.datepicker-container .datepicker-calendar .datepicker-calendar-top .year-title{display:block;color:#fff;font-size:18px;text-align:center}.datepicker-container .datepicker-calendar .datepicker-calendar-top button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;margin:0 auto;color:#fff;text-transform:uppercase;background:transparent;border:none;outline:none;font-size:12px;cursor:pointer;position:relative}.datepicker-container .datepicker-calendar .datepicker-calendar-top button svg{display:block;float:left;width:15px;height:15px;top:2px;left:12px}.datepicker-container .datepicker-calendar .datepicker-calendar-top button svg g{fill:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-top button svg g path{fill:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-top .close{top:5px;right:5px;font-size:20px;color:#fff;cursor:pointer}.datepicker-container .datepicker-calendar .datepicker-calendar-top .close svg{width:12px;height:12px}.datepicker-container .datepicker-calendar .datepicker-calendar-top .close svg g path{fill:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-container{display:inline-block;width:100%;padding:var(--space-4);background:#222628}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-month-section{width:100%;display:flex;justify-content:space-between;font-size:14px;color:#ddd;text-transform:uppercase}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-month-section i{cursor:pointer}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-month-section i:first-child{margin-left:12px}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-month-section i:last-child{margin-right:12px}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-day-names{width:230px;margin-top:var(--space-4);display:inline-block;border:1px solid transparent;color:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-day-names span{font-size:12px;display:block;float:left;width:calc(100% / 7);text-align:center}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container{width:230px;margin-top:5px;display:inline-block;border:1px solid transparent}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day{display:flex;justify-content:center;align-items:center;float:left;font-size:14px;color:#8e8e8e;width:calc(100% / 7);height:33px;text-align:center;border-radius:0;cursor:pointer}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day:hover:not(.disabled),.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day.selected{background:#222628;border:1px solid white;border-radius:0}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day.disabled{pointer-events:none}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-days-container .day.today{color:#366aab}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-years-container{width:100%;height:240px}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-years-container .year{display:flex;justify-content:center;align-items:center;float:left;font-size:14px;color:#8e8e8e;width:25%;height:50px;text-align:center;border-radius:0;cursor:pointer}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-years-container .year:hover,.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-calendar-years-container .year.selected{background:#222628;border:1px solid #366aab;border-radius:0}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons{width:235px;display:flex;justify-content:center}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button{width:100%;outline:none;display:inline-block;background:#099268;color:#fff;margin-right:5px;cursor:pointer;text-align:center;padding:5px var(--space-4);border:1px solid #366aab;border-radius:0}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-primary{background:#366aab}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-primary:active{background:#222628}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-secondary{background:#222628;color:#fff}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-secondary:active{background:#366aab;color:#ddd}.datepicker-container .datepicker-calendar .datepicker-calendar-container .datepicker-buttons button.u-is-secondary:hover{color:#fff}.datepicker-container svg{display:block;width:20px;height:20px}.datepicker-container svg g{fill:#fff}.datepicker-container svg g g{fill:#fff}input{width:var(--field-value-width);padding-left:2px}input.datepicker-parameter{border-style:solid;border-color:#000;border-width:1px}input.datepicker-property{border:none}.ng-clearable{background-image:var(--clearable-image);background-repeat:no-repeat;background-position:right -10px;background-size:8px}.ng-clearable[class*=link-color]{background-image:var(--clearable-link-image)}.ng-clearable.ng-x{background-position:right 2px center}.ng-clearable.ng-onX{cursor:pointer}input::-ms-clear{display:none}.datepicker-calendar-top{padding-top:5px;padding-bottom:5px}.prevYear{margin-left:20px;float:left}.year-title{width:170px;align-content:center;float:left}.nextYear{float:right;margin-right:20px}\n"] }]
}], ctorParameters: () => [], propDecorators: { options: [{
type: Input,
args: [{ required: true }]
}], inputEvents: [{
type: Input,
args: [{ required: true }]
}], outputEvents: [{
type: Output
}], id: [{
type: Input,
args: [{ required: true }]
}], description: [{
type: Input,
args: [{ required: true }]
}], inputField: [{
type: ViewChild,
args: ['inp', { static: false }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZ2VtaW5pL3NyYy9kYXRlLXBpY2tlci9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9nZW1pbmkvc3JjL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLE1BQU0sTUFBTSxrQkFBa0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQXFDLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFzQy9FLE1BQU0sT0FBTyxpQkFBaUI7SUFDMUIsa0JBQWtCLENBQVc7SUFDN0IsTUFBTSxDQUFTO0lBQ2YsS0FBSyxDQUFVO0lBRWYsWUFBWSxHQUF1QjtRQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDekYsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQy9ELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDbEMsQ0FBQztDQUNKO0FBaUJELE1BQU0sT0FBTyxtQkFBbUI7SUFHNUIsT0FBTyxDQUFvQjtJQUczQixXQUFXLENBQXVDO0lBR2xELFlBQVksQ0FBdUM7SUFHbkQsRUFBRSxDQUFVO0lBR1osV0FBVyxDQUFVO0lBRXJCLE1BQU0sQ0FBVTtJQUNoQixJQUFJLENBQWtCO0lBR3RCLFVBQVUsQ0FBYztJQUV4QjtRQUNJLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBQyxNQUFNLEVBQUcsZUFBZSxFQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUUzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUEwQixDQUFDO0lBQ25FLENBQUM7SUFFTyxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFakUsY0FBYyxDQUFrQjtJQUNoQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBRWhCLFFBQVEsQ0FBMkI7SUFDbkMsR0FBRyxDQUFpQjtJQUU1QixJQUFJLEtBQUssQ0FBQyxDQUFTO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLGNBQWMsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLElBQXFCO1FBQy9CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFTyxTQUFTLENBQWlCO0lBRTFCLFlBQVksQ0FBQyxRQUFnQjtRQUNqQyxPQUFPLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQWlCO1FBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQWdCO1FBRXpCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDcEUsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFtQyxDQUFDLENBQUM7UUFFM0YsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQXdCLEVBQUUsRUFBRTtnQkFDckUsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2IsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUNaLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQzs0QkFDdEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNsQixDQUFDO3dCQUNELElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzs0QkFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNqQixDQUFDO3dCQUNELElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQzs0QkFDcEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNoQixDQUFDO3dCQUNELE1BQU07b0JBQ1YsQ0FBQztvQkFDRCxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3ZDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDMUIsQ0FBQzs2QkFBTSxDQUFDOzRCQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUMvQyxDQUFDO3dCQUVELE1BQU07b0JBQ1YsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVPLE1BQU0sQ0FBRSxHQUFjLEVBQUUsR0FBYztRQUMxQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFHRCxnQkFBZ0I7UUFFWixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDM0QsSUFBSSxZQUFZLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVoQyxJQUFJLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVmLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksR0FBYSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEQsTUFBTSxLQUFLLEdBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekQsTUFBTSxRQUFRLEdBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRWhGLE1BQU0sR0FBRyxHQUFrQjtnQkFDdkIsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDckIsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDM0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDekIsT0FBTyxFQUFFLENBQUMsR0F