UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

794 lines 88.7 kB
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 }},&nbsp;</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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFFVixZQUFZLEVBQ1osU0FBUyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RixPQUFPLEVBQ0gsa0NBQWtDLEVBQ2xDLHFDQUFxQyxFQUN4QyxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE9BQU8sRUFBaUIsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxN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