{"version":3,"file":"ionic6-calendar.mjs","sources":["../../src/calendar.service.ts","../../src/monthview.ts","../../src/init-position-scroll.ts","../../src/weekview.ts","../../src/dayview.ts","../../src/calendar.interface.ts","../../src/calendar.ts","../../src/calendar.module.ts","../../src/ionic6-calendar.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\nimport {ICalendarComponent, IView, CalendarMode, QueryMode} from './calendar.interface';\n\n@Injectable()\nexport class CalendarService {\n    queryMode!: QueryMode;\n    currentDateChangedFromParent$: Observable<Date>;\n    currentDateChangedFromChildren$: Observable<Date>;\n    eventSourceChanged$: Observable<void>;\n    slideChanged$: Observable<number>;\n    slideUpdated$: Observable<void>;\n\n    private _currentDate: Date = new Date();\n    private currentDateChangedFromParent = new Subject<Date>();\n    private currentDateChangedFromChildren = new Subject<Date>();\n    private eventSourceChanged = new Subject<void>();\n    private slideChanged = new Subject<number>();\n    private slideUpdated = new Subject<void>();\n\n    constructor() {\n        this.currentDateChangedFromParent$ = this.currentDateChangedFromParent.asObservable();\n        this.currentDateChangedFromChildren$ = this.currentDateChangedFromChildren.asObservable();\n        this.eventSourceChanged$ = this.eventSourceChanged.asObservable();\n        this.slideChanged$ = this.slideChanged.asObservable();\n        this.slideUpdated$ = this.slideUpdated.asObservable();\n    }\n\n    setCurrentDate(val: Date, fromParent: boolean = false) {\n        this._currentDate = new Date(val);\n        if (fromParent) {\n            this.currentDateChangedFromParent.next(val);\n        } else {\n            this.currentDateChangedFromChildren.next(val);\n        }\n    }\n\n    get currentDate(): Date {\n        return this._currentDate;\n    }\n\n    rangeChanged(component: ICalendarComponent) {\n        if (this.queryMode === 'local') {\n            if (component.eventSource && component.onDataLoaded) {\n                component.onDataLoaded();\n            }\n        } else if (this.queryMode === 'remote') {\n            let rangeStart = new Date(component.range.startTime.getTime()),\n                rangeEnd = new Date(component.range.endTime.getTime());\n\n            rangeStart.setHours(0);\n            if (rangeStart.getHours() === 23) {\n                rangeStart.setTime(rangeStart.getTime() + 3600000);\n            }\n\n            rangeEnd.setHours(0);\n            if (rangeEnd.getHours() === 23) {\n                rangeEnd.setTime(rangeEnd.getTime() + 3600000);\n            }\n            component.onRangeChanged.emit({\n                startTime: rangeStart,\n                endTime: rangeEnd\n            });\n        }\n    }\n\n    private getStep(mode: CalendarMode): { years: number; months: number; days: number; } {\n        switch (mode) {\n            case 'month':\n                return {\n                    years: 0,\n                    months: 1,\n                    days: 0\n                };\n            case 'week':\n                return {\n                    years: 0,\n                    months: 0,\n                    days: 7\n                };\n            case 'day':\n                return {\n                    years: 0,\n                    months: 0,\n                    days: 1\n                };\n        }\n    }\n\n    getAdjacentCalendarDate(mode: CalendarMode, direction: number): Date {\n        let calculateCalendarDate = this.currentDate;\n        const step = this.getStep(mode),\n            year = calculateCalendarDate.getFullYear() + direction * step.years,\n            month = calculateCalendarDate.getMonth() + direction * step.months,\n            date = calculateCalendarDate.getDate() + direction * step.days;\n\n        calculateCalendarDate = new Date(year, month, date, 12, 0, 0);\n\n        if (mode === 'month') {\n            const firstDayInNextMonth = new Date(year, month + 1, 1, 12, 0, 0);\n            if (firstDayInNextMonth.getTime() <= calculateCalendarDate.getTime()) {\n                calculateCalendarDate = new Date(firstDayInNextMonth.getTime() - 24 * 60 * 60 * 1000);\n            }\n        }\n        return calculateCalendarDate;\n    }\n\n    getAdjacentViewStartTime(component: ICalendarComponent, direction: number): Date {\n        let adjacentCalendarDate = this.getAdjacentCalendarDate(component.mode, direction);\n        return component.getRange(adjacentCalendarDate).startTime;\n    }\n\n    populateAdjacentViews(component: ICalendarComponent) {\n        let currentViewStartDate: Date,\n            currentViewData: IView[],\n            toUpdateViewIndex: number,\n            currentViewIndex = component.currentViewIndex;\n\n        if (component.direction === 1) {\n            currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\n            toUpdateViewIndex = (currentViewIndex + 1) % 3;\n            component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\n        } else if (component.direction === -1) {\n            currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n            toUpdateViewIndex = (currentViewIndex + 2) % 3;\n            component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\n        } else {\n            if (!component.views) {\n                currentViewData = [];\n                currentViewStartDate = component.range.startTime;\n                currentViewData.push(component.getViewData(currentViewStartDate));\n                currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\n                currentViewData.push(component.getViewData(currentViewStartDate));\n                currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n                currentViewData.push(component.getViewData(currentViewStartDate));\n                component.views = currentViewData;\n            } else {\n                currentViewStartDate = component.range.startTime;\n                component.views[currentViewIndex] = component.getViewData(currentViewStartDate);\n                currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n                toUpdateViewIndex = (currentViewIndex + 2) % 3;\n                component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\n                currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\n                toUpdateViewIndex = (currentViewIndex + 1) % 3;\n                component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\n            }\n        }\n    }\n\n    loadEvents() {\n        this.eventSourceChanged.next();\n    }\n\n    slide(direction: number) {\n        this.slideChanged.next(direction);\n    }\n\n    update() {\n        this.slideUpdated.next();\n    }\n}\n","import {\n    Component,\n    OnInit,\n    OnChanges,\n    Input,\n    Output,\n    EventEmitter,\n    SimpleChanges,\n    TemplateRef,\n    OnDestroy,\n    AfterViewInit,\n    ViewChild,\n    NgZone\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport {DatePipe} from '@angular/common';\nimport {SwiperComponent} from 'swiper/angular';\n\nimport {ICalendarComponent, IEvent, IMonthView, IMonthViewRow, ITimeSelected, IRange, CalendarMode, IDateFormatter, IMonthViewDisplayEventTemplateContext} from './calendar.interface';\nimport {CalendarService} from './calendar.service';\n\n@Component({\n    selector: 'monthview',\n    template: `\n        <div>\n            <swiper #swiper [config]=\"sliderOptions\" [dir]=\"dir\" [allowSlidePrev]=\"!lockSwipeToPrev\" [allowSlideNext]=\"!lockSwipeToNext\" [allowTouchMove]=\"!lockSwipes\" (slideChangeTransitionEnd)=\"onSlideChanged()\">\n                <ng-template swiperSlide>\n                    <table *ngIf=\"0===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\n                        <thead>\n                        <tr>\n                            <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\n                                <small>{{dayHeader}}</small>\n                            </th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\n                            <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[0].dates[row*7+col])\"\n                                [ngClass]=\"getHighlightClass(views[0].dates[row*7+col])\">\n                                <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n                                             [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                    <table *ngIf=\"0!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\n                        <thead>\n                        <tr class=\"text-center\">\n                            <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\n                                <small>{{dayHeader}}</small>\n                            </th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\n                            <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\n                                <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n                                             [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\n                                </ng-template>\n                            </td>\n                        <tr>\n                        </tbody>\n                    </table>\n                </ng-template>\n                <ng-template swiperSlide>\n                    <table *ngIf=\"1===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\n                        <thead>\n                        <tr>\n                            <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\n                                <small>{{dayHeader}}</small>\n                            </th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\n                            <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[1].dates[row*7+col])\"\n                                [ngClass]=\"getHighlightClass(views[1].dates[row*7+col])\">\n                                <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n                                             [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                    <table *ngIf=\"1!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\n                        <thead>\n                        <tr class=\"text-center\">\n                            <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\n                                <small>{{dayHeader}}</small>\n                            </th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\n                            <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\n                                <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n                                             [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\n                                </ng-template>\n                            </td>\n                        <tr>\n                        </tbody>\n                    </table>\n                </ng-template>\n                <ng-template swiperSlide>\n                    <table *ngIf=\"2===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\n                        <thead>\n                        <tr>\n                            <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\n                                <small>{{dayHeader}}</small>\n                            </th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\n                            <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[2].dates[row*7+col])\"\n                                [ngClass]=\"getHighlightClass(views[2].dates[row*7+col])\">\n                                <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n                                             [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                    <table *ngIf=\"2!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\n                        <thead>\n                        <tr class=\"text-center\">\n                            <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\n                                <small>{{dayHeader}}</small>\n                            </th>\n                        </tr>\n                        </thead>\n                        <tbody>\n                        <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\n                            <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\n                                <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n                                             [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\n                                </ng-template>\n                            </td>\n                        <tr>\n                        </tbody>\n                    </table>\n                </ng-template>\n            </swiper>\n            <ng-template [ngTemplateOutlet]=\"monthviewEventDetailTemplate\"\n                         [ngTemplateOutletContext]=\"{showEventDetail:showEventDetail, selectedDate: selectedDate, noEventsLabel: noEventsLabel}\">\n            </ng-template>\n        </div>\n    `,\n    styles: [`\n        .text-muted {\n            color: #999;\n        }\n\n        .table-fixed {\n            table-layout: fixed;\n        }\n\n        .table {\n            width: 100%;\n            max-width: 100%;\n            background-color: transparent;\n        }\n\n        .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td,\n        .table > tbody > tr > td, .table > tfoot > tr > td {\n            padding: 8px;\n            line-height: 20px;\n            vertical-align: top;\n        }\n\n        .table > thead > tr > th {\n            vertical-align: bottom;\n            border-bottom: 2px solid #ddd;\n        }\n\n        .table > thead:first-child > tr:first-child > th, .table > thead:first-child > tr:first-child > td {\n            border-top: 0\n        }\n\n        .table > tbody + tbody {\n            border-top: 2px solid #ddd;\n        }\n\n        .table-bordered {\n            border: 1px solid #ddd;\n        }\n\n        .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th,\n        .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td {\n            border: 1px solid #ddd;\n        }\n\n        .table-bordered > thead > tr > th, .table-bordered > thead > tr > td {\n            border-bottom-width: 2px;\n        }\n\n        .table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th {\n            background-color: #f9f9f9\n        }\n\n        .monthview-primary-with-event {\n            background-color: #3a87ad;\n            color: white;\n        }\n\n        .monthview-current {\n            background-color: #f0f0f0;\n        }\n\n        .monthview-selected {\n            background-color: #009900;\n            color: white;\n        }\n\n        .monthview-datetable td.monthview-disabled {\n            color: lightgrey;\n            cursor: default;\n        }\n\n        .monthview-datetable th {\n            text-align: center;\n        }\n\n        .monthview-datetable td {\n            cursor: pointer;\n            text-align: center;\n        }\n\n        .monthview-secondary-with-event {\n            background-color: #d9edf7;\n        }\n\n        ::-webkit-scrollbar,\n        *::-webkit-scrollbar {\n            display: none;\n        }\n    `]\n})\nexport class MonthViewComponent implements ICalendarComponent, OnInit, OnDestroy, OnChanges, AfterViewInit {\n\n    constructor(private calendarService: CalendarService, private zone:NgZone) {\n    }  \n    @ViewChild('swiper', { static: false }) slider!: SwiperComponent;\n\n    @Input() monthviewDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n    @Input() monthviewInactiveDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n    @Input() monthviewEventDetailTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n\n    @Input() formatDay?: string;\n    @Input() formatDayHeader?: string;\n    @Input() formatMonthTitle?: string;\n    @Input() eventSource!: IEvent[];\n    @Input() startingDayMonth!: number;\n    @Input() showEventDetail?: boolean;\n    @Input() noEventsLabel?: string;\n    @Input() autoSelect = true;\n    @Input() markDisabled?: (date: Date) => boolean;\n    @Input() locale!: string;\n    @Input() dateFormatter?: IDateFormatter;\n    @Input() dir = '';\n    @Input() lockSwipeToPrev?: boolean;\n    @Input() lockSwipeToNext?: boolean;\n    @Input() lockSwipes?: boolean;\n    @Input() sliderOptions: any;\n\n    @Output() onRangeChanged = new EventEmitter<IRange>();\n    @Output() onEventSelected = new EventEmitter<IEvent>();\n    @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\n    @Output() onTitleChanged = new EventEmitter<string>();\n\n    public views: IMonthView[] = [];\n    public currentViewIndex = 0;\n    public selectedDate?: IMonthViewRow;\n    public range!: IRange;\n    public mode: CalendarMode = 'month';\n    public direction = 0;\n\n    private moveOnSelected = false;\n    private inited = false;\n    private callbackOnInit = true;\n\n    private currentDateChangedFromParentSubscription?: Subscription;\n    private eventSourceChangedSubscription?: Subscription;\n    private slideChangedSubscription?: Subscription;\n    private slideUpdatedSubscription?: Subscription;\n\n    private formatDayLabel!: (date: Date) => string;\n    private formatDayHeaderLabel!: (date: Date) => string;\n    private formatTitle!: (date: Date) => string;\n\n    static getDates(startDate: Date, n: number): Date[] {\n        const dates = new Array(n),\n            current = new Date(startDate.getTime());\n        let i = 0;\n        while (i < n) {\n            dates[i++] = new Date(current.getTime());\n            current.setDate(current.getDate() + 1);\n        }\n        return dates;\n    }\n\n    ngOnInit() {\n        if (!this.sliderOptions) {\n            this.sliderOptions = {};\n        }\n        this.sliderOptions.loop = true;\n\n        if (this.dateFormatter && this.dateFormatter.formatMonthViewDay) {\n            this.formatDayLabel = this.dateFormatter.formatMonthViewDay;\n        } else {\n            const dayLabelDatePipe = new DatePipe('en-US');\n            this.formatDayLabel = function(date: Date) {\n                return dayLabelDatePipe.transform(date, this.formatDay)||'';\n            };\n        }\n\n        if (this.dateFormatter && this.dateFormatter.formatMonthViewDayHeader) {\n            this.formatDayHeaderLabel = this.dateFormatter.formatMonthViewDayHeader;\n        } else {\n            const datePipe = new DatePipe(this.locale);\n            this.formatDayHeaderLabel = function(date: Date) {\n                return datePipe.transform(date, this.formatDayHeader)||'';\n            };\n        }\n\n        if (this.dateFormatter && this.dateFormatter.formatMonthViewTitle) {\n            this.formatTitle = this.dateFormatter.formatMonthViewTitle;\n        } else {\n            const datePipe = new DatePipe(this.locale);\n            this.formatTitle = function(date: Date) {\n                return datePipe.transform(date, this.formatMonthTitle)||'';\n            };\n        }\n\n        this.refreshView();\n        this.inited = true;\n\n        this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {\n            this.refreshView();\n        });\n\n        this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\n            this.onDataLoaded();\n        });\n\n        this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\n            if (direction === 1) {\n                this.slider.swiperRef.slideNext();\n            } else if (direction === -1) {\n                this.slider.swiperRef.slidePrev();\n            }\n        });\n\n        this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\n            this.slider.swiperRef.update();\n        });\n    }\n\n    ngOnDestroy() {\n        if (this.currentDateChangedFromParentSubscription) {\n            this.currentDateChangedFromParentSubscription.unsubscribe();\n            this.currentDateChangedFromParentSubscription = undefined;\n        }\n\n        if (this.eventSourceChangedSubscription) {\n            this.eventSourceChangedSubscription.unsubscribe();\n            this.eventSourceChangedSubscription = undefined;\n        }\n\n        if (this.slideChangedSubscription) {\n            this.slideChangedSubscription.unsubscribe();\n            this.slideChangedSubscription = undefined;\n        }\n\n        if (this.slideUpdatedSubscription) {\n            this.slideUpdatedSubscription.unsubscribe();\n            this.slideUpdatedSubscription = undefined;\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (!this.inited) {\n            return;\n        }\n\n        const eventSourceChange = changes['eventSource'];\n        if (eventSourceChange && eventSourceChange.currentValue) {\n            this.onDataLoaded();\n        }\n\n        const lockSwipeToPrev = changes['lockSwipeToPrev'];\n        if (lockSwipeToPrev) {\n            this.slider.swiperRef.allowSlidePrev = !lockSwipeToPrev.currentValue;\n        }\n\n        const lockSwipeToNext = changes['lockSwipeToNext'];\n        if (lockSwipeToNext) {\n            this.slider.swiperRef.allowSlideNext = !lockSwipeToNext.currentValue;\n        }\n\n        const lockSwipes = changes['lockSwipes'];\n        if (lockSwipes) {\n            this.slider.swiperRef.allowTouchMove = !lockSwipes.currentValue;\n        }\n    }\n\n    ngAfterViewInit() {\n        const title = this.getTitle();\n        this.onTitleChanged.emit(title);\n    }\n\n    setSwiperInstance(swiper: any) {\n        this.slider = swiper;\n    }\n\n    onSlideChanged() {\n        this.zone.run(() => {\n            if (this.callbackOnInit) {\n                this.callbackOnInit = false;\n                return;\n            }\n\n            let direction = 0;\n            const currentViewIndex = this.currentViewIndex;\n\n            let currentSlideIndex = this.slider.swiperRef.activeIndex;\n            currentSlideIndex = (currentSlideIndex + 2) % 3;\n            if(isNaN(currentSlideIndex)) {\n                currentSlideIndex = currentViewIndex;\n            }\n\n            if (currentSlideIndex - currentViewIndex === 1) {\n                direction = 1;\n            } else if (currentSlideIndex === 0 && currentViewIndex === 2) {\n                direction = 1;\n                this.slider.swiperRef.slideTo(1, 0, false);\n            } else if (currentViewIndex - currentSlideIndex === 1) {\n                direction = -1;\n            } else if (currentSlideIndex === 2 && currentViewIndex === 0) {\n                direction = -1;\n                this.slider.swiperRef.slideTo(3, 0, false);\n            }\n            this.currentViewIndex = currentSlideIndex;\n            this.move(direction);   \n        });\n    }\n\n    move(direction: number) {\n        if (direction === 0) {\n            return;\n        }\n\n        this.direction = direction;\n        if (!this.moveOnSelected) {\n            const adjacentDate = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\n            this.calendarService.setCurrentDate(adjacentDate);\n        }\n        this.refreshView();\n        this.direction = 0;\n        this.moveOnSelected = false;\n    }\n\n    createDateObject(date: Date): IMonthViewRow {\n        let disabled = false;\n        if (this.markDisabled) {\n            disabled = this.markDisabled(date);\n        }\n\n        return {\n            date,\n            events: [],\n            label: this.formatDayLabel(date),\n            secondary: false,\n            disabled\n        };\n    }\n\n    getViewData(startTime: Date): IMonthView {\n        const startDate = startTime,\n            date = startDate.getDate(),\n            month = (startDate.getMonth() + (date !== 1 ? 1 : 0)) % 12;\n\n        const dates = MonthViewComponent.getDates(startDate, 42);\n        const days: IMonthViewRow[] = [];\n        for (let i = 0; i < 42; i++) {\n            const dateObject = this.createDateObject(dates[i]);\n            dateObject.secondary = dates[i].getMonth() !== month;\n            days[i] = dateObject;\n        }\n\n        const dayHeaders: string[] = [];\n        for (let i = 0; i < 7; i++) {\n            dayHeaders.push(this.formatDayHeaderLabel(days[i].date));\n        }\n        return {\n            dates: days,\n            dayHeaders\n        };\n    }\n\n    getHighlightClass(date: IMonthViewRow): string {\n        let className = '';\n\n        if (date.hasEvent) {\n            if (date.secondary) {\n                className = 'monthview-secondary-with-event';\n            } else {\n                className = 'monthview-primary-with-event';\n            }\n        }\n\n        if (date.selected) {\n            if (className) {\n                className += ' ';\n            }\n            className += 'monthview-selected';\n        }\n\n        if (date.current) {\n            if (className) {\n                className += ' ';\n            }\n            className += 'monthview-current';\n        }\n\n        if (date.secondary) {\n            if (className) {\n                className += ' ';\n            }\n            className += 'text-muted';\n        }\n\n        if (date.disabled) {\n            if (className) {\n                className += ' ';\n            }\n            className += 'monthview-disabled';\n        }\n        return className;\n    }\n\n    getRange(currentDate: Date): IRange {\n        const year = currentDate.getFullYear(),\n            month = currentDate.getMonth(),\n            firstDayOfMonth = new Date(year, month, 1, 12, 0, 0), // set hour to 12 to avoid DST problem\n\n            difference = this.startingDayMonth - firstDayOfMonth.getDay(),\n            numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : -difference,\n            startDate = new Date(firstDayOfMonth.getTime());\n\n        if (numDisplayedFromPreviousMonth > 0) {\n            startDate.setDate(-numDisplayedFromPreviousMonth + 1);\n        }\n\n        const endDate = new Date(startDate.getTime());\n        endDate.setDate(endDate.getDate() + 42);\n\n        return {\n            startTime: startDate,\n            endTime: endDate\n        };\n    }\n\n    onDataLoaded() {\n        const range = this.range,\n            eventSource = this.eventSource,\n            len = eventSource ? eventSource.length : 0,\n            startTime = range.startTime,\n            endTime = range.endTime,\n            utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\n            utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\n            currentViewIndex = this.currentViewIndex,\n            dates = this.views[currentViewIndex].dates,\n            oneDay = 86400000,\n            eps = 0.0006;\n\n        for (let r = 0; r < 42; r += 1) {\n            if (dates[r].hasEvent) {\n                dates[r].hasEvent = false;\n                dates[r].events = [];\n            }\n        }\n\n        for (let i = 0; i < len; i += 1) {\n            const event = eventSource[i],\n                eventStartTime = event.startTime,\n                eventEndTime = event.endTime;\n\n            let eventUTCStartTime: number,\n                eventUTCEndTime: number;\n            if (event.allDay) {\n                eventUTCStartTime = eventStartTime.getTime();\n                eventUTCEndTime = eventEndTime.getTime();\n            } else {\n                eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());\n                eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);\n            }\n\n            if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime) {\n                continue;\n            }\n\n            let timeDifferenceStart: number,\n                timeDifferenceEnd: number;\n\n            if (eventUTCStartTime < utcStartTime) {\n                timeDifferenceStart = 0;\n            } else {\n                timeDifferenceStart = (eventUTCStartTime - utcStartTime) / oneDay;\n            }\n\n            if (eventUTCEndTime > utcEndTime) {\n                timeDifferenceEnd = (utcEndTime - utcStartTime) / oneDay;\n            } else {\n                timeDifferenceEnd = (eventUTCEndTime - utcStartTime) / oneDay;\n            }\n\n            let index = Math.floor(timeDifferenceStart);\n            const endIndex = Math.ceil(timeDifferenceEnd - eps);\n            while (index < endIndex) {\n                dates[index].hasEvent = true;\n                let eventSet = dates[index].events;\n                if (eventSet) {\n                    eventSet.push(event);\n                } else {\n                    eventSet = [];\n                    eventSet.push(event);\n                    dates[index].events = eventSet;\n                }\n                index += 1;\n            }\n        }\n\n        for (let r = 0; r < 42; r += 1) {\n            if (dates[r].hasEvent) {\n                dates[r].events.sort(this.compareEvent);\n            }\n        }\n\n        if (this.autoSelect) {\n            let findSelected = false;\n            for (let r = 0; r < 42; r += 1) {\n                if (dates[r].selected) {\n                    this.selectedDate = dates[r];\n                    findSelected = true;\n                    break;\n                }\n            }\n\n            if (findSelected && this.selectedDate) {\n                this.onTimeSelected.emit({\n                    selectedTime: this.selectedDate.date,\n                    events: this.selectedDate.events,\n                    disabled: this.selectedDate.disabled\n                });\n            }\n        }\n    }\n\n    refreshView() {\n        this.range = this.getRange(this.calendarService.currentDate);\n\n        if (this.inited) {\n            const title = this.getTitle();\n            this.onTitleChanged.emit(title);\n        }\n        this.calendarService.populateAdjacentViews(this);\n        this.updateCurrentView(this.range.startTime, this.views[this.currentViewIndex]);\n        this.calendarService.rangeChanged(this);\n    }\n\n    getTitle(): string {\n        const currentViewStartDate = this.range.startTime,\n            date = currentViewStartDate.getDate(),\n            month = (currentViewStartDate.getMonth() + (date !== 1 ? 1 : 0)) % 12,\n            year = currentViewStartDate.getFullYear() + (date !== 1 && month === 0 ? 1 : 0),\n            headerDate = new Date(year, month, 1, 12, 0, 0, 0);\n        return this.formatTitle(headerDate);\n    }\n\n    private compareEvent(event1: IEvent, event2: IEvent): number {\n        if (event1.allDay) {\n            return 1;\n        } else if (event2.allDay) {\n            return -1;\n        } else {\n            return (event1.startTime.getTime() - event2.startTime.getTime());\n        }\n    }\n\n    select(viewDate: IMonthViewRow) {\n        if (!this.views) {\n            return;\n        }\n\n        const selectedDate = viewDate.date,\n            events = viewDate.events;\n\n        if (!viewDate.disabled) {\n            const dates = this.views[this.currentViewIndex].dates,\n                currentCalendarDate = this.calendarService.currentDate,\n                currentMonth = currentCalendarDate.getMonth(),\n                currentYear = currentCalendarDate.getFullYear(),\n                selectedMonth = selectedDate.getMonth(),\n                selectedYear = selectedDate.getFullYear();\n            let direction = 0;\n\n            if (currentYear === selectedYear) {\n                if (currentMonth !== selectedMonth) {\n                    direction = currentMonth < selectedMonth ? 1 : -1;\n                }\n            } else {\n                direction = currentYear < selectedYear ? 1 : -1;\n            }\n\n            this.calendarService.setCurrentDate(selectedDate);\n            if (direction === 0) {\n                const currentViewStartDate = this.range.startTime,\n                    oneDay = 86400000,\n                    selectedDayDifference = Math.round((Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\n\n                for (let r = 0; r < 42; r += 1) {\n                    dates[r].selected = false;\n                }\n\n                if (selectedDayDifference >= 0 && selectedDayDifference < 42) {\n                    dates[selectedDayDifference].selected = true;\n                    this.selectedDate = dates[selectedDayDifference];\n                }\n            } else {\n                this.moveOnSelected = true;\n                this.slideView(direction);\n            }\n        }\n\n        this.onTimeSelected.emit({selectedTime: selectedDate, events, disabled: viewDate.disabled});\n    }\n\n    slideView(direction: number) {\n        if (direction === 1) {\n            this.slider.swiperRef.slideNext();\n        } else if (direction === -1) {\n            this.slider.swiperRef.slidePrev();\n        }\n    }\n\n    updateCurrentView(currentViewStartDate: Date, view: IMonthView) {\n        const currentCalendarDate = this.calendarService.currentDate,\n            today = new Date(),\n            oneDay = 86400000,\n            selectedDayDifference = Math.round((Date.UTC(currentCalendarDate.getFullYear(), currentCalendarDate.getMonth(), currentCalendarDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay),\n            currentDayDifference = Math.round((Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\n\n        for (let r = 0; r < 42; r += 1) {\n            view.dates[r].selected = false;\n        }\n\n        if (selectedDayDifference >= 0 && selectedDayDifference < 42 && !view.dates[selectedDayDifference].disabled && (this.autoSelect || this.moveOnSelected)) {\n            view.dates[selectedDayDifference].selected = true;\n            this.selectedDate = view.dates[selectedDayDifference];\n        } else {\n            this.selectedDate = undefined;\n        }\n\n        if (currentDayDifference >= 0 && currentDayDifference < 42) {\n            view.dates[currentDayDifference].current = true;\n        }\n    }\n\n    eventSelected(event: IEvent) {\n        this.onEventSelected.emit(event);\n    }\n}\n","import {\n    Component,\n    Input,\n    Output,\n    EventEmitter,\n    ElementRef,\n    SimpleChanges,\n    OnChanges,\n    AfterViewInit,\n    OnDestroy,\n    ViewEncapsulation,\n    NgZone\n} from '@angular/core';\n\n@Component({\n    selector: 'init-position-scroll',\n    template: `\n        <div class=\"scroll-content\" style=\"height:100%\">\n            <ng-content></ng-content>\n        </div>\n    `,\n    styles: [`\n        .scroll-content {\n            overflow-y: auto;\n            overflow-x: hidden;\n        }        \n    `],\n    encapsulation: ViewEncapsulation.None\n})\nexport class initPositionScrollComponent implements OnChanges, AfterViewInit, OnDestroy {\n    @Input() initPosition!:number;\n    @Input() emitEvent?:boolean;\n    @Output() onScroll = new EventEmitter<number>();\n\n    private element:ElementRef;\n    private scrollContent!:HTMLElement;\n    private handler!:()=>void;\n    private listenerAttached:boolean = false;\n\n    constructor(el:ElementRef, private ngZone: NgZone) {\n        this.element = el;\n    }\n\n    ngOnChanges(changes:SimpleChanges) {\n        let initPosition = changes['initPosition'];\n        if (initPosition && initPosition.currentValue !== undefined && this.scrollContent && initPosition.currentValue != this.scrollContent.scrollTop) {\n            const me =this;\n            this.ngZone.run(() => {\n                me.scrollContent.scrollTop = initPosition.currentValue;\n            });\n        }\n    }\n\n    ngAfterViewInit() {\n        const scrollContent = this.scrollContent = this.element.nativeElement.querySelector('.scroll-content');\n        if (this.initPosition !== undefined) {\n            scrollContent.scrollTop = this.initPosition;\n        }\n\n        if (this.emitEvent && !this.listenerAttached) {\n            let onScroll = this.onScroll;\n            let me = this;\n            this.handler = function () {\n                if(me.initPosition != scrollContent.scrollTop) {\n                    onScroll.emit(scrollContent.scrollTop);\n                }\n            };\n            this.listenerAttached = true;\n            scrollContent.addEventListener('scroll', this.handler);\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.listenerAttached) {\n            this.scrollContent.removeEventListener('scroll', this.handler);\n            this.listenerAttached = false;\n        }\n    }\n}\n","import {DatePipe} from '@angular/common';\nimport {\n    Component,\n    OnInit,\n    OnChanges,\n    HostBinding,\n    Input,\n    Output,\n    EventEmitter,\n    SimpleChanges,\n    ViewEncapsulation,\n    TemplateRef,\n    ElementRef,\n    ViewChild,\n    OnDestroy, \n    AfterViewInit,\n    NgZone\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport { SwiperComponent } from 'swiper/angular';\n\nimport type {\n    ICalendarComponent,\n    IDisplayEvent,\n    IEvent,\n    ITimeSelected,\n    IRange,\n    IWeekView,\n    IWeekViewRow,\n    IWeekViewDateRow,\n    CalendarMode,\n    IDateFormatter,\n    IDisplayWeekViewHeader,\n    IDisplayAllDayEvent,\n    IWeekViewAllDayEventSectionTemplateContext,\n    IWeekViewNormalEventSectionTemplateContext\n} from './calendar.interface';\nimport {CalendarService} from './calendar.service';\n\n@Component({\n    selector: 'weekview',\n    template: `\n        <swiper #swiper [config]=\"sliderOptions\" [dir]=\"dir\" [allowSlidePrev]=\"!lockSwipeToPrev\" [allowSlideNext]=\"!lockSwipeToNext\" [allowTouchMove]=\"!lockSwipes\" (slideChangeTransitionEnd)=\"onSlideChanged()\"\n                    class=\"slides-container\">\n            <ng-template swiperSlide class=\"slide-container\">\n                <table class=\"table table-bordered table-fixed weekview-header\">\n                    <thead>\n                    <tr>\n                        <th class=\"calendar-hour-column\"></th>\n                        <th class=\"weekview-header text-center\" *ngFor=\"let date of views[0].dates\"\n                            [ngClass]=\"getHighlightClass(date)\"\n                            (click)=\"daySelected(date)\">\n                            <ng-template [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\n                                         [ngTemplateOutletContext]=\"{viewDate:date}\">\n                            </ng-template>\n                        </th>\n                    </tr>\n                    </thead>\n                </table>\n                <div *ngIf=\"0===currentViewIndex\">\n                    <div class=\"weekview-allday-table\">\n                        <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\n                        <div class=\"weekview-allday-content-wrapper scroll-content\">\n                            <table class=\"table table-fixed weekview-allday-content-table\">\n                                <tbody>\n                                <tr>\n                                    <td *ngFor=\"let day of views[0].dates\" class=\"calendar-cell\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\">\n                                        </ng-template>\n                                    </td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                    <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\"\n                                          [emitEvent]=\"preserveScrollPosition\" (onScroll)=\"setScrollPosition($event)\">\n                        <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\n                            <tbody>\n                            <tr *ngFor=\"let row of views[0].rows; let i = index\">\n                                <td class=\"calendar-hour-column text-center\">\n                                    {{hourColumnLabels[i]}}\n                                </td>\n                                <td *ngFor=\"let tm of row\" class=\"calendar-cell\" tappable\n                                    (click)=\"select(tm.time, tm.events)\">\n                                    <ng-template [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\n                                                 [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\">\n                                    </ng-template>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </init-position-scroll>\n                </div>\n                <div *ngIf=\"0!==currentViewIndex\">\n                    <div class=\"weekview-allday-table\">\n                        <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\n                        <div class=\"weekview-allday-content-wrapper scroll-content\">\n                            <table class=\"table table-fixed weekview-allday-content-table\">\n                                <tbody>\n                                <tr>\n                                    <td *ngFor=\"let day of views[0].dates\" class=\"calendar-cell\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{day:day}\">\n                                        </ng-template>\n                                    </td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                    <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\">\n                        <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\n                            <tbody>\n                            <tr *ngFor=\"let row of views[0].rows; let i = index\">\n                                <td class=\"calendar-hour-column text-center\">\n                                    {{hourColumnLabels[i]}}\n                                </td>\n                                <td *ngFor=\"let tm of row\" class=\"calendar-cell\">\n                                    <ng-template [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\n                                                 [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\n                                    </ng-template>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </init-position-scroll>\n                </div>\n            </ng-template>\n            <ng-template swiperSlide class=\"slide-container\">\n                <table class=\"table table-bordered table-fixed weekview-header\">\n                    <thead>\n                    <tr>\n                        <th class=\"calendar-hour-column\"></th>\n                        <th class=\"weekview-header text-center\" *ngFor=\"let date of views[1].dates\"\n                            [ngClass]=\"getHighlightClass(date)\"\n                            (click)=\"daySelected(date)\">\n                            <ng-template [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\n                                         [ngTemplateOutletContext]=\"{viewDate:date}\">\n                            </ng-template>\n                        </th>\n                    </tr>\n                    </thead>\n                </table>\n                <div *ngIf=\"1===currentViewIndex\">\n                    <div class=\"weekview-allday-table\">\n                        <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\n                        <div class=\"weekview-allday-content-wrapper scroll-content\">\n                            <table class=\"table table-fixed weekview-allday-content-table\">\n                                <tbody>\n                                <tr>\n                                    <td *ngFor=\"let day of views[1].dates\" class=\"calendar-cell\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\">\n                                        </ng-template>\n                                    </td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                    <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\"\n                                          [emitEvent]=\"preserveScrollPosition\" (onScroll)=\"setScrollPosition($event)\">\n                        <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\n                            <tbody>\n                            <tr *ngFor=\"let row of views[1].rows; let i = index\">\n                                <td class=\"calendar-hour-column text-center\">\n                                    {{hourColumnLabels[i]}}\n                                </td>\n                                <td *ngFor=\"let tm of row\" class=\"calendar-cell\" tappable\n                                    (click)=\"select(tm.time, tm.events)\">\n                                    <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\">\n                                        </ng-template>\n                                    </div>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </init-position-scroll>\n                </div>\n                <div *ngIf=\"1!==currentViewIndex\">\n                    <div class=\"weekview-allday-table\">\n                        <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\n                        <div class=\"weekview-allday-content-wrapper scroll-content\">\n                            <table class=\"table table-fixed weekview-allday-content-table\">\n                                <tbody>\n                                <tr>\n                                    <td *ngFor=\"let day of views[1].dates\" class=\"calendar-cell\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{day:day}\">\n                                        </ng-template>\n                                    </td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                    <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\">\n                        <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\n                            <tbody>\n                            <tr *ngFor=\"let row of views[1].rows; let i = index\">\n                                <td class=\"calendar-hour-column text-center\">\n                                    {{hourColumnLabels[i]}}\n                                </td>\n                                <td *ngFor=\"let tm of row\" class=\"calendar-cell\">\n                                    <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\n                                        </ng-template>\n                                    </div>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </init-position-scroll>\n                </div>\n            </ng-template>\n            <ng-template swiperSlide class=\"slide-container\">\n                <table class=\"table table-bordered table-fixed weekview-header\">\n                    <thead>\n                    <tr>\n                        <th class=\"calendar-hour-column\"></th>\n                        <th class=\"weekview-header text-center\" *ngFor=\"let date of views[2].dates\"\n                            [ngClass]=\"getHighlightClass(date)\"\n                            (click)=\"daySelected(date)\">\n                            <ng-template [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\n                                         [ngTemplateOutletContext]=\"{viewDate:date}\">\n                            </ng-template>\n                        </th>\n                    </tr>\n                    </thead>\n                </table>\n                <div *ngIf=\"2===currentViewIndex\">\n                    <div class=\"weekview-allday-table\">\n                        <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\n                        <div class=\"weekview-allday-content-wrapper scroll-content\">\n                            <table class=\"table table-fixed weekview-allday-content-table\">\n                                <tbody>\n                                <tr>\n                                    <td *ngFor=\"let day of views[2].dates\" class=\"calendar-cell\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\">\n                                        </ng-template>\n                                    </td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                    <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\"\n                                          [emitEvent]=\"preserveScrollPosition\" (onScroll)=\"setScrollPosition($event)\">\n                        <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\n                            <tbody>\n                            <tr *ngFor=\"let row of views[2].rows; let i = index\">\n                                <td class=\"calendar-hour-column text-center\">\n                                    {{hourColumnLabels[i]}}\n                                </td>\n                                <td *ngFor=\"let tm of row\" class=\"calendar-cell\" tappable\n                                    (click)=\"select(tm.time, tm.events)\">\n                                    <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\">\n                                        </ng-template>\n                                    </div>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </init-position-scroll>\n                </div>\n                <div *ngIf=\"2!==currentViewIndex\">\n                    <div class=\"weekview-allday-table\">\n                        <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\n                        <div class=\"weekview-allday-content-wrapper scroll-content\">\n                            <table class=\"table table-fixed weekview-allday-content-table\">\n                                <tbody>\n                                <tr>\n                                    <td *ngFor=\"let day of views[2].dates\" class=\"calendar-cell\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{day:day}\">\n                                        </ng-template>\n                                    </td>\n                                </tr>\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                    <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\">\n                        <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\n                            <tbody>\n                            <tr *ngFor=\"let row of views[2].rows; let i = index\">\n                                <td class=\"calendar-hour-column text-center\">\n                                    {{hourColumnLabels[i]}}\n                                </td>\n                                <td *ngFor=\"let tm of row\" class=\"calendar-cell\">\n                                    <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\n                                        <ng-template [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\n                                                     [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\n                                        </ng-template>\n                                    </div>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </init-position-scroll>\n                </div>\n            </ng-template>\n        </swiper>\n    `,\n    styles: [`\n        .table-fixed {\n            table-layout: fixed;\n        }\n\n        .table {\n            width: 100%;\n            max-width: 100%;\n            background-color: transparent;\n        }\n\n        .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td,\n        .table > tbody > tr > td, .table > tfoot > tr > td {\n            padding: 8px;\n            line-height: 20px;\n            vertical-align: top;\n        }\n\n        .table > thead > tr > th {\n            vertical-align: bottom;\n            border-bottom: 2px solid #ddd;\n        }\n\n        .table > thead:first-child > tr:first-child > th, .table > thead:first-child > tr:first-child > td {\n            border-top: 0\n        }\n\n        .table > tbody + tbody {\n            border-top: 2px solid #ddd;\n        }\n\n        .table-bordered {\n            border: 1px solid #ddd;\n        }\n\n        .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th,\n        .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td {\n            border: 1px solid #ddd;\n        }\n\n        .table-bordered > thead > tr > th, .table-bordered > thead > tr > td {\n            border-bottom-width: 2px;\n        }\n\n        .table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th {\n            background-color: #f9f9f9\n        }\n\n        .calendar-hour-column {\n            width: 50px;\n            white-space: nowrap;\n        }\n\n        .calendar-event-wrap {\n            position: relative;\n            width: 100%;\n            height: 100%;\n        }\n\n        .calendar-event {\n            position: absolute;\n            padding: 2px;\n            cursor: pointer;\n            z-index: 10000;\n        }\n\n        .calendar-cell {\n            padding: 0 !important;\n            height: 37px;\n        }\n\n        .slides-container {\n            height: 100%;\n        }\n\n        .slide-container {\n            display: block !important;\n        }\n\n        .weekview-allday-label {\n            float: left;\n            height: 100%;\n            line-height: 50px;\n            text-align: center;\n            width: 50px;\n            border-left: 1px solid #ddd;\n        }\n\n        [dir=\"rtl\"] .weekview-allday-label {\n            float: right;\n            border-right: 1px solid #ddd;\n        }\n\n        .weekview-allday-content-wrapper {\n            margin-left: 50px;\n            overflow: hidden;\n            height: 51px;\n        }\n\n        [dir=\"rtl\"] .weekview-allday-content-wrapper {\n            margin-left: 0;\n            margin-right: 50px;\n        }\n\n        .weekview-allday-content-table {\n            min-height: 50px;\n        }\n\n        .weekview-allday-content-table td {\n            border-left: 1px solid #ddd;\n            border-right: 1px solid #ddd;\n        }\n\n        .weekview-header th {\n            overflow: hidden;\n            white-space: nowrap;\n            font-size: 14px;\n        }\n\n        .weekview-allday-table {\n            height: 50px;\n            position: relative;\n            border-bottom: 1px solid #ddd;\n            font-size: 14px;\n        }\n\n        .weekview-normal-event-container {\n            margin-top: 87px;\n            overflow: hidden;\n            left: 0;\n            right: 0;\n            top: 0;\n            bottom: 0;\n            position: absolute;\n            font-size: 14px;\n        }\n\n        .scroll-content {\n            overflow-y: auto;\n            overflow-x: hidden;\n        }\n\n        ::-webkit-scrollbar,\n        *::-webkit-scrollbar {\n            display: none;\n        }\n\n        .table > tbody > tr > td.calendar-hour-column {\n            padding-left: 0;\n            padding-right: 0;\n            vertical-align: middle;\n        }\n\n        @media (max-width: 750px) {\n            .weekview-allday-label, .calendar-hour-column {\n                width: 31px;\n                font-size: 12px;\n            }\n\n            .weekview-allday-label {\n                padding-top: 4px;\n            }\n\n            .table > tbody > tr > td.calendar-hour-column {\n                padding-left: 0;\n                padding-right: 0;\n                vertical-align: middle;\n                line-height: 12px;\n            }\n\n            .table > thead > tr > th.weekview-header {\n                padding-left: 0;\n                padding-right: 0;\n                font-size: 12px;\n            }\n\n            .weekview-allday-label {\n                line-height: 20px;\n            }\n\n            .weekview-allday-content-wrapper {\n                margin-left: 31px;\n            }\n\n            [dir=\"rtl\"] .weekview-allday-content-wrapper {\n                margin-left: 0;\n                margin-right: 31px;\n            }\n        }\n    `],\n    encapsulation: ViewEncapsulation.None\n})\nexport class WeekViewComponent implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit {\n\n    constructor(private calendarService: CalendarService, private elm: ElementRef, private zone: NgZone) {\n    }\n\n    @HostBinding('class.weekview') class = true;\n    @ViewChild('swiper', { static: false }) slider!: SwiperComponent;\n\n    @Input() weekviewHeaderTemplate!: TemplateRef<IDisplayWeekViewHeader>;\n    @Input() weekviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\n    @Input() weekviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\n    @Input() weekviewAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n    @Input() weekviewNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n    @Input() weekviewInactiveAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n    @Input() weekviewInactiveNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n\n    @Input() formatWeekTitle?: string;\n    @Input() formatWeekViewDayHeader?: string;\n    @Input() formatHourColumn?: string;\n    @Input() startingDayWeek!: number;\n    @Input() allDayLabel?: string;\n    @Input() hourParts!: number;\n    @Input() eventSource!: IEvent[];\n    @Input() autoSelect = true;\n    @Input() markDisabled?: (date: Date) => boolean;\n    @Input() locale!: string;\n    @Input() dateFormatter?: IDateFormatter;\n    @Input() dir = '';\n    @Input() scrollToHour = 0;\n    @Input() preserveScrollPosition?: boolean;\n    @Input() lockSwipeToPrev?: boolean;\n    @Input() lockSwipeToNext?: boolean;\n    @Input() lockSwipes?: boolean;\n    @Input() startHour!: number;\n    @Input() endHour!: number;\n    @Input() sliderOptions: any;\n    @Input() hourSegments!: number;\n\n    @Output() onRangeChanged = new EventEmitter<IRange>();\n    @Output() onEventSelected = new EventEmitter<IEvent>();\n    @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\n    @Output() onDayHeaderSelected = new EventEmitter<ITimeSelected>();\n    @Output() onTitleChanged = new EventEmitter<string>();\n\n    public views: IWeekView[] = [];\n    public currentViewIndex = 0;\n    public range!: IRange;\n    public direction = 0;\n    public mode: CalendarMode = 'week';\n\n    private inited = false;\n    private callbackOnInit = true;\n    private currentDateChangedFromParentSubscription?: Subscription;\n    private eventSourceChangedSubscription?: Subscription;\n    private slideChangedSubscription?: Subscription;\n    private slideUpdatedSubscription?: Subscription;\n\n    public hourColumnLabels!: string[];\n    public initScrollPosition!: number;\n    private formatDayHeader!: (date: Date) => string;\n    private formatTitle!: (date: Date) => string;\n    private formatHourColumnLabel!: (date: Date) => string;\n    private hourRange!: number;\n\n    static createDateObjects(startTime: Date, startHour: number, endHour: number, timeInterval: number): IWeekViewRow[][] {\n        const times: IWeekViewRow[][] = [],\n            currentHour = 0,\n            currentDate = startTime.getDate();\n        let hourStep,\n            minStep;\n\n        if (timeInterval < 1) {\n            hourStep = Math.floor(1 / timeInterval);\n            minStep = 60;\n        } else {\n            hourStep = 1;\n            minStep = Math.floor(60 / timeInterval);\n        }\n\n        for (let hour = startHour; hour < endHour; hour += hourStep) {\n            for (let interval = 0; interval < 60; interval += minStep) {\n                const row: IWeekViewRow[] = [];\n                for (let day = 0; day < 7; day += 1) {\n                    const time = new Date(startTime.getTime());\n                    time.setHours(currentHour + hour, interval);\n                    time.setDate(currentDate + day);\n                    row.push({\n                        events: [],\n                        time\n                    });\n                }\n                times.push(row);\n            }\n        }\n        return times;\n    }\n\n    static getDates(startTime: Date, n: number): IWeekViewDateRow[] {\n        const dates = new Array(n),\n            current = new Date(startTime.getTime());\n        let i = 0;\n        while (i < n) {\n            dates[i++] = {\n                date: new Date(current.getTime()),\n                events: [],\n                dayHeader: ''\n            };\n            current.setDate(current.getDate() + 1);\n        }\n        return dates;\n    }\n\n    private static compareEventByStartOffset(eventA: IDisplayEvent, eventB: IDisplayEvent): number {\n        return eventA.startOffset - eventB.startOffset;\n    }\n\n    private static calculateWidth(orderedEvents: IDisplayEvent[], size: number, hourParts: number) {\n        const totalSize = size * hourParts,\n            cells = new Array(totalSize);\n\n        // sort by position in descending order, the right most columns should be calculated first\n        orderedEvents.sort((eventA, eventB) => {\n            return eventB.position - eventA.position;\n        });\n        for (let i = 0; i < totalSize; i += 1) {\n            cells[i] = {\n                calculated: false,\n                events: []\n            };\n        }\n        const len = orderedEvents.length;\n        for (let i = 0; i < len; i += 1) {\n            const event = orderedEvents[i];\n            let index = event.startIndex * hourParts + event.startOffset;\n            while (index < event.endIndex * hourParts - event.endOffset) {\n                cells[index].events.push(event);\n                index += 1;\n            }\n        }\n\n        let i = 0;\n        while (i < len) {\n            let event:IDisplayEvent|undefined = orderedEvents[i];\n            if (!event.overlapNumber) {\n                const overlapNumber = event.position + 1;\n                event.overlapNumber = overlapNumber;\n                const eventQueue = [event];\n                while (event = eventQueue.shift()) {                    \n                    let index = event.startIndex * hourParts + event.startOffset;\n                    while (index < event.endIndex * hourParts - event.endOffset) {\n                        if (!cells[index].calculated) {\n                            cells[index].calculated = true;\n                            if (cells[index].events) {\n                                const eventCountInCell = cells[index].events.length;\n                                for (let j = 0; j < eventCountInCell; j += 1) {\n                                    const currentEventInCell = cells[index].events[j];\n                                    if (!currentEventInCell.overlapNumber) {\n                                        currentEventInCell.overlapNumber = overlapNumber;\n                                        eventQueue.push(currentEventInCell);\n                                    }\n                                }\n                            }\n                        }\n                        index += 1;\n                    }\n                }\n            }\n            i += 1;\n        }\n    }\n\n    ngOnInit() {\n        if (!this.sliderOptions) {\n            this.sliderOptions = {};\n        }\n        this.sliderOptions.loop = true;\n\n        this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n        if (this.dateFormatter && this.dateFormatter.formatWeekViewDayHeader) {\n            this.formatDayHeader = this.dateFormatter.formatWeekViewDayHeader;\n        } else {\n            const datePipe = new DatePipe(this.locale);\n            this.formatDayHeader = function (date: Date) {\n                return datePipe.transform(date, this.formatWeekViewDayHeader)||'';\n            };\n        }\n\n        if (this.dateFormatter && this.dateFormatter.formatWeekViewTitle) {\n            this.formatTitle = this.dateFormatter.formatWeekViewTitle;\n        } else {\n            const datePipe = new DatePipe(this.locale);\n            this.formatTitle = function (date: Date) {\n                return datePipe.transform(date, this.formatWeekTitle)||'';\n            };\n        }\n\n        if (this.dateFormatter && this.dateFormatter.formatWeekViewHourColumn) {\n            this.formatHourColumnLabel = this.dateFormatter.formatWeekViewHourColumn;\n        } else {\n            const datePipe = new DatePipe(this.locale);\n            this.formatHourColumnLabel = function (date: Date) {\n                return datePipe.transform(date, this.formatHourColumn)||'';\n            };\n        }\n\n        this.refreshView();\n        this.hourColumnLabels = this.getHourColumnLabels();\n        this.inited = true;\n\n        this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {\n            this.refreshView();\n        });\n\n        this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\n            this.onDataLoaded();\n        });\n\n        this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\n            if (direction === 1) {\n                this.slider.swiperRef.slideNext();\n            } else if (direction === -1) {\n                this.slider.swiperRef.slidePrev();\n            }\n        });\n\n        this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\n            this.slider.swiperRef.update();\n        });\n    }\n\n    ngAfterViewInit() {\n        const title = this.getTitle();\n        this.onTitleChanged.emit(title);\n\n        if (this.scrollToHour > 0) {\n            const hourColumns = this.elm.nativeElement.querySelector('.weekview-normal-event-container').querySelectorAll('.calendar-hour-column');\n            const me = this;\n            setTimeout(() => {\n                me.initScrollPosition = hourColumns[me.scrollToHour - me.startHour].offsetTop;\n            }, 50);\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (!this.inited) {\n            return;\n        }\n\n        if ((changes['startHour'] || changes['endHour']) && (!changes['startHour'].isFirstChange() || !changes['endHour'].isFirstChange())) {\n            this.views = [];\n            this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n            this.direction = 0;\n            this.refreshView();\n            this.hourColumnLabels = this.getHourColumnLabels();\n        }\n\n        const eventSourceChange = changes['eventSource'];\n        if (eventSourceChange && eventSourceChange.currentValue) {\n            this.onDataLoaded();\n        }\n\n        const lockSwipeToPrev = changes['lockSwipeToPrev'];\n        if (lockSwipeToPrev) {\n            this.slider.swiperRef.allowSlidePrev = !lockSwipeToPrev.currentValue;\n        }\n\n        const lockSwipeToNext = changes['lockSwipeToNext'];\n        if (lockSwipeToPrev) {\n            this.slider.swiperRef.allowSlideNext = !lockSwipeToNext.currentValue;\n        }\n\n        const lockSwipes = changes['lockSwipes'];\n        if (lockSwipes) {\n            this.slider.swiperRef.allowTouchMove = !lockSwipes.currentValue;\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.currentDateChangedFromParentSubscription) {\n            this.currentDateChangedFromParentSubscription.unsubscribe();\n            this.currentDateChangedFromParentSubscription = undefined;\n        }\n\n        if (this.eventSourceChangedSubscription) {\n            this.eventSourceChangedSubscription.unsubscribe();\n            this.eventSourceChangedSubscription = undefined;\n        }\n\n        if (this.slideChangedSubscription) {\n            this.slideChangedSubscription.unsubscribe();\n            this.slideChangedSubscription = undefined;\n        }\n\n        if (this.slideUpdatedSubscription) {\n            this.slideUpdatedSubscription.unsubscribe();\n            this.slideUpdatedSubscription = undefined;\n        }\n    }\n\n    onSlideChanged() {\n        this.zone.run(() => {\n            if (this.callbackOnInit) {\n                this.callbackOnInit = false;\n                return;\n            }\n\n            const currentViewIndex = this.currentViewIndex;\n            let direction = 0;\n\n            let currentSlideIndex = this.slider.swiperRef.activeIndex;\n            currentSlideIndex = (currentSlideIndex + 2) % 3;\n            if(isNaN(currentSlideIndex)) {\n                currentSlideIndex = currentViewIndex;\n            }\n\n            if (currentSlideIndex - currentViewIndex === 1) {\n                direction = 1;\n            } else if (currentSlideIndex === 0 && currentViewIndex === 2) {\n                direction = 1;\n                this.slider.swiperRef.slideTo(1, 0, false);\n            } else if (currentViewIndex - currentSlideIndex === 1) {\n                direction = -1;\n            } else if (currentSlideIndex === 2 && currentViewIndex === 0) {\n                direction = -1;\n                this.slider.swiperRef.slideTo(3, 0, false);\n            }\n            this.currentViewIndex = currentSlideIndex;\n            this.move(direction);\n        });\n    }\n\n    move(direction: number) {\n        if (direction === 0) {\n            return;\n        }\n        this.direction = direction;\n        const adjacent = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\n        this.calendarService.setCurrentDate(adjacent);\n        this.refreshView();\n        this.direction = 0;\n    }\n\n    private getHourColumnLabels(): string[] {\n        const hourColumnLabels: string[] = [];\n        for (let hour = 0, length = this.views[0].rows.length; hour < length; hour += 1) {\n            // handle edge case for DST\n            if (hour === 0 && this.views[0].rows[hour][0].time.getHours() !== this.startHour) {\n                const time = new Date(this.views[0].rows[hour][0].time);\n                time.setDate(time.getDate() + 1);\n                time.setHours(this.startHour);\n                hourColumnLabels.push(this.formatHourColumnLabel(time));\n            } else {\n                hourColumnLabels.push(this.formatHourColumnLabel(this.views[0].rows[hour][0].time));\n            }\n        }\n        return hourColumnLabels;\n    }\n\n    getViewData(startTime: Date): IWeekView {\n        const dates = WeekViewComponent.getDates(startTime, 7);\n        for (let i = 0; i < 7; i++) {\n            dates[i].dayHeader = this.formatDayHeader(dates[i].date);\n        }\n\n        return {\n            rows: WeekViewComponent.createDateObjects(startTime, this.startHour, this.endHour, this.hourSegments),\n            dates\n        };\n    }\n\n    getRange(currentDate: Date): IRange {\n        const year = currentDate.getFullYear(),\n            month = currentDate.getMonth(),\n            date = currentDate.getDate(),\n            day = currentDate.getDay();\n        let difference = day - this.startingDayWeek;\n\n        if (difference < 0) {\n            difference += 7;\n        }\n\n        // set hour to 12 to avoid DST problem\n        const firstDayOfWeek = new Date(year, month, date - difference, 12, 0, 0),\n            endTime = new Date(year, month, date - difference + 7, 12, 0, 0);\n\n        return {\n            startTime: firstDayOfWeek,\n            endTime\n        };\n    }\n\n    onDataLoaded() {\n        const eventSource = this.eventSource,\n            len = eventSource ? eventSource.length : 0,\n            startTime = this.range.startTime,\n            endTime = this.range.endTime,\n            utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\n            utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\n            currentViewIndex = this.currentViewIndex,\n            rows = this.views[currentViewIndex].rows,\n            dates = this.views[currentViewIndex].dates,\n            oneHour = 3600000,\n            oneDay = 86400000,\n            // add allday eps\n            eps = 0.016,\n            rangeStartRowIndex = this.startHour * this.hourSegments,\n            rangeEndRowIndex = this.endHour * this.hourSegments,\n            allRows = 24 * this.hourSegments;\n        let allDayEventInRange = false,\n            normalEventInRange = false;\n\n        for (let i = 0; i < 7; i += 1) {\n            dates[i].events = [];\n            dates[i].hasEvent = false;\n        }\n\n        for (let day = 0; day < 7; day += 1) {\n            for (let hour = 0; hour < this.hourRange; hour += 1) {\n                rows[hour][day].events = [];\n            }\n        }\n        for (let i = 0; i < len; i += 1) {\n            const event = eventSource[i];\n            const eventStartTime = event.startTime;\n            const eventEndTime = event.endTime;\n\n            let eventUTCStartTime: number,\n                eventUTCEndTime: number;\n\n            if (event.allDay) {\n                eventUTCStartTime = eventStartTime.getTime();\n                eventUTCEndTime = eventEndTime.getTime();\n            } else {\n                eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());\n                eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);\n            }\n\n            if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime || eventStartTime >= eventEndTime) {\n                continue;\n            }\n\n            if (event.allDay) {\n                allDayEventInRange = true;\n\n                let allDayStartIndex: number;\n                if (eventUTCStartTime <= utcStartTime) {\n                    allDayStartIndex = 0;\n                } else {\n                    allDayStartIndex = Math.round((eventUTCStartTime - utcStartTime) / oneDay);\n                }\n\n                let allDayEndIndex: number;\n                if (eventUTCEndTime >= utcEndTime) {\n                    allDayEndIndex = Math.round((utcEndTime - utcStartTime) / oneDay);\n                } else {\n                    allDayEndIndex = Math.round((eventUTCEndTime - utcStartTime) / oneDay);\n                }\n\n                const displayAllDayEvent: IDisplayEvent = {\n                    event,\n                    startIndex: allDayStartIndex,\n                    endIndex: allDayEndIndex,\n                    startOffset: 0,\n                    endOffset: 0,\n                    position: 0\n                };\n\n                let eventSet = dates[allDayStartIndex].events;\n                if (eventSet) {\n                    eventSet.push(displayAllDayEvent);\n                } else {\n                    eventSet = [];\n                    eventSet.push(displayAllDayEvent);\n                    dates[allDayStartIndex].events = eventSet;\n                }\n                dates[allDayStartIndex].hasEvent = true;\n            } else {\n                normalEventInRange = true;\n\n                let timeDifferenceStart: number;\n                if (eventUTCStartTime < utcStartTime) {\n                    timeDifferenceStart = 0;\n                } else {\n                    timeDifferenceStart = (eventUTCStartTime - utcStartTime) / oneHour * this.hourSegments + (eventStartTime.getHours() + eventStartTime.getMinutes() / 60) * this.hourSegments;\n                }\n\n                let timeDifferenceEnd: number;\n                if (eventUTCEndTime > utcEndTime) {\n                    timeDifferenceEnd = (utcEndTime - utcStartTime) / oneHour * this.hourSegments;\n                } else {\n                    timeDifferenceEnd = (eventUTCEndTime - oneDay - utcStartTime) / oneHour * this.hourSegments + (eventEndTime.getHours() + eventEndTime.getMinutes() / 60) * this.hourSegments;\n                }\n\n                const startIndex = Math.floor(timeDifferenceStart),\n                    endIndex = Math.ceil(timeDifferenceEnd - eps);\n                let startRowIndex = startIndex % allRows,\n                    dayIndex = Math.floor(startIndex / allRows),\n                    endOfDay = dayIndex * allRows,\n                    startOffset = 0,\n                    endOffset = 0;\n\n                if (this.hourParts !== 1) {\n                    if (startRowIndex < rangeStartRowIndex) {\n                        startOffset = 0;\n                    } else {\n                        startOffset = Math.floor((timeDifferenceStart - startIndex) * this.hourParts);\n                    }\n                }\n\n                do {\n                    endOfDay += allRows;\n                    let endRowIndex: number;\n                    if (endOfDay < endIndex) {\n                        endRowIndex = allRows;\n                    } else {\n                        if (endOfDay === endIndex) {\n                            endRowIndex = allRows;\n                        } else {\n                            endRowIndex = endIndex % allRows;\n                        }\n                        if (this.hourParts !== 1) {\n                            if (endRowIndex > rangeEndRowIndex) {\n                                endOffset = 0;\n                            } else {\n                                endOffset = Math.floor((endIndex - timeDifferenceEnd) * this.hourParts);\n                            }\n                        }\n                    }\n                    if (startRowIndex < rangeStartRowIndex) {\n                        startRowIndex = 0;\n                    } else {\n                        startRowIndex -= rangeStartRowIndex;\n                    }\n                    if (endRowIndex > rangeEndRowIndex) {\n                        endRowIndex = rangeEndRowIndex;\n                    }\n                    endRowIndex -= rangeStartRowIndex;\n\n                    if (startRowIndex < endRowIndex) {\n                        const displayEvent = {\n                            event,\n                            startIndex: startRowIndex,\n                            endIndex: endRowIndex,\n                            startOffset,\n                            endOffset,\n                            position: 0\n                        };\n                        let eventSet = rows[startRowIndex][dayIndex].events;\n                        if (eventSet) {\n                            eventSet.push(displayEvent);\n                        } else {\n                            eventSet = [];\n                            eventSet.push(displayEvent);\n                            rows[startRowIndex][dayIndex].events = eventSet;\n                        }\n                        dates[dayIndex].hasEvent = true;\n                    }\n                    startRowIndex = 0;\n                    startOffset = 0;\n                    dayIndex += 1;\n                } while (endOfDay < endIndex);\n            }\n        }\n\n        if (normalEventInRange) {\n            for (let day = 0; day < 7; day += 1) {\n                let orderedEvents: IDisplayEvent[] = [];\n                for (let hour = 0; hour < this.hourRange; hour += 1) {\n                    if (rows[hour][day].events) {\n                        rows[hour][day].events.sort(WeekViewComponent.compareEventByStartOffset);\n                        orderedEvents = orderedEvents.concat(rows[hour][day].events);\n                    }\n                }\n                if (orderedEvents.length > 0) {\n                    this.placeEvents(orderedEvents);\n                }\n            }\n        }\n\n        if (allDayEventInRange) {\n            let orderedAllDayEvents: IDisplayEvent[] = [];\n            for (let day = 0; day < 7; day += 1) {\n                if (dates[day].events) {\n                    orderedAllDayEvents = orderedAllDayEvents.concat(dates[day].events);\n                }\n            }\n            if (orderedAllDayEvents.length > 0) {\n                this.placeAllDayEvents(orderedAllDayEvents);\n            }\n        }\n\n        if (this.autoSelect) {\n            let selectedDate;\n            for (let r = 0; r < 7; r += 1) {\n                if (dates[r].selected) {\n                    selectedDate = dates[r];\n                    break;\n                }\n            }\n\n            if (selectedDate) {\n                let disabled = false;\n                if (this.markDisabled) {\n                    disabled = this.markDisabled(selectedDate.date);\n                }\n\n                this.onTimeSelected.emit({\n                    selectedTime: selectedDate.date,\n                    events: selectedDate.events.map(e => e.event),\n                    disabled\n                });\n            }\n        }\n    }\n\n    refreshView() {\n        this.range = this.getRange(this.calendarService.currentDate);\n\n        if (this.inited) {\n            const title = this.getTitle();\n            this.onTitleChanged.emit(title);\n        }\n        this.calendarService.populateAdjacentViews(this);\n        this.updateCurrentView(this.range.startTime, this.views[this.currentViewIndex]);\n        this.calendarService.rangeChanged(this);\n    }\n\n    getTitle(): string {\n        const firstDayOfWeek = new Date(this.range.startTime.getTime());\n        firstDayOfWeek.setHours(12, 0, 0, 0);\n        return this.formatTitle(firstDayOfWeek);\n    }\n\n    getHighlightClass(date: IWeekViewDateRow): string {\n        let className = '';\n\n        if (date.hasEvent) {\n            if (className) {\n                className += ' ';\n            }\n            className = 'weekview-with-event';\n        }\n\n        if (date.selected) {\n            if (className) {\n                className += ' ';\n            }\n            className += 'weekview-selected';\n        }\n\n        if (date.current) {\n            if (className) {\n                className += ' ';\n            }\n            className += 'weekview-current';\n        }\n\n        return className;\n    }\n\n    select(selectedTime: Date, events: IDisplayEvent[]) {\n        let disabled = false;\n        if (this.markDisabled) {\n            disabled = this.markDisabled(selectedTime);\n        }\n\n        this.onTimeSelected.emit({\n            selectedTime,\n            events: events.map(e => e.event),\n            disabled\n        });\n    }\n\n    placeEvents(orderedEvents: IDisplayEvent[]) {\n        this.calculatePosition(orderedEvents);\n        WeekViewComponent.calculateWidth(orderedEvents, this.hourRange, this.hourParts);\n    }\n\n    placeAllDayEvents(orderedEvents: IDisplayEvent[]) {\n        this.calculatePosition(orderedEvents);\n    }\n\n    overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\n        let earlyEvent = event1,\n            lateEvent = event2;\n        if (event1.startIndex > event2.startIndex || (event1.startIndex === event2.startIndex && event1.startOffset > event2.startOffset)) {\n            earlyEvent = event2;\n            lateEvent = event1;\n        }\n\n        if (earlyEvent.endIndex <= lateEvent.startIndex) {\n            return false;\n        } else {\n            return !(earlyEvent.endIndex - lateEvent.startIndex === 1 && earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts);\n        }\n    }\n\n    calculatePosition(events: IDisplayEvent[]) {\n        const len = events.length,\n            isForbidden = new Array(len);\n        let maxColumn = 0;\n\n        for (let i = 0; i < len; i += 1) {\n            let col: number;\n            for (col = 0; col < maxColumn; col += 1) {\n                isForbidden[col] = false;\n            }\n            for (let j = 0; j < i; j += 1) {\n                if (this.overlap(events[i], events[j])) {\n                    isForbidden[events[j].position] = true;\n                }\n            }\n            for (col = 0; col < maxColumn; col += 1) {\n                if (!isForbidden[col]) {\n                    break;\n                }\n            }\n            if (col < maxColumn) {\n                events[i].position = col;\n            } else {\n                events[i].position = maxColumn++;\n            }\n        }\n\n        if (this.dir === 'rtl') {\n            for (let i = 0; i < len; i += 1) {\n                events[i].position = maxColumn - 1 - events[i].position;\n            }\n        }\n    }\n\n    updateCurrentView(currentViewStartDate: Date, view: IWeekView) {\n        const currentCalendarDate = this.calendarService.currentDate,\n            today = new Date(),\n            oneDay = 86400000,\n            selectedDayDifference = Math.round((Date.UTC(currentCalendarDate.getFullYear(), currentCalendarDate.getMonth(), currentCalendarDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay),\n            currentDayDifference = Math.floor((Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\n\n        for (let r = 0; r < 7; r += 1) {\n            view.dates[r].selected = false;\n        }\n\n        if (selectedDayDifference >= 0 && selectedDayDifference < 7 && this.autoSelect) {\n            view.dates[selectedDayDifference].selected = true;\n        }\n\n        if (currentDayDifference >= 0 && currentDayDifference < 7) {\n            view.dates[currentDayDifference].current = true;\n        }\n    }\n\n    daySelected(viewDate: IWeekViewDateRow) {\n        const selectedDate = viewDate.date,\n            dates = this.views[this.currentViewIndex].dates,\n            currentViewStartDate = this.range.startTime,\n            oneDay = 86400000,\n            selectedDayDifference = Math.round((Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\n\n        this.calendarService.setCurrentDate(selectedDate);\n\n        for (let r = 0; r < 7; r += 1) {\n            dates[r].selected = false;\n        }\n\n        if (selectedDayDifference >= 0 && selectedDayDifference < 7) {\n            dates[selectedDayDifference].selected = true;\n        }\n\n        let disabled = false;\n        if (this.markDisabled) {\n            disabled = this.markDisabled(selectedDate);\n        }\n\n        this.onDayHeaderSelected.emit({selectedTime: selectedDate, events: viewDate.events.map(e => e.event), disabled});\n    }\n\n    setScrollPosition(scrollPosition: number) {\n        this.initScrollPosition = scrollPosition;\n    }\n}\n","import {DatePipe} from '@angular/common';\nimport {\n    Component,\n    OnInit,\n    OnChanges,\n    HostBinding,\n    Input,\n    Output,\n    EventEmitter,\n    SimpleChanges,\n    ViewChild,\n    ViewEncapsulation,\n    TemplateRef,\n    ElementRef,\n    AfterViewInit, \n    OnDestroy,\n    NgZone\n} from '@angular/core';\nimport {Subscription} from 'rxjs';\nimport { SwiperComponent } from 'swiper/angular';\n\nimport {\n    ICalendarComponent,\n    IDayView,\n    IDayViewRow,\n    IDisplayEvent,\n    IEvent,\n    ITimeSelected,\n    IRange,\n    CalendarMode,\n    IDateFormatter,\n    IDisplayAllDayEvent,\n    IDayViewAllDayEventSectionTemplateContext,\n    IDayViewNormalEventSectionTemplateContext\n} from './calendar.interface';\nimport {CalendarService} from './calendar.service';\n\n@Component({\n    selector: 'dayview',\n    template: `\n        <swiper #swiper [config]=\"sliderOptions\" [dir]=\"dir\" [allowSlidePrev]=\"!lockSwipeToPrev\" [allowSlideNext]=\"!lockSwipeToNext\" [allowTouchMove]=\"!lockSwipes\" (slideChangeTransitionEnd)=\"onSlideChanged()\" class=\"slides-container\">\n            <ng-template swiperSlide class=\"slide-container\">\n                <div class=\"dayview-allday-table\">\n                    <div class=\"dayview-allday-label\">{{allDayLabel}}</div>\n                    <div class=\"dayview-allday-content-wrapper scroll-content\">\n                        <table class=\"table table-bordered dayview-allday-content-table\">\n                            <tbody>\n                            <tr>\n                                <td class=\"calendar-cell\" [ngClass]=\"{'calendar-event-wrap':views[0].allDayEvents.length>0}\"\n                                    [ngStyle]=\"{height: 25*views[0].allDayEvents.length+'px'}\"\n                                    *ngIf=\"0===currentViewIndex\">\n                                    <ng-template [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n                                                 [ngTemplateOutletContext]=\"{allDayEvents:views[0].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\n                                    </ng-template>\n                                </td>\n                                <td class=\"calendar-cell\" *ngIf=\"0!==currentViewIndex\">\n                                    <ng-template [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n                                                 [ngTemplateOutletContext]=\"{allDayEvents:views[0].allDayEvents}\">\n                                    </ng-template>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n                <init-position-scroll *ngIf=\"0===currentViewIndex\" class=\"dayview-normal-event-container\"\n                                      [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\n                                      (onScroll)=\"setScrollPosition($event)\">\n                    <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\n                        <tbody>\n                        <tr *ngFor=\"let tm of views[0].rows; let i = index\">\n                            <td class=\"calendar-hour-column text-center\">\n                                {{hourColumnLabels[i]}}\n                            </td>\n                            <td class=\"calendar-cell\" tappable (click)=\"select(tm.time, tm.events)\">\n                                <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n                                             [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </init-position-scroll>\n                <init-position-scroll *ngIf=\"0!==currentViewIndex\" class=\"dayview-normal-event-container\"\n                                      [initPosition]=\"initScrollPosition\">\n                    <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\n                        <tbody>\n                        <tr *ngFor=\"let tm of views[0].rows; let i = index\">\n                            <td class=\"calendar-hour-column text-center\">\n                                {{hourColumnLabels[i]}}\n                            </td>\n                            <td class=\"calendar-cell\">\n                                <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n                                             [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </init-position-scroll>\n            </ng-template>\n            <ng-template swiperSlide class=\"slide-container\">\n                <div class=\"dayview-allday-table\">\n                    <div class=\"dayview-allday-label\">{{allDayLabel}}</div>\n                    <div class=\"dayview-allday-content-wrapper scroll-content\">\n                        <table class=\"table table-bordered dayview-allday-content-table\">\n                            <tbody>\n                            <tr>\n                                <td class=\"calendar-cell\" [ngClass]=\"{'calendar-event-wrap':views[1].allDayEvents.length>0}\"\n                                    [ngStyle]=\"{height: 25*views[1].allDayEvents.length+'px'}\"\n                                    *ngIf=\"1===currentViewIndex\">\n                                    <ng-template [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n                                                 [ngTemplateOutletContext]=\"{allDayEvents:views[1].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\n                                    </ng-template>\n                                </td>\n                                <td class=\"calendar-cell\" *ngIf=\"1!==currentViewIndex\">\n                                    <ng-template [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n                                                 [ngTemplateOutletContext]=\"{allDayEvents:views[1].allDayEvents}\">\n                                    </ng-template>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n                <init-position-scroll *ngIf=\"1===currentViewIndex\" class=\"dayview-normal-event-container\"\n                                      [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\n                                      (onScroll)=\"setScrollPosition($event)\">\n                    <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\n                        <tbody>\n                        <tr *ngFor=\"let tm of views[1].rows; let i = index\">\n                            <td class=\"calendar-hour-column text-center\">\n                                {{hourColumnLabels[i]}}\n                            </td>\n                            <td class=\"calendar-cell\" tappable (click)=\"select(tm.time, tm.events)\">\n                                <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n                                             [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </init-position-scroll>\n                <init-position-scroll *ngIf=\"1!==currentViewIndex\" class=\"dayview-normal-event-container\"\n                                      [initPosition]=\"initScrollPosition\">\n                    <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\n                        <tbody>\n                        <tr *ngFor=\"let tm of views[1].rows; let i = index\">\n                            <td class=\"calendar-hour-column text-center\">\n                                {{hourColumnLabels[i]}}\n                            </td>\n                            <td class=\"calendar-cell\">\n                                <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n                                             [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </init-position-scroll>\n            </ng-template>\n            <ng-template swiperSlide class=\"slide-container\">\n                <div class=\"dayview-allday-table\">\n                    <div class=\"dayview-allday-label\">{{allDayLabel}}</div>\n                    <div class=\"dayview-allday-content-wrapper scroll-content\">\n                        <table class=\"table table-bordered dayview-allday-content-table\">\n                            <tbody>\n                            <tr>\n                                <td class=\"calendar-cell\" [ngClass]=\"{'calendar-event-wrap':views[2].allDayEvents.length>0}\"\n                                    [ngStyle]=\"{height: 25*views[2].allDayEvents.length+'px'}\"\n                                    *ngIf=\"2===currentViewIndex\">\n                                    <ng-template [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n                                                 [ngTemplateOutletContext]=\"{allDayEvents:views[2].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\n                                    </ng-template>\n                                </td>\n                                <td class=\"calendar-cell\" *ngIf=\"2!==currentViewIndex\">\n                                    <ng-template [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n                                                 [ngTemplateOutletContext]=\"{allDayEvents:views[2].allDayEvents}\">\n                                    </ng-template>\n                                </td>\n                            </tr>\n                            </tbody>\n                        </table>\n                    </div>\n                </div>\n                <init-position-scroll *ngIf=\"2===currentViewIndex\" class=\"dayview-normal-event-container\"\n                                      [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\n                                      (onScroll)=\"setScrollPosition($event)\">\n                    <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\n                        <tbody>\n                        <tr *ngFor=\"let tm of views[2].rows; let i = index\">\n                            <td class=\"calendar-hour-column text-center\">\n                                {{hourColumnLabels[i]}}\n                            </td>\n                            <td class=\"calendar-cell\" tappable (click)=\"select(tm.time, tm.events)\">\n                                <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n                                             [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </init-position-scroll>\n                <init-position-scroll *ngIf=\"2!==currentViewIndex\" class=\"dayview-normal-event-container\"\n                                      [initPosition]=\"initScrollPosition\">\n                    <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\n                        <tbody>\n                        <tr *ngFor=\"let tm of views[2].rows; let i = index\">\n                            <td class=\"calendar-hour-column text-center\">\n                                {{hourColumnLabels[i]}}\n                            </td>\n                            <td class=\"calendar-cell\">\n                                <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n                                             [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\n                                </ng-template>\n                            </td>\n                        </tr>\n                        </tbody>\n                    </table>\n                </init-position-scroll>\n            </ng-template>\n        </swiper>\n    `,\n    styles: [`\n        .table-fixed {\n            table-layout: fixed;\n        }\n\n        .table {\n            width: 100%;\n            max-width: 100%;\n            background-color: transparent;\n        }\n\n        .table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td,\n        .table > tbody > tr > td, .table > tfoot > tr > td {\n            padding: 8px;\n            line-height: 20px;\n            vertical-align: top;\n        }\n\n        .table > thead > tr > th {\n            vertical-align: bottom;\n            border-bottom: 2px solid #ddd;\n        }\n\n        .table > thead:first-child > tr:first-child > th, .table > thead:first-child > tr:first-child > td {\n            border-top: 0\n        }\n\n        .table > tbody + tbody {\n            border-top: 2px solid #ddd;\n        }\n\n        .table-bordered {\n            border: 1px solid #ddd;\n        }\n\n        .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th,\n        .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td {\n            border: 1px solid #ddd;\n        }\n\n        .table-bordered > thead > tr > th, .table-bordered > thead > tr > td {\n            border-bottom-width: 2px;\n        }\n\n        .table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th {\n            background-color: #f9f9f9\n        }\n\n        .calendar-hour-column {\n            width: 50px;\n            white-space: nowrap;\n        }\n\n        .calendar-event-wrap {\n            position: relative;\n            width: 100%;\n            height: 100%;\n        }\n\n        .calendar-event {\n            position: absolute;\n            padding: 2px;\n            cursor: pointer;\n            z-index: 10000;\n        }\n\n        .slides-container {\n            height: 100%;\n        }\n\n        .slide-container {\n            display: block !important;\n        }\n\n        .calendar-cell {\n            padding: 0 !important;\n            height: 37px;\n        }\n\n        .dayview-allday-label {\n            float: left;\n            height: 100%;\n            line-height: 50px;\n            text-align: center;\n            width: 50px;\n            border-left: 1px solid #ddd;\n        }\n\n        [dir=\"rtl\"] .dayview-allday-label {\n            border-right: 1px solid #ddd;\n            float: right;\n        }\n\n        .dayview-allday-content-wrapper {\n            margin-left: 50px;\n            overflow: hidden;\n            height: 51px;\n        }\n\n        [dir=\"rtl\"] .dayview-allday-content-wrapper {\n            margin-left: 0;\n            margin-right: 50px;\n        }\n\n        .dayview-allday-content-table {\n            min-height: 50px;\n        }\n\n        .dayview-allday-content-table td {\n            border-left: 1px solid #ddd;\n            border-right: 1px solid #ddd;\n        }\n\n        .dayview-allday-table {\n            height: 50px;\n            position: relative;\n            border-bottom: 1px solid #ddd;\n            font-size: 14px;\n        }\n\n        .dayview-normal-event-container {\n            margin-top: 50px;\n            overflow: hidden;\n            left: 0;\n            right: 0;\n            top: 0;\n            bottom: 0;\n            position: absolute;\n            font-size: 14px;\n        }\n\n        .scroll-content {\n            overflow-y: auto;\n            overflow-x: hidden;\n        }\n\n        ::-webkit-scrollbar,\n        *::-webkit-scrollbar {\n            display: none;\n        }\n\n        .table > tbody > tr > td.calendar-hour-column {\n            padding-left: 0;\n            padding-right: 0;\n            vertical-align: middle;\n        }\n\n        @media (max-width: 750px) {\n            .dayview-allday-label, .calendar-hour-column {\n                width: 31px;\n                font-size: 12px;\n            }\n\n            .dayview-allday-label {\n                padding-top: 4px;\n            }\n\n            .table > tbody > tr > td.calendar-hour-column {\n                padding-left: 0;\n                padding-right: 0;\n                vertical-align: middle;\n                line-height: 12px;\n            }\n\n            .dayview-allday-label {\n                line-height: 20px;\n            }\n\n            .dayview-allday-content-wrapper {\n                margin-left: 31px;\n            }\n\n            [dir=\"rtl\"] .dayview-allday-content-wrapper {\n                margin-left: 0;\n                margin-right: 31px;\n            }\n        }\n    `],\n    encapsulation: ViewEncapsulation.None\n})\nexport class DayViewComponent implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit {\n\n    constructor(private calendarService: CalendarService, private elm: ElementRef, private zone: NgZone) {\n    }\n\n    @HostBinding('class.dayview') class = true;\n    @ViewChild('swiper', { static: false }) slider!: SwiperComponent;\n\n    @Input() dayviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\n    @Input() dayviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\n    @Input() dayviewAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n    @Input() dayviewNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n    @Input() dayviewInactiveAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n    @Input() dayviewInactiveNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n\n    @Input() formatHourColumn?: string;\n    @Input() formatDayTitle?: string;\n    @Input() allDayLabel?: string;\n    @Input() hourParts!: number;\n    @Input() eventSource!: IEvent[];\n    @Input() markDisabled?: (date: Date) => boolean;\n    @Input() locale!: string;\n    @Input() dateFormatter?: IDateFormatter;\n    @Input() dir = '';\n    @Input() scrollToHour = 0;\n    @Input() preserveScrollPosition?: boolean;\n    @Input() lockSwipeToPrev?: boolean;\n    @Input() lockSwipeToNext?: boolean;\n    @Input() lockSwipes?: boolean;\n    @Input() startHour!: number;\n    @Input() endHour!: number;\n    @Input() sliderOptions: any;\n    @Input() hourSegments!: number;\n\n    @Output() onRangeChanged = new EventEmitter<IRange>();\n    @Output() onEventSelected = new EventEmitter<IEvent>();\n    @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\n    @Output() onTitleChanged = new EventEmitter<string>(true);\n\n    public views: IDayView[] = [];\n    public currentViewIndex = 0;\n    public direction = 0;\n    public mode: CalendarMode = 'day';\n    public range!: IRange;\n\n    private inited = false;\n    private callbackOnInit = true;\n    private currentDateChangedFromParentSubscription?: Subscription;\n    private eventSourceChangedSubscription?: Subscription;\n    private slideChangedSubscription?: Subscription;\n    private slideUpdatedSubscription?: Subscription;\n\n    public hourColumnLabels!: string[];\n    public initScrollPosition!: number;\n    private formatTitle!: (date: Date) => string;\n    private formatHourColumnLabel!: (date: Date) => string;\n    private hourRange!: number;\n\n    static createDateObjects(startTime: Date, startHour: number, endHour: number, timeInterval: number): IDayViewRow[] {\n        const rows: IDayViewRow[] = [],\n            currentHour = 0,\n            currentDate = startTime.getDate();\n        let time: Date,\n            hourStep,\n            minStep;\n\n        if (timeInterval < 1) {\n            hourStep = Math.floor(1 / timeInterval);\n            minStep = 60;\n        } else {\n            hourStep = 1;\n            minStep = Math.floor(60 / timeInterval);\n        }\n\n        for (let hour = startHour; hour < endHour; hour += hourStep) {\n            for (let interval = 0; interval < 60; interval += minStep) {\n                time = new Date(startTime.getTime());\n                time.setHours(currentHour + hour, interval);\n                time.setDate(currentDate);\n                rows.push({\n                    time,\n                    events: []\n                });\n            }\n        }\n        return rows;\n    }\n\n    private static compareEventByStartOffset(eventA: IDisplayEvent, eventB: IDisplayEvent) {\n        return eventA.startOffset - eventB.startOffset;\n    }\n\n    private static calculateWidth(orderedEvents: IDisplayEvent[], size: number, hourParts: number) {\n        const totalSize = size * hourParts,\n            cells: { calculated: boolean; events: IDisplayEvent[]; }[] = new Array(totalSize);\n\n        // sort by position in descending order, the right most columns should be calculated first\n        orderedEvents.sort((eventA, eventB) => {\n            return eventB.position - eventA.position;\n        });\n        for (let i = 0; i < totalSize; i += 1) {\n            cells[i] = {\n                calculated: false,\n                events: []\n            };\n        }\n        const len = orderedEvents.length;\n        for (let i = 0; i < len; i += 1) {\n            const event = orderedEvents[i];\n            let index = event.startIndex * hourParts + event.startOffset;\n            while (index < event.endIndex * hourParts - event.endOffset) {\n                cells[index].events.push(event);\n                index += 1;\n            }\n        }\n\n        let i = 0;\n        while (i < len) {\n            let event:IDisplayEvent|undefined = orderedEvents[i];\n            if (!event.overlapNumber) {\n                const overlapNumber = event.position + 1;\n                event.overlapNumber = overlapNumber;\n                const eventQueue = [event];\n                while (event = eventQueue.shift()) {\n                    let index = event.startIndex * hourParts + event.startOffset;\n                    while (index < event.endIndex * hourParts - event.endOffset) {\n                        if (!cells[index].calculated) {\n                            cells[index].calculated = true;\n                            if (cells[index].events) {\n                                const eventCountInCell = cells[index].events.length;\n                                for (let j = 0; j < eventCountInCell; j += 1) {\n                                    const currentEventInCell = cells[index].events[j];\n                                    if (!currentEventInCell.overlapNumber) {\n                                        currentEventInCell.overlapNumber = overlapNumber;\n                                        eventQueue.push(currentEventInCell);\n                                    }\n                                }\n                            }\n                        }\n                        index += 1;\n                    }\n                }\n            }\n            i += 1;\n        }\n    }\n\n    ngOnInit() {\n        if (!this.sliderOptions) {\n            this.sliderOptions = {};\n        }\n        this.sliderOptions.loop = true;\n\n        this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n        if (this.dateFormatter && this.dateFormatter.formatDayViewTitle) {\n            this.formatTitle = this.dateFormatter.formatDayViewTitle;\n        } else {\n            const datePipe = new DatePipe(this.locale);\n            this.formatTitle = function(date: Date) {\n                return datePipe.transform(date, this.formatDayTitle)||'';\n            };\n        }\n\n        if (this.dateFormatter && this.dateFormatter.formatDayViewHourColumn) {\n            this.formatHourColumnLabel = this.dateFormatter.formatDayViewHourColumn;\n        } else {\n            const datePipe = new DatePipe(this.locale);\n            this.formatHourColumnLabel = function(date: Date) {\n                return datePipe.transform(date, this.formatHourColumn)||'';\n            };\n        }\n\n        this.refreshView();\n        this.hourColumnLabels = this.getHourColumnLabels();\n\n        this.inited = true;\n\n        this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {\n            this.refreshView();\n        });\n\n        this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\n            this.onDataLoaded();\n        });\n\n        this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\n            if (direction === 1) {\n                this.slider.swiperRef.slideNext();\n            } else if (direction === -1) {\n                this.slider.swiperRef.slidePrev();\n            }\n        });\n\n        this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\n            this.slider.swiperRef.update();\n        });\n    }\n\n    ngAfterViewInit() {\n        const title = this.getTitle();\n        this.onTitleChanged.emit(title);\n\n        if (this.scrollToHour > 0) {\n            const hourColumns = this.elm.nativeElement.querySelector('.dayview-normal-event-container').querySelectorAll('.calendar-hour-column');\n            const me = this;\n            setTimeout(() => {\n                me.initScrollPosition = hourColumns[me.scrollToHour - me.startHour].offsetTop;\n            }, 50);\n        }\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (!this.inited) {\n            return;\n        }\n        if ((changes['startHour'] || changes['endHour']) && (!changes['startHour'].isFirstChange() || !changes['endHour'].isFirstChange())) {\n            this.views = [];\n            this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n            this.direction = 0;\n            this.refreshView();\n            this.hourColumnLabels = this.getHourColumnLabels();\n        }\n\n        const eventSourceChange = changes['eventSource'];\n        if (eventSourceChange && eventSourceChange.currentValue) {\n            this.onDataLoaded();\n        }\n\n        const lockSwipeToPrev = changes['lockSwipeToPrev'];\n        if (lockSwipeToPrev) {\n            this.slider.swiperRef.allowSlidePrev = !lockSwipeToPrev.currentValue;\n        }\n\n        const lockSwipeToNext = changes['lockSwipeToNext'];\n        if (lockSwipeToPrev) {\n            this.slider.swiperRef.allowSlideNext = !lockSwipeToNext.currentValue;\n        }\n\n        const lockSwipes = changes['lockSwipes'];\n        if (lockSwipes) {\n            this.slider.swiperRef.allowTouchMove = !lockSwipes.currentValue;\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.currentDateChangedFromParentSubscription) {\n            this.currentDateChangedFromParentSubscription.unsubscribe();\n            this.currentDateChangedFromParentSubscription = undefined;\n        }\n\n        if (this.eventSourceChangedSubscription) {\n            this.eventSourceChangedSubscription.unsubscribe();\n            this.eventSourceChangedSubscription = undefined;\n        }\n\n        if (this.slideChangedSubscription) {\n            this.slideChangedSubscription.unsubscribe();\n            this.slideChangedSubscription = undefined;\n        }\n\n        if (this.slideUpdatedSubscription) {\n            this.slideUpdatedSubscription.unsubscribe();\n            this.slideUpdatedSubscription = undefined;\n        }\n    }\n\n    onSlideChanged() {\n        this.zone.run(() => {\n            if (this.callbackOnInit) {\n                this.callbackOnInit = false;\n                return;\n            }\n\n            let direction = 0;\n            const currentViewIndex = this.currentViewIndex;\n\n            let currentSlideIndex = this.slider.swiperRef.activeIndex;\n            currentSlideIndex = (currentSlideIndex + 2) % 3;\n            if(isNaN(currentSlideIndex)) {\n                currentSlideIndex = currentViewIndex;\n            }\n\n            if (currentSlideIndex - currentViewIndex === 1) {\n                direction = 1;\n            } else if (currentSlideIndex === 0 && currentViewIndex === 2) {\n                direction = 1;\n                this.slider.swiperRef.slideTo(1, 0, false);\n            } else if (currentViewIndex - currentSlideIndex === 1) {\n                direction = -1;\n            } else if (currentSlideIndex === 2 && currentViewIndex === 0) {\n                direction = -1;\n                this.slider.swiperRef.slideTo(3, 0, false);\n            }\n            this.currentViewIndex = currentSlideIndex;\n            this.move(direction);\n        });\n    }\n\n    move(direction: number) {\n        if (direction === 0) {\n            return;\n        }\n\n        this.direction = direction;\n        const adjacentDate = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\n        this.calendarService.setCurrentDate(adjacentDate);\n        this.refreshView();\n        this.direction = 0;\n    }\n\n    private getHourColumnLabels(): string[] {\n        const hourColumnLabels: string[] = [];\n        for (let hour = 0, length = this.views[0].rows.length; hour < length; hour += 1) {\n            // handle edge case for DST\n            if (hour === 0 && this.views[0].rows[hour].time.getHours() !== this.startHour) {\n                const time = new Date(this.views[0].rows[hour].time);\n                time.setDate(time.getDate() + 1);\n                time.setHours(this.startHour);\n                hourColumnLabels.push(this.formatHourColumnLabel(time));\n            } else {\n                hourColumnLabels.push(this.formatHourColumnLabel(this.views[0].rows[hour].time));\n            }\n        }\n        return hourColumnLabels;\n    }\n\n    getViewData(startTime: Date): IDayView {\n        return {\n            rows: DayViewComponent.createDateObjects(startTime, this.startHour, this.endHour, this.hourSegments),\n            allDayEvents: []\n        };\n    }\n\n    getRange(currentDate: Date): IRange {\n        const year = currentDate.getFullYear(),\n            month = currentDate.getMonth(),\n            date = currentDate.getDate(),\n            startTime = new Date(year, month, date, 12, 0, 0),\n            endTime = new Date(year, month, date + 1, 12, 0, 0);\n\n        return {\n            startTime,\n            endTime\n        };\n    }\n\n    onDataLoaded() {\n        const eventSource = this.eventSource,\n            len = eventSource ? eventSource.length : 0,\n            startTime = this.range.startTime,\n            endTime = this.range.endTime,\n            utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\n            utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\n            currentViewIndex = this.currentViewIndex,\n            rows = this.views[currentViewIndex].rows,\n            allDayEvents: IDisplayAllDayEvent[] = this.views[currentViewIndex].allDayEvents = [],\n            oneHour = 3600000,\n            eps = 0.016,\n            rangeStartRowIndex = this.startHour * this.hourSegments,\n            rangeEndRowIndex = this.endHour * this.hourSegments;\n        let normalEventInRange = false;\n\n        for (let hour = 0; hour < this.hourRange; hour += 1) {\n            rows[hour].events = [];\n        }\n\n        for (let i = 0; i < len; i += 1) {\n            const event = eventSource[i];\n            const eventStartTime = event.startTime;\n            const eventEndTime = event.endTime;\n            let eventUTCStartTime: number,\n                eventUTCEndTime: number;\n\n            if (event.allDay) {\n                eventUTCStartTime = eventStartTime.getTime();\n                eventUTCEndTime = eventEndTime.getTime();\n            } else {\n                eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());\n                eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);\n            }\n\n            if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime || eventStartTime >= eventEndTime) {\n                continue;\n            }\n\n            if (event.allDay) {\n                allDayEvents.push({\n                    event\n                });\n            } else {\n                normalEventInRange = true;\n\n                let timeDifferenceStart: number;\n                if (eventUTCStartTime < utcStartTime) {\n                    timeDifferenceStart = 0;\n                } else {\n                    timeDifferenceStart = (eventStartTime.getHours() + eventStartTime.getMinutes() / 60) * this.hourSegments;\n                }\n\n                let timeDifferenceEnd: number;\n                if (eventUTCEndTime > utcEndTime) {\n                    timeDifferenceEnd = (utcEndTime - utcStartTime) / oneHour * this.hourSegments;\n                } else {\n                    timeDifferenceEnd = (eventEndTime.getHours() + eventEndTime.getMinutes() / 60) * this.hourSegments;\n                }\n\n                let startIndex = Math.floor(timeDifferenceStart);\n                let endIndex = Math.ceil(timeDifferenceEnd - eps);\n                let startOffset = 0;\n                let endOffset = 0;\n                if (this.hourParts !== 1) {\n                    if (startIndex < rangeStartRowIndex) {\n                        startOffset = 0;\n                    } else {\n                        startOffset = Math.floor((timeDifferenceStart - startIndex) * this.hourParts);\n                    }\n                    if (endIndex > rangeEndRowIndex) {\n                        endOffset = 0;\n                    } else {\n                        endOffset = Math.floor((endIndex - timeDifferenceEnd) * this.hourParts);\n                    }\n                }\n\n                if (startIndex < rangeStartRowIndex) {\n                    startIndex = 0;\n                } else {\n                    startIndex -= rangeStartRowIndex;\n                }\n                if (endIndex > rangeEndRowIndex) {\n                    endIndex = rangeEndRowIndex;\n                }\n                endIndex -= rangeStartRowIndex;\n\n                if (startIndex < endIndex) {\n                    const displayEvent:IDisplayEvent = {\n                        event,\n                        startIndex,\n                        endIndex,\n                        startOffset,\n                        endOffset,\n                        position:0\n                    };\n\n                    let eventSet = rows[startIndex].events;\n                    if (eventSet) {\n                        eventSet.push(displayEvent);\n                    } else {\n                        eventSet = [];\n                        eventSet.push(displayEvent);\n                        rows[startIndex].events = eventSet;\n                    }\n                }\n            }\n        }\n\n        if (normalEventInRange) {\n            let orderedEvents: IDisplayEvent[] = [];\n            for (let hour = 0; hour < this.hourRange; hour += 1) {\n                if (rows[hour].events) {\n                    rows[hour].events.sort(DayViewComponent.compareEventByStartOffset);\n\n                    orderedEvents = orderedEvents.concat(rows[hour].events);\n                }\n            }\n            if (orderedEvents.length > 0) {\n                this.placeEvents(orderedEvents);\n            }\n        }\n    }\n\n    refreshView() {\n        this.range = this.getRange(this.calendarService.currentDate);\n        if (this.inited) {\n            const title = this.getTitle();\n            this.onTitleChanged.emit(title);\n        }\n\n        this.calendarService.populateAdjacentViews(this);\n        this.calendarService.rangeChanged(this);\n    }\n\n    getTitle(): string {\n        const startingDate = new Date(this.range.startTime.getTime());\n        startingDate.setHours(12, 0, 0, 0);\n        return this.formatTitle(startingDate);\n    }\n\n    select(selectedTime: Date, events: IDisplayEvent[]) {\n        let disabled = false;\n        if (this.markDisabled) {\n            disabled = this.markDisabled(selectedTime);\n        }\n\n        this.onTimeSelected.emit({\n            selectedTime,\n            events: events.map(e => e.event),\n            disabled\n        });\n    }\n\n    placeEvents(orderedEvents: IDisplayEvent[]) {\n        this.calculatePosition(orderedEvents);\n        DayViewComponent.calculateWidth(orderedEvents, this.hourRange, this.hourParts);\n    }\n\n    placeAllDayEvents(orderedEvents: IDisplayEvent[]) {\n        this.calculatePosition(orderedEvents);\n    }\n\n    overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\n        let earlyEvent = event1,\n            lateEvent = event2;\n        if (event1.startIndex > event2.startIndex || (event1.startIndex === event2.startIndex && event1.startOffset > event2.startOffset)) {\n            earlyEvent = event2;\n            lateEvent = event1;\n        }\n\n        if (earlyEvent.endIndex <= lateEvent.startIndex) {\n            return false;\n        } else {\n            return !(earlyEvent.endIndex - lateEvent.startIndex === 1 && earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts);\n        }\n    }\n\n    calculatePosition(events: IDisplayEvent[]) {\n        const len = events.length,\n            isForbidden: boolean[] = new Array(len);\n        let maxColumn = 0,\n            col: number;\n\n\n        for (let i = 0; i < len; i += 1) {\n            for (col = 0; col < maxColumn; col += 1) {\n                isForbidden[col] = false;\n            }\n            for (let j = 0; j < i; j += 1) {\n                if (this.overlap(events[i], events[j])) {\n                    isForbidden[events[j].position] = true;\n                }\n            }\n            for (col = 0; col < maxColumn; col += 1) {\n                if (!isForbidden[col]) {\n                    break;\n                }\n            }\n            if (col < maxColumn) {\n                events[i].position = col;\n            } else {\n                events[i].position = maxColumn++;\n            }\n        }\n\n        if (this.dir === 'rtl') {\n            for (let i = 0; i < len; i += 1) {\n                events[i].position = maxColumn - 1 - events[i].position;\n            }\n        }\n    }\n\n    eventSelected(event: IEvent) {\n        this.onEventSelected.emit(event);\n    }\n\n    setScrollPosition(scrollPosition: number) {\n        this.initScrollPosition = scrollPosition;\n    }\n}\n","import { EventEmitter, TemplateRef } from '@angular/core';\n\nexport interface IEvent {\n    allDay: boolean;\n    endTime: Date;\n    startTime: Date;\n    title: string;\n}\n\nexport interface IRange {\n    startTime: Date;\n    endTime: Date;\n}\n\nexport interface IView {\n}\n\nexport interface IDayView extends IView {\n    allDayEvents: IDisplayAllDayEvent[];\n    rows: IDayViewRow[];\n}\n\nexport interface IDayViewRow {\n    events: IDisplayEvent[];\n    time: Date;\n}\n\nexport interface IMonthView extends IView {\n    dates: IMonthViewRow[];\n    dayHeaders: string[];\n}\n\nexport interface IMonthViewRow {\n    current?: boolean;\n    date: Date;\n    events: IEvent[];\n    hasEvent?: boolean;\n    label: string;\n    secondary: boolean;\n    selected?: boolean;\n    disabled: boolean;\n}\n\nexport interface IWeekView extends IView {\n    dates: IWeekViewDateRow[];\n    rows: IWeekViewRow[][];\n}\n\nexport interface IWeekViewDateRow {\n    current?: boolean;\n    date: Date;\n    events: IDisplayEvent[];\n    hasEvent?: boolean;\n    selected?: boolean;\n    dayHeader: string;\n}\n\nexport interface IWeekViewRow {\n    events: IDisplayEvent[];\n    time: Date;\n}\n\nexport interface IDisplayEvent {\n    endIndex: number;\n    endOffset: number;\n    event: IEvent;\n    startIndex: number;\n    startOffset: number;\n    overlapNumber?: number;\n    position: number;\n}\n\nexport interface IDisplayWeekViewHeader {\n    viewDate: IWeekViewDateRow;\n}\n\nexport interface IDisplayAllDayEvent {\n    event: IEvent;\n}\n\nexport interface ICalendarComponent {\n    currentViewIndex: number;\n    direction: number;\n    eventSource: IEvent[];\n    getRange: { (date:Date): IRange; };\n    getViewData: { (date:Date): IView };\n    mode: CalendarMode;\n    range: IRange;\n    views: IView[];\n    onDataLoaded: { (): void };\n    onRangeChanged: EventEmitter<IRange>;\n}\n\nexport interface ITimeSelected {\n    events: IEvent[];\n    selectedTime: Date;\n    disabled: boolean;\n}\n\nexport interface IMonthViewDisplayEventTemplateContext {\n    view: IView;\n    row: number;\n    col: number;\n}\n\nexport interface IMonthViewEventDetailTemplateContext {\n    selectedDate: ITimeSelected;\n    noEventsLabel: string;\n}\n\nexport interface IWeekViewAllDayEventSectionTemplateContext {\n    day: IWeekViewDateRow,\n    eventTemplate: TemplateRef<IDisplayAllDayEvent>\n}\n\nexport interface IWeekViewNormalEventSectionTemplateContext {\n    tm: IWeekViewRow,\n    eventTemplate: TemplateRef<IDisplayEvent>\n}\n\nexport interface IDayViewAllDayEventSectionTemplateContext {\n    alldayEvents: IDisplayAllDayEvent[],\n    eventTemplate: TemplateRef<IDisplayAllDayEvent>\n}\n\nexport interface IDayViewNormalEventSectionTemplateContext {\n    tm: IDayViewRow,\n    eventTemplate: TemplateRef<IDisplayEvent>\n}\n\nexport interface IDateFormatter {\n    formatMonthViewDay?: { (date:Date): string; };\n    formatMonthViewDayHeader?: { (date:Date): string; };\n    formatMonthViewTitle?: { (date:Date): string; };\n    formatWeekViewDayHeader?: { (date:Date): string; };\n    formatWeekViewTitle?: { (date:Date): string; };\n    formatWeekViewHourColumn?: { (date:Date): string; };\n    formatDayViewTitle?: { (date:Date): string; };\n    formatDayViewHourColumn?: { (date:Date): string; };\n}\n\nexport type CalendarMode = 'day' | 'month' | 'week';\n\nexport type QueryMode = 'local' | 'remote';\n\nexport enum Step {\n    QuarterHour = 15,\n    HalfHour = 30,\n    Hour = 60\n}\n","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef, Inject, LOCALE_ID, NgZone } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CalendarService } from './calendar.service';\nimport SwiperCore from 'swiper';\nimport { IonicSlides } from '@ionic/angular';\nimport { IEvent, CalendarMode, QueryMode, Step, IMonthViewDisplayEventTemplateContext, IMonthViewEventDetailTemplateContext, IDisplayWeekViewHeader, IDisplayAllDayEvent, IDisplayEvent, IWeekViewAllDayEventSectionTemplateContext, IDayViewAllDayEventSectionTemplateContext, IWeekViewNormalEventSectionTemplateContext, IDayViewNormalEventSectionTemplateContext, IDateFormatter, IRange, ITimeSelected } from './calendar.interface';\n\nSwiperCore.use([IonicSlides]);\n\n\n@Component({\n    selector: 'calendar',\n    template: `\n        <ng-template #monthviewDefaultDisplayEventTemplate let-view=\"view\" let-row=\"row\" let-col=\"col\">\n            {{view.dates[row*7+col].label}}\n        </ng-template>\n        <ng-template #monthviewDefaultEventDetailTemplate let-showEventDetail=\"showEventDetail\" let-selectedDate=\"selectedDate\" let-noEventsLabel=\"noEventsLabel\">\n            <ion-list class=\"event-detail-container\" has-bouncing=\"false\" *ngIf=\"showEventDetail\" overflow-scroll=\"false\">\n                <ion-item *ngFor=\"let event of selectedDate?.events\" (click)=\"eventSelected(event)\">\n                        <span *ngIf=\"!event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{event.startTime|date: 'HH:mm'}}\n                            -\n                            {{event.endTime|date: 'HH:mm'}}\n                        </span>\n                    <span *ngIf=\"event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{allDayLabel}}</span>\n                    <span class=\"event-detail\">  |  {{event.title}}</span>\n                </ion-item>\n                <ion-item *ngIf=\"selectedDate?.events.length==0\">\n                    <div class=\"no-events-label\">{{noEventsLabel}}</div>\n                </ion-item>\n            </ion-list>\n        </ng-template>\n        <ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\n            {{ viewDate.dayHeader }}\n        </ng-template>\n        <ng-template #defaultAllDayEventTemplate let-displayEvent=\"displayEvent\">\n            <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\n        </ng-template>\n        <ng-template #defaultNormalEventTemplate let-displayEvent=\"displayEvent\">\n            <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\n        </ng-template>\n        <ng-template #defaultWeekViewAllDayEventSectionTemplate let-day=\"day\" let-eventTemplate=\"eventTemplate\">\n            <div [ngClass]=\"{'calendar-event-wrap': day.events}\" *ngIf=\"day.events\"\n                 [ngStyle]=\"{height: 25*day.events.length+'px'}\">\n                <div *ngFor=\"let displayEvent of day.events\" class=\"calendar-event\" tappable\n                     (click)=\"eventSelected(displayEvent.event)\"\n                     [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\">\n                    <ng-template [ngTemplateOutlet]=\"eventTemplate\"\n                                 [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\n                    </ng-template>\n                </div>\n            </div>\n        </ng-template>\n        <ng-template #defaultDayViewAllDayEventSectionTemplate let-allDayEvents=\"allDayEvents\" let-eventTemplate=\"eventTemplate\">\n            <div *ngFor=\"let displayEvent of allDayEvents; let eventIndex=index\"\n                 class=\"calendar-event\" tappable\n                 (click)=\"eventSelected(displayEvent.event)\"\n                 [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\">\n                <ng-template [ngTemplateOutlet]=\"eventTemplate\"\n                             [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\n                </ng-template>\n            </div>\n        </ng-template>\n        <ng-template #defaultNormalEventSectionTemplate let-tm=\"tm\" let-hourParts=\"hourParts\" let-eventTemplate=\"eventTemplate\">\n            <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\n                <div *ngFor=\"let displayEvent of tm.events\" class=\"calendar-event\" tappable\n                     (click)=\"eventSelected(displayEvent.event)\"\n                     [ngStyle]=\"{top: (37*displayEvent.startOffset/hourParts)+'px',left: 100/displayEvent.overlapNumber*displayEvent.position+'%', width: 100/displayEvent.overlapNumber+'%', height: 37*(displayEvent.endIndex -displayEvent.startIndex - (displayEvent.endOffset + displayEvent.startOffset)/hourParts)+'px'}\">\n                    <ng-template [ngTemplateOutlet]=\"eventTemplate\"\n                                 [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\n                    </ng-template>\n                </div>\n            </div>\n        </ng-template>\n        <ng-template #defaultInactiveAllDayEventSectionTemplate>\n        </ng-template>\n        <ng-template #defaultInactiveNormalEventSectionTemplate>\n        </ng-template>\n\n        <div [ngSwitch]=\"calendarMode\" class=\"{{calendarMode}}view-container\">\n            <monthview *ngSwitchCase=\"'month'\"\n                [formatDay]=\"formatDay\"\n                [formatDayHeader]=\"formatDayHeader\"\n                [formatMonthTitle]=\"formatMonthTitle\"\n                [startingDayMonth]=\"startingDayMonth\"\n                [showEventDetail]=\"showEventDetail\"\n                [noEventsLabel]=\"noEventsLabel\"\n                [autoSelect]=\"autoSelect\"\n                [eventSource]=\"eventSource\"\n                [markDisabled]=\"markDisabled\"\n                [monthviewDisplayEventTemplate]=\"monthviewDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\n                [monthviewInactiveDisplayEventTemplate]=\"monthviewInactiveDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\n                [monthviewEventDetailTemplate]=\"monthviewEventDetailTemplate||monthviewDefaultEventDetailTemplate\"\n                [locale]=\"locale\"\n                [dateFormatter]=\"dateFormatter\"\n                [dir]=\"dir\"\n                [lockSwipeToPrev]=\"lockSwipeToPrev\"\n                [lockSwipeToNext]=\"lockSwipeToNext\"\n                [lockSwipes]=\"lockSwipes\"\n                [sliderOptions]=\"sliderOptions\"\n                (onRangeChanged)=\"rangeChanged($event)\"\n                (onEventSelected)=\"eventSelected($event)\"\n                (onTimeSelected)=\"timeSelected($event)\"\n                (onTitleChanged)=\"titleChanged($event)\">\n            </monthview>\n            <weekview *ngSwitchCase=\"'week'\"\n                [formatWeekTitle]=\"formatWeekTitle\"\n                [formatWeekViewDayHeader]=\"formatWeekViewDayHeader\"\n                [formatHourColumn]=\"formatHourColumn\"\n                [startingDayWeek]=\"startingDayWeek\"\n                [allDayLabel]=\"allDayLabel\"\n                [hourParts]=\"hourParts\"\n                [autoSelect]=\"autoSelect\"\n                [hourSegments]=\"hourSegments\"\n                [eventSource]=\"eventSource\"\n                [markDisabled]=\"markDisabled\"\n                [weekviewHeaderTemplate]=\"weekviewHeaderTemplate||defaultWeekviewHeaderTemplate\"\n                [weekviewAllDayEventTemplate]=\"weekviewAllDayEventTemplate||defaultAllDayEventTemplate\"\n                [weekviewNormalEventTemplate]=\"weekviewNormalEventTemplate||defaultNormalEventTemplate\"\n                [weekviewAllDayEventSectionTemplate]=\"weekviewAllDayEventSectionTemplate||defaultWeekViewAllDayEventSectionTemplate\"\n                [weekviewNormalEventSectionTemplate]=\"weekviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\n                [weekviewInactiveAllDayEventSectionTemplate]=\"weekviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\n                [weekviewInactiveNormalEventSectionTemplate]=\"weekviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\n                [locale]=\"locale\"\n                [dateFormatter]=\"dateFormatter\"\n                [dir]=\"dir\"\n                [scrollToHour]=\"scrollToHour\"\n                [preserveScrollPosition]=\"preserveScrollPosition\"\n                [lockSwipeToPrev]=\"lockSwipeToPrev\"\n                [lockSwipeToNext]=\"lockSwipeToNext\"\n                [lockSwipes]=\"lockSwipes\"\n                [startHour]=\"startHour\"\n                [endHour]=\"endHour\"\n                [sliderOptions]=\"sliderOptions\"\n                (onRangeChanged)=\"rangeChanged($event)\"\n                (onEventSelected)=\"eventSelected($event)\"\n                (onDayHeaderSelected)=\"daySelected($event)\"\n                (onTimeSelected)=\"timeSelected($event)\"\n                (onTitleChanged)=\"titleChanged($event)\">\n            </weekview>\n            <dayview *ngSwitchCase=\"'day'\"\n                [formatDayTitle]=\"formatDayTitle\"\n                [formatHourColumn]=\"formatHourColumn\"\n                [allDayLabel]=\"allDayLabel\"\n                [hourParts]=\"hourParts\"\n                [hourSegments]=\"hourSegments\"\n                [eventSource]=\"eventSource\"\n                [markDisabled]=\"markDisabled\"\n                [dayviewAllDayEventTemplate]=\"dayviewAllDayEventTemplate||defaultAllDayEventTemplate\"\n                [dayviewNormalEventTemplate]=\"dayviewNormalEventTemplate||defaultNormalEventTemplate\"\n                [dayviewAllDayEventSectionTemplate]=\"dayviewAllDayEventSectionTemplate||defaultDayViewAllDayEventSectionTemplate\"\n                [dayviewNormalEventSectionTemplate]=\"dayviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\n                [dayviewInactiveAllDayEventSectionTemplate]=\"dayviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\n                [dayviewInactiveNormalEventSectionTemplate]=\"dayviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\n                [locale]=\"locale\"\n                [dateFormatter]=\"dateFormatter\"\n                [dir]=\"dir\"\n                [scrollToHour]=\"scrollToHour\"\n                [preserveScrollPosition]=\"preserveScrollPosition\"\n                [lockSwipeToPrev]=\"lockSwipeToPrev\"\n                [lockSwipeToNext]=\"lockSwipeToNext\"\n                [lockSwipes]=\"lockSwipes\"\n                [startHour]=\"startHour\"\n                [endHour]=\"endHour\"\n                [sliderOptions]=\"sliderOptions\"\n                (onRangeChanged)=\"rangeChanged($event)\"\n                (onEventSelected)=\"eventSelected($event)\"\n                (onTimeSelected)=\"timeSelected($event)\"\n                (onTitleChanged)=\"titleChanged($event)\">\n            </dayview>\n        </div>\n    `,\n    styles: [`\n        :host > div { height: 100%; }\n\n        .event-detail-container {\n          border-top: 2px darkgrey solid;\n        }\n\n        .no-events-label {\n          font-weight: bold;\n          color: darkgrey;\n          text-align: center;\n        }\n\n        .event-detail {\n          cursor: pointer;\n          white-space: nowrap;\n          text-overflow: ellipsis;\n        }\n\n        .monthview-eventdetail-timecolumn {\n          width: 110px;\n          overflow: hidden;\n        }\n\n        .calendar-event-inner {\n          overflow: hidden;\n          background-color: #3a87ad;\n          color: white;\n          height: 100%;\n          width: 100%;\n          padding: 2px;\n          line-height: 15px;\n          text-align: initial;\n        }\n\n        @media (max-width: 750px) {\n          .calendar-event-inner {\n            font-size: 12px;\n          }\n        }\n    `],\n    providers: [CalendarService]\n})\nexport class CalendarComponent implements OnInit {\n    @Input()\n    get currentDate():Date {\n        return this._currentDate;\n    }\n\n    set currentDate(val:Date) {\n        if (!val) {\n            val = new Date();\n        }\n\n        this._currentDate = val;\n        this.calendarService.setCurrentDate(val, true);\n        this.onCurrentDateChanged.emit(this._currentDate);\n    }\n\n    @Input() eventSource:IEvent[] = [];\n    @Input() calendarMode:CalendarMode = 'month';\n    @Input() formatDay:string = 'd';\n    @Input() formatDayHeader:string = 'EEE';\n    @Input() formatDayTitle:string = 'MMMM dd, yyyy';\n    @Input() formatWeekTitle:string = 'MMMM yyyy, \\'Week\\' w';\n    @Input() formatMonthTitle:string = 'MMMM yyyy';\n    @Input() formatWeekViewDayHeader:string = 'EEE d';\n    @Input() formatHourColumn:string = 'ha';\n    @Input() showEventDetail:boolean = true;\n    @Input() startingDayMonth:number = 0;\n    @Input() startingDayWeek:number = 0;\n    @Input() allDayLabel:string = 'all day';\n    @Input() noEventsLabel:string = 'No Events';\n    @Input() queryMode:QueryMode = 'local';\n    @Input() step:Step = Step.Hour;\n    @Input() timeInterval:number = 60;\n    @Input() autoSelect:boolean = true;\n    @Input() markDisabled?:(date:Date) => boolean;\n    @Input() monthviewDisplayEventTemplate?:TemplateRef<IMonthViewDisplayEventTemplateContext>;\n    @Input() monthviewInactiveDisplayEventTemplate?:TemplateRef<IMonthViewDisplayEventTemplateContext>;\n    @Input() monthviewEventDetailTemplate?:TemplateRef<IMonthViewEventDetailTemplateContext>;\n    @Input() weekviewHeaderTemplate?:TemplateRef<IDisplayWeekViewHeader>;\n    @Input() weekviewAllDayEventTemplate?:TemplateRef<IDisplayAllDayEvent>;\n    @Input() weekviewNormalEventTemplate?:TemplateRef<IDisplayEvent>;\n    @Input() dayviewAllDayEventTemplate?:TemplateRef<IDisplayAllDayEvent>;\n    @Input() dayviewNormalEventTemplate?:TemplateRef<IDisplayEvent>;\n    @Input() weekviewAllDayEventSectionTemplate?:TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n    @Input() weekviewNormalEventSectionTemplate?:TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n    @Input() dayviewAllDayEventSectionTemplate?:TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n    @Input() dayviewNormalEventSectionTemplate?:TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n    @Input() weekviewInactiveAllDayEventSectionTemplate?:TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n    @Input() weekviewInactiveNormalEventSectionTemplate?:TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n    @Input() dayviewInactiveAllDayEventSectionTemplate?:TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n    @Input() dayviewInactiveNormalEventSectionTemplate?:TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n    @Input() dateFormatter?:IDateFormatter;\n    @Input() dir:string = \"\";\n    @Input() scrollToHour:number = 0;\n    @Input() preserveScrollPosition:boolean = false;\n    @Input() lockSwipeToPrev:boolean = false;\n    @Input() lockSwipeToNext:boolean = false;\n    @Input() lockSwipes:boolean = false;\n    @Input() locale:string = \"\";\n    @Input() startHour:number = 0;\n    @Input() endHour:number = 24;\n    @Input() sliderOptions:any;\n\n    @Output() onCurrentDateChanged = new EventEmitter<Date>();\n    @Output() onRangeChanged = new EventEmitter<IRange>();\n    @Output() onEventSelected = new EventEmitter<IEvent>();\n    @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\n    @Output() onDayHeaderSelected = new EventEmitter<ITimeSelected>();\n    @Output() onTitleChanged = new EventEmitter<string>(true);\n\n    private _currentDate:Date =  new Date();\n    public hourParts = 1;\n    public hourSegments = 1;\n    private currentDateChangedFromChildrenSubscription?:Subscription;\n\n    constructor(private calendarService:CalendarService, @Inject(LOCALE_ID) private appLocale:string, private ngZone: NgZone) {\n        this.locale = appLocale;\n    }\n\n    ngOnInit() {\n        if (this.autoSelect) {\n            if (this.autoSelect.toString() === 'false') {\n                this.autoSelect = false;\n            } else {\n                this.autoSelect = true;\n            }\n        }\n        this.hourSegments = 60 / this.timeInterval;\n        this.hourParts = 60 / this.step;\n        if(this.hourParts <= this.hourSegments) {\n            this.hourParts = 1;\n        } else {\n            this.hourParts = this.hourParts / this.hourSegments;\n        }\n        this.startHour = parseInt(this.startHour.toString());\n        this.endHour = parseInt(this.endHour.toString());\n        this.calendarService.queryMode = this.queryMode;\n\n        this.currentDateChangedFromChildrenSubscription = this.calendarService.currentDateChangedFromChildren$.subscribe(currentDate => {\n            this._currentDate = currentDate;\n            this.onCurrentDateChanged.emit(currentDate);\n        });\n    }\n\n    ngOnDestroy() {\n        if (this.currentDateChangedFromChildrenSubscription) {\n            this.currentDateChangedFromChildrenSubscription.unsubscribe();\n            this.currentDateChangedFromChildrenSubscription = undefined;\n        }\n    }\n\n    rangeChanged(range:IRange) {\n        this.onRangeChanged.emit(range);\n    }\n\n    eventSelected(event:IEvent) {\n        this.onEventSelected.emit(event);\n    }\n\n    timeSelected(timeSelected:ITimeSelected) {\n        this.onTimeSelected.emit(timeSelected);\n    }\n\n    daySelected(daySelected:ITimeSelected) {\n        this.onDayHeaderSelected.emit(daySelected);\n    }\n\n    titleChanged(title:string) {\n        this.onTitleChanged.emit(title);\n    }\n\n    loadEvents() {\n        this.calendarService.loadEvents();\n    }\n\n    slideNext() {\n        this.calendarService.slide(1);\n    }\n\n    slidePrev() {\n        this.calendarService.slide(-1);\n    }\n\n    update() {\n        this.calendarService.update();\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IonicModule } from '@ionic/angular';\nimport { MonthViewComponent } from './monthview';\nimport { WeekViewComponent } from './weekview';\nimport { DayViewComponent } from './dayview';\nimport { CalendarComponent } from './calendar';\nimport { initPositionScrollComponent } from './init-position-scroll';\nimport { SwiperModule } from 'swiper/angular';\n\n@NgModule({\n    declarations: [\n        MonthViewComponent, WeekViewComponent, DayViewComponent, CalendarComponent, initPositionScrollComponent\n    ],\n    imports: [IonicModule, CommonModule, SwiperModule],\n    exports: [CalendarComponent]\n})\nexport class NgCalendarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CalendarService","i4.initPositionScrollComponent","i2","i3","i4.MonthViewComponent","i5.WeekViewComponent","i6.DayViewComponent"],"mappings":"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"}