{"version":3,"file":"arjentienkamp-ngx-mat-calendar.mjs","sources":["../../../projects/ngx-mat-calendar/src/lib/services/formatting.service.ts","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-render/event-render-base.component.ts","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-render/event-render-day/event-render-day.component.ts","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-render/event-render-day/event-render-day.component.html","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-render/event-render-month/event-render-month.component.ts","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-render/event-render-month/event-render-month.component.html","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-render/event-render-week/event-render-week.component.ts","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-render/event-render-week/event-render-week.component.html","../../../projects/ngx-mat-calendar/src/lib/models/Colors.ts","../../../projects/ngx-mat-calendar/src/lib/models/CalendarEvent.ts","../../../projects/ngx-mat-calendar/src/lib/models/Views.ts","../../../projects/ngx-mat-calendar/src/lib/models/CalendarOptions.ts","../../../projects/ngx-mat-calendar/src/lib/models/Times.ts","../../../projects/ngx-mat-calendar/src/lib/models/Directions.ts","../../../projects/ngx-mat-calendar/src/lib/components/dialogs/keyboard-shortcut-dialog/keyboard-shortcut-dialog.component.ts","../../../projects/ngx-mat-calendar/src/lib/components/dialogs/keyboard-shortcut-dialog/keyboard-shortcut-dialog.component.html","../../../projects/ngx-mat-calendar/src/lib/models/KeyboardShortcuts.ts","../../../projects/ngx-mat-calendar/src/lib/components/shared/view-base/view-base.component.ts","../../../projects/ngx-mat-calendar/src/lib/models/CalendarDay.ts","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-display/event-display.directive.ts","../../../projects/ngx-mat-calendar/src/lib/components/shared/event-display/event-display.component.ts","../../../projects/ngx-mat-calendar/src/lib/pipes/all-day-event.pipe.ts","../../../projects/ngx-mat-calendar/src/lib/components/day-view/day-view.component.ts","../../../projects/ngx-mat-calendar/src/lib/components/day-view/day-view.component.html","../../../projects/ngx-mat-calendar/src/lib/components/week-view/week-view.component.ts","../../../projects/ngx-mat-calendar/src/lib/components/week-view/week-view.component.html","../../../projects/ngx-mat-calendar/src/lib/pipes/limit.pipe.ts","../../../projects/ngx-mat-calendar/src/lib/components/month-view/month-view.component.ts","../../../projects/ngx-mat-calendar/src/lib/components/month-view/month-view.component.html","../../../projects/ngx-mat-calendar/src/lib/ngx-mat-calendar.component.ts","../../../projects/ngx-mat-calendar/src/lib/ngx-mat-calendar.component.html","../../../projects/ngx-mat-calendar/src/lib/components/shared/shared-components.module.ts","../../../projects/ngx-mat-calendar/src/lib/pipes/pipes.module.ts","../../../projects/ngx-mat-calendar/src/lib/components/day-view/day-view.module.ts","../../../projects/ngx-mat-calendar/src/lib/components/week-view/week-view.module.ts","../../../projects/ngx-mat-calendar/src/lib/components/month-view/month-view.module.ts","../../../projects/ngx-mat-calendar/src/lib/other/DateAdapter.ts","../../../projects/ngx-mat-calendar/src/lib/ngx-mat-calendar.module.ts","../../../projects/ngx-mat-calendar/src/public-api.ts","../../../projects/ngx-mat-calendar/src/arjentienkamp-ngx-mat-calendar.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { format, isToday } from 'date-fns';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class FormattingService {\n    public getTime(date: Date): string {\n        return format(date, 'HH:mm');\n    }\n\n    public isToday(date: Date): boolean {\n        return isToday(date);\n    }\n\n    public getDayName(date: Date): string {\n        return format(date, 'E');\n    }\n\n    public getDayNumber(date: Date): string {\n        return format(date, 'd');\n    }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { isBefore, isSameDay } from 'date-fns';\nimport { CalendarEvent } from '../../../models/CalendarEvent';\nimport { DisplayComponent } from '../../../models/DisplayComponent';\nimport { FormattingService } from '../../../services/formatting.service';\n\n@Component({\n    template: ''\n})\nexport class EventRenderBaseComponent implements DisplayComponent, OnInit {\n    @Input() event: CalendarEvent;\n    @Input() date: Date;\n\n    startTime: string;\n    endTime: string;\n    isSameDay: boolean;\n    endsToday: boolean;\n    eventTooltip: string;\n\n    constructor(\n        protected formattingService: FormattingService\n    ) {}\n\n    ngOnInit(): void {\n        this.startTime = this.formattingService.getTime(this.event.startTime);\n        this.endTime = this.formattingService.getTime(this.event.endTime);\n        this.isSameDay = isSameDay(this.event.startTime, this.event.endTime);\n        this.endsToday = isSameDay(this.date, this.event.endTime);\n    }\n\n    isPastEvent(): boolean {\n        return isBefore(this.event.date, new Date());\n    }\n\n    getEventTooltip(): string {\n        if (this.event.location) {\n            return `${this.event.title} (${this.startTime} - ${this.endTime}) @ ${this.event.location}`;\n        }\n\n        return `${this.event.title} (${this.startTime} - ${this.endTime})`;\n    }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FormattingService } from '../../../../services/formatting.service';\nimport { EventRenderBaseComponent } from '../event-render-base.component';\n\n@Component({\n    selector: 'event-render-day',\n    templateUrl: './event-render-day.component.html',\n    styleUrls: ['./event-render-day.component.scss']\n})\nexport class EventRenderDayComponent extends EventRenderBaseComponent implements OnInit {\n    constructor(\n        protected formattingService: FormattingService,\n    ) {\n        super(formattingService);\n    }\n\n    ngOnInit(): void {\n        super.ngOnInit();\n    }\n}\n","<div *ngIf=\"event\" class=\"event\" [class.all-day]=\"event.allDay\" [style.backgroundColor]=\"event.color\">\n    <div *ngIf=\"!event.allDay\">\n        <div class=\"event__header\">\n            <p>{{ event.title }}</p>\n        </div>\n\n        <div class=\"event__metadata\">\n            <p>{{ startTime }} - {{ endTime }}</p>\n\n            <div class=\"event__location\" *ngIf=\"event.location\">\n                <mat-icon>place</mat-icon>\n                <span>{{ event.location }}</span>\n            </div>\n        </div>\n    </div>\n\n    <div *ngIf=\"event.allDay\">\n        <div class=\"event__header\">\n            <p class=\"title\">{{ event.title }}</p>\n        </div>\n    </div>\n\n    <div class=\"event__multiday\" *ngIf=\"!isSameDay && !endsToday\"></div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { FormattingService } from '../../../../services/formatting.service';\nimport { EventRenderBaseComponent } from '../event-render-base.component';\n\n@Component({\n    selector: 'event-render-month',\n    templateUrl: './event-render-month.component.html',\n    styleUrls: ['./event-render-month.component.scss']\n})\nexport class EventRenderMonthComponent extends EventRenderBaseComponent implements OnInit {\n    constructor(\n        protected formattingService: FormattingService,\n    ) {\n        super(formattingService);\n    }\n\n    ngOnInit(): void {\n        super.ngOnInit();\n        this.eventTooltip = this.getEventTooltip();\n    }\n}\n","<div *ngIf=\"event\" class=\"event\">\n    <div\n        class=\"event__line\"\n        [matTooltip]=\"eventTooltip\"\n        [ngStyle]=\"{'backgroundColor' : event.allDay ? event.color : '' }\"\n        [class.all-day]=\"event.allDay\"\n        [class.past-event]=\"isPastEvent()\">\n        <span class=\"event-color\" *ngIf=\"!event.allDay\" [style.backgroundColor]=\"event.color\"></span>\n        <p class=\"metadata\" *ngIf=\"!event.allDay\">{{ startTime }}</p>\n        <p class=\"title\">{{ event.title }}</p>\n    </div>\n\n    <div class=\"event__multiday\" *ngIf=\"!isSameDay && !endsToday\"></div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { FormattingService } from '../../../../services/formatting.service';\nimport { EventRenderBaseComponent } from '../event-render-base.component';\n\n@Component({\n    selector: 'event-render-week',\n    templateUrl: './event-render-week.component.html',\n    styleUrls: ['./event-render-week.component.scss']\n})\nexport class EventRenderWeekComponent extends EventRenderBaseComponent implements OnInit {\n    constructor(\n        protected formattingService: FormattingService,\n    ) {\n        super(formattingService);\n    }\n\n    ngOnInit(): void {\n        super.ngOnInit();\n    }\n}\n","<div *ngIf=\"event\" class=\"event\" [class.all-day]=\"event.allDay\" [style.backgroundColor]=\"event.color\">\n    <div *ngIf=\"!event.allDay\">\n        <div class=\"event__header\">\n            <p>{{ event.title }}</p>\n        </div>\n\n        <div class=\"event__metadata\">\n            <p>{{ startTime }} - {{ endTime }}</p>\n\n            <div class=\"event__location\" *ngIf=\"event.location\">\n                <mat-icon>place</mat-icon>\n                <span>{{ event.location }}</span>\n            </div>\n        </div>\n    </div>\n\n    <div *ngIf=\"event.allDay\">\n        <div class=\"event__header\">\n            <p class=\"title\">{{ event.title }}</p>\n        </div>\n    </div>\n\n    <div class=\"event__multiday\" *ngIf=\"!isSameDay && !endsToday\"></div>\n</div>","export enum colors {\n    grey = '#cfd8dc',\n    blue = '#b3e5fc',\n    pink = '#ffc1e3',\n    green = '#c8e6c9'\n}\n","import { colors } from './Colors';\n\nexport class CalendarEvent {\n    title = '';\n    date: Date;\n    startTime: Date;\n    endTime: Date;\n    allDay?: boolean = false;\n\n    color?: any = colors.grey;\n    grid?: CalendarEventGrid = new CalendarEventGrid();\n    location?: string;\n\n    constructor(init?: Partial<CalendarEvent>) {\n        Object.assign(this, init);\n    }\n}\n\nexport class CalendarEventGrid {\n    offsetTop = 0;\n    offsetLeft = 0;\n    width = 100;\n    durationOffset = 0;\n    eventsInGroup = 0;\n    eventGroups: string[] = [];\n}\n","export const DAY = 'day';\nexport const WEEK = 'week';\nexport const MONTH = 'month';\n\nexport type Views = typeof DAY | typeof WEEK | typeof MONTH;\n","import { EventRenderDayComponent } from '../components/shared/event-render/event-render-day/event-render-day.component';\nimport { EventRenderMonthComponent } from '../components/shared/event-render/event-render-month/event-render-month.component';\nimport { EventRenderWeekComponent } from '../components/shared/event-render/event-render-week/event-render-week.component';\nimport { CalendarEvent } from './CalendarEvent';\nimport { MONTH, Views } from './Views';\n\nexport class CalendarOptions {\n    pixelsPerMinute = 1.3;\n    dateFormat = 'DD-MM-YYYY';\n    timeFormat = 'HH:mm';\n    renderComponent: {\n        day?: any,\n        week?: any,\n        month?: any\n    };\n    calendarEventType = typeof CalendarEvent;\n    jumpToSpy = true;\n    enableDatePickerButton = true;\n    enableAddEventButton = true;\n    enableViewToggle = true;\n    enableKeyboardShortcutDialog = true;\n    locale = 'nl';\n    compact = false;\n    view: Views = MONTH;\n\n    constructor(init?: Partial<CalendarOptions>) {\n        Object.assign(this, init);\n\n        this.renderComponent = {\n            day: EventRenderDayComponent,\n            week: EventRenderWeekComponent,\n            month: EventRenderMonthComponent\n        };\n    }\n\n    get getPixelsPerMinute(): number {\n        if (this.compact) {\n            return this.pixelsPerMinute / 2;\n        }\n\n        return this.pixelsPerMinute;\n    }\n}\n","export const hoursOfDay = [\n    { title: '00:00' },\n    { title: '01:00' },\n    { title: '02:00' },\n    { title: '03:00' },\n    { title: '04:00' },\n    { title: '05:00' },\n    { title: '06:00' },\n    { title: '07:00' },\n    { title: '08:00' },\n    { title: '09:00' },\n    { title: '10:00' },\n    { title: '11:00' },\n    { title: '12:00' },\n    { title: '13:00' },\n    { title: '14:00' },\n    { title: '15:00' },\n    { title: '16:00' },\n    { title: '17:00' },\n    { title: '18:00' },\n    { title: '19:00' },\n    { title: '20:00' },\n    { title: '21:00' },\n    { title: '22:00' },\n    { title: '23:00' },\n    { title: '00:00', isEnd: true }\n];\n\nexport const daysOfWeek = [\n    { title: 'Mon' },\n    { title: 'Tue' },\n    { title: 'Wed' },\n    { title: 'Thu' },\n    { title: 'Fri' },\n    { title: 'Sat' },\n    { title: 'Sun' }\n];\n\nexport enum Periods {\n    day = 'days',\n    week = 'weeks',\n    month = 'months'\n}\n","export const PREVIOUS = 'prev';\nexport const NEXT = 'next';\n\nexport type Views = typeof PREVIOUS | typeof NEXT;\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { CalendarOptions } from '../../../models/CalendarOptions';\n\n@Component({\n    selector: 'keyboard-shortcut-dialog',\n    templateUrl: './keyboard-shortcut-dialog.component.html',\n    styleUrls: ['./keyboard-shortcut-dialog.component.scss']\n})\nexport class KeyboardShortcutDialogComponent implements OnInit {\n    constructor(\n        @Inject(MAT_DIALOG_DATA) public data: CalendarOptions\n    ) { }\n\n    ngOnInit(): void { }\n}\n","<h2 mat-dialog-title>Keyboard Shortcuts</h2>\n<mat-dialog-content class=\"mat-typography\">\n    <mat-divider></mat-divider>\n\n    <div class=\"content-row\">\n        <span>Switch to day view</span>\n        <span>\n            <span class=\"keyboard-shortcut\">d</span>\n        </span>\n    </div>\n\n    <div class=\"content-row\">\n        <span>Switch to week view</span>\n        <span>\n            <span class=\"keyboard-shortcut\">w</span>\n        </span>        \n    </div>\n\n    <div class=\"content-row\">\n        <span>Switch to month view</span>\n        <span>\n            <span class=\"keyboard-shortcut\">m</span>\n        </span>\n    </div>\n\n    <div class=\"content-row\">\n        <span>Go to today</span>\n        <span>\n            <span class=\"keyboard-shortcut\">t</span>\n        </span>\n    </div>\n\n    <div class=\"content-row\">\n        <span>Navigate to previous period</span>\n        <span>\n            <span class=\"keyboard-shortcut keyboard-shortcut--icon\">\n                <mat-icon>arrow_back</mat-icon>\n            </span>\n        </span>\n    </div>\n\n    <div class=\"content-row\">\n        <span>Navigate to next period</span>\n        <span>\n            <span class=\"keyboard-shortcut keyboard-shortcut--icon\">\n                <mat-icon>arrow_forward</mat-icon>\n            </span>\n        </span>\n    </div>\n\n    <div class=\"content-row\" *ngIf=\"data.enableAddEventButton\">\n        <span>Add event</span>\n        <span>\n            <span class=\"keyboard-shortcut\">n</span>\n        </span>\n    </div>\n</mat-dialog-content>","export const D = 'd';\nexport const W = 'w';\nexport const M = 'm';\nexport const T = 't';\nexport const N = 'n';\nexport const ARROWLEFT = 'ArrowLeft';\nexport const ARROWRIGHT = 'ArrowRight';\n\nexport type KeyboardShortcuts =\n    typeof D |\n    typeof W |\n    typeof M |\n    typeof T |\n    typeof N |\n    typeof ARROWLEFT |\n    typeof ARROWRIGHT;\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { areIntervalsOverlapping, endOfDay, getHours, getMinutes, intervalToDuration, isSameDay, startOfDay } from 'date-fns';\nimport { CalendarDay } from '../../../models/CalendarDay';\nimport { CalendarEvent, CalendarEventGrid } from '../../../models/CalendarEvent';\nimport { v4 as uuidv4 } from 'uuid';\nimport { CalendarOptions } from '../../../models/CalendarOptions';\nimport { hoursOfDay } from '../../../models/Times';\nimport { FormattingService } from '../../../services/formatting.service';\nimport { interval, Observable, Subscription } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\n@Component({\n    template: ''\n})\nexport abstract class ViewBaseComponent implements OnInit, OnDestroy {\n    @Input() options$: Observable<CalendarOptions>;\n    @Input() events$: Observable<CalendarEvent[]>;\n    @Input() selectedDate$: Observable<Date>;\n\n    @Output() eventClick: EventEmitter<CalendarEvent> = new EventEmitter();\n    @Output() changeToDayView: EventEmitter<Date> = new EventEmitter();\n\n    protected subscriptions$: Subscription = new Subscription();\n    public markerPosition = 0;\n\n    options: CalendarOptions;\n    hoursOfDay = hoursOfDay;\n    pixelsPerHour = 0;\n    selectedDate = new Date();\n    events: CalendarEvent[] = [];\n\n    abstract generateView(): void;\n\n    protected constructor(\n        protected formattingService: FormattingService\n    ) {\n    }\n\n    ngOnInit(): void {\n        this.subscriptions$.add(\n            this.options$.pipe(\n                tap((options) => {\n                    this.options = options;\n                    this.markerPosition = this.calculateMarkerPosition();\n                    this.pixelsPerHour = this.options.getPixelsPerMinute * 60;\n                })\n            ).subscribe()\n        );\n\n        this.subscriptions$.add(\n            this.selectedDate$.pipe(\n                tap(selectedDate => {\n                    this.selectedDate = selectedDate;\n                    this.generateView();\n                })\n            ).subscribe()\n        );\n\n        this.subscriptions$.add(\n            interval(60000).pipe(\n                tap(() => {\n                    this.markerPosition = this.calculateMarkerPosition();\n                })\n            ).subscribe()\n        );\n    }\n\n    protected createEventGroups(day: CalendarDay): CalendarDay {\n        day.events.map((event: CalendarEvent) => {\n            const uuid = uuidv4();\n            let eventGroup: CalendarEvent[] = [];\n\n            if (event.grid) {\n                const eventsNotAllDay = day.events.filter(x => !x.allDay);\n                eventGroup = this.getOverlappingEvents(event, eventsNotAllDay, event.grid.eventGroups);\n\n                eventGroup.map((overlapEvent: CalendarEvent) => {\n                    if (overlapEvent.grid) {\n                        overlapEvent.grid.eventGroups.push(uuid);\n                        overlapEvent.grid.eventsInGroup = eventGroup.length;\n                    }\n\n                    if (!day.eventGroups.includes(uuid)) {\n                        day.eventGroups.push(uuid);\n                    }\n                });\n            }\n        });\n\n        this.setEventSizes(day);\n\n        return day;\n    }\n\n    protected populateEvents(event: CalendarEvent, day: CalendarDay): CalendarEvent {\n        const populatedEvent = new CalendarEvent({\n            ...event,\n            grid: this.calculatePixelsOffsetForEvent(event, day)\n        });\n\n        return populatedEvent;\n    }\n\n    private getOverlappingEvents(event: CalendarEvent, events: CalendarEvent[], eventGroups: string[]): CalendarEvent[] {\n        return events.filter((compareEvent: CalendarEvent) => {\n            const eventsDoOverlap = areIntervalsOverlapping(\n                { start: event.startTime, end: event.endTime },\n                { start: compareEvent.startTime, end: compareEvent.endTime },\n                { inclusive: true }\n            );\n\n            let isAlreadyInEventGroup = false;\n            if (compareEvent.grid) {\n                isAlreadyInEventGroup = compareEvent.grid.eventGroups.some((eventGroup: string) => {\n                    return eventGroups.includes(eventGroup);\n                });\n            }\n\n            return eventsDoOverlap && !isAlreadyInEventGroup;\n        });\n    }\n\n    private setEventSizes(day: CalendarDay): void {\n        day.eventGroups.forEach(eventGroup => {\n            const eventGroupEvents = day.events.filter((event: CalendarEvent) => {\n                return event.grid?.eventGroups.includes(eventGroup);\n            });\n\n            let index = 0;\n            eventGroupEvents.forEach((event: CalendarEvent) => {\n                if (event.grid) {\n                    event.grid.width = 100 / (eventGroupEvents.length);\n                    event.grid.offsetLeft = event.grid.width * index;\n                }\n\n                // check if already has a width/offsetLeft to determine if it's in eventgroup A or B\n\n                index++;\n            });\n        });\n    }\n\n    private calculatePixelsOffsetForEvent(event: CalendarEvent, day: CalendarDay): CalendarEventGrid {\n        let grid = new CalendarEventGrid();\n\n        const startTime = event.startTime;\n        const endTime = isSameDay(event.startTime, event.endTime) ?\n            event.endTime :\n            endOfDay(event.startTime);\n\n        const eventDurationFromStartTime = intervalToDuration({\n            start: startTime,\n            end: endTime\n        });\n\n        const eventDurationFromMidnight = intervalToDuration({\n            start: startOfDay(day.date),\n            end: event.endTime\n        });\n\n        eventDurationFromStartTime.hours = eventDurationFromStartTime.hours || 0;\n        eventDurationFromStartTime.minutes = eventDurationFromStartTime.minutes || 0;\n        eventDurationFromMidnight.hours = eventDurationFromMidnight.hours || 0;\n        eventDurationFromMidnight.minutes = eventDurationFromMidnight.minutes || 0;\n\n        const offsetInMinutes = !isSameDay(event.startTime, event.endTime) && isSameDay(event.endTime, day.date) ?\n            0 : Math.abs(getHours(startTime)) * 60 + getMinutes(startTime);\n\n        const durationOffset = !isSameDay(event.startTime, event.endTime) && isSameDay(event.endTime, day.date) ?\n            eventDurationFromMidnight.hours * 60 + eventDurationFromMidnight.minutes :\n            eventDurationFromStartTime.hours * 60 + eventDurationFromStartTime.minutes;\n\n        grid = {\n            ...grid,\n            offsetTop: offsetInMinutes * this.options.getPixelsPerMinute,\n            durationOffset: durationOffset * this.options.getPixelsPerMinute\n        };\n\n        return grid;\n    }\n\n    public getCellHeight(time: any): number {\n        if (time.isEnd) {\n            return 20;\n        }\n\n        return this.pixelsPerHour;\n    }\n\n    protected calculateMarkerPosition(): number {\n        const now = new Date();\n        const offsetTop = (getHours(now) * 60 + getMinutes(now)) * this.options.getPixelsPerMinute;\n\n        return offsetTop;\n    }\n\n    public isToday(date: Date): boolean {\n        return this.formattingService.isToday(date);\n    }\n\n    public getDayName(date: Date): string {\n        return this.formattingService.getDayName(date);\n    }\n\n    public getDayNumber(date: Date): string {\n        return this.formattingService.getDayNumber(date);\n    }\n\n    public getTime(date: Date): string {\n        return this.formattingService.getTime(date);\n    }\n\n    public onEventClick(event: CalendarEvent): void {\n        this.eventClick.emit(event);\n    }\n\n    public navigateToDayView(date: Date): void {\n        this.changeToDayView.emit(date);\n    }\n\n    protected sortByTime(a: CalendarEvent, b: CalendarEvent): number {\n        return a.startTime.getTime() - b.startTime.getTime();\n    }\n\n    protected sortByAllDay(event: CalendarEvent): number {\n        return event.allDay ? -1 : 1;\n    }\n\n    protected isSameDay(date: Date, startTime: Date, endTime: Date): boolean {\n        return isSameDay(new Date(date), new Date(startTime)) || isSameDay(new Date(date), new Date(endTime));\n    }\n\n    ngOnDestroy(): void {\n       this.subscriptions$.unsubscribe();\n    }\n}\n","import { CalendarEvent } from './CalendarEvent';\n\nexport class CalendarDay {\n    date: Date = new Date();\n    eventGroups: string[] = [];\n    events: CalendarEvent[] = [];\n    eventCount: number = 0;\n\n    constructor(init?: Partial<CalendarDay>) {\n        Object.assign(this, init);\n    }\n}\n","import { Directive, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: '[eventDisplay]'\n})\nexport class EventDisplayDirective {\n    constructor(\n        public viewContainerRef: ViewContainerRef\n    ) { }\n}\n","import { Component, Input, OnDestroy, OnInit, Type, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { CalendarEvent } from '../../../models/CalendarEvent';\nimport { DisplayComponent } from '../../../models/DisplayComponent';\nimport { EventRenderBaseComponent } from '../event-render/event-render-base.component';\nimport { EventDisplayDirective } from './event-display.directive';\n\n@Component({\n    selector: 'event-display',\n    template: `<ng-template eventDisplay></ng-template>`,\n    styleUrls: ['./event-display.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class EventDisplayComponent implements OnInit, OnDestroy {\n    @Input() event: CalendarEvent;\n    @Input() date: Date;\n    @Input() component: any;\n\n    componentRef: any;\n\n    @ViewChild(EventDisplayDirective, { static: true }) eventDisplayTarget!: EventDisplayDirective;\n\n    constructor() {}\n\n    ngOnInit(): void {\n        if (this.event && !this.componentRef) {\n            this.loadComponent();\n        }\n    }\n\n    private componentTypeFactory(): Type<DisplayComponent> {\n        let comp: Type<DisplayComponent>;\n        comp = this.component;\n        return comp;\n    }\n\n    private loadComponent(): void {\n        const viewContainerRef = this.eventDisplayTarget.viewContainerRef;\n        viewContainerRef.clear();\n\n        this.componentRef = viewContainerRef.createComponent(this.componentTypeFactory());\n        const base = (this.componentRef.instance as EventRenderBaseComponent);\n        base.date = this.date;\n        base.event = this.event;\n    }\n\n    ngOnDestroy(): void {\n        if (this.componentRef) {\n            this.componentRef.destroy();\n        }\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'allDayEventPipe'\n})\nexport class AllDayEventPipe implements PipeTransform {\n    transform(items: any[], allDay: boolean): any {\n        if (allDay) {\n            return items.filter(item => item.allDay);\n        }\n\n        return items.filter(item => !item.allDay);\n    }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ViewBaseComponent } from '../shared/view-base/view-base.component';\nimport { DayView } from '../../models/Calendar';\nimport { CalendarEvent } from '../../models/CalendarEvent';\nimport { FormattingService } from '../../services/formatting.service';\nimport { tap } from 'rxjs/operators';\nimport { CalendarDay } from '../../models/CalendarDay';\n\n@Component({\n    selector: 'day-view',\n    templateUrl: './day-view.component.html',\n    styleUrls: ['./day-view.component.scss']\n})\nexport class DayViewComponent extends ViewBaseComponent implements OnInit {\n    dayView = {} as DayView;\n\n    constructor(\n        formattingService: FormattingService\n    ) {\n        super(formattingService);\n    }\n\n    ngOnInit(): void {\n        super.ngOnInit();\n        this.generateView();\n\n        this.subscriptions$.add(\n            this.events$.pipe(\n                tap(events => {\n                    this.events = events;\n                    this.generateView();\n                })\n            ).subscribe()\n        );\n    }\n\n    generateView(): void {\n        if (this.selectedDate) {\n            const emptyDay = this.generateDays();\n            this.populateDayView(emptyDay);\n        }\n    }\n\n    populateDayView(emptyDay: CalendarDay): void {\n        const populatedDay: CalendarDay = emptyDay;\n\n        const events = this.events.filter((event: CalendarEvent) => {\n            return this.isSameDay(populatedDay.date, event.startTime, event.endTime);\n            }).map((event: CalendarEvent) => {\n                return this.populateEvents(event, populatedDay);\n            }).sort((a: CalendarEvent, b: CalendarEvent) => {\n                return this.sortByTime(a, b);\n            });\n\n        populatedDay.events = events;\n\n        this.dayView = this.createEventGroups(populatedDay);\n    }\n\n    generateDays(): CalendarDay {\n        const date = new Date(this.selectedDate);\n\n        const day: CalendarDay = new CalendarDay({\n            date,\n            eventGroups: [],\n            events: [],\n            eventCount: 0\n        });\n\n        return day;\n    }\n}\n","<div class=\"calendar__days\">\n    <div class=\"calendar__day\">\n        <div class=\"day__header\" [ngClass]=\"{ 'day__header--today ': isToday(selectedDate) }\">\n            <span class=\"day-name\">{{ getDayName(selectedDate) }}</span> \n            <span class=\"day-number\">{{ getDayNumber(selectedDate) }}</span>\n        </div>\n    </div>\n</div> \n\n<div class=\"calendar__content\">\n    <div class=\"calendar__day-events\">\n        <div class=\"day__lane\">\n            <event-display\n                *ngFor=\"let event of dayView.events | allDayEventPipe: true\"\n                class=\"calendar__item\"\n                [component]=\"options.renderComponent.day\"\n                [event]=\"event\"\n                [date]=\"selectedDate\"\n                (click)=\"onEventClick(event)\">\n            </event-display>\n        </div>\n    </div>\n\n    <div class=\"calendar__lanes\">\n        <div class=\"calendar__times\">\n            <div class=\"time-cell\" *ngFor=\"let hour of hoursOfDay;\" [style.height.px]=\"getCellHeight(hour)\">\n                {{ hour.title }}\n            </div>\n        </div>\n\n        <div class=\"day__lane\" [ngClass]=\"{ 'day__lane--today': isToday(selectedDate) }\">\n            <div class=\"time-grid\">\n                <div class=\"time-grid__cell\" *ngFor=\"let hour of hoursOfDay;\" [style.height.px]=\"getCellHeight(hour)\"></div>\n            </div> \n\n            <div class=\"calendar__marker\" *ngIf=\"isToday(selectedDate)\" [style.marginTop.px]=\"markerPosition\"></div>\n            \n            <event-display\n                *ngFor=\"let event of dayView.events | allDayEventPipe: false\"\n                class=\"calendar__item\"\n                [component]=\"options.renderComponent.day\"\n                [event]=\"event\"\n                [date]=\"selectedDate\"                \n                [style.width.%]=\"event.grid?.width\"\n                [style.marginLeft.%]=\"event.grid?.offsetLeft\"\n                [style.marginTop.px]=\"event.grid?.offsetTop\"\n                [style.height.px]=\"event.grid?.durationOffset\"\n                (click)=\"onEventClick(event)\">\n            </event-display>\n        </div>\n    </div>\n</div>","import { Component, OnInit } from '@angular/core';\nimport { add, startOfWeek } from 'date-fns';\nimport { ViewBaseComponent } from '../shared/view-base/view-base.component';\nimport { WeekView } from '../../models/Calendar';\nimport { CalendarEvent } from '../../models/CalendarEvent';\nimport { FormattingService } from '../../services/formatting.service';\nimport { tap } from 'rxjs/operators';\nimport { CalendarDay } from '../../models/CalendarDay';\n\n@Component({\n    selector: 'week-view',\n    templateUrl: './week-view.component.html',\n    styleUrls: ['./week-view.component.scss']\n})\nexport class WeekViewComponent extends ViewBaseComponent implements OnInit {\n    weekView = {} as WeekView;\n\n    constructor(\n        formattingService: FormattingService\n    ) {\n        super(formattingService);\n    }\n\n    ngOnInit(): void {\n        super.ngOnInit();\n        this.generateView();\n\n        this.subscriptions$.add(\n            this.events$.pipe(\n                tap(events => {\n                    this.events = events;\n                    this.generateView();\n                })\n            ).subscribe()\n        );\n    }\n\n    generateView(): void {\n        if (this.selectedDate) {\n            const emptyDays = this.generateDays();\n            this.populateWeekView(emptyDays);\n        }\n    }\n\n    populateWeekView(emptyDays: CalendarDay[]): void {\n        const populatedDays: CalendarDay[] = emptyDays;\n\n        populatedDays.forEach(day => {\n            day.events = this.events.filter((event: CalendarEvent) => {\n                return this.isSameDay(day.date, event.startTime, event.endTime);\n            }).map((event: CalendarEvent) => {\n                return this.populateEvents(event, day);\n            }).sort((a: CalendarEvent, b: CalendarEvent) => {\n                return this.sortByTime(a, b);\n            });\n\n            day = this.createEventGroups(day);\n        });\n\n        this.weekView.days = populatedDays;\n    }\n\n    generateDays(): CalendarDay[] {\n        const selectedWeekStart = startOfWeek(this.selectedDate, { weekStartsOn: 1 });\n        const days = [];\n\n        for (let i = 0; i < 7; i++) {\n            let date = new Date(selectedWeekStart);\n            date = add(date, { days: i });\n\n            const day = new CalendarDay({\n                date,\n                eventGroups: [],\n                events: []\n            });\n\n            days.push(day);\n        }\n\n        return days;\n    }\n}\n","<div class=\"calendar__days\">\n    <div class=\"calendar__day\" *ngFor=\"let day of weekView.days;\">\n        <div class=\"day__header\" [ngClass]=\"{ 'day__header--today ': isToday(day.date) }\">\n            <span class=\"day-name\">{{ getDayName(day.date) }}</span> \n            <span class=\"day-number\" (click)=\"navigateToDayView(day.date)\">{{ getDayNumber(day.date) }}</span>\n        </div>\n    </div>\n</div> \n\n<div class=\"calendar__content\">\n    <div class=\"calendar__day-events\">\n        <div class=\"day__lane\" *ngFor=\"let day of weekView.days\">\n            <event-display\n                *ngFor=\"let event of day.events | allDayEventPipe: true\"\n                class=\"calendar__item\"\n                [component]=\"options.renderComponent.week\"\n                [event]=\"event\"\n                [date]=\"day.date\"\n                (click)=\"onEventClick(event)\">\n            </event-display>\n        </div>\n    </div>\n\n    <div class=\"calendar__lanes\">\n        <div class=\"calendar__times\">\n            <div class=\"time-cell\" *ngFor=\"let hour of hoursOfDay;\" [style.height.px]=\"getCellHeight(hour)\">\n                {{ hour.title }}\n            </div>\n        </div>\n\n        <div class=\"day__lane\"\n            *ngFor=\"let day of weekView.days\"\n            [ngClass]=\"{ 'day__lane--today': isToday(day.date) }\">\n\n            <div class=\"time-grid\">\n                <div class=\"time-grid__cell\" *ngFor=\"let hour of hoursOfDay;\" [style.height.px]=\"getCellHeight(hour)\"></div>\n            </div> \n\n            <div class=\"calendar__marker\" *ngIf=\"isToday(day.date)\" [style.marginTop.px]=\"markerPosition\"></div>\n            \n            <event-display\n                *ngFor=\"let event of day.events | allDayEventPipe: false\"\n                class=\"calendar__item\"\n                [component]=\"options.renderComponent.week\"\n                [event]=\"event\"\n                [date]=\"day.date\"                \n                [style.width.%]=\"event.grid?.width\"\n                [style.marginLeft.%]=\"event.grid?.offsetLeft\"\n                [style.marginTop.px]=\"event.grid?.offsetTop\"\n                [style.height.px]=\"event.grid?.durationOffset\"\n                (click)=\"onEventClick(event)\">\n            </event-display>\n        </div>\n    </div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n    name: 'limitPipe'\n})\nexport class LimitPipe implements PipeTransform {\n    transform(items: any[], limit: number): any {\n        return items.slice(0, limit);\n    }\n}\n","import { Component, ElementRef, EventEmitter, HostListener, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\nimport { add, eachWeekOfInterval, endOfMonth, format, getWeek, getWeekOfMonth, isSameMonth, startOfMonth, sub } from 'date-fns';\nimport { fromEvent, interval, Subject } from 'rxjs';\nimport { takeUntil, tap, throttle } from 'rxjs/operators';\nimport { MonthView } from '../../models/Calendar';\nimport { CalendarDay } from '../../models/CalendarDay';\nimport { CalendarEvent } from '../../models/CalendarEvent';\nimport { NEXT, PREVIOUS } from '../../models/Directions';\nimport { daysOfWeek } from '../../models/Times';\nimport { FormattingService } from '../../services/formatting.service';\nimport { ViewBaseComponent } from '../shared/view-base/view-base.component';\n\n@Component({\n    selector: 'month-view',\n    templateUrl: './month-view.component.html',\n    styleUrls: ['./month-view.component.scss']\n})\nexport class MonthViewComponent extends ViewBaseComponent implements OnInit, OnDestroy {\n    @Output() setCalendarOffset: EventEmitter<string> = new EventEmitter();\n\n    monthView = {} as MonthView;\n    daysOfWeek = daysOfWeek;\n    dayBlockHeight = 0;\n    weekNumbers: number[] = [];\n    showHiddenEvents = false;\n    hiddenEventsTriggerOrigin: any;\n    hiddenEventsDay: CalendarDay;\n    maxEventsVisible = 0;\n    observer: MutationObserver;\n\n    scrollListener = new Subject();\n    scrollListener$ = this.scrollListener.asObservable();\n\n    @ViewChild('calendarDayElement', {read: ElementRef, static: true}) calendarDayElement: ElementRef;\n    @HostListener('window:resize', ['$event']) onResize(): void {\n        this.calculateMaxEventsPerDay();\n    }\n\n    constructor(\n        formattingService: FormattingService\n    ) {\n        super(formattingService);\n\n        fromEvent(window, 'wheel')\n            .pipe(\n                takeUntil(this.scrollListener$),\n                throttle(e => interval(1000))\n            )\n            .subscribe((e: any) => this.handleScroll(e));\n\n        this.hiddenEventsDay = new CalendarDay();\n    }\n\n    ngOnInit(): void {\n        super.ngOnInit();\n        this.generateView();\n        this.listenToCalendarViewportChanges();\n\n        this.subscriptions$.add(\n            this.events$.pipe(\n                tap(events => {\n                    this.events = events;\n                    this.generateView();\n                })\n            ).subscribe()\n        );\n\n        this.subscriptions$.add(\n            this.selectedDate$.pipe(\n                tap(() => {\n                    this.closeHiddenEvents();\n                })\n            ).subscribe()\n        );\n    }\n\n    listenToCalendarViewportChanges(): void {\n        this.observer = new MutationObserver( list => {\n            this.calculateMaxEventsPerDay();\n        });\n\n        this.observer.observe(this.calendarDayElement.nativeElement, { childList: true });\n    }\n\n    generateView(): void {\n        if (this.selectedDate) {\n            const emptyDays = this.generateDays();\n            this.populateMonthView(emptyDays);\n            this.getWeekNumbers();\n\n            this.calculateMaxEventsPerDay();\n        }\n    }\n\n    getWeekNumbers(): void {\n        const weeksOfMonth = eachWeekOfInterval({\n            start: startOfMonth(this.selectedDate),\n            end: endOfMonth(this.selectedDate)\n        });\n\n        this.weekNumbers = [];\n        weeksOfMonth.forEach(week => {\n            this.weekNumbers.push(getWeek(week, { weekStartsOn: 1 }));\n        });\n    }\n\n    populateMonthView(emptyDays: CalendarDay[]): void {\n        const populatedDays: CalendarDay[] = emptyDays;\n\n        populatedDays.forEach(day => {\n            day.events = this.events.filter((event: CalendarEvent) => {\n                return this.isSameDay(day.date, event.startTime, event.endTime);\n            }).map((event: CalendarEvent) => {\n                return this.populateEvents(event, day);\n            }).sort((a: CalendarEvent, b: CalendarEvent) => {\n                return this.sortByTime(a, b);\n            }).sort(event => {\n                return this.sortByAllDay(event);\n            });\n\n            day = this.createEventGroups(day);\n            day.eventCount = day.events.length;\n        });\n\n        this.monthView.days = populatedDays;\n    }\n\n    generateDays(): CalendarDay[] {\n        const dayOfWeek = add(startOfMonth(this.selectedDate), { days: 7 }).getDay();\n        const selectedMonthStart = sub(startOfMonth(this.selectedDate), { days: dayOfWeek - 1 });\n        const days = [];\n\n        for (let i = 0; i < 35; i++) {\n            let date = new Date(selectedMonthStart);\n            date = add(date, { days: i });\n\n            const day: CalendarDay = {\n                date,\n                eventGroups: [],\n                events: [],\n                eventCount: 0\n            };\n\n            days.push(day);\n        }\n\n        return days;\n    }\n\n    isCurrentMonth(date: Date): boolean {\n        return isSameMonth(date, this.selectedDate);\n    }\n\n    handleScroll(e: WheelEvent): void {\n        e.deltaY > 0 ? this.setCalendarOffset.emit(NEXT) : this.setCalendarOffset.emit(PREVIOUS);\n    }\n\n    toggleHiddenEvents(hiddenEventsTriggerOrigin: any, day: CalendarDay): void {\n        this.hiddenEventsTriggerOrigin = hiddenEventsTriggerOrigin;\n        this.hiddenEventsDay = day;\n        this.showHiddenEvents = !this.showHiddenEvents;\n    }\n\n    closeHiddenEvents(): void {\n        this.showHiddenEvents = false;\n    }\n\n    getHiddenEventsHeight(): number {\n        return (this.hiddenEventsDay.eventCount * 30) + 85;\n    }\n\n    calculateMaxEventsPerDay(): void {\n        const dayBlockHeight = this.calendarDayElement.nativeElement.children[0]?.getBoundingClientRect().height;\n        this.maxEventsVisible = Math.floor((dayBlockHeight - 25) / 30);\n    }\n\n    weekDayIsToday(day: any): boolean {\n        const isFirstWeekOfMonth = getWeekOfMonth(this.selectedDate) === 1\n            && day.title === format(this.selectedDate, 'E')\n            && this.isToday(this.selectedDate);\n\n        return isFirstWeekOfMonth;\n    }\n\n    ngOnDestroy(): void {\n        this.scrollListener.next(null);\n        this.observer.disconnect();\n    }\n}\n","<div class=\"calendar__days\">\n    <div class=\"calendar__day\" *ngFor=\"let day of daysOfWeek;\" [class.is-today]=weekDayIsToday(day)>\n        <div class=\"day__header\">\n            <span class=\"day-name\">{{ day.title }}</span>\n        </div>\n    </div>\n</div>\n\n<div class=\"calendar__weeknumbers\">\n    <div class=\"week-number-cell\" *ngFor=\"let weekNumber of weekNumbers;\">\n        {{ weekNumber }}\n    </div>\n</div>\n\n<div class=\"calendar__content\">\n    <div class=\"calendar__blocks\" #calendarDayElement>\n        <div \n            *ngFor=\"let day of monthView.days\" \n            class=\"day__block\"\n            [class.is-today]=\"isToday(day.date)\">\n            <div class=\"day__block-content\" [class.not-current-month]=\"!isCurrentMonth(day.date)\">\n                <span class=\"day__block-date\" (click)=\"navigateToDayView(day.date)\">{{ getDayNumber(day.date) }}</span>\n            </div>\n\n            <div class=\"day__events\">\n                <event-display\n                    *ngFor=\"let event of day.events | limitPipe: maxEventsVisible - 1\"\n                    class=\"calendar__item\"\n                    [component]=\"options.renderComponent.month\"\n                    [event]=\"event\"\n                    [date]=\"day.date\"      \n                    (click)=\"onEventClick(event)\">\n                </event-display>\n\n                <span *ngIf=\"day.eventCount && maxEventsVisible > 0 && day.eventCount >= maxEventsVisible\">\n                    <div\n                        class=\"hidden-events-trigger\"                        \n                        (click)=\"toggleHiddenEvents(trigger, day)\"\n                        cdkOverlayOrigin\n                        #trigger=\"cdkOverlayOrigin\">\n                        {{ day.eventCount - maxEventsVisible + 1 }} more\n                    </div>\n                </span>  \n            </div>\n        </div>\n\n        <ng-template\n            cdkConnectedOverlay\n            (overlayOutsideClick)=\"closeHiddenEvents()\"\n            [cdkConnectedOverlayOffsetY]=\"-100\"\n            [cdkConnectedOverlayOffsetX]=\"-35\"\n            cdkConnectedOverlayPanelClass=\"hidden-events-overlay\"\n            [cdkConnectedOverlayOrigin]=\"hiddenEventsTriggerOrigin\"\n            [cdkConnectedOverlayOpen]=\"showHiddenEvents\">\n            <div\n                class=\"event-container mat-elevation-z1\"\n                [class.is-today]=\"isToday(hiddenEventsDay.date)\"\n                [style.height.px]=\"getHiddenEventsHeight()\">\n\n                <span\n                    class=\"event-container__date\"\n                    (click)=\"navigateToDayView(hiddenEventsDay.date)\">\n                    {{ getDayNumber(hiddenEventsDay.date) }}\n                </span>\n\n                <event-display\n                    *ngFor=\"let event of hiddenEventsDay.events\"\n                    class=\"calendar__item\"\n                    [component]=\"options.renderComponent.month\"\n                    [event]=\"event\"\n                    [date]=\"hiddenEventsDay.date\"      \n                    (click)=\"onEventClick(event)\">\n                </event-display>\n            </div>\n        </ng-template>          \n    </div>\n</div>\n","import { Component, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { format, add, isToday, toDate } from 'date-fns';\nimport { DateAdapter } from '@angular/material/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport Calendar from './models/Calendar';\nimport { CalendarOptions } from './models/CalendarOptions';\nimport { CalendarEvent } from './models/CalendarEvent';\nimport { DAY, WEEK, MONTH, Views } from './models/Views';\nimport { Periods } from './models/Times';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { NEXT, PREVIOUS } from './models/Directions';\nimport { MatDialog } from '@angular/material/dialog';\nimport { KeyboardShortcutDialogComponent } from './components/dialogs/keyboard-shortcut-dialog/keyboard-shortcut-dialog.component';\nimport { colors } from './models/Colors';\nimport { MatCalendar } from '@angular/material/datepicker';\nimport { ARROWLEFT, ARROWRIGHT, D, M, N, T, W } from './models/KeyboardShortcuts';\n\n@Component({\n    selector: 'ngx-mat-calendar',\n    templateUrl: './ngx-mat-calendar.component.html',\n    styleUrls: ['./ngx-mat-calendar.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class NgxMatCalendarComponent implements OnInit, OnDestroy {\n    options$ = new BehaviorSubject<CalendarOptions>(new CalendarOptions());\n    events$ = new BehaviorSubject<CalendarEvent[]>([]);\n    selectedDate$ = new BehaviorSubject<Date>(new Date());\n\n    @Input()\n    set options(options: CalendarOptions) {\n        this.selectedView = options.view;\n        this.dateAdapter.setLocale(options.locale);\n        this.options$.next(options);\n    }\n\n    get options(): CalendarOptions {\n        return this.options$.getValue();\n    }\n\n    @Input()\n    set events(events: CalendarEvent[]) {\n        this.parseEvents(events);\n    }\n\n    get events(): CalendarEvent[] {\n        return this.events$.getValue();\n    }\n\n    @Input()\n    set selectedDate(selectedDate: Date) {\n        this.selectedDate$.next(selectedDate);\n    }\n\n    get selectedDate(): Date {\n        return this.selectedDate$.getValue();\n    }\n\n    @Output() dateChange: EventEmitter<Date> = new EventEmitter();\n    @Output() eventClick: EventEmitter<CalendarEvent> = new EventEmitter();\n    @Output() addButtonClick: EventEmitter<any> = new EventEmitter();\n\n    @ViewChild(MatMenuTrigger) datePickerMenu: MatMenuTrigger;\n    @ViewChild(MatCalendar) matCalendar: MatCalendar<Date>;\n\n    views: Views;\n    selectedView: Views;\n    calendar = {} as Calendar;\n    today = format(new Date(), 'EEEE, d MMMM');\n\n    private subscriptions$ = new Subscription();\n\n    @HostListener('window:keydown', ['$event'])\n    onKeyDown(event: KeyboardEvent): void {\n        this.handleKeyboardEvents(event);\n    }\n\n    constructor(\n        private dateAdapter: DateAdapter<Date>,\n        private dialog: MatDialog\n    ) {}\n\n    ngOnInit(): void {\n        this.subscriptions$.add(\n            this.selectedDate$.pipe(\n                tap((selectedDate) => {\n                    if (this.matCalendar) {\n                        this.matCalendar.activeDate = selectedDate;\n                    }\n\n                    this.generateCalendar(selectedDate);\n                    this.dateChange.emit(selectedDate);\n                })\n            ).subscribe()\n        );\n    }\n\n    generateCalendar(selectedDate: Date): void {\n        if (selectedDate) {\n            this.calendar = {\n                monthAndYear: format(selectedDate, 'MMMM yyyy'),\n                weeknumber: format(selectedDate, 'I')\n            };\n        }\n    }\n\n    parseEvents(events: CalendarEvent[]): void {\n        this.events$.next(events.map((event: CalendarEvent) => {\n             event.date = new Date(event.date);\n             event.startTime = new Date(event.startTime);\n             event.endTime = new Date(event.endTime);\n             event.color = event.color || colors.grey;\n\n             return event;\n        }));\n    }\n\n    isToday(date: Date): boolean {\n        return isToday(date);\n    }\n\n    setCalendarToday(): void {\n        this.selectedDate$.next(new Date());\n    }\n\n    setCalendarOffset(direction: string): void {\n        const offset = Periods[this.selectedView];\n\n        this.selectedDate$.next(add(this.selectedDate$.getValue(), {\n            [offset]: direction === PREVIOUS ? -1 : 1\n        }));\n    }\n\n    setCalendar(date: Date): void {\n        this.selectedDate$.next(date);\n    }\n\n    onViewChange(view: any): void {\n        this.selectedView = view;\n    }\n\n    changeToDayView(date: Date): void {\n        this.selectedView = DAY;\n        this.setCalendar(date);\n    }\n\n    getSelectedView(view: Views): boolean {\n        return this.selectedView === view;\n    }\n\n    onEventClick(event: CalendarEvent): void {\n        this.eventClick.emit(event);\n    }\n\n    onAddButtonClick(): void {\n        this.addButtonClick.emit();\n    }\n\n    onDatePickerChange(date: any): void {\n        this.setCalendar(toDate(date));\n        this.datePickerMenu.closeMenu();\n    }\n\n    showKeyboardShortcutDialog(): void {\n        const dialogRef = this.dialog.open(KeyboardShortcutDialogComponent, {\n            data: this.options\n        });\n    }\n\n    handleKeyboardEvents(event: KeyboardEvent): void {\n        switch (event.key) {\n            case D:\n                this.selectedView = DAY;\n                break;\n\n            case W:\n                this.selectedView = WEEK;\n                break;\n\n            case M:\n                this.selectedView = MONTH;\n                break;\n\n            case T:\n                this.setCalendarToday();\n                break;\n\n            case N:\n                this.addButtonClick.emit();\n                break;\n\n            case ARROWLEFT:\n                this.setCalendarOffset(PREVIOUS);\n                break;\n\n            case ARROWRIGHT:\n                this.setCalendarOffset(NEXT);\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.subscriptions$.unsubscribe();\n    }\n}\n","<div class=\"calendar\" *ngIf=\"events && options\">\n    <div class=\"calendar__toolbar\">\n         <button\n            mat-stroked-button\n            class=\"toolbar__button toolbar__button--today\"\n            color=\"primary\"\n            [matTooltip]=\"today\"\n            (click)=\"setCalendarToday()\">\n                Today\n        </button>\n\n        <button\n            mat-icon-button\n            class=\"toolbar__button toolbar__button--navigate\"\n            color=\"primary\"\n            (click)=\"setCalendarOffset('prev')\">\n            <mat-icon>chevron_left</mat-icon>\n        </button>\n\n        <button\n            mat-icon-button\n            class=\"toolbar__button toolbar__button--navigate\"\n            color=\"primary\"\n            (click)=\"setCalendarOffset('next')\">\n            <mat-icon>chevron_right</mat-icon>\n        </button>\n\n        <div class=\"toolbar__meta\">\n            <span class=\"toolbar__month\">{{ calendar.monthAndYear }}</span>\n            <span class=\"toolbar__week\" *ngIf=\"!getSelectedView('month')\">Week {{ calendar.weeknumber }}</span>\n        </div>\n\n        <div class=\"toolbar__right\" *ngIf=\"options$ | async as options\">\n            <button\n                *ngIf=\"options.enableKeyboardShortcutDialog\"\n                mat-icon-button\n                matTooltip=\"Keyboard shortcuts\"\n                class=\"toolbar__button toolbar__button--keyboard-shortcut\"\n                color=\"primary\"\n                (click)=\"showKeyboardShortcutDialog()\">\n                <mat-icon>keyboard</mat-icon>\n            </button>\n\n            <mat-form-field\n                *ngIf=\"options.enableViewToggle\"\n                appearance=\"outline\"\n                class=\"toolbar__view-switch\">\n                <mat-select\n                    [value]=\"selectedView\"\n                    (selectionChange)=\"onViewChange(view.value)\"\n                    #view>\n                    <mat-option value=\"day\">Day</mat-option>\n                    <mat-option value=\"week\">Week</mat-option>\n                    <mat-option value=\"month\">Month</mat-option>\n                </mat-select>\n            </mat-form-field>\n\n            <mat-menu #datePickerMenu=\"matMenu\">\n                <div (click)=\"$event.stopPropagation()\">\n                    <mat-calendar\n                        (selectedChange)=\"onDatePickerChange($event)\"\n                        [selected]=\"selectedDate$ | async\">\n                    </mat-calendar>\n                </div>\n            </mat-menu>\n\n            <button\n                [matMenuTriggerFor]=\"datePickerMenu\"\n                matTooltip=\"Pick a date\"\n                *ngIf=\"options.enableDatePickerButton\"\n                mat-icon-button\n                class=\"toolbar__button\"\n                color=\"primary\">\n                <mat-icon>calendar_today</mat-icon>\n            </button>\n        </div>\n    </div>\n\n    <day-view\n        *ngIf=\"getSelectedView('day')\"\n        [events$]=\"events$\"\n        [selectedDate$]=\"selectedDate$\"\n        [options$]=\"options$\"\n        (eventClick)=\"onEventClick($event)\">\n    </day-view>\n\n    <week-view\n        *ngIf=\"getSelectedView('week')\"\n        [events$]=\"events$\"\n        [selectedDate$]=\"selectedDate$\"\n        [options$]=\"options$\"\n        (eventClick)=\"onEventClick($event)\"\n        (changeToDayView)=\"changeToDayView($event)\">\n    </week-view>\n\n    <month-view\n        *ngIf=\"getSelectedView('month')\"\n        [events$]=\"events$\"\n        [selectedDate$]=\"selectedDate$\"\n        [options$]=\"options$\"\n        (eventClick)=\"onEventClick($event)\"\n        (setCalendarOffset)=\"setCalendarOffset($event)\"\n        (changeToDayView)=\"changeToDayView($event)\">\n    </month-view>\n\n    <div *ngIf=\"options$ | async as options\">\n        <button\n            class=\"calendar__add-button\"\n            *ngIf=\"options.enableAddEventButton\"\n            mat-fab\n            color=\"primary\"\n            (click)=\"onAddButtonClick()\">\n            <mat-icon>add</mat-icon>\n        </button>\n    </div>\n</div>","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { EventDisplayComponent } from './event-display/event-display.component';\nimport { EventRenderDayComponent } from './event-render/event-render-day/event-render-day.component';\nimport { EventRenderWeekComponent } from './event-render/event-render-week/event-render-week.component';\nimport { EventRenderMonthComponent } from './event-render/event-render-month/event-render-month.component';\nimport { EventRenderBaseComponent } from './event-render/event-render-base.component';\nimport { EventDisplayDirective } from './event-display/event-display.directive';\n\nconst MaterialModules = [\n    MatIconModule,\n    MatTooltipModule\n];\n\n@NgModule({\n    declarations: [\n        EventDisplayComponent,\n        EventRenderDayComponent,\n        EventRenderWeekComponent,\n        EventRenderMonthComponent,\n        EventDisplayDirective,\n        EventRenderBaseComponent\n    ],\n    imports: [\n        BrowserModule,\n        ...MaterialModules\n    ],\n    exports: [\n        EventDisplayComponent,\n        EventRenderDayComponent,\n        EventRenderWeekComponent,\n        EventRenderMonthComponent\n    ],\n    providers: [],\n    bootstrap: [],\n    entryComponents: [\n        EventRenderDayComponent,\n        EventRenderWeekComponent,\n        EventRenderMonthComponent\n    ]\n})\nexport class SharedComponentsModule { }\n","import { NgModule } from '@angular/core';\nimport { AllDayEventPipe } from './all-day-event.pipe';\nimport { LimitPipe } from './limit.pipe';\n\n@NgModule({\n    declarations: [\n        LimitPipe,\n        AllDayEventPipe\n    ],\n    imports: [],\n    exports: [\n        LimitPipe,\n        AllDayEventPipe\n    ],\n    providers: [],\n    bootstrap: []\n})\nexport class PipesModule { }\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { DayViewComponent } from './day-view.component';\nimport { SharedComponentsModule } from '../shared/shared-components.module';\nimport { PipesModule } from '../../pipes/pipes.module';\n\n@NgModule({\n    declarations: [\n        DayViewComponent\n    ],\n    imports: [\n        BrowserModule,\n        SharedComponentsModule,\n        PipesModule\n    ],\n    exports: [\n        DayViewComponent\n    ],\n    providers: [],\n    bootstrap: []\n})\nexport class DayViewModule { }\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { WeekViewComponent } from './week-view.component';\nimport { SharedComponentsModule } from '../shared/shared-components.module';\nimport { PipesModule } from '../../pipes/pipes.module';\n\n@NgModule({\n    declarations: [\n        WeekViewComponent\n    ],\n    imports: [\n        BrowserModule,\n        SharedComponentsModule,\n        PipesModule\n    ],\n    exports: [\n        WeekViewComponent\n    ],\n    providers: [],\n    bootstrap: []\n})\nexport class WeekViewModule { }\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { SharedComponentsModule } from '../shared/shared-components.module';\nimport { MonthViewComponent } from './month-view.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PipesModule } from '../../pipes/pipes.module';\n\n@NgModule({\n    declarations: [\n        MonthViewComponent\n    ],\n    imports: [\n        BrowserModule,\n        SharedComponentsModule,\n        OverlayModule,\n        PipesModule\n    ],\n    exports: [\n        MonthViewComponent\n    ],\n    providers: [],\n    bootstrap: []\n})\nexport class MonthViewModule { }\n","import { Injectable } from '@angular/core';\nimport { NativeDateAdapter } from '@angular/material/core';\n\n@Injectable()\nexport class LocaleDateAdapter extends NativeDateAdapter {\n    getFirstDayOfWeek(): number {\n        return 1;\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxMatCalendarComponent } from './ngx-mat-calendar.component';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DateAdapter, MatNativeDateModule } from '@angular/material/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { DayViewModule } from './components/day-view/day-view.module';\nimport { WeekViewModule } from './components/week-view/week-view.module';\nimport { MonthViewModule } from './components/month-view/month-view.module';\nimport { LocaleDateAdapter } from './other/DateAdapter';\nimport { FormattingService } from './services/formatting.service';\nimport { KeyboardShortcutDialogComponent } from './components/dialogs/keyboard-shortcut-dialog/keyboard-shortcut-dialog.component';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatSelectModule } from '@angular/material/select';\n\nconst MaterialModules = [\n    MatCardModule,\n    MatButtonModule,\n    MatTooltipModule,\n    MatIconModule,\n    MatNativeDateModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatDatepickerModule,\n    MatSelectModule,\n    MatMenuModule,\n    MatDialogModule,\n    MatDividerModule\n];\n\nconst ViewModules = [\n    DayViewModule,\n    WeekViewModule,\n    MonthViewModule\n];\n\n@NgModule({\n    declarations: [\n        NgxMatCalendarComponent,\n        KeyboardShortcutDialogComponent\n    ],\n    imports: [\n        BrowserModule,\n        FormsModule,\n        ReactiveFormsModule,\n        ...ViewModules,\n        ...MaterialModules\n    ],\n    exports: [\n        NgxMatCalendarComponent,\n        KeyboardShortcutDialogComponent\n    ],\n    providers: [\n        FormattingService,\n        {\n            provide: DateAdapter,\n            useClass: LocaleDateAdapter\n        }\n    ],\n    bootstrap: []\n})\nexport class NgxMatCalendarModule { }\n","/*\n * Public API Surface of ngx-mat-calendar\n */\n\nexport * from './lib/ngx-mat-calendar.component';\nexport * from './lib/ngx-mat-calendar.module';\nexport * from './lib/components/dialogs/keyboard-shortcut-dialog/keyboard-shortcut-dialog.component';\nexport * from './lib/models/CalendarEvent';\nexport * from './lib/models/CalendarOptions';\nexport * from './lib/models/Calendar';\nexport * from './lib/models/CalendarDay';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","MaterialModules"],"mappings":"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"}