@pieninck/ionic2-calendar 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2109,6 +2109,12 @@ class CalendarComponent {
2109
2109
  titleChanged(title) {
2110
2110
  this.onTitleChanged.emit(title);
2111
2111
  }
2112
+ slideNext() {
2113
+ this.calendarService.slide(1);
2114
+ }
2115
+ slidePrev() {
2116
+ this.calendarService.slide(-1);
2117
+ }
2112
2118
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: CalendarComponent, deps: [{ token: CalendarService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component }); }
2113
2119
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: CalendarComponent, isStandalone: true, selector: "calendar", inputs: { currentDate: "currentDate", eventSource: "eventSource", calendarMode: "calendarMode", formatDay: "formatDay", formatDayHeader: "formatDayHeader", formatDayTitle: "formatDayTitle", formatWeekTitle: "formatWeekTitle", formatMonthTitle: "formatMonthTitle", formatWeekViewDayHeader: "formatWeekViewDayHeader", formatHourColumn: "formatHourColumn", showEventDetail: "showEventDetail", startingDayMonth: "startingDayMonth", startingDayWeek: "startingDayWeek", allDayLabel: "allDayLabel", noEventsLabel: "noEventsLabel", queryMode: "queryMode", step: "step", timeInterval: "timeInterval", autoSelect: "autoSelect", markDisabled: "markDisabled", monthviewDisplayEventTemplate: "monthviewDisplayEventTemplate", monthviewInactiveDisplayEventTemplate: "monthviewInactiveDisplayEventTemplate", monthviewEventDetailTemplate: "monthviewEventDetailTemplate", weekviewHeaderTemplate: "weekviewHeaderTemplate", weekviewAllDayEventTemplate: "weekviewAllDayEventTemplate", weekviewNormalEventTemplate: "weekviewNormalEventTemplate", dayviewCategoryItemTemplate: "dayviewCategoryItemTemplate", dayviewAllDayEventTemplate: "dayviewAllDayEventTemplate", dayviewNormalEventTemplate: "dayviewNormalEventTemplate", weekviewAllDayEventSectionTemplate: "weekviewAllDayEventSectionTemplate", weekviewNormalEventSectionTemplate: "weekviewNormalEventSectionTemplate", dayviewAllDayEventSectionTemplate: "dayviewAllDayEventSectionTemplate", dayviewNormalEventSectionTemplate: "dayviewNormalEventSectionTemplate", weekviewInactiveAllDayEventSectionTemplate: "weekviewInactiveAllDayEventSectionTemplate", weekviewInactiveNormalEventSectionTemplate: "weekviewInactiveNormalEventSectionTemplate", dayviewInactiveAllDayEventSectionTemplate: "dayviewInactiveAllDayEventSectionTemplate", dayviewInactiveNormalEventSectionTemplate: "dayviewInactiveNormalEventSectionTemplate", dateFormatter: "dateFormatter", dir: "dir", scrollToHour: "scrollToHour", preserveScrollPosition: "preserveScrollPosition", lockSwipeToPrev: "lockSwipeToPrev", lockSwipeToNext: "lockSwipeToNext", lockSwipes: "lockSwipes", locale: "locale", startHour: "startHour", endHour: "endHour", sliderOptions: "sliderOptions", dayviewCategorySource: "dayviewCategorySource", dayviewShowCategoryView: "dayviewShowCategoryView" }, outputs: { onCurrentDateChanged: "onCurrentDateChanged", onRangeChanged: "onRangeChanged", onEventSelected: "onEventSelected", onTimeSelected: "onTimeSelected", onDayHeaderSelected: "onDayHeaderSelected", onTitleChanged: "onTitleChanged" }, providers: [CalendarService], ngImport: i0, template: "<ng-template\n #monthviewDefaultDisplayEventTemplate\n let-view=\"view\"\n let-row=\"row\"\n let-col=\"col\"\n>\n {{view.dates[row*7+col].label}}\n</ng-template>\n<ng-template\n #monthviewDefaultEventDetailTemplate\n let-showEventDetail=\"showEventDetail\"\n let-selectedDate=\"selectedDate\"\n let-noEventsLabel=\"noEventsLabel\"\n>\n @if (showEventDetail) {\n <ion-list\n class=\"event-detail-container\"\n has-bouncing=\"false\"\n overflow-scroll=\"false\"\n >\n @for (event of selectedDate?.events; track event) {\n <ion-item (click)=\"eventSelected(event)\">\n @if (!event.allDay) {\n <span class=\"monthview-eventdetail-timecolumn\"\n >{{event.startTime|date: 'HH:mm'}} - {{event.endTime|date:\n 'HH:mm'}}\n </span>\n } @if (event.allDay) {\n <span class=\"monthview-eventdetail-timecolumn\"\n >{{allDayLabel}}</span\n >\n }\n <span class=\"event-detail\"> | {{event.title}} </span>\n @if (event.categoryId) {\n <span class=\"event-detail event-category-detail\"\n >[{{event.categoryName}}]</span\n >\n }\n </ion-item>\n } @if (selectedDate?.events.length==0) {\n <ion-item>\n <div class=\"no-events-label\">{{noEventsLabel}}</div>\n </ion-item>\n }\n </ion-list>\n }\n</ng-template>\n<ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\n {{ viewDate.dayHeader }}\n</ng-template>\n<ng-template #defaultCategoryItemTemplate let-category=\"category\">\n {{ category }}\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\n #defaultWeekViewAllDayEventSectionTemplate\n let-day=\"day\"\n let-eventTemplate=\"eventTemplate\"\n>\n @if (day.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': day.events}\"\n [ngStyle]=\"{height: 25*day.events.length+'px'}\"\n >\n @for (displayEvent of day.events; track displayEvent) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template\n #defaultDayViewAllDayEventSectionTemplate\n let-allDayEvents=\"allDayEvents\"\n let-eventTemplate=\"eventTemplate\"\n>\n @for (displayEvent of allDayEvents; track displayEvent; let eventIndex =\n $index) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n</ng-template>\n<ng-template\n #defaultNormalEventSectionTemplate\n let-tm=\"tm\"\n let-hourParts=\"hourParts\"\n let-eventTemplate=\"eventTemplate\"\n>\n @if (tm.events) {\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\">\n @for (displayEvent of tm.events; track displayEvent) {\n <div\n class=\"calendar-event\"\n 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 >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #defaultInactiveAllDayEventSectionTemplate> </ng-template>\n<ng-template #defaultInactiveNormalEventSectionTemplate> </ng-template>\n\n<div class=\"{{calendarMode}}view-container\">\n @switch (calendarMode) { @case ('month') {\n <monthview\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 >\n </monthview>\n } @case ('week') {\n <weekview\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 >\n </weekview>\n } @case ('day') {\n <dayview\n [formatDayTitle]=\"formatDayTitle\"\n [formatHourColumn]=\"formatHourColumn\"\n [allDayLabel]=\"allDayLabel\"\n [hourParts]=\"hourParts\"\n [hourSegments]=\"hourSegments\"\n [eventSource]=\"eventSource\"\n [markDisabled]=\"markDisabled\"\n [dayviewCategoryItemTemplate]=\"dayviewCategoryItemTemplate||defaultCategoryItemTemplate\"\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 [dayviewCategorySource]=\"dayviewCategorySource\"\n [dayviewShowCategoryView]=\"dayviewShowCategoryView\"\n (onEventSelected)=\"eventSelected($event)\"\n (onTimeSelected)=\"timeSelected($event)\"\n (onTitleChanged)=\"titleChanged($event)\"\n >\n </dayview>\n } }\n</div>\n", styles: [":host>div{height:100%}.event-detail-container{border-top:2px darkgrey solid}.no-events-label{font-weight:700;color:#a9a9a9;text-align:center}.event-detail{cursor:pointer;white-space:nowrap;text-overflow:ellipsis}.event-category-detail{margin-left:10px}.monthview-eventdetail-timecolumn{width:110px;overflow:hidden}.calendar-event-inner{overflow:hidden;background-color:#3a87ad;color:#fff;height:100%;width:100%;padding:2px;line-height:15px;text-align:initial}@media(max-width:750px){.calendar-event-inner{font-size:12px}}\n"], dependencies: [{ kind: "ngmodule", type: IonicModule }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MonthViewComponent, selector: "monthview", inputs: ["monthviewDisplayEventTemplate", "monthviewInactiveDisplayEventTemplate", "monthviewEventDetailTemplate", "formatDay", "formatDayHeader", "formatMonthTitle", "eventSource", "startingDayMonth", "showEventDetail", "noEventsLabel", "autoSelect", "markDisabled", "locale", "dateFormatter", "dir", "lockSwipeToPrev", "lockSwipeToNext", "lockSwipes", "sliderOptions"], outputs: ["onRangeChanged", "onEventSelected", "onTimeSelected", "onTitleChanged"] }, { kind: "component", type: WeekViewComponent, selector: "weekview", inputs: ["weekviewHeaderTemplate", "weekviewAllDayEventTemplate", "weekviewNormalEventTemplate", "weekviewAllDayEventSectionTemplate", "weekviewNormalEventSectionTemplate", "weekviewInactiveAllDayEventSectionTemplate", "weekviewInactiveNormalEventSectionTemplate", "formatWeekTitle", "formatWeekViewDayHeader", "formatHourColumn", "startingDayWeek", "allDayLabel", "hourParts", "eventSource", "autoSelect", "markDisabled", "locale", "dateFormatter", "dir", "scrollToHour", "preserveScrollPosition", "lockSwipeToPrev", "lockSwipeToNext", "lockSwipes", "startHour", "endHour", "sliderOptions", "hourSegments"], outputs: ["onRangeChanged", "onEventSelected", "onTimeSelected", "onDayHeaderSelected", "onTitleChanged"] }, { kind: "component", type: DayViewComponent, selector: "dayview", inputs: ["dayviewCategoryItemTemplate", "dayviewAllDayEventTemplate", "dayviewNormalEventTemplate", "dayviewAllDayEventSectionTemplate", "dayviewNormalEventSectionTemplate", "dayviewInactiveAllDayEventSectionTemplate", "dayviewInactiveNormalEventSectionTemplate", "formatHourColumn", "formatDayTitle", "allDayLabel", "hourParts", "eventSource", "markDisabled", "locale", "dateFormatter", "dir", "scrollToHour", "preserveScrollPosition", "lockSwipeToPrev", "lockSwipeToNext", "lockSwipes", "startHour", "endHour", "sliderOptions", "hourSegments", "dayviewCategorySource", "dayviewShowCategoryView"], outputs: ["onRangeChanged", "onEventSelected", "onTimeSelected", "onTitleChanged"] }, { kind: "pipe", type: DatePipe, name: "date" }] }); }
2114
2120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"pieninck-ionic2-calendar.mjs","sources":["../../src/calendar.service.ts","../../src/calendar.interface.ts","../../src/monthview.ts","../../src/monthview.html","../../src/init-position-scroll.ts","../../src/weekview.ts","../../src/weekview.html","../../src/dayview.ts","../../src/dayview.html","../../src/calendar.ts","../../src/calendar.html","../../src/pieninck-ionic2-calendar.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\n\nimport {\n ICalendarComponent,\n IView,\n CalendarMode,\n QueryMode,\n} 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 readonly currentDateChangedFromParent = new Subject<Date>();\n private readonly currentDateChangedFromChildren = new Subject<Date>();\n private readonly eventSourceChanged = new Subject<void>();\n private readonly slideChanged = new Subject<number>();\n private readonly slideUpdated = new Subject<void>();\n\n constructor() {\n this.currentDateChangedFromParent$ =\n this.currentDateChangedFromParent.asObservable();\n this.currentDateChangedFromChildren$ =\n 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),\n rangeEnd = new Date(component.range.endTime);\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): {\n years: number;\n months: number;\n days: number;\n } {\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 (\n firstDayInNextMonth.getTime() <= calculateCalendarDate.getTime()\n ) {\n calculateCalendarDate = new Date(\n firstDayInNextMonth.getTime() - 24 * 60 * 60 * 1000,\n );\n }\n }\n return calculateCalendarDate;\n }\n\n getAdjacentViewStartTime(\n component: ICalendarComponent,\n direction: number,\n ): Date {\n let adjacentCalendarDate = this.getAdjacentCalendarDate(\n component.mode,\n direction,\n );\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] =\n component.getViewData(currentViewStartDate);\n } else if (component.direction === -1) {\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n } else if (component.views) {\n currentViewStartDate = component.range.startTime;\n component.views[currentViewIndex] =\n component.getViewData(currentViewStartDate);\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\n toUpdateViewIndex = (currentViewIndex + 1) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n } else {\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 }\n }\n\n slide(direction: number) {\n this.slideChanged.next(direction);\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 category?: string;\n}\n\nexport interface IRange {\n startTime: Date;\n endTime: Date;\n}\n\nexport interface IView {}\n\nexport interface IDayView extends IView {\n allDayEvents: IDisplayAllDayEvent[];\n rows: IDayViewRow[];\n categorizedAllDayEventsMap: Map<string, IDisplayAllDayEvent[]>;\n}\n\n/**\n * should be renamed to IDayViewCell since row could be vertically sliced into pieces of categories\n */\nexport interface IDayViewRow {\n events: IDisplayEvent[];\n eventsGroupByCategory?: Map<string, 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 category?: string;\n}\n\nexport interface IMonthViewDisplayEventTemplateContext {\n view?: IView;\n row?: number;\n col?: number;\n showEventDetail?: boolean;\n selectedDate?: IMonthViewRow;\n noEventsLabel?: string;\n}\n\nexport interface IMonthViewEventDetailTemplateContext {\n showEventDetail: boolean;\n selectedDate?: IMonthViewRow;\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 hourParts?: number;\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 hourParts?: number;\n category?: string;\n}\n\nexport interface IDayViewCategoryItemTemplateContext {\n category: string;\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 Hour = 60,\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 ElementRef,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { DatePipe, NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\n\nimport {\n ICalendarComponent,\n IEvent,\n IMonthView,\n IMonthViewRow,\n ITimeSelected,\n IRange,\n CalendarMode,\n IDateFormatter,\n IMonthViewDisplayEventTemplateContext,\n IMonthViewEventDetailTemplateContext,\n} from \"./calendar.interface\";\nimport { CalendarService } from \"./calendar.service\";\n\n@Component({\n selector: \"monthview\",\n templateUrl: \"./monthview.html\",\n styleUrls: [\"./monthview.css\"],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgTemplateOutlet],\n})\nexport class MonthViewComponent\n implements ICalendarComponent, OnInit, OnDestroy, OnChanges, AfterViewInit\n{\n constructor(private readonly calendarService: CalendarService) {}\n\n private slider!: Swiper;\n @ViewChild(\"monthViewSwiper\") swiperElement?: ElementRef;\n\n @Input()\n monthviewDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewInactiveDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewEventDetailTemplate!: TemplateRef<IMonthViewEventDetailTemplateContext>;\n\n @Input() formatDay?: string;\n @Input() formatDayHeader?: string;\n @Input() formatMonthTitle?: string;\n @Input() eventSource!: IEvent[];\n @Input() startingDayMonth!: number;\n @Input() showEventDetail = true;\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 = false;\n @Input() lockSwipeToNext?: boolean = false;\n @Input() lockSwipes?: boolean = false;\n @Input() sliderOptions?: SwiperOptions;\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\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);\n let i = 0;\n while (i < n) {\n dates[i++] = new Date(current);\n current.setDate(current.getDate() + 1);\n }\n return dates;\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n if (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?.formatMonthViewDayHeader) {\n this.formatDayHeaderLabel =\n 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?.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 =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.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?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToNext) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.allowTouchMove = !lockSwipes.currentValue;\n }\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir == \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n }\n onSlideChanged(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\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(\n this.mode,\n direction,\n );\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 ? 0 : 1)) % 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 difference = this.startingDayMonth - firstDayOfMonth.getDay(),\n numDisplayedFromPreviousMonth =\n difference > 0 ? 7 - difference : -difference,\n startDate = new Date(firstDayOfMonth);\n\n if (numDisplayedFromPreviousMonth > 0) {\n startDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n const endDate = new Date(startDate);\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(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\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, eventUTCEndTime: number;\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime\n ) {\n continue;\n }\n\n let timeDifferenceStart: number, timeDifferenceEnd: number;\n\n if (eventUTCStartTime < utcStartTime) {\n timeDifferenceStart = 0;\n } else {\n timeDifferenceStart =\n (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(\n this.range.startTime,\n this.views[this.currentViewIndex],\n );\n this.calendarService.rangeChanged(this);\n }\n\n getTitle(): string {\n const currentViewStartDate = this.range.startTime,\n date = currentViewStartDate.getDate(),\n month =\n (currentViewStartDate.getMonth() + (date === 1 ? 0 : 1)) % 12,\n year =\n currentViewStartDate.getFullYear() +\n (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(\n (Date.UTC(\n selectedDate.getFullYear(),\n selectedDate.getMonth(),\n selectedDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\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({\n selectedTime: selectedDate,\n events,\n disabled: viewDate.disabled,\n });\n }\n\n slideView(direction: number) {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.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(\n (Date.UTC(\n currentCalendarDate.getFullYear(),\n currentCalendarDate.getMonth(),\n currentCalendarDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n ),\n currentDayDifference = Math.round(\n (Date.UTC(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\n\n for (let r = 0; r < 42; r += 1) {\n view.dates[r].selected = false;\n }\n\n if (\n selectedDayDifference >= 0 &&\n selectedDayDifference < 42 &&\n !view.dates[selectedDayDifference].disabled &&\n (this.autoSelect || this.moveOnSelected)\n ) {\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","<div class=\"swiper monthview-swiper\" #monthViewSwiper>\n <div class=\"swiper-wrapper\">\n <div class=\"swiper-slide\">\n @if (0===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[0].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[0].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[0].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (0!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[0].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n <div class=\"swiper-slide\">\n @if (1===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[1].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[1].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[1].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (1!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[1].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n <div class=\"swiper-slide\">\n @if (2===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[2].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[2].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[2].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (2!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[2].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"monthviewEventDetailTemplate\"\n [ngTemplateOutletContext]=\"{showEventDetail:showEventDetail, selectedDate: selectedDate, noEventsLabel: noEventsLabel}\"\n >\n </ng-template>\n</div>\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 ChangeDetectionStrategy,\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 `\n .scroll-content {\n overflow-y: auto;\n overflow-x: hidden;\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class initPositionScrollComponent\n implements OnChanges, AfterViewInit, OnDestroy\n{\n @Input() initPosition!: number;\n @Input() emitEvent?: boolean;\n @Output() onScroll = new EventEmitter<number>();\n\n private readonly element: ElementRef;\n private scrollContent!: HTMLElement;\n private handler!: () => void;\n private listenerAttached: boolean = false;\n\n constructor(\n el: ElementRef,\n private readonly ngZone: NgZone,\n ) {\n this.element = el;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n let initPosition = changes[\"initPosition\"];\n if (\n initPosition?.currentValue !== undefined &&\n this.scrollContent &&\n initPosition.currentValue != this.scrollContent.scrollTop\n ) {\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 =\n 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, NgClass, NgTemplateOutlet } 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 OnDestroy,\n AfterViewInit,\n ViewChild,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\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\";\nimport { initPositionScrollComponent } from \"./init-position-scroll\";\n\n@Component({\n selector: \"weekview\",\n templateUrl: \"./weekview.html\",\n styleUrls: [\"./weekview.css\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgTemplateOutlet, initPositionScrollComponent],\n})\nexport class WeekViewComponent\n implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit\n{\n constructor(\n private readonly calendarService: CalendarService,\n private readonly elm: ElementRef,\n ) {}\n\n private slider!: Swiper;\n @ViewChild(\"weekViewSwiper\") swiperElement?: ElementRef;\n\n @HostBinding(\"class.weekview\") class = true;\n\n @Input() weekviewHeaderTemplate!: TemplateRef<IDisplayWeekViewHeader>;\n @Input() weekviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\n @Input() weekviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\n @Input()\n weekviewAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n weekviewInactiveAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n 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?: SwiperOptions;\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 readonly sliderIndexList = [0, 1, 2];\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 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(\n startTime: Date,\n startHour: number,\n endHour: number,\n timeInterval: number,\n ): IWeekViewRow[][] {\n const times: IWeekViewRow[][] = [],\n currentHour = 0,\n currentDate = startTime.getDate();\n let hourStep, 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);\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);\n let i = 0;\n while (i < n) {\n dates[i++] = {\n date: new Date(current),\n events: [],\n dayHeader: \"\",\n };\n current.setDate(current.getDate() + 1);\n }\n return dates;\n }\n\n private static compareEventByStartOffset(\n eventA: IDisplayEvent,\n eventB: IDisplayEvent,\n ): number {\n return eventA.startOffset - eventB.startOffset;\n }\n\n private static calculateWidth(\n orderedEvents: IDisplayEvent[],\n size: number,\n hourParts: number,\n ) {\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 =\n event.startIndex * hourParts + event.startOffset;\n while (\n index <\n event.endIndex * hourParts - event.endOffset\n ) {\n if (!cells[index].calculated) {\n cells[index].calculated = true;\n if (cells[index].events) {\n const eventCountInCell =\n cells[index].events.length;\n for (let j = 0; j < eventCountInCell; j += 1) {\n const currentEventInCell =\n cells[index].events[j];\n if (!currentEventInCell.overlapNumber) {\n currentEventInCell.overlapNumber =\n overlapNumber;\n eventQueue.push(currentEventInCell);\n }\n }\n }\n }\n index += 1;\n }\n }\n }\n i += 1;\n }\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n if (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 (\n datePipe.transform(date, this.formatWeekViewDayHeader) || \"\"\n );\n };\n }\n\n if (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?.formatWeekViewHourColumn) {\n this.formatHourColumnLabel =\n 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 =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.update();\n });\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir === \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n\n if (this.scrollToHour > 0) {\n const hourColumns = this.elm.nativeElement\n .querySelector(\".weekview-normal-event-container\")\n .querySelectorAll(\".calendar-hour-column\");\n const me = this;\n setTimeout(() => {\n me.initScrollPosition =\n 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 (\n (changes[\"startHour\"] || changes[\"endHour\"]) &&\n (!changes[\"startHour\"].isFirstChange() ||\n !changes[\"endHour\"].isFirstChange())\n ) {\n this.views = [];\n this.hourRange =\n (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?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.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(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\n }\n\n move(direction: number) {\n if (direction === 0) {\n return;\n }\n this.direction = direction;\n const adjacent = this.calendarService.getAdjacentCalendarDate(\n this.mode,\n direction,\n );\n this.calendarService.setCurrentDate(adjacent);\n this.refreshView();\n this.direction = 0;\n }\n\n private getHourColumnLabels(): string[] {\n const hourColumnLabels: string[] = [];\n for (\n let hour = 0, length = this.views[0].rows.length;\n hour < length;\n hour += 1\n ) {\n // handle edge case for DST\n if (\n hour === 0 &&\n this.views[0].rows[hour][0].time.getHours() !== this.startHour\n ) {\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(\n this.formatHourColumnLabel(\n this.views[0].rows[hour][0].time,\n ),\n );\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(\n startTime,\n this.startHour,\n this.endHour,\n this.hourSegments,\n ),\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(\n year,\n month,\n date - difference,\n 12,\n 0,\n 0,\n ),\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(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\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, eventUTCEndTime: number;\n\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime ||\n eventStartTime >= eventEndTime\n ) {\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(\n (eventUTCStartTime - utcStartTime) / oneDay,\n );\n }\n\n let allDayEndIndex: number;\n if (eventUTCEndTime >= utcEndTime) {\n allDayEndIndex = Math.round(\n (utcEndTime - utcStartTime) / oneDay,\n );\n } else {\n allDayEndIndex = Math.round(\n (eventUTCEndTime - utcStartTime) / oneDay,\n );\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 =\n ((eventUTCStartTime - utcStartTime) / oneHour) *\n this.hourSegments +\n (eventStartTime.getHours() +\n eventStartTime.getMinutes() / 60) *\n this.hourSegments;\n }\n\n let timeDifferenceEnd: number;\n if (eventUTCEndTime > utcEndTime) {\n timeDifferenceEnd =\n ((utcEndTime - utcStartTime) / oneHour) *\n this.hourSegments;\n } else {\n timeDifferenceEnd =\n ((eventUTCEndTime - oneDay - utcStartTime) / oneHour) *\n this.hourSegments +\n (eventEndTime.getHours() +\n eventEndTime.getMinutes() / 60) *\n 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 = Math.floor(\n (timeDifferenceStart - startIndex) * this.hourParts,\n );\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(\n (endIndex - timeDifferenceEnd) *\n this.hourParts,\n );\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(\n WeekViewComponent.compareEventByStartOffset,\n );\n orderedEvents = orderedEvents.concat(\n rows[hour][day].events,\n );\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(\n dates[day].events,\n );\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(\n this.range.startTime,\n this.views[this.currentViewIndex],\n );\n this.calendarService.rangeChanged(this);\n }\n\n getTitle(): string {\n const firstDayOfWeek = new Date(this.range.startTime);\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 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(\n orderedEvents,\n this.hourRange,\n this.hourParts,\n );\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 (\n event1.startIndex > event2.startIndex ||\n (event1.startIndex === event2.startIndex &&\n event1.startOffset > event2.startOffset)\n ) {\n earlyEvent = event2;\n lateEvent = event1;\n }\n\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\n return false;\n } else {\n return !(\n earlyEvent.endIndex - lateEvent.startIndex === 1 &&\n earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts\n );\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(\n (Date.UTC(\n currentCalendarDate.getFullYear(),\n currentCalendarDate.getMonth(),\n currentCalendarDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n ),\n currentDayDifference = Math.floor(\n (Date.UTC(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\n\n for (let r = 0; r < 7; r += 1) {\n view.dates[r].selected = false;\n }\n\n if (\n selectedDayDifference >= 0 &&\n selectedDayDifference < 7 &&\n this.autoSelect\n ) {\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(\n (Date.UTC(\n selectedDate.getFullYear(),\n selectedDate.getMonth(),\n selectedDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\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({\n selectedTime: selectedDate,\n events: viewDate.events.map((e) => e.event),\n disabled,\n });\n }\n\n setScrollPosition(scrollPosition: number) {\n this.initScrollPosition = scrollPosition;\n }\n}\n","<div class=\"swiper weekview-swiper\" #weekViewSwiper>\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\n @for (sliderIndex of sliderIndexList; track sliderIndex) {\n <div class=\"swiper-slide slide-container weekview-slide-container\">\n <table class=\"table table-bordered table-fixed weekview-header\">\n <thead>\n <tr>\n <th class=\"calendar-hour-column\"></th>\n @for (date of views[sliderIndex].dates; track date) {\n <th\n class=\"weekview-header text-center\"\n [ngClass]=\"getHighlightClass(date)\"\n (click)=\"daySelected(date)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\n [ngTemplateOutletContext]=\"{viewDate:date}\"\n >\n </ng-template>\n </th>\n }\n </tr>\n </thead>\n </table>\n @if (sliderIndex===currentViewIndex) {\n <div>\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\n class=\"table table-fixed weekview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (day of views[sliderIndex].dates; track\n day) {\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <init-position-scroll\n class=\"weekview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed weekview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let\n i = $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n @for (tm of row; track tm) {\n <td\n class=\"calendar-cell\"\n tappable\n (click)=\"select(tm.time, tm.events)\"\n >\n @if (tm.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': tm.events}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\"\n >\n </ng-template>\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n </div>\n } @if (sliderIndex!==currentViewIndex) {\n <div>\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\n class=\"table table-fixed weekview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (day of views[sliderIndex].dates; track\n day) {\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{day:day}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <init-position-scroll\n class=\"weekview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed weekview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let\n i = $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n @for (tm of row; track tm) {\n <td class=\"calendar-cell\">\n @if (tm.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': tm.events}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\"\n >\n </ng-template>\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { DatePipe, NgClass, NgStyle, NgTemplateOutlet } from \"@angular/common\";\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\n\nimport {\n CalendarMode,\n ICalendarComponent,\n IDateFormatter,\n IDayView,\n IDayViewAllDayEventSectionTemplateContext,\n IDayViewCategoryItemTemplateContext,\n IDayViewNormalEventSectionTemplateContext,\n IDayViewRow,\n IDisplayAllDayEvent,\n IDisplayEvent,\n IEvent,\n IRange,\n ITimeSelected,\n} from \"./calendar.interface\";\nimport { CalendarService } from \"./calendar.service\";\nimport { initPositionScrollComponent } from \"./init-position-scroll\";\n\n@Component({\n selector: \"dayview\",\n templateUrl: \"./dayview.html\",\n styleUrls: [\"./dayview.css\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgStyle, NgTemplateOutlet, initPositionScrollComponent],\n})\nexport class DayViewComponent\n implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit\n{\n constructor(\n private readonly calendarService: CalendarService,\n private readonly elm: ElementRef,\n ) {}\n\n private slider!: Swiper;\n @ViewChild(\"dayViewSwiper\") swiperElement?: ElementRef;\n\n @HostBinding(\"class.dayview\") class = true;\n\n @Input()\n dayviewCategoryItemTemplate!: TemplateRef<IDayViewCategoryItemTemplateContext>;\n @Input() dayviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\n @Input() dayviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\n @Input()\n dayviewAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n dayviewNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewInactiveAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n 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 = false;\n @Input() lockSwipeToNext?: boolean = false;\n @Input() lockSwipes?: boolean = false;\n @Input() startHour!: number;\n @Input() endHour!: number;\n @Input() sliderOptions?: SwiperOptions;\n @Input() hourSegments!: number;\n @Input() dayviewCategorySource?: Set<string>;\n @Input() dayviewShowCategoryView?: boolean;\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 readonly sliderIndexList = [0, 1, 2];\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 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(\n startTime: Date,\n startHour: number,\n endHour: number,\n timeInterval: number,\n ): IDayViewRow[] {\n const rows: IDayViewRow[] = [],\n currentHour = 0,\n currentDate = startTime.getDate();\n let time: Date, hourStep, 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);\n time.setHours(currentHour + hour, interval);\n time.setDate(currentDate);\n rows.push({\n time,\n events: [],\n eventsGroupByCategory: new Map(),\n });\n }\n }\n return rows;\n }\n\n private static compareEventByStartOffset(\n eventA: IDisplayEvent,\n eventB: IDisplayEvent,\n ) {\n return eventA.startOffset - eventB.startOffset;\n }\n\n private static calculateWidth(\n orderedEvents: IDisplayEvent[],\n size: number,\n hourParts: number,\n ) {\n const totalSize = size * hourParts,\n cells: { calculated: boolean; events: IDisplayEvent[] }[] =\n 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 =\n event.startIndex * hourParts + event.startOffset;\n while (\n index <\n event.endIndex * hourParts - event.endOffset\n ) {\n if (!cells[index].calculated) {\n cells[index].calculated = true;\n if (cells[index].events) {\n const eventCountInCell =\n cells[index].events.length;\n for (let j = 0; j < eventCountInCell; j += 1) {\n const currentEventInCell =\n cells[index].events[j];\n if (!currentEventInCell.overlapNumber) {\n currentEventInCell.overlapNumber =\n overlapNumber;\n eventQueue.push(currentEventInCell);\n }\n }\n }\n }\n index += 1;\n }\n }\n }\n i += 1;\n }\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n if (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?.formatDayViewHourColumn) {\n this.formatHourColumnLabel =\n 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 =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.update();\n });\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir === \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n\n if (this.scrollToHour > 0) {\n const hourColumns = this.elm.nativeElement\n .querySelector(\".dayview-normal-event-container\")\n .querySelectorAll(\".calendar-hour-column\");\n const me = this;\n setTimeout(() => {\n me.initScrollPosition =\n hourColumns[me.scrollToHour - me.startHour].offsetTop;\n }, 50);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.inited) {\n return;\n }\n if (\n (changes[\"startHour\"] || changes[\"endHour\"]) &&\n (!changes[\"startHour\"].isFirstChange() ||\n !changes[\"endHour\"].isFirstChange())\n ) {\n this.views = [];\n this.hourRange =\n (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?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.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(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\n }\n\n move(direction: number) {\n if (direction === 0) {\n return;\n }\n\n this.direction = direction;\n const adjacentDate = this.calendarService.getAdjacentCalendarDate(\n this.mode,\n direction,\n );\n this.calendarService.setCurrentDate(adjacentDate);\n this.refreshView();\n this.direction = 0;\n }\n\n private getHourColumnLabels(): string[] {\n const hourColumnLabels: string[] = [];\n for (\n let hour = 0, length = this.views[0].rows.length;\n hour < length;\n hour += 1\n ) {\n // handle edge case for DST\n if (\n hour === 0 &&\n this.views[0].rows[hour].time.getHours() !== this.startHour\n ) {\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(\n this.formatHourColumnLabel(this.views[0].rows[hour].time),\n );\n }\n }\n return hourColumnLabels;\n }\n\n getViewData(startTime: Date): IDayView {\n return {\n rows: DayViewComponent.createDateObjects(\n startTime,\n this.startHour,\n this.endHour,\n this.hourSegments,\n ),\n allDayEvents: [],\n categorizedAllDayEventsMap: new Map<\n string,\n IDisplayAllDayEvent[]\n >(),\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(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\n currentViewIndex = this.currentViewIndex,\n rows = this.views[currentViewIndex].rows,\n allDayEvents: IDisplayAllDayEvent[] = (this.views[\n currentViewIndex\n ].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 rows[hour].eventsGroupByCategory = undefined;\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, eventUTCEndTime: number;\n\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime ||\n eventStartTime >= eventEndTime\n ) {\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 =\n (eventStartTime.getHours() +\n eventStartTime.getMinutes() / 60) *\n this.hourSegments;\n }\n\n let timeDifferenceEnd: number;\n if (eventUTCEndTime > utcEndTime) {\n timeDifferenceEnd =\n ((utcEndTime - utcStartTime) / oneHour) *\n this.hourSegments;\n } else {\n timeDifferenceEnd =\n (eventEndTime.getHours() +\n eventEndTime.getMinutes() / 60) *\n 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 = Math.floor(\n (timeDifferenceStart - startIndex) * this.hourParts,\n );\n }\n if (endIndex <= rangeEndRowIndex) {\n endOffset = Math.floor(\n (endIndex - timeDifferenceEnd) * this.hourParts,\n );\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 // setup eventsGroupedByCategory\n if (\n this.dayviewShowCategoryView &&\n this.dayviewCategorySource &&\n event.category\n ) {\n let groupedEvents =\n rows[startIndex].eventsGroupByCategory;\n if (groupedEvents) {\n if (\n Array.isArray(groupedEvents.get(event.category))\n ) {\n groupedEvents\n .get(event.category)\n ?.push(displayEvent);\n } else {\n groupedEvents.set(event.category, [\n displayEvent,\n ]);\n }\n } else {\n groupedEvents = new Map();\n groupedEvents.set(event.category, [displayEvent]);\n rows[startIndex].eventsGroupByCategory =\n groupedEvents;\n }\n }\n }\n }\n }\n\n if (normalEventInRange) {\n if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\n for (const category of this.dayviewCategorySource) {\n let displayEvents: IDisplayEvent[] = [];\n\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n let groupedEvents =\n rows[hour].eventsGroupByCategory?.get(category);\n if (groupedEvents) {\n groupedEvents.sort(\n DayViewComponent.compareEventByStartOffset,\n );\n displayEvents = displayEvents.concat(groupedEvents);\n }\n }\n\n if (displayEvents.length > 0) {\n this.placeEvents(displayEvents);\n }\n }\n } else {\n let orderedEvents: IDisplayEvent[] = [];\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n if (rows[hour].events) {\n rows[hour].events.sort(\n 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 if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\n this.categorizeAllDayEvents(allDayEvents);\n }\n }\n\n categorizeAllDayEvents(allDayEvents: IDisplayAllDayEvent[]) {\n const categoryIdAllDayEventsMap = (this.views[\n this.currentViewIndex\n ].categorizedAllDayEventsMap = new Map<\n string,\n IDisplayAllDayEvent[]\n >());\n\n for (const displayAllDayEvent of allDayEvents) {\n if (displayAllDayEvent.event.category) {\n if (\n categoryIdAllDayEventsMap.get(\n displayAllDayEvent.event.category,\n )\n ) {\n categoryIdAllDayEventsMap\n .get(displayAllDayEvent.event.category)\n ?.push(displayAllDayEvent);\n } else {\n categoryIdAllDayEventsMap.set(\n displayAllDayEvent.event.category,\n [displayAllDayEvent],\n );\n }\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);\n startingDate.setHours(12, 0, 0, 0);\n return this.formatTitle(startingDate);\n }\n\n select(row: IDayViewRow, category?: string) {\n const selectedTime = row.time;\n let events = row.events;\n if (category) {\n events = row.eventsGroupByCategory?.get(category) || [];\n }\n\n let disabled = false;\n if (this.markDisabled) {\n disabled = this.markDisabled(selectedTime);\n }\n\n this.onTimeSelected.emit({\n selectedTime,\n category,\n events: events.map((e) => e.event),\n disabled,\n });\n }\n\n placeEvents(orderedEvents: IDisplayEvent[]) {\n this.calculatePosition(orderedEvents);\n DayViewComponent.calculateWidth(\n orderedEvents,\n this.hourRange,\n this.hourParts,\n );\n }\n\n overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\n let earlyEvent = event1,\n lateEvent = event2;\n if (\n event1.startIndex > event2.startIndex ||\n (event1.startIndex === event2.startIndex &&\n event1.startOffset > event2.startOffset)\n ) {\n earlyEvent = event2;\n lateEvent = event1;\n }\n\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\n return false;\n } else {\n return !(\n earlyEvent.endIndex - lateEvent.startIndex === 1 &&\n earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts\n );\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 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 setScrollPosition(scrollPosition: number) {\n this.initScrollPosition = scrollPosition;\n }\n}\n","<div class=\"swiper dayview-swiper\" #dayViewSwiper>\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\n @for (sliderIndex of sliderIndexList; track sliderIndex) {\n <div class=\"swiper-slide slide-container dayview-slide-container\">\n @if (!dayviewShowCategoryView) {\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\n class=\"table table-bordered dayview-allday-content-table\"\n >\n <tbody>\n <tr>\n @if (sliderIndex===currentViewIndex) {\n <td\n class=\"calendar-cell\"\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n } @if (sliderIndex!==currentViewIndex) {\n <td\n class=\"calendar-cell\"\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n @if (sliderIndex===currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (tm of views[sliderIndex].rows; track tm; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n <td\n class=\"calendar-cell\"\n tappable\n (click)=\"select(tm)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } @if (sliderIndex!==currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (tm of views[sliderIndex].rows; track tm; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } } @if (dayviewShowCategoryView) {\n <div class=\"dayview-category-header\">\n <table\n class=\"table table-fixed table-bordered dayview-category-header-table\"\n >\n <thead>\n <tr>\n <th\n class=\"dayview-category-header-item calendar-hour-column\"\n ></th>\n @for (category of dayviewCategorySource; track\n category) {\n <th class=\"dayview-category-header-item\">\n <ng-template\n [ngTemplateOutlet]=\"dayviewCategoryItemTemplate\"\n [ngTemplateOutletContext]=\"{category}\"\n >\n </ng-template>\n </th>\n }\n </tr>\n </thead>\n </table>\n </div>\n <div class=\"dayview-allday-table\">\n <div class=\"dayview-allday-label\">{{ allDayLabel }}</div>\n <div\n class=\"dayview-allday-content-wrapper dayview-allday-category-wrapper scroll-content\"\n >\n <table\n class=\"table table-fixed table-bordered dayview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (category of dayviewCategorySource; track\n category) {\n <td class=\"calendar-cell\">\n <div class=\"calendar-event-wrap\">\n @if (sliderIndex === currentViewIndex) {\n <ng-template\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n } @if (sliderIndex !== currentViewIndex\n ) {\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n }\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n @if (sliderIndex === currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{ hourColumnLabels[i] }}\n </td>\n @if (dayviewCategorySource?.size === 0) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n } @for (category of dayviewCategorySource; track\n category) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row, category)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: $safeNavigationMigration(row.eventsGroupByCategory?.get(category))!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } @if (sliderIndex !== currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{ hourColumnLabels[i] }}\n </td>\n @if (dayviewCategorySource?.size === 0) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n } @for (category of dayviewCategorySource; track\n category) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row, category)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: $safeNavigationMigration(row.eventsGroupByCategory?.get(category))!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } }\n </div>\n }\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n Inject,\n LOCALE_ID,\n OnDestroy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { CalendarService } from \"./calendar.service\";\nimport SwiperCore from \"swiper\";\nimport { IonicSlides, IonicModule } from \"@ionic/angular\";\nimport {\n IEvent,\n CalendarMode,\n QueryMode,\n Step,\n IMonthViewDisplayEventTemplateContext,\n IMonthViewEventDetailTemplateContext,\n IDisplayWeekViewHeader,\n IDisplayAllDayEvent,\n IDisplayEvent,\n IWeekViewAllDayEventSectionTemplateContext,\n IDayViewAllDayEventSectionTemplateContext,\n IWeekViewNormalEventSectionTemplateContext,\n IDayViewNormalEventSectionTemplateContext,\n IDateFormatter,\n IRange,\n ITimeSelected,\n IDayViewCategoryItemTemplateContext,\n} from \"./calendar.interface\";\nimport { NgClass, NgStyle, NgTemplateOutlet, DatePipe } from \"@angular/common\";\nimport { MonthViewComponent } from \"./monthview\";\nimport { WeekViewComponent } from \"./weekview\";\nimport { DayViewComponent } from \"./dayview\";\n\nSwiperCore.use([IonicSlides]);\n\n@Component({\n selector: \"calendar\",\n templateUrl: \"./calendar.html\",\n styleUrls: [\"./calendar.css\"],\n providers: [CalendarService],\n imports: [\n IonicModule,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n MonthViewComponent,\n WeekViewComponent,\n DayViewComponent,\n DatePipe,\n ],\n})\nexport class CalendarComponent implements OnInit, OnDestroy {\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()\n monthviewDisplayEventTemplate?: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewInactiveDisplayEventTemplate?: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewEventDetailTemplate?: TemplateRef<IMonthViewEventDetailTemplateContext>;\n @Input() weekviewHeaderTemplate?: TemplateRef<IDisplayWeekViewHeader>;\n @Input() weekviewAllDayEventTemplate?: TemplateRef<IDisplayAllDayEvent>;\n @Input() weekviewNormalEventTemplate?: TemplateRef<IDisplayEvent>;\n @Input()\n dayviewCategoryItemTemplate?: TemplateRef<IDayViewCategoryItemTemplateContext>;\n @Input() dayviewAllDayEventTemplate?: TemplateRef<IDisplayAllDayEvent>;\n @Input() dayviewNormalEventTemplate?: TemplateRef<IDisplayEvent>;\n @Input()\n weekviewAllDayEventSectionTemplate?: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewNormalEventSectionTemplate?: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewAllDayEventSectionTemplate?: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n dayviewNormalEventSectionTemplate?: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n @Input()\n weekviewInactiveAllDayEventSectionTemplate?: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewInactiveNormalEventSectionTemplate?: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewInactiveAllDayEventSectionTemplate?: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n 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 @Input() dayviewCategorySource?: Set<string>;\n @Input() dayviewShowCategoryView: boolean = false;\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(\n private readonly calendarService: CalendarService,\n @Inject(LOCALE_ID) appLocale: string,\n ) {\n this.locale = appLocale;\n }\n\n ngOnInit() {\n if (this.autoSelect) {\n this.autoSelect = this.autoSelect.toString() !== \"false\";\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 = Number.parseInt(this.startHour.toString());\n this.endHour = Number.parseInt(this.endHour.toString());\n this.calendarService.queryMode = this.queryMode;\n\n this.currentDateChangedFromChildrenSubscription =\n this.calendarService.currentDateChangedFromChildren$.subscribe(\n (currentDate) => {\n this._currentDate = currentDate;\n this.onCurrentDateChanged.emit(currentDate);\n },\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","<ng-template\n #monthviewDefaultDisplayEventTemplate\n let-view=\"view\"\n let-row=\"row\"\n let-col=\"col\"\n>\n {{view.dates[row*7+col].label}}\n</ng-template>\n<ng-template\n #monthviewDefaultEventDetailTemplate\n let-showEventDetail=\"showEventDetail\"\n let-selectedDate=\"selectedDate\"\n let-noEventsLabel=\"noEventsLabel\"\n>\n @if (showEventDetail) {\n <ion-list\n class=\"event-detail-container\"\n has-bouncing=\"false\"\n overflow-scroll=\"false\"\n >\n @for (event of selectedDate?.events; track event) {\n <ion-item (click)=\"eventSelected(event)\">\n @if (!event.allDay) {\n <span class=\"monthview-eventdetail-timecolumn\"\n >{{event.startTime|date: 'HH:mm'}} - {{event.endTime|date:\n 'HH:mm'}}\n </span>\n } @if (event.allDay) {\n <span class=\"monthview-eventdetail-timecolumn\"\n >{{allDayLabel}}</span\n >\n }\n <span class=\"event-detail\"> | {{event.title}} </span>\n @if (event.categoryId) {\n <span class=\"event-detail event-category-detail\"\n >[{{event.categoryName}}]</span\n >\n }\n </ion-item>\n } @if (selectedDate?.events.length==0) {\n <ion-item>\n <div class=\"no-events-label\">{{noEventsLabel}}</div>\n </ion-item>\n }\n </ion-list>\n }\n</ng-template>\n<ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\n {{ viewDate.dayHeader }}\n</ng-template>\n<ng-template #defaultCategoryItemTemplate let-category=\"category\">\n {{ category }}\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\n #defaultWeekViewAllDayEventSectionTemplate\n let-day=\"day\"\n let-eventTemplate=\"eventTemplate\"\n>\n @if (day.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': day.events}\"\n [ngStyle]=\"{height: 25*day.events.length+'px'}\"\n >\n @for (displayEvent of day.events; track displayEvent) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template\n #defaultDayViewAllDayEventSectionTemplate\n let-allDayEvents=\"allDayEvents\"\n let-eventTemplate=\"eventTemplate\"\n>\n @for (displayEvent of allDayEvents; track displayEvent; let eventIndex =\n $index) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n</ng-template>\n<ng-template\n #defaultNormalEventSectionTemplate\n let-tm=\"tm\"\n let-hourParts=\"hourParts\"\n let-eventTemplate=\"eventTemplate\"\n>\n @if (tm.events) {\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\">\n @for (displayEvent of tm.events; track displayEvent) {\n <div\n class=\"calendar-event\"\n 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 >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #defaultInactiveAllDayEventSectionTemplate> </ng-template>\n<ng-template #defaultInactiveNormalEventSectionTemplate> </ng-template>\n\n<div class=\"{{calendarMode}}view-container\">\n @switch (calendarMode) { @case ('month') {\n <monthview\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 >\n </monthview>\n } @case ('week') {\n <weekview\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 >\n </weekview>\n } @case ('day') {\n <dayview\n [formatDayTitle]=\"formatDayTitle\"\n [formatHourColumn]=\"formatHourColumn\"\n [allDayLabel]=\"allDayLabel\"\n [hourParts]=\"hourParts\"\n [hourSegments]=\"hourSegments\"\n [eventSource]=\"eventSource\"\n [markDisabled]=\"markDisabled\"\n [dayviewCategoryItemTemplate]=\"dayviewCategoryItemTemplate||defaultCategoryItemTemplate\"\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 [dayviewCategorySource]=\"dayviewCategorySource\"\n [dayviewShowCategoryView]=\"dayviewShowCategoryView\"\n (onEventSelected)=\"eventSelected($event)\"\n (onTimeSelected)=\"timeSelected($event)\"\n (onTitleChanged)=\"titleChanged($event)\"\n >\n </dayview>\n } }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CalendarService"],"mappings":"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"}
1
+ {"version":3,"file":"pieninck-ionic2-calendar.mjs","sources":["../../src/calendar.service.ts","../../src/calendar.interface.ts","../../src/monthview.ts","../../src/monthview.html","../../src/init-position-scroll.ts","../../src/weekview.ts","../../src/weekview.html","../../src/dayview.ts","../../src/dayview.html","../../src/calendar.ts","../../src/calendar.html","../../src/pieninck-ionic2-calendar.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\n\nimport {\n ICalendarComponent,\n IView,\n CalendarMode,\n QueryMode,\n} 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 readonly currentDateChangedFromParent = new Subject<Date>();\n private readonly currentDateChangedFromChildren = new Subject<Date>();\n private readonly eventSourceChanged = new Subject<void>();\n private readonly slideChanged = new Subject<number>();\n private readonly slideUpdated = new Subject<void>();\n\n constructor() {\n this.currentDateChangedFromParent$ =\n this.currentDateChangedFromParent.asObservable();\n this.currentDateChangedFromChildren$ =\n 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),\n rangeEnd = new Date(component.range.endTime);\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): {\n years: number;\n months: number;\n days: number;\n } {\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 (\n firstDayInNextMonth.getTime() <= calculateCalendarDate.getTime()\n ) {\n calculateCalendarDate = new Date(\n firstDayInNextMonth.getTime() - 24 * 60 * 60 * 1000,\n );\n }\n }\n return calculateCalendarDate;\n }\n\n getAdjacentViewStartTime(\n component: ICalendarComponent,\n direction: number,\n ): Date {\n let adjacentCalendarDate = this.getAdjacentCalendarDate(\n component.mode,\n direction,\n );\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] =\n component.getViewData(currentViewStartDate);\n } else if (component.direction === -1) {\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n } else if (component.views) {\n currentViewStartDate = component.range.startTime;\n component.views[currentViewIndex] =\n component.getViewData(currentViewStartDate);\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\n toUpdateViewIndex = (currentViewIndex + 1) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n } else {\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 }\n }\n\n slide(direction: number) {\n this.slideChanged.next(direction);\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 category?: string;\n}\n\nexport interface IRange {\n startTime: Date;\n endTime: Date;\n}\n\nexport interface IView {}\n\nexport interface IDayView extends IView {\n allDayEvents: IDisplayAllDayEvent[];\n rows: IDayViewRow[];\n categorizedAllDayEventsMap: Map<string, IDisplayAllDayEvent[]>;\n}\n\n/**\n * should be renamed to IDayViewCell since row could be vertically sliced into pieces of categories\n */\nexport interface IDayViewRow {\n events: IDisplayEvent[];\n eventsGroupByCategory?: Map<string, 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 category?: string;\n}\n\nexport interface IMonthViewDisplayEventTemplateContext {\n view?: IView;\n row?: number;\n col?: number;\n showEventDetail?: boolean;\n selectedDate?: IMonthViewRow;\n noEventsLabel?: string;\n}\n\nexport interface IMonthViewEventDetailTemplateContext {\n showEventDetail: boolean;\n selectedDate?: IMonthViewRow;\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 hourParts?: number;\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 hourParts?: number;\n category?: string;\n}\n\nexport interface IDayViewCategoryItemTemplateContext {\n category: string;\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 Hour = 60,\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 ElementRef,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { DatePipe, NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\n\nimport {\n ICalendarComponent,\n IEvent,\n IMonthView,\n IMonthViewRow,\n ITimeSelected,\n IRange,\n CalendarMode,\n IDateFormatter,\n IMonthViewDisplayEventTemplateContext,\n IMonthViewEventDetailTemplateContext,\n} from \"./calendar.interface\";\nimport { CalendarService } from \"./calendar.service\";\n\n@Component({\n selector: \"monthview\",\n templateUrl: \"./monthview.html\",\n styleUrls: [\"./monthview.css\"],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgTemplateOutlet],\n})\nexport class MonthViewComponent\n implements ICalendarComponent, OnInit, OnDestroy, OnChanges, AfterViewInit\n{\n constructor(private readonly calendarService: CalendarService) {}\n\n private slider!: Swiper;\n @ViewChild(\"monthViewSwiper\") swiperElement?: ElementRef;\n\n @Input()\n monthviewDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewInactiveDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewEventDetailTemplate!: TemplateRef<IMonthViewEventDetailTemplateContext>;\n\n @Input() formatDay?: string;\n @Input() formatDayHeader?: string;\n @Input() formatMonthTitle?: string;\n @Input() eventSource!: IEvent[];\n @Input() startingDayMonth!: number;\n @Input() showEventDetail = true;\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 = false;\n @Input() lockSwipeToNext?: boolean = false;\n @Input() lockSwipes?: boolean = false;\n @Input() sliderOptions?: SwiperOptions;\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\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);\n let i = 0;\n while (i < n) {\n dates[i++] = new Date(current);\n current.setDate(current.getDate() + 1);\n }\n return dates;\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n if (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?.formatMonthViewDayHeader) {\n this.formatDayHeaderLabel =\n 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?.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 =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.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?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToNext) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.allowTouchMove = !lockSwipes.currentValue;\n }\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir == \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n }\n onSlideChanged(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\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(\n this.mode,\n direction,\n );\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 ? 0 : 1)) % 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 difference = this.startingDayMonth - firstDayOfMonth.getDay(),\n numDisplayedFromPreviousMonth =\n difference > 0 ? 7 - difference : -difference,\n startDate = new Date(firstDayOfMonth);\n\n if (numDisplayedFromPreviousMonth > 0) {\n startDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n const endDate = new Date(startDate);\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(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\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, eventUTCEndTime: number;\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime\n ) {\n continue;\n }\n\n let timeDifferenceStart: number, timeDifferenceEnd: number;\n\n if (eventUTCStartTime < utcStartTime) {\n timeDifferenceStart = 0;\n } else {\n timeDifferenceStart =\n (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(\n this.range.startTime,\n this.views[this.currentViewIndex],\n );\n this.calendarService.rangeChanged(this);\n }\n\n getTitle(): string {\n const currentViewStartDate = this.range.startTime,\n date = currentViewStartDate.getDate(),\n month =\n (currentViewStartDate.getMonth() + (date === 1 ? 0 : 1)) % 12,\n year =\n currentViewStartDate.getFullYear() +\n (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(\n (Date.UTC(\n selectedDate.getFullYear(),\n selectedDate.getMonth(),\n selectedDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\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({\n selectedTime: selectedDate,\n events,\n disabled: viewDate.disabled,\n });\n }\n\n slideView(direction: number) {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.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(\n (Date.UTC(\n currentCalendarDate.getFullYear(),\n currentCalendarDate.getMonth(),\n currentCalendarDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n ),\n currentDayDifference = Math.round(\n (Date.UTC(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\n\n for (let r = 0; r < 42; r += 1) {\n view.dates[r].selected = false;\n }\n\n if (\n selectedDayDifference >= 0 &&\n selectedDayDifference < 42 &&\n !view.dates[selectedDayDifference].disabled &&\n (this.autoSelect || this.moveOnSelected)\n ) {\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","<div class=\"swiper monthview-swiper\" #monthViewSwiper>\n <div class=\"swiper-wrapper\">\n <div class=\"swiper-slide\">\n @if (0===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[0].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[0].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[0].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (0!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[0].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n <div class=\"swiper-slide\">\n @if (1===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[1].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[1].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[1].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (1!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[1].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n <div class=\"swiper-slide\">\n @if (2===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[2].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[2].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[2].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (2!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[2].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"monthviewEventDetailTemplate\"\n [ngTemplateOutletContext]=\"{showEventDetail:showEventDetail, selectedDate: selectedDate, noEventsLabel: noEventsLabel}\"\n >\n </ng-template>\n</div>\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 ChangeDetectionStrategy,\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 `\n .scroll-content {\n overflow-y: auto;\n overflow-x: hidden;\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class initPositionScrollComponent\n implements OnChanges, AfterViewInit, OnDestroy\n{\n @Input() initPosition!: number;\n @Input() emitEvent?: boolean;\n @Output() onScroll = new EventEmitter<number>();\n\n private readonly element: ElementRef;\n private scrollContent!: HTMLElement;\n private handler!: () => void;\n private listenerAttached: boolean = false;\n\n constructor(\n el: ElementRef,\n private readonly ngZone: NgZone,\n ) {\n this.element = el;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n let initPosition = changes[\"initPosition\"];\n if (\n initPosition?.currentValue !== undefined &&\n this.scrollContent &&\n initPosition.currentValue != this.scrollContent.scrollTop\n ) {\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 =\n 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, NgClass, NgTemplateOutlet } 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 OnDestroy,\n AfterViewInit,\n ViewChild,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\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\";\nimport { initPositionScrollComponent } from \"./init-position-scroll\";\n\n@Component({\n selector: \"weekview\",\n templateUrl: \"./weekview.html\",\n styleUrls: [\"./weekview.css\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgTemplateOutlet, initPositionScrollComponent],\n})\nexport class WeekViewComponent\n implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit\n{\n constructor(\n private readonly calendarService: CalendarService,\n private readonly elm: ElementRef,\n ) {}\n\n private slider!: Swiper;\n @ViewChild(\"weekViewSwiper\") swiperElement?: ElementRef;\n\n @HostBinding(\"class.weekview\") class = true;\n\n @Input() weekviewHeaderTemplate!: TemplateRef<IDisplayWeekViewHeader>;\n @Input() weekviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\n @Input() weekviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\n @Input()\n weekviewAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n weekviewInactiveAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n 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?: SwiperOptions;\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 readonly sliderIndexList = [0, 1, 2];\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 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(\n startTime: Date,\n startHour: number,\n endHour: number,\n timeInterval: number,\n ): IWeekViewRow[][] {\n const times: IWeekViewRow[][] = [],\n currentHour = 0,\n currentDate = startTime.getDate();\n let hourStep, 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);\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);\n let i = 0;\n while (i < n) {\n dates[i++] = {\n date: new Date(current),\n events: [],\n dayHeader: \"\",\n };\n current.setDate(current.getDate() + 1);\n }\n return dates;\n }\n\n private static compareEventByStartOffset(\n eventA: IDisplayEvent,\n eventB: IDisplayEvent,\n ): number {\n return eventA.startOffset - eventB.startOffset;\n }\n\n private static calculateWidth(\n orderedEvents: IDisplayEvent[],\n size: number,\n hourParts: number,\n ) {\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 =\n event.startIndex * hourParts + event.startOffset;\n while (\n index <\n event.endIndex * hourParts - event.endOffset\n ) {\n if (!cells[index].calculated) {\n cells[index].calculated = true;\n if (cells[index].events) {\n const eventCountInCell =\n cells[index].events.length;\n for (let j = 0; j < eventCountInCell; j += 1) {\n const currentEventInCell =\n cells[index].events[j];\n if (!currentEventInCell.overlapNumber) {\n currentEventInCell.overlapNumber =\n overlapNumber;\n eventQueue.push(currentEventInCell);\n }\n }\n }\n }\n index += 1;\n }\n }\n }\n i += 1;\n }\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n if (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 (\n datePipe.transform(date, this.formatWeekViewDayHeader) || \"\"\n );\n };\n }\n\n if (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?.formatWeekViewHourColumn) {\n this.formatHourColumnLabel =\n 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 =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.update();\n });\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir === \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n\n if (this.scrollToHour > 0) {\n const hourColumns = this.elm.nativeElement\n .querySelector(\".weekview-normal-event-container\")\n .querySelectorAll(\".calendar-hour-column\");\n const me = this;\n setTimeout(() => {\n me.initScrollPosition =\n 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 (\n (changes[\"startHour\"] || changes[\"endHour\"]) &&\n (!changes[\"startHour\"].isFirstChange() ||\n !changes[\"endHour\"].isFirstChange())\n ) {\n this.views = [];\n this.hourRange =\n (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?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.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(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\n }\n\n move(direction: number) {\n if (direction === 0) {\n return;\n }\n this.direction = direction;\n const adjacent = this.calendarService.getAdjacentCalendarDate(\n this.mode,\n direction,\n );\n this.calendarService.setCurrentDate(adjacent);\n this.refreshView();\n this.direction = 0;\n }\n\n private getHourColumnLabels(): string[] {\n const hourColumnLabels: string[] = [];\n for (\n let hour = 0, length = this.views[0].rows.length;\n hour < length;\n hour += 1\n ) {\n // handle edge case for DST\n if (\n hour === 0 &&\n this.views[0].rows[hour][0].time.getHours() !== this.startHour\n ) {\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(\n this.formatHourColumnLabel(\n this.views[0].rows[hour][0].time,\n ),\n );\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(\n startTime,\n this.startHour,\n this.endHour,\n this.hourSegments,\n ),\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(\n year,\n month,\n date - difference,\n 12,\n 0,\n 0,\n ),\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(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\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, eventUTCEndTime: number;\n\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime ||\n eventStartTime >= eventEndTime\n ) {\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(\n (eventUTCStartTime - utcStartTime) / oneDay,\n );\n }\n\n let allDayEndIndex: number;\n if (eventUTCEndTime >= utcEndTime) {\n allDayEndIndex = Math.round(\n (utcEndTime - utcStartTime) / oneDay,\n );\n } else {\n allDayEndIndex = Math.round(\n (eventUTCEndTime - utcStartTime) / oneDay,\n );\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 =\n ((eventUTCStartTime - utcStartTime) / oneHour) *\n this.hourSegments +\n (eventStartTime.getHours() +\n eventStartTime.getMinutes() / 60) *\n this.hourSegments;\n }\n\n let timeDifferenceEnd: number;\n if (eventUTCEndTime > utcEndTime) {\n timeDifferenceEnd =\n ((utcEndTime - utcStartTime) / oneHour) *\n this.hourSegments;\n } else {\n timeDifferenceEnd =\n ((eventUTCEndTime - oneDay - utcStartTime) / oneHour) *\n this.hourSegments +\n (eventEndTime.getHours() +\n eventEndTime.getMinutes() / 60) *\n 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 = Math.floor(\n (timeDifferenceStart - startIndex) * this.hourParts,\n );\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(\n (endIndex - timeDifferenceEnd) *\n this.hourParts,\n );\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(\n WeekViewComponent.compareEventByStartOffset,\n );\n orderedEvents = orderedEvents.concat(\n rows[hour][day].events,\n );\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(\n dates[day].events,\n );\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(\n this.range.startTime,\n this.views[this.currentViewIndex],\n );\n this.calendarService.rangeChanged(this);\n }\n\n getTitle(): string {\n const firstDayOfWeek = new Date(this.range.startTime);\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 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(\n orderedEvents,\n this.hourRange,\n this.hourParts,\n );\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 (\n event1.startIndex > event2.startIndex ||\n (event1.startIndex === event2.startIndex &&\n event1.startOffset > event2.startOffset)\n ) {\n earlyEvent = event2;\n lateEvent = event1;\n }\n\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\n return false;\n } else {\n return !(\n earlyEvent.endIndex - lateEvent.startIndex === 1 &&\n earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts\n );\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(\n (Date.UTC(\n currentCalendarDate.getFullYear(),\n currentCalendarDate.getMonth(),\n currentCalendarDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n ),\n currentDayDifference = Math.floor(\n (Date.UTC(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\n\n for (let r = 0; r < 7; r += 1) {\n view.dates[r].selected = false;\n }\n\n if (\n selectedDayDifference >= 0 &&\n selectedDayDifference < 7 &&\n this.autoSelect\n ) {\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(\n (Date.UTC(\n selectedDate.getFullYear(),\n selectedDate.getMonth(),\n selectedDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\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({\n selectedTime: selectedDate,\n events: viewDate.events.map((e) => e.event),\n disabled,\n });\n }\n\n setScrollPosition(scrollPosition: number) {\n this.initScrollPosition = scrollPosition;\n }\n}\n","<div class=\"swiper weekview-swiper\" #weekViewSwiper>\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\n @for (sliderIndex of sliderIndexList; track sliderIndex) {\n <div class=\"swiper-slide slide-container weekview-slide-container\">\n <table class=\"table table-bordered table-fixed weekview-header\">\n <thead>\n <tr>\n <th class=\"calendar-hour-column\"></th>\n @for (date of views[sliderIndex].dates; track date) {\n <th\n class=\"weekview-header text-center\"\n [ngClass]=\"getHighlightClass(date)\"\n (click)=\"daySelected(date)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\n [ngTemplateOutletContext]=\"{viewDate:date}\"\n >\n </ng-template>\n </th>\n }\n </tr>\n </thead>\n </table>\n @if (sliderIndex===currentViewIndex) {\n <div>\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\n class=\"table table-fixed weekview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (day of views[sliderIndex].dates; track\n day) {\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <init-position-scroll\n class=\"weekview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed weekview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let\n i = $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n @for (tm of row; track tm) {\n <td\n class=\"calendar-cell\"\n tappable\n (click)=\"select(tm.time, tm.events)\"\n >\n @if (tm.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': tm.events}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\"\n >\n </ng-template>\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n </div>\n } @if (sliderIndex!==currentViewIndex) {\n <div>\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\n class=\"table table-fixed weekview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (day of views[sliderIndex].dates; track\n day) {\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{day:day}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <init-position-scroll\n class=\"weekview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed weekview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let\n i = $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n @for (tm of row; track tm) {\n <td class=\"calendar-cell\">\n @if (tm.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': tm.events}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\"\n >\n </ng-template>\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { DatePipe, NgClass, NgStyle, NgTemplateOutlet } from \"@angular/common\";\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\n\nimport {\n CalendarMode,\n ICalendarComponent,\n IDateFormatter,\n IDayView,\n IDayViewAllDayEventSectionTemplateContext,\n IDayViewCategoryItemTemplateContext,\n IDayViewNormalEventSectionTemplateContext,\n IDayViewRow,\n IDisplayAllDayEvent,\n IDisplayEvent,\n IEvent,\n IRange,\n ITimeSelected,\n} from \"./calendar.interface\";\nimport { CalendarService } from \"./calendar.service\";\nimport { initPositionScrollComponent } from \"./init-position-scroll\";\n\n@Component({\n selector: \"dayview\",\n templateUrl: \"./dayview.html\",\n styleUrls: [\"./dayview.css\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgStyle, NgTemplateOutlet, initPositionScrollComponent],\n})\nexport class DayViewComponent\n implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit\n{\n constructor(\n private readonly calendarService: CalendarService,\n private readonly elm: ElementRef,\n ) {}\n\n private slider!: Swiper;\n @ViewChild(\"dayViewSwiper\") swiperElement?: ElementRef;\n\n @HostBinding(\"class.dayview\") class = true;\n\n @Input()\n dayviewCategoryItemTemplate!: TemplateRef<IDayViewCategoryItemTemplateContext>;\n @Input() dayviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\n @Input() dayviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\n @Input()\n dayviewAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n dayviewNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewInactiveAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n 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 = false;\n @Input() lockSwipeToNext?: boolean = false;\n @Input() lockSwipes?: boolean = false;\n @Input() startHour!: number;\n @Input() endHour!: number;\n @Input() sliderOptions?: SwiperOptions;\n @Input() hourSegments!: number;\n @Input() dayviewCategorySource?: Set<string>;\n @Input() dayviewShowCategoryView?: boolean;\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 readonly sliderIndexList = [0, 1, 2];\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 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(\n startTime: Date,\n startHour: number,\n endHour: number,\n timeInterval: number,\n ): IDayViewRow[] {\n const rows: IDayViewRow[] = [],\n currentHour = 0,\n currentDate = startTime.getDate();\n let time: Date, hourStep, 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);\n time.setHours(currentHour + hour, interval);\n time.setDate(currentDate);\n rows.push({\n time,\n events: [],\n eventsGroupByCategory: new Map(),\n });\n }\n }\n return rows;\n }\n\n private static compareEventByStartOffset(\n eventA: IDisplayEvent,\n eventB: IDisplayEvent,\n ) {\n return eventA.startOffset - eventB.startOffset;\n }\n\n private static calculateWidth(\n orderedEvents: IDisplayEvent[],\n size: number,\n hourParts: number,\n ) {\n const totalSize = size * hourParts,\n cells: { calculated: boolean; events: IDisplayEvent[] }[] =\n 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 =\n event.startIndex * hourParts + event.startOffset;\n while (\n index <\n event.endIndex * hourParts - event.endOffset\n ) {\n if (!cells[index].calculated) {\n cells[index].calculated = true;\n if (cells[index].events) {\n const eventCountInCell =\n cells[index].events.length;\n for (let j = 0; j < eventCountInCell; j += 1) {\n const currentEventInCell =\n cells[index].events[j];\n if (!currentEventInCell.overlapNumber) {\n currentEventInCell.overlapNumber =\n overlapNumber;\n eventQueue.push(currentEventInCell);\n }\n }\n }\n }\n index += 1;\n }\n }\n }\n i += 1;\n }\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n if (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?.formatDayViewHourColumn) {\n this.formatHourColumnLabel =\n 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 =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.update();\n });\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir === \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n\n if (this.scrollToHour > 0) {\n const hourColumns = this.elm.nativeElement\n .querySelector(\".dayview-normal-event-container\")\n .querySelectorAll(\".calendar-hour-column\");\n const me = this;\n setTimeout(() => {\n me.initScrollPosition =\n hourColumns[me.scrollToHour - me.startHour].offsetTop;\n }, 50);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.inited) {\n return;\n }\n if (\n (changes[\"startHour\"] || changes[\"endHour\"]) &&\n (!changes[\"startHour\"].isFirstChange() ||\n !changes[\"endHour\"].isFirstChange())\n ) {\n this.views = [];\n this.hourRange =\n (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?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.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(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\n }\n\n move(direction: number) {\n if (direction === 0) {\n return;\n }\n\n this.direction = direction;\n const adjacentDate = this.calendarService.getAdjacentCalendarDate(\n this.mode,\n direction,\n );\n this.calendarService.setCurrentDate(adjacentDate);\n this.refreshView();\n this.direction = 0;\n }\n\n private getHourColumnLabels(): string[] {\n const hourColumnLabels: string[] = [];\n for (\n let hour = 0, length = this.views[0].rows.length;\n hour < length;\n hour += 1\n ) {\n // handle edge case for DST\n if (\n hour === 0 &&\n this.views[0].rows[hour].time.getHours() !== this.startHour\n ) {\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(\n this.formatHourColumnLabel(this.views[0].rows[hour].time),\n );\n }\n }\n return hourColumnLabels;\n }\n\n getViewData(startTime: Date): IDayView {\n return {\n rows: DayViewComponent.createDateObjects(\n startTime,\n this.startHour,\n this.endHour,\n this.hourSegments,\n ),\n allDayEvents: [],\n categorizedAllDayEventsMap: new Map<\n string,\n IDisplayAllDayEvent[]\n >(),\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(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\n currentViewIndex = this.currentViewIndex,\n rows = this.views[currentViewIndex].rows,\n allDayEvents: IDisplayAllDayEvent[] = (this.views[\n currentViewIndex\n ].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 rows[hour].eventsGroupByCategory = undefined;\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, eventUTCEndTime: number;\n\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime ||\n eventStartTime >= eventEndTime\n ) {\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 =\n (eventStartTime.getHours() +\n eventStartTime.getMinutes() / 60) *\n this.hourSegments;\n }\n\n let timeDifferenceEnd: number;\n if (eventUTCEndTime > utcEndTime) {\n timeDifferenceEnd =\n ((utcEndTime - utcStartTime) / oneHour) *\n this.hourSegments;\n } else {\n timeDifferenceEnd =\n (eventEndTime.getHours() +\n eventEndTime.getMinutes() / 60) *\n 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 = Math.floor(\n (timeDifferenceStart - startIndex) * this.hourParts,\n );\n }\n if (endIndex <= rangeEndRowIndex) {\n endOffset = Math.floor(\n (endIndex - timeDifferenceEnd) * this.hourParts,\n );\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 // setup eventsGroupedByCategory\n if (\n this.dayviewShowCategoryView &&\n this.dayviewCategorySource &&\n event.category\n ) {\n let groupedEvents =\n rows[startIndex].eventsGroupByCategory;\n if (groupedEvents) {\n if (\n Array.isArray(groupedEvents.get(event.category))\n ) {\n groupedEvents\n .get(event.category)\n ?.push(displayEvent);\n } else {\n groupedEvents.set(event.category, [\n displayEvent,\n ]);\n }\n } else {\n groupedEvents = new Map();\n groupedEvents.set(event.category, [displayEvent]);\n rows[startIndex].eventsGroupByCategory =\n groupedEvents;\n }\n }\n }\n }\n }\n\n if (normalEventInRange) {\n if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\n for (const category of this.dayviewCategorySource) {\n let displayEvents: IDisplayEvent[] = [];\n\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n let groupedEvents =\n rows[hour].eventsGroupByCategory?.get(category);\n if (groupedEvents) {\n groupedEvents.sort(\n DayViewComponent.compareEventByStartOffset,\n );\n displayEvents = displayEvents.concat(groupedEvents);\n }\n }\n\n if (displayEvents.length > 0) {\n this.placeEvents(displayEvents);\n }\n }\n } else {\n let orderedEvents: IDisplayEvent[] = [];\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n if (rows[hour].events) {\n rows[hour].events.sort(\n 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 if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\n this.categorizeAllDayEvents(allDayEvents);\n }\n }\n\n categorizeAllDayEvents(allDayEvents: IDisplayAllDayEvent[]) {\n const categoryIdAllDayEventsMap = (this.views[\n this.currentViewIndex\n ].categorizedAllDayEventsMap = new Map<\n string,\n IDisplayAllDayEvent[]\n >());\n\n for (const displayAllDayEvent of allDayEvents) {\n if (displayAllDayEvent.event.category) {\n if (\n categoryIdAllDayEventsMap.get(\n displayAllDayEvent.event.category,\n )\n ) {\n categoryIdAllDayEventsMap\n .get(displayAllDayEvent.event.category)\n ?.push(displayAllDayEvent);\n } else {\n categoryIdAllDayEventsMap.set(\n displayAllDayEvent.event.category,\n [displayAllDayEvent],\n );\n }\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);\n startingDate.setHours(12, 0, 0, 0);\n return this.formatTitle(startingDate);\n }\n\n select(row: IDayViewRow, category?: string) {\n const selectedTime = row.time;\n let events = row.events;\n if (category) {\n events = row.eventsGroupByCategory?.get(category) || [];\n }\n\n let disabled = false;\n if (this.markDisabled) {\n disabled = this.markDisabled(selectedTime);\n }\n\n this.onTimeSelected.emit({\n selectedTime,\n category,\n events: events.map((e) => e.event),\n disabled,\n });\n }\n\n placeEvents(orderedEvents: IDisplayEvent[]) {\n this.calculatePosition(orderedEvents);\n DayViewComponent.calculateWidth(\n orderedEvents,\n this.hourRange,\n this.hourParts,\n );\n }\n\n overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\n let earlyEvent = event1,\n lateEvent = event2;\n if (\n event1.startIndex > event2.startIndex ||\n (event1.startIndex === event2.startIndex &&\n event1.startOffset > event2.startOffset)\n ) {\n earlyEvent = event2;\n lateEvent = event1;\n }\n\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\n return false;\n } else {\n return !(\n earlyEvent.endIndex - lateEvent.startIndex === 1 &&\n earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts\n );\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 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 setScrollPosition(scrollPosition: number) {\n this.initScrollPosition = scrollPosition;\n }\n}\n","<div class=\"swiper dayview-swiper\" #dayViewSwiper>\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\n @for (sliderIndex of sliderIndexList; track sliderIndex) {\n <div class=\"swiper-slide slide-container dayview-slide-container\">\n @if (!dayviewShowCategoryView) {\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\n class=\"table table-bordered dayview-allday-content-table\"\n >\n <tbody>\n <tr>\n @if (sliderIndex===currentViewIndex) {\n <td\n class=\"calendar-cell\"\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n } @if (sliderIndex!==currentViewIndex) {\n <td\n class=\"calendar-cell\"\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n @if (sliderIndex===currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (tm of views[sliderIndex].rows; track tm; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n <td\n class=\"calendar-cell\"\n tappable\n (click)=\"select(tm)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } @if (sliderIndex!==currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (tm of views[sliderIndex].rows; track tm; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } } @if (dayviewShowCategoryView) {\n <div class=\"dayview-category-header\">\n <table\n class=\"table table-fixed table-bordered dayview-category-header-table\"\n >\n <thead>\n <tr>\n <th\n class=\"dayview-category-header-item calendar-hour-column\"\n ></th>\n @for (category of dayviewCategorySource; track\n category) {\n <th class=\"dayview-category-header-item\">\n <ng-template\n [ngTemplateOutlet]=\"dayviewCategoryItemTemplate\"\n [ngTemplateOutletContext]=\"{category}\"\n >\n </ng-template>\n </th>\n }\n </tr>\n </thead>\n </table>\n </div>\n <div class=\"dayview-allday-table\">\n <div class=\"dayview-allday-label\">{{ allDayLabel }}</div>\n <div\n class=\"dayview-allday-content-wrapper dayview-allday-category-wrapper scroll-content\"\n >\n <table\n class=\"table table-fixed table-bordered dayview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (category of dayviewCategorySource; track\n category) {\n <td class=\"calendar-cell\">\n <div class=\"calendar-event-wrap\">\n @if (sliderIndex === currentViewIndex) {\n <ng-template\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n } @if (sliderIndex !== currentViewIndex\n ) {\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n }\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n @if (sliderIndex === currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{ hourColumnLabels[i] }}\n </td>\n @if (dayviewCategorySource?.size === 0) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n } @for (category of dayviewCategorySource; track\n category) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row, category)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: $safeNavigationMigration(row.eventsGroupByCategory?.get(category))!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } @if (sliderIndex !== currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{ hourColumnLabels[i] }}\n </td>\n @if (dayviewCategorySource?.size === 0) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n } @for (category of dayviewCategorySource; track\n category) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row, category)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: $safeNavigationMigration(row.eventsGroupByCategory?.get(category))!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } }\n </div>\n }\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n Inject,\n LOCALE_ID,\n OnDestroy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { CalendarService } from \"./calendar.service\";\nimport SwiperCore from \"swiper\";\nimport { IonicSlides, IonicModule } from \"@ionic/angular\";\nimport {\n IEvent,\n CalendarMode,\n QueryMode,\n Step,\n IMonthViewDisplayEventTemplateContext,\n IMonthViewEventDetailTemplateContext,\n IDisplayWeekViewHeader,\n IDisplayAllDayEvent,\n IDisplayEvent,\n IWeekViewAllDayEventSectionTemplateContext,\n IDayViewAllDayEventSectionTemplateContext,\n IWeekViewNormalEventSectionTemplateContext,\n IDayViewNormalEventSectionTemplateContext,\n IDateFormatter,\n IRange,\n ITimeSelected,\n IDayViewCategoryItemTemplateContext,\n} from \"./calendar.interface\";\nimport { NgClass, NgStyle, NgTemplateOutlet, DatePipe } from \"@angular/common\";\nimport { MonthViewComponent } from \"./monthview\";\nimport { WeekViewComponent } from \"./weekview\";\nimport { DayViewComponent } from \"./dayview\";\n\nSwiperCore.use([IonicSlides]);\n\n@Component({\n selector: \"calendar\",\n templateUrl: \"./calendar.html\",\n styleUrls: [\"./calendar.css\"],\n providers: [CalendarService],\n imports: [\n IonicModule,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n MonthViewComponent,\n WeekViewComponent,\n DayViewComponent,\n DatePipe,\n ],\n})\nexport class CalendarComponent implements OnInit, OnDestroy {\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()\n monthviewDisplayEventTemplate?: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewInactiveDisplayEventTemplate?: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewEventDetailTemplate?: TemplateRef<IMonthViewEventDetailTemplateContext>;\n @Input() weekviewHeaderTemplate?: TemplateRef<IDisplayWeekViewHeader>;\n @Input() weekviewAllDayEventTemplate?: TemplateRef<IDisplayAllDayEvent>;\n @Input() weekviewNormalEventTemplate?: TemplateRef<IDisplayEvent>;\n @Input()\n dayviewCategoryItemTemplate?: TemplateRef<IDayViewCategoryItemTemplateContext>;\n @Input() dayviewAllDayEventTemplate?: TemplateRef<IDisplayAllDayEvent>;\n @Input() dayviewNormalEventTemplate?: TemplateRef<IDisplayEvent>;\n @Input()\n weekviewAllDayEventSectionTemplate?: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewNormalEventSectionTemplate?: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewAllDayEventSectionTemplate?: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n dayviewNormalEventSectionTemplate?: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n @Input()\n weekviewInactiveAllDayEventSectionTemplate?: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewInactiveNormalEventSectionTemplate?: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewInactiveAllDayEventSectionTemplate?: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n 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 @Input() dayviewCategorySource?: Set<string>;\n @Input() dayviewShowCategoryView: boolean = false;\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(\n private readonly calendarService: CalendarService,\n @Inject(LOCALE_ID) appLocale: string,\n ) {\n this.locale = appLocale;\n }\n\n ngOnInit() {\n if (this.autoSelect) {\n this.autoSelect = this.autoSelect.toString() !== \"false\";\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 = Number.parseInt(this.startHour.toString());\n this.endHour = Number.parseInt(this.endHour.toString());\n this.calendarService.queryMode = this.queryMode;\n\n this.currentDateChangedFromChildrenSubscription =\n this.calendarService.currentDateChangedFromChildren$.subscribe(\n (currentDate) => {\n this._currentDate = currentDate;\n this.onCurrentDateChanged.emit(currentDate);\n },\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 slideNext() {\n this.calendarService.slide(1);\n }\n\n slidePrev() {\n this.calendarService.slide(-1);\n }\n}\n","<ng-template\n #monthviewDefaultDisplayEventTemplate\n let-view=\"view\"\n let-row=\"row\"\n let-col=\"col\"\n>\n {{view.dates[row*7+col].label}}\n</ng-template>\n<ng-template\n #monthviewDefaultEventDetailTemplate\n let-showEventDetail=\"showEventDetail\"\n let-selectedDate=\"selectedDate\"\n let-noEventsLabel=\"noEventsLabel\"\n>\n @if (showEventDetail) {\n <ion-list\n class=\"event-detail-container\"\n has-bouncing=\"false\"\n overflow-scroll=\"false\"\n >\n @for (event of selectedDate?.events; track event) {\n <ion-item (click)=\"eventSelected(event)\">\n @if (!event.allDay) {\n <span class=\"monthview-eventdetail-timecolumn\"\n >{{event.startTime|date: 'HH:mm'}} - {{event.endTime|date:\n 'HH:mm'}}\n </span>\n } @if (event.allDay) {\n <span class=\"monthview-eventdetail-timecolumn\"\n >{{allDayLabel}}</span\n >\n }\n <span class=\"event-detail\"> | {{event.title}} </span>\n @if (event.categoryId) {\n <span class=\"event-detail event-category-detail\"\n >[{{event.categoryName}}]</span\n >\n }\n </ion-item>\n } @if (selectedDate?.events.length==0) {\n <ion-item>\n <div class=\"no-events-label\">{{noEventsLabel}}</div>\n </ion-item>\n }\n </ion-list>\n }\n</ng-template>\n<ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\n {{ viewDate.dayHeader }}\n</ng-template>\n<ng-template #defaultCategoryItemTemplate let-category=\"category\">\n {{ category }}\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\n #defaultWeekViewAllDayEventSectionTemplate\n let-day=\"day\"\n let-eventTemplate=\"eventTemplate\"\n>\n @if (day.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': day.events}\"\n [ngStyle]=\"{height: 25*day.events.length+'px'}\"\n >\n @for (displayEvent of day.events; track displayEvent) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template\n #defaultDayViewAllDayEventSectionTemplate\n let-allDayEvents=\"allDayEvents\"\n let-eventTemplate=\"eventTemplate\"\n>\n @for (displayEvent of allDayEvents; track displayEvent; let eventIndex =\n $index) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n</ng-template>\n<ng-template\n #defaultNormalEventSectionTemplate\n let-tm=\"tm\"\n let-hourParts=\"hourParts\"\n let-eventTemplate=\"eventTemplate\"\n>\n @if (tm.events) {\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\">\n @for (displayEvent of tm.events; track displayEvent) {\n <div\n class=\"calendar-event\"\n 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 >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #defaultInactiveAllDayEventSectionTemplate> </ng-template>\n<ng-template #defaultInactiveNormalEventSectionTemplate> </ng-template>\n\n<div class=\"{{calendarMode}}view-container\">\n @switch (calendarMode) { @case ('month') {\n <monthview\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 >\n </monthview>\n } @case ('week') {\n <weekview\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 >\n </weekview>\n } @case ('day') {\n <dayview\n [formatDayTitle]=\"formatDayTitle\"\n [formatHourColumn]=\"formatHourColumn\"\n [allDayLabel]=\"allDayLabel\"\n [hourParts]=\"hourParts\"\n [hourSegments]=\"hourSegments\"\n [eventSource]=\"eventSource\"\n [markDisabled]=\"markDisabled\"\n [dayviewCategoryItemTemplate]=\"dayviewCategoryItemTemplate||defaultCategoryItemTemplate\"\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 [dayviewCategorySource]=\"dayviewCategorySource\"\n [dayviewShowCategoryView]=\"dayviewShowCategoryView\"\n (onEventSelected)=\"eventSelected($event)\"\n (onTimeSelected)=\"timeSelected($event)\"\n (onTitleChanged)=\"titleChanged($event)\"\n >\n </dayview>\n } }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CalendarService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pieninck/ionic2-calendar",
3
- "version": "4.0.0",
3
+ "version": "4.0.1",
4
4
  "description": "Ionic calendar component",
5
5
  "main": "fesm2022/pieninck-ionic2-calendar.mjs",
6
6
  "module": "fesm2022/pieninck-ionic2-calendar.mjs",
@@ -226,6 +226,8 @@ declare class CalendarComponent implements OnInit, OnDestroy {
226
226
  timeSelected(timeSelected: ITimeSelected): void;
227
227
  daySelected(daySelected: ITimeSelected): void;
228
228
  titleChanged(title: string): void;
229
+ slideNext(): void;
230
+ slidePrev(): void;
229
231
  static ɵfac: i0.ɵɵFactoryDeclaration<CalendarComponent, never>;
230
232
  static ɵcmp: i0.ɵɵComponentDeclaration<CalendarComponent, "calendar", never, { "currentDate": { "alias": "currentDate"; "required": false; }; "eventSource": { "alias": "eventSource"; "required": false; }; "calendarMode": { "alias": "calendarMode"; "required": false; }; "formatDay": { "alias": "formatDay"; "required": false; }; "formatDayHeader": { "alias": "formatDayHeader"; "required": false; }; "formatDayTitle": { "alias": "formatDayTitle"; "required": false; }; "formatWeekTitle": { "alias": "formatWeekTitle"; "required": false; }; "formatMonthTitle": { "alias": "formatMonthTitle"; "required": false; }; "formatWeekViewDayHeader": { "alias": "formatWeekViewDayHeader"; "required": false; }; "formatHourColumn": { "alias": "formatHourColumn"; "required": false; }; "showEventDetail": { "alias": "showEventDetail"; "required": false; }; "startingDayMonth": { "alias": "startingDayMonth"; "required": false; }; "startingDayWeek": { "alias": "startingDayWeek"; "required": false; }; "allDayLabel": { "alias": "allDayLabel"; "required": false; }; "noEventsLabel": { "alias": "noEventsLabel"; "required": false; }; "queryMode": { "alias": "queryMode"; "required": false; }; "step": { "alias": "step"; "required": false; }; "timeInterval": { "alias": "timeInterval"; "required": false; }; "autoSelect": { "alias": "autoSelect"; "required": false; }; "markDisabled": { "alias": "markDisabled"; "required": false; }; "monthviewDisplayEventTemplate": { "alias": "monthviewDisplayEventTemplate"; "required": false; }; "monthviewInactiveDisplayEventTemplate": { "alias": "monthviewInactiveDisplayEventTemplate"; "required": false; }; "monthviewEventDetailTemplate": { "alias": "monthviewEventDetailTemplate"; "required": false; }; "weekviewHeaderTemplate": { "alias": "weekviewHeaderTemplate"; "required": false; }; "weekviewAllDayEventTemplate": { "alias": "weekviewAllDayEventTemplate"; "required": false; }; "weekviewNormalEventTemplate": { "alias": "weekviewNormalEventTemplate"; "required": false; }; "dayviewCategoryItemTemplate": { "alias": "dayviewCategoryItemTemplate"; "required": false; }; "dayviewAllDayEventTemplate": { "alias": "dayviewAllDayEventTemplate"; "required": false; }; "dayviewNormalEventTemplate": { "alias": "dayviewNormalEventTemplate"; "required": false; }; "weekviewAllDayEventSectionTemplate": { "alias": "weekviewAllDayEventSectionTemplate"; "required": false; }; "weekviewNormalEventSectionTemplate": { "alias": "weekviewNormalEventSectionTemplate"; "required": false; }; "dayviewAllDayEventSectionTemplate": { "alias": "dayviewAllDayEventSectionTemplate"; "required": false; }; "dayviewNormalEventSectionTemplate": { "alias": "dayviewNormalEventSectionTemplate"; "required": false; }; "weekviewInactiveAllDayEventSectionTemplate": { "alias": "weekviewInactiveAllDayEventSectionTemplate"; "required": false; }; "weekviewInactiveNormalEventSectionTemplate": { "alias": "weekviewInactiveNormalEventSectionTemplate"; "required": false; }; "dayviewInactiveAllDayEventSectionTemplate": { "alias": "dayviewInactiveAllDayEventSectionTemplate"; "required": false; }; "dayviewInactiveNormalEventSectionTemplate": { "alias": "dayviewInactiveNormalEventSectionTemplate"; "required": false; }; "dateFormatter": { "alias": "dateFormatter"; "required": false; }; "dir": { "alias": "dir"; "required": false; }; "scrollToHour": { "alias": "scrollToHour"; "required": false; }; "preserveScrollPosition": { "alias": "preserveScrollPosition"; "required": false; }; "lockSwipeToPrev": { "alias": "lockSwipeToPrev"; "required": false; }; "lockSwipeToNext": { "alias": "lockSwipeToNext"; "required": false; }; "lockSwipes": { "alias": "lockSwipes"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "startHour": { "alias": "startHour"; "required": false; }; "endHour": { "alias": "endHour"; "required": false; }; "sliderOptions": { "alias": "sliderOptions"; "required": false; }; "dayviewCategorySource": { "alias": "dayviewCategorySource"; "required": false; }; "dayviewShowCategoryView": { "alias": "dayviewShowCategoryView"; "required": false; }; }, { "onCurrentDateChanged": "onCurrentDateChanged"; "onRangeChanged": "onRangeChanged"; "onEventSelected": "onEventSelected"; "onTimeSelected": "onTimeSelected"; "onDayHeaderSelected": "onDayHeaderSelected"; "onTitleChanged": "onTitleChanged"; }, never, never, true, never>;
231
233
  }