@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
794 lines • 88.7 kB
JavaScript
var IgxCalendarComponent_1;
import { __decorate, __metadata } from "tslib";
import { transition, trigger, useAnimation } from '@angular/animations';
import { Component, ContentChild, forwardRef, HostBinding, HostListener, Input, ViewChild, ElementRef, ViewChildren, QueryList } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { fadeIn, scaleInCenter, slideInLeft, slideInRight } from '../animations/main';
import { IgxCalendarHeaderTemplateDirective, IgxCalendarSubheaderTemplateDirective } from './calendar.directives';
import { monthRange } from './calendar';
import { CalendarView, IgxMonthPickerBaseDirective } from './month-picker-base';
import { IgxMonthsViewComponent } from './months-view/months-view.component';
import { IgxYearsViewComponent } from './years-view/years-view.component';
import { IgxDaysViewComponent } from './days-view/days-view.component';
import { interval } from 'rxjs';
import { takeUntil, debounce, skipLast, switchMap } from 'rxjs/operators';
import { ScrollMonth } from './calendar-base';
let NEXT_ID = 0;
/**
* **Ignite UI for Angular Calendar** -
* [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/calendar.html)
*
* The Ignite UI Calendar provides an easy way to display a calendar and allow users to select dates using single, multiple
* or range selection.
*
* Example:
* ```html
* <igx-calendar selection="range"></igx-calendar>
* ```
*/
let IgxCalendarComponent = IgxCalendarComponent_1 = class IgxCalendarComponent extends IgxMonthPickerBaseDirective {
constructor() {
super(...arguments);
/**
* Sets/gets the `id` of the calendar.
* If not set, the `id` will have value `"igx-calendar-0"`.
* ```html
* <igx-calendar id = "my-first-calendar"></igx-calendar>
* ```
* ```typescript
* let calendarId = this.calendar.id;
* ```
* @memberof IgxCalendarComponent
*/
this.id = `igx-calendar-${NEXT_ID++}`;
this.hasHeader = true;
/**
* Sets/gets whether the calendar header will be in vertical position.
* Default value is `false`.
* ```html
* <igx-calendar [vertical] = "true"></igx-calendar>
* ```
* ```typescript
* let isVertical = this.calendar.vertical;
* ```
*/
this.vertical = false;
/**
* @hidden
*/
this.animationAction = '';
/**
* @hidden
*/
this.isKeydownTrigger = false;
/**
* The default `tabindex` attribute for the component.
*
* @hidden
*/
this.tabindex = 0;
/**
* The default aria role attribute for the component.
*
* @hidden
*/
this.role = 'grid';
/**
* The default aria lebelled by attribute for the component.
*
* @hidden
*/
this.ariaLabelledBy = 'calendar';
/**
* The default css class applied to the component.
*
* @hidden
*/
this.styleClass = true;
/**
*@hidden
*/
this._monthsViewNumber = 1;
/**
*@hidden
*/
this.defaultDayView = {
value: this.value,
viewDate: this.viewDate
};
/**
*@hidden
*/
this.dayViews = [this.defaultDayView];
/**
* @hidden
*/
this.startPrevMonthScroll = (isKeydownTrigger = false) => {
this.startMonthScroll$.next();
this.monthScrollDirection = ScrollMonth.PREV;
this.previousMonth(isKeydownTrigger);
};
/**
* @hidden
*/
this.startNextMonthScroll = (isKeydownTrigger = false) => {
this.startMonthScroll$.next();
this.monthScrollDirection = ScrollMonth.NEXT;
this.nextMonth(isKeydownTrigger);
};
/**
* @hidden
*/
this.stopMonthScroll = (event) => {
event.stopPropagation();
// generally the scrolling is built on the calendar component
// and all start/stop scrolling methods are called on the calendar
// if we change below lines to call stopMonthScroll$ on the calendar instead of on the views,
// strange bug is introduced --> after changing number of months, continuous scrolling on mouse click does not happen
this.daysView.stopMonthScroll$.next(true);
this.daysView.stopMonthScroll$.complete();
if (this.monthScrollDirection === ScrollMonth.PREV) {
this.prevMonthBtn.nativeElement.focus();
}
else if (this.monthScrollDirection === ScrollMonth.NEXT) {
this.nextMonthBtn.nativeElement.focus();
}
this.monthScrollDirection = ScrollMonth.NONE;
};
}
/**
* Sets/gets the number of month views displayed.
* Default value is `1`.
* ```html
* <igx-calendar [vertical] = "true" [monthsViewNumber]="2"></igx-calendar>
* ```
* ```typescript
* let monthViewsDisplayed = this.calendar.monthsViewNumber;
* ```
*/
get monthsViewNumber() {
return this._monthsViewNumber;
}
set monthsViewNumber(val) {
if (this._monthsViewNumber === val || val <= 0) {
return;
}
else if (this._monthsViewNumber < val) {
for (let i = this._monthsViewNumber; i < val; i++) {
const nextMonthDate = new Date(this.viewDate);
nextMonthDate.setMonth(nextMonthDate.getMonth() + i);
const monthView = {
value: null,
viewDate: nextMonthDate
};
this.dayViews.push(monthView);
}
this._monthsViewNumber = val;
}
else {
this.dayViews.splice(val, this.dayViews.length - val);
this._monthsViewNumber = val;
}
}
/**
* The default css class applied to the component.
*
* @hidden
*/
get styleVerticalClass() {
return this.vertical;
}
/**
* @hidden
*/
get isYearView() {
return this.activeView === CalendarView.YEAR;
}
/**
* Gets the header template.
* ```typescript
* let headerTemplate = this.calendar.headerTeamplate;
* ```
* @memberof IgxCalendarComponent
*/
get headerTemplate() {
if (this.headerTemplateDirective) {
return this.headerTemplateDirective.template;
}
return null;
}
/**
* Sets the header template.
* ```html
* <igx-calendar headerTemplateDirective = "igxCalendarHeader"></igx-calendar>
* ```
* @memberof IgxCalendarComponent
*/
set headerTemplate(directive) {
this.headerTemplateDirective = directive;
}
/**
* Gets the subheader template.
* ```typescript
* let subheaderTemplate = this.calendar.subheaderTemplate;
* ```
*/
get subheaderTemplate() {
if (this.subheaderTemplateDirective) {
return this.subheaderTemplateDirective.template;
}
return null;
}
/**
* Sets the subheader template.
* ```html
* <igx-calendar subheaderTemplate = "igxCalendarSubheader"></igx-calendar>
* ```
* @memberof IgxCalendarComponent
*/
set subheaderTemplate(directive) {
this.subheaderTemplateDirective = directive;
}
/**
* Gets the context for the template marked with the `igxCalendarHeader` directive.
* ```typescript
* let headerContext = this.calendar.headerContext;
* ```
*/
get headerContext() {
const date = this.headerDate;
return this.generateContext(date);
}
/**
* Gets the context for the template marked with either `igxCalendarSubHeaderMonth`
* or `igxCalendarSubHeaderYear` directive.
* ```typescript
* let context = this.calendar.context;
* ```
*/
get context() {
const date = this.viewDate;
return this.generateContext(date);
}
/**
* @hidden
*/
get headerDate() {
return this.selectedDates ? this.selectedDates : new Date();
}
ngAfterViewInit() {
this.setSiblingMonths(this.monthViews);
this._monthViewsChanges$ = this.monthViews.changes.subscribe(c => {
this.setSiblingMonths(c);
});
this.startMonthScroll$.pipe(takeUntil(this.stopMonthScroll$), switchMap(() => this.scrollMonth$.pipe(skipLast(1), debounce(() => interval(300)), takeUntil(this.stopMonthScroll$)))).subscribe(() => {
switch (this.monthScrollDirection) {
case ScrollMonth.PREV:
this.previousMonth();
break;
case ScrollMonth.NEXT:
this.nextMonth();
break;
case ScrollMonth.NONE:
default:
break;
}
});
}
/**
* Returns the locale representation of the month in the month view if enabled,
* otherwise returns the default `Date.getMonth()` value.
*
* @hidden
*/
formattedMonth(value) {
if (this.formatViews.month) {
return this.formatterMonth.format(value);
}
return `${value.getMonth()}`;
}
/**
* @hidden
*/
previousMonth(isKeydownTrigger = false) {
this.viewDate = this.calendarModel.timedelta(this.viewDate, 'month', -1);
this.animationAction = ScrollMonth.PREV;
this.isKeydownTrigger = isKeydownTrigger;
}
/**
* @hidden
*/
nextMonth(isKeydownTrigger = false) {
this.viewDate = this.calendarModel.timedelta(this.viewDate, 'month', 1);
this.animationAction = ScrollMonth.NEXT;
this.isKeydownTrigger = isKeydownTrigger;
}
/**
* @hidden
*/
activeViewDecade(args) {
super.activeViewDecade();
requestAnimationFrame(() => {
if (this.dacadeView) {
this.dacadeView.date = args;
this.dacadeView.el.nativeElement.focus();
}
});
}
/**
* @hidden
*/
activeViewDecadeKB(event, args) {
super.activeViewDecadeKB(event, args);
requestAnimationFrame(() => {
if (this.dacadeView) {
this.dacadeView.date = args;
this.dacadeView.el.nativeElement.focus();
}
});
}
/**
* @hidden
*/
getFormattedDate() {
const date = this.headerDate;
return {
monthday: this.formatterMonthday.format(date),
weekday: this.formatterWeekday.format(date),
};
}
/**
* @hidden
*/
childClicked(instance) {
if (instance.isPrevMonth) {
this.previousMonth();
}
if (instance.isNextMonth) {
this.nextMonth();
}
this.selectDateFromClient(instance.date);
if (this.selection === 'multi') {
this.deselectDateInMonthViews(instance.date);
}
this.onSelection.emit(this.selectedDates);
}
/**
* @hidden
*/
viewChanging(args) {
this.animationAction = args.monthAction;
this.isKeydownTrigger = true;
this.nextDate = args.nextDate;
this.callback = (next) => {
const day = this.daysView.dates.find((item) => item.date.date.getTime() === next.getTime());
if (day) {
this.daysView.navService.focusNextDate(day.nativeElement, args.key, true);
}
};
this.viewDate = this.calendarModel.timedelta(this.nextDate, 'month', 0);
}
/**
* @hidden
*/
changeMonth(event) {
this.viewDate = new Date(this.viewDate.getFullYear(), event.getMonth());
this.activeView = CalendarView.DEFAULT;
requestAnimationFrame(() => {
if (this.monthsBtn) {
this.monthsBtn.nativeElement.focus();
}
});
}
/**
* @hidden
*/
activeViewYear(args, event) {
this.activeView = CalendarView.YEAR;
requestAnimationFrame(() => {
this.monthsView.date = args;
this.focusMonth(event.target);
});
}
focusMonth(target) {
const month = this.monthsView.dates.find((date) => date.index === parseInt(target.parentElement.attributes['data-month'].value, 10));
if (month) {
month.nativeElement.focus();
}
}
/**
* @hidden
*/
activeViewYearKB(args, event) {
if (event.key === " " /* SPACE */ || event.key === "Spacebar" /* SPACE_IE */ || event.key === "Enter" /* ENTER */) {
event.preventDefault();
this.activeViewYear(args, event);
}
}
/**
* Deselects date(s) (based on the selection type).
*```typescript
* this.calendar.deselectDate(new Date(`2018-06-12`));
*````
*/
deselectDate(value) {
super.deselectDate(value);
this.monthViews.forEach((view) => {
view.selectedDates = this.selectedDates;
view.rangeStarted = false;
});
this._onChangeCallback(this.selectedDates);
}
/**
* Helper method that does deselection for all month views when selection is "multi"
* If not called, selection in other month views stays
* @hidden
*/
deselectDateInMonthViews(value) {
this.monthViews.forEach(m => {
m.deselectMultipleInMonth(value);
});
}
/**
* @hidden
*/
getViewDate(i) {
const date = this.calendarModel.timedelta(this.viewDate, 'month', i);
return date;
}
/**
* @hidden
*/
getMonth(i) {
const date = this.calendarModel.timedelta(this.viewDate, 'month', i);
return date.getMonth();
}
/**
* @hidden
*/
getContext(i) {
const date = this.calendarModel.timedelta(this.viewDate, 'month', i);
return this.generateContext(date, i);
}
/**
* @hidden
*/
animationDone(event) {
if (this.monthScrollDirection !== ScrollMonth.NONE) {
this.scrollMonth$.next();
}
if (this.activeView !== CalendarView.DEFAULT) {
return;
}
let monthView = this.daysView;
let date = monthView.dates.find((d) => d.selected);
while (!date && monthView.nextMonthView) {
monthView = monthView.nextMonthView;
date = monthView.dates.find((d) => d.selected);
}
if (date && date.isFocusable && !this.isKeydownTrigger) {
setTimeout(() => {
date.nativeElement.focus();
}, parseInt(slideInRight.options.params.duration, 10));
}
else if (this.callback && (event.toState === ScrollMonth.NEXT || event.toState === ScrollMonth.PREV)) {
this.callback(this.nextDate);
}
this.animationAction = ScrollMonth.NONE;
}
/**
* @hidden
*/
onKeydownPageDown(event) {
event.preventDefault();
if (this.activeView !== CalendarView.DEFAULT) {
return;
}
const isPageDown = event.key === 'PageDown';
const step = isPageDown ? 1 : -1;
let monthView = this.daysView;
let activeDate;
while (!activeDate && monthView) {
activeDate = monthView.dates.find((date) => date.nativeElement === document.activeElement);
monthView = monthView.nextMonthView;
}
if (activeDate) {
this.nextDate = new Date(activeDate.date.date);
let year = this.nextDate.getFullYear();
let month = this.nextDate.getMonth() + step;
if (isPageDown) {
if (month > 11) {
month = 0;
year += step;
}
}
else {
if (month < 0) {
month = 11;
year += step;
}
}
const range = monthRange(this.nextDate.getFullYear(), month);
let day = this.nextDate.getDate();
if (day > range[1]) {
day = range[1];
}
this.nextDate.setDate(day);
this.nextDate.setMonth(month);
this.nextDate.setFullYear(year);
this.callback = (next) => {
monthView = this.daysView;
let dayItem;
while ((!dayItem && monthView) || (dayItem && !dayItem.isCurrentMonth)) {
dayItem = monthView.dates.find((d) => d.date.date.getTime() === next.getTime());
monthView = monthView.nextMonthView;
}
if (dayItem && dayItem.isFocusable) {
dayItem.nativeElement.focus();
}
};
}
if (isPageDown) {
this.nextMonth(true);
}
else {
this.previousMonth(true);
}
}
/**
* @hidden
*/
onKeydownShiftPageUp(event) {
event.preventDefault();
if (this.activeView !== CalendarView.DEFAULT) {
return;
}
const isPageDown = event.key === 'PageDown';
const step = isPageDown ? 1 : -1;
this.viewDate = this.calendarModel.timedelta(this.viewDate, 'year', step);
this.animationAction = isPageDown ? ScrollMonth.NEXT : ScrollMonth.PREV;
this.isKeydownTrigger = true;
let monthView = this.daysView;
let activeDate;
while (!activeDate && monthView) {
activeDate = monthView.dates.find((date) => date.nativeElement === document.activeElement);
monthView = monthView.nextMonthView;
}
if (activeDate) {
this.nextDate = new Date(activeDate.date.date);
const year = this.nextDate.getFullYear() + step;
const range = monthRange(year, this.nextDate.getMonth());
let day = this.nextDate.getDate();
if (day > range[1]) {
day = range[1];
}
this.nextDate.setDate(day);
this.nextDate.setFullYear(year);
this.callback = (next) => {
monthView = this.daysView;
let dayItem;
while ((!dayItem && monthView) || (dayItem && !dayItem.isCurrentMonth)) {
dayItem = monthView.dates.find((d) => d.date.date.getTime() === next.getTime());
monthView = monthView.nextMonthView;
}
if (dayItem && dayItem.isFocusable) {
dayItem.nativeElement.focus();
}
};
}
}
/**
* @hidden
*/
onKeydownHome(event) {
if (this.daysView) {
this.daysView.onKeydownHome(event);
}
}
/**
* @hidden
*/
onKeydownEnd(event) {
if (this.daysView) {
this.daysView.onKeydownEnd(event);
}
}
/**
* @hidden
*/
onMouseUp(event) {
if (this.monthScrollDirection !== ScrollMonth.NONE) {
this.stopMonthScroll(event);
}
}
/**
* @hidden
*/
ngOnDestroy() {
if (this._monthViewsChanges$) {
this._monthViewsChanges$.unsubscribe();
}
}
/**
* Helper method building and returning the context object inside
* the calendar templates.
* @hidden
*/
generateContext(value, i) {
const formatObject = Object.assign({ index: i, monthView: () => this.activeViewYear(value, event), yearView: () => this.activeViewDecade(value) }, this.calendarModel.formatToParts(value, this.locale, this.formatOptions, ['era', 'year', 'month', 'day', 'weekday']));
return { $implicit: formatObject };
}
/**
* Helper method that sets references for prev/next months for each month in the view
* @hidden
*/
setSiblingMonths(monthViews) {
monthViews.forEach((item, index) => {
const prevMonthView = this.getMonthView(index - 1);
const nextMonthView = this.getMonthView(index + 1);
item.nextMonthView = nextMonthView;
item.prevMonthView = prevMonthView;
});
}
/**
* Helper method returning previous/next day views
* @hidden
*/
getMonthView(index) {
if (index === -1 || index === this.monthViews.length) {
return null;
}
else {
return this.monthViews.toArray()[index];
}
}
};
__decorate([
HostBinding('attr.id'),
Input(),
__metadata("design:type", Object)
], IgxCalendarComponent.prototype, "id", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxCalendarComponent.prototype, "hasHeader", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxCalendarComponent.prototype, "vertical", void 0);
__decorate([
Input(),
__metadata("design:type", Number),
__metadata("design:paramtypes", [Number])
], IgxCalendarComponent.prototype, "monthsViewNumber", null);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxCalendarComponent.prototype, "animationAction", void 0);
__decorate([
HostBinding('attr.tabindex'),
__metadata("design:type", Object)
], IgxCalendarComponent.prototype, "tabindex", void 0);
__decorate([
HostBinding('attr.role'),
__metadata("design:type", Object)
], IgxCalendarComponent.prototype, "role", void 0);
__decorate([
HostBinding('attr.aria-labelledby'),
__metadata("design:type", Object)
], IgxCalendarComponent.prototype, "ariaLabelledBy", void 0);
__decorate([
HostBinding('class.igx-calendar--vertical'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxCalendarComponent.prototype, "styleVerticalClass", null);
__decorate([
HostBinding('class.igx-calendar'),
__metadata("design:type", Object)
], IgxCalendarComponent.prototype, "styleClass", void 0);
__decorate([
ViewChild('months', { read: IgxMonthsViewComponent }),
__metadata("design:type", IgxMonthsViewComponent)
], IgxCalendarComponent.prototype, "monthsView", void 0);
__decorate([
ViewChild('monthsBtn'),
__metadata("design:type", ElementRef)
], IgxCalendarComponent.prototype, "monthsBtn", void 0);
__decorate([
ViewChild('decade', { read: IgxYearsViewComponent }),
__metadata("design:type", IgxYearsViewComponent)
], IgxCalendarComponent.prototype, "dacadeView", void 0);
__decorate([
ViewChild('days', { read: IgxDaysViewComponent }),
__metadata("design:type", IgxDaysViewComponent)
], IgxCalendarComponent.prototype, "daysView", void 0);
__decorate([
ViewChildren('days', { read: IgxDaysViewComponent }),
__metadata("design:type", QueryList)
], IgxCalendarComponent.prototype, "monthViews", void 0);
__decorate([
ViewChild('prevMonthBtn'),
__metadata("design:type", ElementRef)
], IgxCalendarComponent.prototype, "prevMonthBtn", void 0);
__decorate([
ViewChild('nextMonthBtn'),
__metadata("design:type", ElementRef)
], IgxCalendarComponent.prototype, "nextMonthBtn", void 0);
__decorate([
ContentChild(forwardRef(() => IgxCalendarHeaderTemplateDirective), { read: IgxCalendarHeaderTemplateDirective, static: true }),
__metadata("design:type", IgxCalendarHeaderTemplateDirective)
], IgxCalendarComponent.prototype, "headerTemplateDirective", void 0);
__decorate([
ContentChild(forwardRef(() => IgxCalendarSubheaderTemplateDirective), { read: IgxCalendarSubheaderTemplateDirective, static: true }),
__metadata("design:type", IgxCalendarSubheaderTemplateDirective)
], IgxCalendarComponent.prototype, "subheaderTemplateDirective", void 0);
__decorate([
HostListener('keydown.pagedown', ['$event']),
HostListener('keydown.pageup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxCalendarComponent.prototype, "onKeydownPageDown", null);
__decorate([
HostListener('keydown.shift.pageup', ['$event']),
HostListener('keydown.shift.pagedown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxCalendarComponent.prototype, "onKeydownShiftPageUp", null);
__decorate([
HostListener('keydown.home', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxCalendarComponent.prototype, "onKeydownHome", null);
__decorate([
HostListener('keydown.end', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxCalendarComponent.prototype, "onKeydownEnd", null);
__decorate([
HostListener('document:mouseup', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxCalendarComponent.prototype, "onMouseUp", null);
IgxCalendarComponent = IgxCalendarComponent_1 = __decorate([
Component({
providers: [
{
multi: true,
provide: NG_VALUE_ACCESSOR,
useExisting: IgxCalendarComponent_1
}
],
animations: [
trigger('animateView', [
transition('void => 0', useAnimation(fadeIn)),
transition('void => *', useAnimation(scaleInCenter, {
params: {
duration: '.2s',
fromScale: .9
}
}))
]),
trigger('animateChange', [
transition('* => prev', useAnimation(slideInLeft, {
params: {
fromPosition: 'translateX(-30%)'
}
})),
transition('* => next', useAnimation(slideInRight, {
params: {
fromPosition: 'translateX(30%)'
}
}))
])
],
selector: 'igx-calendar',
template: "<ng-template let-result #defaultHeader>\n <span>{{ getFormattedDate().weekday }}, </span>\n <span>{{ getFormattedDate().monthday }}</span>\n</ng-template>\n\n<ng-template let-result #defaultMonth let-obj>\n <span tabindex=\"0\" #monthsBtn (keydown)=\"activeViewYearKB(getViewDate(obj.index), $event)\" (click)=\"activeViewYear(getViewDate(obj.index), $event)\"\n class=\"igx-calendar-picker__date\">\n {{ formattedMonth(getViewDate(obj.index)) }}\n </span>\n <span tabindex=\"0\" #yearsBtn (keydown)=\"activeViewDecadeKB($event, getViewDate(obj.index))\" (click)=\"activeViewDecade(getViewDate(obj.index))\"\n class=\"igx-calendar-picker__date\">\n {{ formattedYear(getViewDate(obj.index)) }}\n </span>\n</ng-template>\n\n<div *ngIf=\"selection === 'single' && hasHeader\" class=\"igx-calendar__header\">\n <h5 class=\"igx-calendar__header-year\">{{ formattedYear(headerDate) }}</h5>\n <h2 class=\"igx-calendar__header-date\">\n <ng-container *ngTemplateOutlet=\"headerTemplate ? headerTemplate : defaultHeader; context: headerContext\">\n </ng-container>\n </h2>\n</div>\n\n<div *ngIf=\"isDefaultView\" class=\"igx-calendar__body\" [@animateView]=\"activeView\" (swiperight)=\"previousMonth()\"\n (swipeleft)=\"nextMonth()\">\n <div class=\"igx-calendar-picker\">\n <div tabindex=\"0\" class=\"igx-calendar-picker__prev\" #prevMonthBtn\n igxCalendarScrollMonth [startScroll]=\"startPrevMonthScroll\" [stopScroll]=\"stopMonthScroll\" [ngStyle]=\"{\n 'min-width.%': 100/(monthsViewNumber*7)\n }\">\n <igx-icon fontSet=\"material\">keyboard_arrow_left</igx-icon>\n </div>\n <div class=\"igx-calendar-picker__dates\" *ngFor=\"let view of dayViews; index as i;\" [style.width.%]=\"100/monthsViewNumber\" [attr.data-month]=\"getMonth(i)\">\n <ng-container *ngTemplateOutlet=\"subheaderTemplate ? subheaderTemplate : defaultMonth; context: getContext(i)\">\n </ng-container>\n </div>\n <div tabindex=\"0\" class=\"igx-calendar-picker__next\" #nextMonthBtn\n igxCalendarScrollMonth [startScroll]=\"startNextMonthScroll\" [stopScroll]=\"stopMonthScroll\" [ngStyle]=\"{\n 'min-width.%': 100/(monthsViewNumber*7)\n }\">\n <igx-icon fontSet=\"material\">keyboard_arrow_right</igx-icon>\n </div>\n </div>\n\n <div style=\"display: flex\"\n [@animateChange]=\"animationAction\"\n (@animateChange.done)=\"animationDone($event)\">\n <igx-days-view *ngFor=\"let view of dayViews; index as i;\" [changeDaysView]=\"true\" #days\n [selection]=\"selection\"\n [locale]=\"locale\"\n [value]=\"value\"\n [viewDate]=\"getViewDate(i)\"\n [weekStart]=\"weekStart\"\n [formatOptions]=\"formatOptions\"\n [formatViews]=\"formatViews\"\n [disabledDates]=\"disabledDates\"\n [specialDates]=\"specialDates\"\n [hideOutsideDays]=\"hideOutsideDays\"\n (onViewChanging)=\"viewChanging($event)\"\n (onDateSelection)=\"childClicked($event)\">\n </igx-days-view>\n </div>\n</div>\n\n<igx-months-view *ngIf=\"isYearView\" [@animateView]=\"activeView\" #months\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.month\"\n [monthFormat]=\"formatOptions.month\"\n (onSelection)=\"changeMonth($event)\">\n</igx-months-view>\n\n<igx-years-view *ngIf=\"isDecadeView\" [@animateView]=\"activeView\" #decade\n [date]=\"viewDate\"\n [locale]=\"locale\"\n [formatView]=\"formatViews.year\"\n [yearFormat]=\"formatOptions.year\"\n (onSelection)=\"changeYear($event)\">\n</igx-years-view>\n"
})
], IgxCalendarComponent);
export { IgxCalendarComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFFVixZQUFZLEVBQ1osU0FBUyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RixPQUFPLEVBQ0gsa0NBQWtDLEVBQ2xDLHFDQUFxQyxFQUN4QyxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBaUIsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRzlDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUVoQjs7Ozs7Ozs7Ozs7R0FXRztBQW1DSCxJQUFhLG9CQUFvQiw0QkFBakMsTUFBYSxvQkFBcUIsU0FBUSwyQkFBMkI7SUFBckU7O1FBQ0k7Ozs7Ozs7Ozs7V0FVRztRQUdJLE9BQUUsR0FBRyxnQkFBZ0IsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUdqQyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXhCOzs7Ozs7Ozs7V0FTRztRQUVJLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFxQ3hCOztXQUVHO1FBRUksb0JBQWUsR0FBUSxFQUFFLENBQUM7UUFPakM7O1dBRUc7UUFDSSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFPaEM7Ozs7V0FJRztRQUVJLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFFcEI7Ozs7V0FJRztRQUVJLFNBQUksR0FBRyxNQUFNLENBQUM7UUFFckI7Ozs7V0FJRztRQUVJLG1CQUFjLEdBQUcsVUFBVSxDQUFDO1FBWW5DOzs7O1dBSUc7UUFFSSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBK0l6Qjs7V0FFRztRQUNLLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQU85Qjs7V0FFRztRQUNLLG1CQUFjLEdBQUc7WUFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUMxQixDQUFDO1FBRUY7O1dBRUc7UUFDSSxhQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUE0RHhDOztXQUVHO1FBQ0kseUJBQW9CLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFFN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQTtRQUVEOztXQUVHO1FBQ0kseUJBQW9CLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFFN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQTtRQUVEOztXQUVHO1FBQ0ksb0JBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQy9CLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV4Qiw2REFBNkQ7WUFDN0Qsa0VBQWtFO1lBQ2xFLDZGQUE2RjtZQUM3RixxSEFBcUg7WUFDckgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUcxQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFO2dCQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUMzQztpQkFBTSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFO2dCQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUMzQztZQUVELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ2pELENBQUMsQ0FBQTtJQWtZTCxDQUFDO0lBM3VCRzs7Ozs7Ozs7O09BU0c7SUFFSCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzVCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO1lBQzVDLE9BQU87U0FDVjthQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsRUFBRTtZQUNyQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQyxNQUFNLGFBQWEsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLFNBQVMsR0FBRztvQkFDZCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxRQUFRLEVBQUUsYUFBYTtpQkFDMUIsQ0FBQztnQkFDRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNqQztZQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7U0FDaEM7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO1NBQ2hDO0lBQ0wsQ0FBQztJQStDRDs7OztPQUlHO0lBRUgsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFvREQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssWUFBWSxDQUFDLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxjQUFjO1FBQ2QsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDOUIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1NBQ2hEO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksY0FBYyxDQUFDLFNBQWM7UUFDN0IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLGlCQUFpQjtRQUNqQixJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUM7U0FDbkQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxpQkFBaUIsQ0FBQyxTQUFjO1FBQ2hDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxTQUFTLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBSSxhQUFhO1FBQ2IsTUFBTSxJQUFJLEdBQVMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksT0FBTztRQUNQLE1BQU0sSUFBSSxHQUFTLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBc0NNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFDaEMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNsQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQ1gsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUM3QixTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQ25DLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixRQUFRLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDL0IsS0FBSyxXQUFXLENBQUMsSUFBSTtvQkFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNyQixNQUFNO2dCQUNWLEtBQUssV0FBVyxDQUFDLElBQUk7b0JBQ2pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDakIsTUFBTTtnQkFDVixLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCO29CQUNJLE1BQU07YUFDYjtRQUNULENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLEtBQVc7UUFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLO1FBQ3JDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUM3QyxDQUFDO0lBNkNEOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsSUFBVTtRQUM5QixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QixxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUM1QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQVU7UUFDdkMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV0QyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUM1QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCO1FBRW5CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFN0IsT0FBTztZQUNILFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUM3QyxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDOUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxRQUF1QjtRQUN2QyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNwQjtRQUVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sRUFBRTtZQUM1QixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVksQ0FBQyxJQUE0QjtRQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDNUYsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM3RTtRQUNMLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVyxDQUFDLEtBQVc7UUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUV2QyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQUU7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxjQUFjLENBQUMsSUFBVSxFQUFFLEtBQUs7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1FBQ3BDLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sVUFBVSxDQUFDLE1BQW1CO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQzlDLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLElBQUksS0FBSyxFQUFFO1lBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUFFO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQixDQUFDLElBQVUsRUFBRSxLQUFLO1FBQ3JDLElBQUksS0FBSyxDQUFDLEdBQUcsb0JBQWUsSUFBSSxLQUFLLENBQUMsR0FBRyw4QkFBa0IsSUFBSSxLQUFLLENBQUMsR0FBRyx3QkFBZSxFQUFFO1lBQ3JGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxLQUFxQjtRQUNyQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLHdCQUF3QixDQUFDLEtBQVc7UUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDeEIsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVyxDQUFDLENBQVM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUSxDQUFDLENBQVM7UUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUFDLENBQVM7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxhQUFhLENBQUMsS0FBSztRQUN0QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUMxQyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBZ0MsQ0FBQztRQUN0RCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRTtZQUNyQyxTQUFTLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztZQUNwQyxJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDcEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBR0ksaUJBQWlCLENBQUMsS0FBb0I7UUFDekMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQzFDLE9BQU87U0FDVjtRQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBZ0MsQ0FBQztRQUN0RCxJQUFJLFVBQVUsQ0FBQztRQUVmLE9BQU8sQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFO1lBQzdCLFVBQVUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0YsU0FBUyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7U0FDdkM7UUFFRCxJQUFJLFVBQVUsRUFBRTtZQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUvQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRXZDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBQzVDLElBQUksVUFBVSxFQUFFO2dCQUNaLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtvQkFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUFDLElBQUksSUFBSSxJQUFJLENBQUM7aUJBQUU7YUFDL0M7aUJBQU07Z0JBQ0gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO29CQUFFLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQUMsSUFBSSxJQUFJLElBQUksQ0FBQztpQkFBRTthQUMvQztZQUVELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRTdELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFBRTtZQUV2QyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVoQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JCLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBZ0MsQ0FBQztnQkFDbEQsSUFBSSxPQUFPLENBQUM7Z0JBQ1osT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFO29CQUNwRSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUNoRixTQUFTLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztpQkFDdkM7Z0JBQ0QsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtvQkFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUFFO1lBQzFFLENBQUMsQ0FBQztTQUNMO1FBRUQsSUFBSSxVQUFVLEVBQUU7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQUU7YUFBTTtZQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBR0ksb0JBQW9CLENBQUMsS0FBb0I7UUFDNUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQzFDLE9BQU87U0FDVjtRQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxHQUFHLEtBQUssVUFBVSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTFFLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFFN0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQWdDLENBQUM7UUFDdEQsSUFBSSxVQUFVLENBQUM7UUFFZixPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVMsRUFBRTtZQUM3QixVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzNGLFNBQVMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxVQUFVLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFFaEQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFFekQsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUFFO1lBRXZDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWhDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDckIsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFnQyxDQUFDO2dCQUNsRCxJQUFJLE9BQU8sQ0FBQztnQkFDWixPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7b0JBQ3BFLE9BQU8sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ2hGLFNBQVMsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO2lCQUN2QztnQkFDRCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO29CQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQUU7WUFDMUUsQ0FBQyxDQUFDO1NBQ0w7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFFSSxhQUFhLENBQUMsS0FBb0I7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEN