UNPKG

199 kBSource Map (JSON)View Raw
1{"version":3,"file":"angular-calendar.js","sources":["ng://angular-calendar/modules/common/calendar-event-actions.component.ts","ng://angular-calendar/modules/common/calendar-event-title.component.ts","ng://angular-calendar/modules/common/calendar-tooltip.directive.ts","ng://angular-calendar/date-adapters/date-adapter.ts","ng://angular-calendar/modules/common/calendar-view.enum.ts","ng://angular-calendar/modules/common/util.ts","ng://angular-calendar/modules/common/calendar-previous-view.directive.ts","ng://angular-calendar/modules/common/calendar-next-view.directive.ts","ng://angular-calendar/modules/common/calendar-today.directive.ts","ng://angular-calendar/modules/common/calendar-angular-date-formatter.provider.ts","ng://angular-calendar/modules/common/calendar-date-formatter.provider.ts","ng://angular-calendar/modules/common/calendar-date.pipe.ts","ng://angular-calendar/modules/common/calendar-event-title-formatter.provider.ts","ng://angular-calendar/modules/common/calendar-event-title.pipe.ts","ng://angular-calendar/modules/common/click.directive.ts","ng://angular-calendar/modules/common/keydown-enter.directive.ts","ng://angular-calendar/modules/common/calendar-utils.provider.ts","ng://angular-calendar/modules/common/calendar-a11y.provider.ts","ng://angular-calendar/modules/common/calendar-a11y.pipe.ts","ng://angular-calendar/modules/common/calendar-moment-date-formatter.provider.ts","ng://angular-calendar/modules/common/calendar-native-date-formatter.provider.ts","ng://angular-calendar/modules/common/calendar-event-times-changed-event.interface.ts","ng://angular-calendar/modules/common/calendar-common.module.ts","ng://angular-calendar/modules/month/calendar-month-view.component.ts","ng://angular-calendar/modules/month/calendar-month-view-header.component.ts","ng://angular-calendar/modules/month/calendar-month-cell.component.ts","ng://angular-calendar/modules/month/calendar-open-day-events.component.ts","ng://angular-calendar/modules/month/calendar-month.module.ts","ng://angular-calendar/modules/common/calendar-drag-helper.provider.ts","ng://angular-calendar/modules/common/calendar-resize-helper.provider.ts","ng://angular-calendar/modules/week/calendar-week-view.component.ts","ng://angular-calendar/modules/week/calendar-week-view-header.component.ts","ng://angular-calendar/modules/week/calendar-week-view-event.component.ts","ng://angular-calendar/modules/week/calendar-week-view-hour-segment.component.ts","ng://angular-calendar/modules/week/calendar-week-view-current-time-marker.component.ts","ng://angular-calendar/modules/week/calendar-week.module.ts","ng://angular-calendar/modules/day/calendar-day-view.component.ts","ng://angular-calendar/modules/day/calendar-day.module.ts","ng://angular-calendar/modules/calendar.module.ts","ng://angular-calendar/index.ts","ng://angular-calendar/angular-calendar.ts"],"sourcesContent":["import { Component, Input, TemplateRef } from '@angular/core';\nimport { CalendarEvent, EventAction } from 'calendar-utils';\n\n@Component({\n selector: 'mwl-calendar-event-actions',\n template: `\n <ng-template\n #defaultTemplate\n let-event=\"event\"\n let-trackByActionId=\"trackByActionId\"\n >\n <span *ngIf=\"event.actions\" class=\"cal-event-actions\">\n <a\n class=\"cal-event-action\"\n href=\"javascript:;\"\n *ngFor=\"let action of event.actions; trackBy: trackByActionId\"\n (mwlClick)=\"action.onClick({ event: event, sourceEvent: $event })\"\n (mwlKeydownEnter)=\"\n action.onClick({ event: event, sourceEvent: $event })\n \"\n [ngClass]=\"action.cssClass\"\n [innerHtml]=\"action.label\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n { action: action } | calendarA11y: 'actionButtonLabel'\n \"\n >\n </a>\n </span>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n event: event,\n trackByActionId: trackByActionId\n }\"\n >\n </ng-template>\n `,\n})\nexport class CalendarEventActionsComponent {\n @Input() event: CalendarEvent;\n\n @Input() customTemplate: TemplateRef<any>;\n\n trackByActionId = (index: number, action: EventAction) =>\n action.id ? action.id : action;\n}\n","import { Component, Input, TemplateRef } from '@angular/core';\nimport { CalendarEvent } from 'calendar-utils';\n\n@Component({\n selector: 'mwl-calendar-event-title',\n template: `\n <ng-template #defaultTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [innerHTML]=\"event.title | calendarEventTitle: view:event\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\n >\n </span>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n event: event,\n view: view\n }\"\n >\n </ng-template>\n `,\n})\nexport class CalendarEventTitleComponent {\n @Input() event: CalendarEvent;\n\n @Input() customTemplate: TemplateRef<any>;\n\n @Input() view: string;\n}\n","import {\n Directive,\n Component,\n HostListener,\n OnDestroy,\n Input,\n ComponentRef,\n Injector,\n ComponentFactoryResolver,\n ViewContainerRef,\n ElementRef,\n ComponentFactory,\n Inject,\n Renderer2,\n TemplateRef,\n OnChanges,\n SimpleChanges,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { PlacementArray, positionElements } from 'positioning';\nimport { CalendarEvent } from 'calendar-utils';\nimport { Observable, of, Subject, timer } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'mwl-calendar-tooltip-window',\n template: `\n <ng-template\n #defaultTemplate\n let-contents=\"contents\"\n let-placement=\"placement\"\n let-event=\"event\"\n >\n <div class=\"cal-tooltip\" [ngClass]=\"'cal-tooltip-' + placement\">\n <div class=\"cal-tooltip-arrow\"></div>\n <div class=\"cal-tooltip-inner\" [innerHtml]=\"contents\"></div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n contents: contents,\n placement: placement,\n event: event\n }\"\n >\n </ng-template>\n `,\n})\nexport class CalendarTooltipWindowComponent {\n @Input() contents: string;\n\n @Input() placement: string;\n\n @Input() event: CalendarEvent;\n\n @Input() customTemplate: TemplateRef<any>;\n}\n\n@Directive({\n selector: '[mwlCalendarTooltip]',\n})\nexport class CalendarTooltipDirective implements OnDestroy, OnChanges {\n @Input('mwlCalendarTooltip') contents: string; // tslint:disable-line no-input-rename\n\n @Input('tooltipPlacement') placement: PlacementArray = 'auto'; // tslint:disable-line no-input-rename\n\n @Input('tooltipTemplate') customTemplate: TemplateRef<any>; // tslint:disable-line no-input-rename\n\n @Input('tooltipEvent') event: CalendarEvent; // tslint:disable-line no-input-rename\n\n @Input('tooltipAppendToBody') appendToBody: boolean; // tslint:disable-line no-input-rename\n\n @Input('tooltipDelay') delay: number | null = null; // tslint:disable-line no-input-rename\n\n private tooltipFactory: ComponentFactory<CalendarTooltipWindowComponent>;\n private tooltipRef: ComponentRef<CalendarTooltipWindowComponent>;\n private cancelTooltipDelay$ = new Subject();\n\n constructor(\n private elementRef: ElementRef,\n private injector: Injector,\n private renderer: Renderer2,\n componentFactoryResolver: ComponentFactoryResolver,\n private viewContainerRef: ViewContainerRef,\n @Inject(DOCUMENT) private document //tslint:disable-line\n ) {\n this.tooltipFactory = componentFactoryResolver.resolveComponentFactory(\n CalendarTooltipWindowComponent\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n this.tooltipRef &&\n (changes.contents || changes.customTemplate || changes.event)\n ) {\n this.tooltipRef.instance.contents = this.contents;\n this.tooltipRef.instance.customTemplate = this.customTemplate;\n this.tooltipRef.instance.event = this.event;\n this.tooltipRef.changeDetectorRef.markForCheck();\n\n if (!this.contents) {\n this.hide();\n }\n }\n }\n\n ngOnDestroy(): void {\n this.hide();\n }\n\n @HostListener('mouseenter')\n onMouseOver(): void {\n const delay$: Observable<any> =\n this.delay === null ? of('now') : timer(this.delay);\n delay$.pipe(takeUntil(this.cancelTooltipDelay$)).subscribe(() => {\n this.show();\n });\n }\n\n @HostListener('mouseleave')\n onMouseOut(): void {\n this.hide();\n }\n\n private show(): void {\n if (!this.tooltipRef && this.contents) {\n this.tooltipRef = this.viewContainerRef.createComponent(\n this.tooltipFactory,\n 0,\n this.injector,\n []\n );\n this.tooltipRef.instance.contents = this.contents;\n this.tooltipRef.instance.customTemplate = this.customTemplate;\n this.tooltipRef.instance.event = this.event;\n if (this.appendToBody) {\n this.document.body.appendChild(this.tooltipRef.location.nativeElement);\n }\n requestAnimationFrame(() => {\n this.positionTooltip();\n });\n }\n }\n\n private hide(): void {\n if (this.tooltipRef) {\n this.viewContainerRef.remove(\n this.viewContainerRef.indexOf(this.tooltipRef.hostView)\n );\n this.tooltipRef = null;\n }\n this.cancelTooltipDelay$.next();\n }\n\n private positionTooltip(previousPositions: string[] = []): void {\n if (this.tooltipRef) {\n this.tooltipRef.changeDetectorRef.detectChanges();\n this.tooltipRef.instance.placement = positionElements(\n this.elementRef.nativeElement,\n this.tooltipRef.location.nativeElement.children[0],\n this.placement,\n this.appendToBody\n );\n // keep re-positioning the tooltip until the arrow position doesn't make a difference\n if (\n previousPositions.indexOf(this.tooltipRef.instance.placement) === -1\n ) {\n this.positionTooltip([\n ...previousPositions,\n this.tooltipRef.instance.placement,\n ]);\n }\n }\n }\n}\n","import { DateAdapter as BaseDateAdapter } from 'calendar-utils/date-adapters/date-adapter';\n\nexport abstract class DateAdapter implements BaseDateAdapter {\n abstract addWeeks(date: Date | number, amount: number): Date;\n\n abstract addMonths(date: Date | number, amount: number): Date;\n\n abstract subDays(date: Date | number, amount: number): Date;\n\n abstract subWeeks(date: Date | number, amount: number): Date;\n\n abstract subMonths(date: Date | number, amount: number): Date;\n\n abstract getISOWeek(date: Date | number): number;\n\n abstract setDate(date: Date | number, dayOfMonth: number): Date;\n\n abstract setMonth(date: Date | number, month: number): Date;\n\n abstract setYear(date: Date | number, year: number): Date;\n\n abstract getDate(date: Date | number): number;\n\n abstract getMonth(date: Date | number): number;\n\n abstract getYear(date: Date | number): number;\n\n abstract addDays(date: Date | number, amount: number): Date;\n\n abstract addHours(date: Date | number, amount: number): Date;\n\n abstract addMinutes(date: Date | number, amount: number): Date;\n\n abstract addSeconds(date: Date | number, amount: number): Date;\n\n abstract differenceInDays(\n dateLeft: Date | number,\n dateRight: Date | number\n ): number;\n\n abstract differenceInMinutes(\n dateLeft: Date | number,\n dateRight: Date | number\n ): number;\n\n abstract differenceInSeconds(\n dateLeft: Date | number,\n dateRight: Date | number\n ): number;\n\n abstract endOfDay(date: Date | number): Date;\n\n abstract endOfMonth(date: Date | number): Date;\n\n abstract endOfWeek(\n date: Date | number,\n options?: { weekStartsOn?: number }\n ): Date;\n\n abstract getDay(date: Date | number): number;\n\n abstract isSameDay(\n dateLeft: Date | number,\n dateRight: Date | number\n ): boolean;\n\n abstract isSameMonth(\n dateLeft: Date | number,\n dateRight: Date | number\n ): boolean;\n\n abstract isSameSecond(\n dateLeft: Date | number,\n dateRight: Date | number\n ): boolean;\n\n abstract max(dates: (Date | number)[]): Date;\n\n abstract setHours(date: Date | number, hours: number): Date;\n\n abstract setMinutes(date: Date | number, minutes: number): Date;\n\n abstract startOfDay(date: Date | number): Date;\n\n abstract startOfMinute(date: Date | number): Date;\n\n abstract startOfMonth(date: Date | number): Date;\n\n abstract startOfWeek(\n date: Date | number,\n options?: { weekStartsOn?: number }\n ): Date;\n\n abstract getHours(date: Date | number): number;\n\n abstract getMinutes(date: Date | number): number;\n}\n","export enum CalendarView {\n Month = 'month',\n Week = 'week',\n Day = 'day',\n}\n","import {\n CalendarEvent,\n WeekViewTimeEvent,\n WeekViewHour,\n WeekViewHourSegment,\n validateEvents as validateEventsWithoutLog,\n ViewPeriod,\n WeekDay,\n WeekViewAllDayEvent,\n} from 'calendar-utils';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\n\nexport const validateEvents = (events: CalendarEvent[]) => {\n const warn = (...args) => console.warn('angular-calendar', ...args);\n return validateEventsWithoutLog(events, warn);\n};\n\nexport function isInside(outer: ClientRect, inner: ClientRect): boolean {\n return (\n Math.floor(outer.left) <= Math.ceil(inner.left) &&\n Math.floor(inner.left) <= Math.ceil(outer.right) &&\n Math.floor(outer.left) <= Math.ceil(inner.right) &&\n Math.floor(inner.right) <= Math.ceil(outer.right) &&\n Math.floor(outer.top) <= Math.ceil(inner.top) &&\n Math.floor(inner.top) <= Math.ceil(outer.bottom) &&\n Math.floor(outer.top) <= Math.ceil(inner.bottom) &&\n Math.floor(inner.bottom) <= Math.ceil(outer.bottom)\n );\n}\n\nexport function roundToNearest(amount: number, precision: number) {\n return Math.round(amount / precision) * precision;\n}\n\nexport const trackByEventId = (index: number, event: CalendarEvent) =>\n event.id ? event.id : event;\n\nexport const trackByWeekDayHeaderDate = (index: number, day: WeekDay) =>\n day.date.toISOString();\n\nexport const trackByHourSegment = (\n index: number,\n segment: WeekViewHourSegment\n) => segment.date.toISOString();\n\nexport const trackByHour = (index: number, hour: WeekViewHour) =>\n hour.segments[0].date.toISOString();\n\nexport const trackByWeekAllDayEvent = (\n index: number,\n weekEvent: WeekViewAllDayEvent\n) => (weekEvent.event.id ? weekEvent.event.id : weekEvent.event);\n\nexport const trackByWeekTimeEvent = (\n index: number,\n weekEvent: WeekViewTimeEvent\n) => (weekEvent.event.id ? weekEvent.event.id : weekEvent.event);\n\nconst MINUTES_IN_HOUR = 60;\n\nfunction getPixelAmountInMinutes(\n hourSegments: number,\n hourSegmentHeight: number\n) {\n return MINUTES_IN_HOUR / (hourSegments * hourSegmentHeight);\n}\n\nexport function getMinutesMoved(\n movedY: number,\n hourSegments: number,\n hourSegmentHeight: number,\n eventSnapSize: number\n): number {\n const draggedInPixelsSnapSize = roundToNearest(\n movedY,\n eventSnapSize || hourSegmentHeight\n );\n const pixelAmountInMinutes = getPixelAmountInMinutes(\n hourSegments,\n hourSegmentHeight\n );\n return draggedInPixelsSnapSize * pixelAmountInMinutes;\n}\n\nexport function getMinimumEventHeightInMinutes(\n hourSegments: number,\n hourSegmentHeight: number\n) {\n return (\n getPixelAmountInMinutes(hourSegments, hourSegmentHeight) * hourSegmentHeight\n );\n}\n\nexport function getDefaultEventEnd(\n dateAdapter: DateAdapter,\n event: CalendarEvent,\n minimumMinutes: number\n): Date {\n if (event.end) {\n return event.end;\n } else {\n return dateAdapter.addMinutes(event.start, minimumMinutes);\n }\n}\n\nexport function addDaysWithExclusions(\n dateAdapter: DateAdapter,\n date: Date,\n days: number,\n excluded: number[]\n): Date {\n let daysCounter = 0;\n let daysToAdd = 0;\n const changeDays = days < 0 ? dateAdapter.subDays : dateAdapter.addDays;\n let result = date;\n while (daysToAdd <= Math.abs(days)) {\n result = changeDays(date, daysCounter);\n const day = dateAdapter.getDay(result);\n if (excluded.indexOf(day) === -1) {\n daysToAdd++;\n }\n daysCounter++;\n }\n return result;\n}\n\nexport function isDraggedWithinPeriod(\n newStart: Date,\n newEnd: Date,\n period: ViewPeriod\n): boolean {\n const end = newEnd || newStart;\n return (\n (period.start <= newStart && newStart <= period.end) ||\n (period.start <= end && end <= period.end)\n );\n}\n\nexport function shouldFireDroppedEvent(\n dropEvent: { dropData?: { event?: CalendarEvent; calendarId?: symbol } },\n date: Date,\n allDay: boolean,\n calendarId: symbol\n) {\n return (\n dropEvent.dropData &&\n dropEvent.dropData.event &&\n (dropEvent.dropData.calendarId !== calendarId ||\n (dropEvent.dropData.event.allDay && !allDay) ||\n (!dropEvent.dropData.event.allDay && allDay))\n );\n}\n\nexport function getWeekViewPeriod(\n dateAdapter: DateAdapter,\n viewDate: Date,\n weekStartsOn: number,\n excluded: number[] = [],\n daysInWeek?: number\n): { viewStart: Date; viewEnd: Date } {\n let viewStart = daysInWeek\n ? dateAdapter.startOfDay(viewDate)\n : dateAdapter.startOfWeek(viewDate, { weekStartsOn });\n const endOfWeek = dateAdapter.endOfWeek(viewDate, { weekStartsOn });\n while (\n excluded.indexOf(dateAdapter.getDay(viewStart)) > -1 &&\n viewStart < endOfWeek\n ) {\n viewStart = dateAdapter.addDays(viewStart, 1);\n }\n if (daysInWeek) {\n const viewEnd = dateAdapter.endOfDay(\n addDaysWithExclusions(dateAdapter, viewStart, daysInWeek - 1, excluded)\n );\n return { viewStart, viewEnd };\n } else {\n let viewEnd = endOfWeek;\n while (\n excluded.indexOf(dateAdapter.getDay(viewEnd)) > -1 &&\n viewEnd > viewStart\n ) {\n viewEnd = dateAdapter.subDays(viewEnd, 1);\n }\n return { viewStart, viewEnd };\n }\n}\n\nexport function isWithinThreshold({ x, y }: { x: number; y: number }) {\n const DRAG_THRESHOLD = 1;\n return Math.abs(x) > DRAG_THRESHOLD || Math.abs(y) > DRAG_THRESHOLD;\n}\n","import {\n Directive,\n HostListener,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\nimport { CalendarView } from './calendar-view.enum';\nimport { addDaysWithExclusions } from './util';\n\n/**\n * Change the view date to the previous view. For example:\n *\n * ```typescript\n * <button\n * mwlCalendarPreviousView\n * [(viewDate)]=\"viewDate\"\n * [view]=\"view\">\n * Previous\n * </button>\n * ```\n */\n@Directive({\n selector: '[mwlCalendarPreviousView]',\n})\nexport class CalendarPreviousViewDirective {\n /**\n * The current view\n */\n @Input() view: CalendarView | 'month' | 'week' | 'day';\n\n /**\n * The current view date\n */\n @Input() viewDate: Date;\n\n /**\n * Days to skip when going back by 1 day\n */\n @Input() excludeDays: number[] = [];\n\n /**\n * The number of days in a week. If set will subtract this amount of days instead of 1 week\n */\n @Input() daysInWeek: number;\n\n /**\n * Called when the view date is changed\n */\n @Output() viewDateChange: EventEmitter<Date> = new EventEmitter();\n\n constructor(private dateAdapter: DateAdapter) {}\n\n /**\n * @hidden\n */\n @HostListener('click')\n onClick(): void {\n const subFn: any = {\n day: this.dateAdapter.subDays,\n week: this.dateAdapter.subWeeks,\n month: this.dateAdapter.subMonths,\n }[this.view];\n\n if (this.view === CalendarView.Day) {\n this.viewDateChange.emit(\n addDaysWithExclusions(\n this.dateAdapter,\n this.viewDate,\n -1,\n this.excludeDays\n )\n );\n } else if (this.view === CalendarView.Week && this.daysInWeek) {\n this.viewDateChange.emit(\n addDaysWithExclusions(\n this.dateAdapter,\n this.viewDate,\n -this.daysInWeek,\n this.excludeDays\n )\n );\n } else {\n this.viewDateChange.emit(subFn(this.viewDate, 1));\n }\n }\n}\n","import {\n Directive,\n EventEmitter,\n HostListener,\n Input,\n Output,\n} from '@angular/core';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\nimport { CalendarView } from './calendar-view.enum';\nimport { addDaysWithExclusions } from './util';\n\n/**\n * Change the view date to the next view. For example:\n *\n * ```typescript\n * <button\n * mwlCalendarNextView\n * [(viewDate)]=\"viewDate\"\n * [view]=\"view\">\n * Next\n * </button>\n * ```\n */\n@Directive({\n selector: '[mwlCalendarNextView]',\n})\nexport class CalendarNextViewDirective {\n /**\n * The current view\n */\n @Input() view: CalendarView | 'month' | 'week' | 'day';\n\n /**\n * The current view date\n */\n @Input() viewDate: Date;\n\n /**\n * Days to skip when going forward by 1 day\n */\n @Input() excludeDays: number[] = [];\n\n /**\n * The number of days in a week. If set will add this amount of days instead of 1 week\n */\n @Input() daysInWeek: number;\n\n /**\n * Called when the view date is changed\n */\n @Output() viewDateChange: EventEmitter<Date> = new EventEmitter();\n\n constructor(private dateAdapter: DateAdapter) {}\n\n /**\n * @hidden\n */\n @HostListener('click')\n onClick(): void {\n const addFn: any = {\n day: this.dateAdapter.addDays,\n week: this.dateAdapter.addWeeks,\n month: this.dateAdapter.addMonths,\n }[this.view];\n\n if (this.view === CalendarView.Day) {\n this.viewDateChange.emit(\n addDaysWithExclusions(\n this.dateAdapter,\n this.viewDate,\n 1,\n this.excludeDays\n )\n );\n } else if (this.view === CalendarView.Week && this.daysInWeek) {\n this.viewDateChange.emit(\n addDaysWithExclusions(\n this.dateAdapter,\n this.viewDate,\n this.daysInWeek,\n this.excludeDays\n )\n );\n } else {\n this.viewDateChange.emit(addFn(this.viewDate, 1));\n }\n }\n}\n","import {\n Directive,\n HostListener,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\n\n/**\n * Change the view date to the current day. For example:\n *\n * ```typescript\n * <button\n * mwlCalendarToday\n * [(viewDate)]=\"viewDate\">\n * Today\n * </button>\n * ```\n */\n@Directive({\n selector: '[mwlCalendarToday]',\n})\nexport class CalendarTodayDirective {\n /**\n * The current view date\n */\n @Input() viewDate: Date;\n\n /**\n * Called when the view date is changed\n */\n @Output() viewDateChange: EventEmitter<Date> = new EventEmitter();\n\n constructor(private dateAdapter: DateAdapter) {}\n\n /**\n * @hidden\n */\n @HostListener('click')\n onClick(): void {\n this.viewDateChange.emit(this.dateAdapter.startOfDay(new Date()));\n }\n}\n","import {\n CalendarDateFormatterInterface,\n DateFormatterParams,\n} from './calendar-date-formatter.interface';\nimport { formatDate } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\nimport { getWeekViewPeriod } from './util';\n\n/**\n * This will use the angular date pipe to do all date formatting. It is the default date formatter used by the calendar.\n */\n@Injectable()\nexport class CalendarAngularDateFormatter\n implements CalendarDateFormatterInterface\n{\n constructor(protected dateAdapter: DateAdapter) {}\n\n /**\n * The month view header week day labels\n */\n public monthViewColumnHeader({ date, locale }: DateFormatterParams): string {\n return formatDate(date, 'EEEE', locale);\n }\n\n /**\n * The month view cell day number\n */\n public monthViewDayNumber({ date, locale }: DateFormatterParams): string {\n return formatDate(date, 'd', locale);\n }\n\n /**\n * The month view title\n */\n public monthViewTitle({ date, locale }: DateFormatterParams): string {\n return formatDate(date, 'LLLL y', locale);\n }\n\n /**\n * The week view header week day labels\n */\n public weekViewColumnHeader({ date, locale }: DateFormatterParams): string {\n return formatDate(date, 'EEEE', locale);\n }\n\n /**\n * The week view sub header day and month labels\n */\n public weekViewColumnSubHeader({\n date,\n locale,\n }: DateFormatterParams): string {\n return formatDate(date, 'MMM d', locale);\n }\n\n /**\n * The week view title\n */\n public weekViewTitle({\n date,\n locale,\n weekStartsOn,\n excludeDays,\n daysInWeek,\n }: DateFormatterParams): string {\n const { viewStart, viewEnd } = getWeekViewPeriod(\n this.dateAdapter,\n date,\n weekStartsOn,\n excludeDays,\n daysInWeek\n );\n const format = (dateToFormat: Date, showYear: boolean) =>\n formatDate(dateToFormat, 'MMM d' + (showYear ? ', yyyy' : ''), locale);\n return `${format(\n viewStart,\n viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()\n )} - ${format(viewEnd, true)}`;\n }\n\n /**\n * The time formatting down the left hand side of the week view\n */\n public weekViewHour({ date, locale }: DateFormatterParams): string {\n return formatDate(date, 'h a', locale);\n }\n\n /**\n * The time formatting down the left hand side of the day view\n */\n public dayViewHour({ date, locale }: DateFormatterParams): string {\n return formatDate(date, 'h a', locale);\n }\n\n /**\n * The day view title\n */\n public dayViewTitle({ date, locale }: DateFormatterParams): string {\n return formatDate(date, 'EEEE, MMMM d, y', locale);\n }\n}\n","import { CalendarAngularDateFormatter } from './calendar-angular-date-formatter.provider';\nimport { Injectable } from '@angular/core';\n\n/**\n * This class is responsible for all formatting of dates. There are 3 implementations available, the `CalendarAngularDateFormatter` (default) which uses the angular date pipe to format dates, the `CalendarNativeDateFormatter` which will use the <a href=\"https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl\" target=\"_blank\">Intl</a> API to format dates, or there is the `CalendarMomentDateFormatter` which uses <a href=\"http://momentjs.com/\" target=\"_blank\">moment</a>.\n *\n * If you wish, you may override any of the defaults via angulars DI. For example:\n *\n * ```typescript\n * import { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';\n * import { formatDate } from '@angular/common';\n * import { Injectable } from '@angular/core';\n *\n * @Injectable()\n * class CustomDateFormatter extends CalendarDateFormatter {\n *\n * public monthViewColumnHeader({date, locale}: DateFormatterParams): string {\n * return formatDate(date, 'EEE', locale); // use short week days\n * }\n *\n * }\n *\n * // in your component that uses the calendar\n * providers: [{\n * provide: CalendarDateFormatter,\n * useClass: CustomDateFormatter\n * }]\n * ```\n */\n@Injectable()\nexport class CalendarDateFormatter extends CalendarAngularDateFormatter {}\n","import { Pipe, PipeTransform, LOCALE_ID, Inject } from '@angular/core';\nimport { CalendarDateFormatter } from './calendar-date-formatter.provider';\n\n/**\n * This pipe is primarily for rendering the current view title. Example usage:\n * ```typescript\n * // where `viewDate` is a `Date` and view is `'month' | 'week' | 'day'`\n * {{ viewDate | calendarDate:(view + 'ViewTitle'):'en' }}\n * ```\n */\n@Pipe({\n name: 'calendarDate',\n})\nexport class CalendarDatePipe implements PipeTransform {\n constructor(\n private dateFormatter: CalendarDateFormatter,\n @Inject(LOCALE_ID) private locale: string\n ) {}\n\n transform(\n date: Date,\n method: string,\n locale: string = this.locale,\n weekStartsOn: number = 0,\n excludeDays: number[] = [],\n daysInWeek?: number\n ): string {\n if (typeof this.dateFormatter[method] === 'undefined') {\n const allowedMethods = Object.getOwnPropertyNames(\n Object.getPrototypeOf(CalendarDateFormatter.prototype)\n ).filter((iMethod) => iMethod !== 'constructor');\n throw new Error(\n `${method} is not a valid date formatter. Can only be one of ${allowedMethods.join(\n ', '\n )}`\n );\n }\n return this.dateFormatter[method]({\n date,\n locale,\n weekStartsOn,\n excludeDays,\n daysInWeek,\n });\n }\n}\n","import { CalendarEvent } from 'calendar-utils';\n\n/**\n * This class is responsible for displaying all event titles within the calendar. You may override any of its methods via angulars DI to suit your requirements. For example:\n *\n * ```typescript\n * import { Injectable } from '@angular/core';\n * import { CalendarEventTitleFormatter, CalendarEvent } from 'angular-calendar';\n *\n * @Injectable()\n * class CustomEventTitleFormatter extends CalendarEventTitleFormatter {\n *\n * month(event: CalendarEvent): string {\n * return `Custom prefix: ${event.title}`;\n * }\n *\n * }\n *\n * // in your component\n * providers: [{\n * provide: CalendarEventTitleFormatter,\n * useClass: CustomEventTitleFormatter\n * }]\n * ```\n */\nexport class CalendarEventTitleFormatter {\n /**\n * The month view event title.\n */\n month(event: CalendarEvent, title: string): string {\n return event.title;\n }\n\n /**\n * The month view event tooltip. Return a falsey value from this to disable the tooltip.\n */\n monthTooltip(event: CalendarEvent, title: string): string {\n return event.title;\n }\n\n /**\n * The week view event title.\n */\n week(event: CalendarEvent, title: string): string {\n return event.title;\n }\n\n /**\n * The week view event tooltip. Return a falsey value from this to disable the tooltip.\n */\n weekTooltip(event: CalendarEvent, title: string): string {\n return event.title;\n }\n\n /**\n * The day view event title.\n */\n day(event: CalendarEvent, title: string): string {\n return event.title;\n }\n\n /**\n * The day view event tooltip. Return a falsey value from this to disable the tooltip.\n */\n dayTooltip(event: CalendarEvent, title: string): string {\n return event.title;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CalendarEvent } from 'calendar-utils';\nimport { CalendarEventTitleFormatter } from './calendar-event-title-formatter.provider';\n\n@Pipe({\n name: 'calendarEventTitle',\n})\nexport class CalendarEventTitlePipe implements PipeTransform {\n constructor(private calendarEventTitle: CalendarEventTitleFormatter) {}\n\n transform(title: string, titleType: string, event: CalendarEvent): string {\n return this.calendarEventTitle[titleType](event, title);\n }\n}\n","import {\n Directive,\n Renderer2,\n ElementRef,\n OnInit,\n OnDestroy,\n Output,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n selector: '[mwlClick]',\n})\nexport class ClickDirective implements OnInit, OnDestroy {\n @Input() clickListenerDisabled = false;\n\n @Output('mwlClick') click = new EventEmitter<MouseEvent>(); // tslint:disable-line\n\n private destroy$ = new Subject();\n\n constructor(\n private renderer: Renderer2,\n private elm: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) private document\n ) {}\n\n ngOnInit(): void {\n if (!this.clickListenerDisabled) {\n this.listen()\n .pipe(takeUntil(this.destroy$))\n .subscribe((event) => {\n event.stopPropagation();\n this.click.emit(event);\n });\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n private listen() {\n return new Observable<MouseEvent>((observer) => {\n return this.renderer.listen(this.elm.nativeElement, 'click', (event) => {\n observer.next(event);\n });\n });\n }\n}\n","import {\n Directive,\n Output,\n EventEmitter,\n ElementRef,\n NgZone,\n Renderer2,\n OnInit,\n OnDestroy,\n} from '@angular/core';\n\n@Directive({ selector: '[mwlKeydownEnter]' })\nexport class KeydownEnterDirective implements OnInit, OnDestroy {\n @Output('mwlKeydownEnter') keydown = new EventEmitter<any>(); // tslint:disable-line\n\n private keydownListener: VoidFunction | null = null;\n\n constructor(\n private host: ElementRef<HTMLElement>,\n private ngZone: NgZone,\n private renderer: Renderer2\n ) {}\n\n ngOnInit(): void {\n this.ngZone.runOutsideAngular(() => {\n this.keydownListener = this.renderer.listen(\n this.host.nativeElement,\n 'keydown',\n (event) => {\n if (\n event.keyCode === 13 ||\n event.which === 13 ||\n event.key === 'Enter'\n ) {\n event.preventDefault();\n event.stopPropagation();\n\n this.ngZone.run(() => {\n this.keydown.emit(event);\n });\n }\n }\n );\n });\n }\n\n ngOnDestroy(): void {\n if (this.keydownListener !== null) {\n this.keydownListener();\n this.keydownListener = null;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n GetMonthViewArgs,\n MonthView,\n GetWeekViewHeaderArgs,\n WeekDay,\n GetWeekViewArgs,\n WeekView,\n getMonthView,\n getWeekViewHeader,\n getWeekView,\n} from 'calendar-utils';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\n\n@Injectable()\nexport class CalendarUtils {\n constructor(protected dateAdapter: DateAdapter) {}\n\n getMonthView(args: GetMonthViewArgs): MonthView {\n return getMonthView(this.dateAdapter, args);\n }\n\n getWeekViewHeader(args: GetWeekViewHeaderArgs): WeekDay[] {\n return getWeekViewHeader(this.dateAdapter, args);\n }\n\n getWeekView(args: GetWeekViewArgs): WeekView {\n return getWeekView(this.dateAdapter, args);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { formatDate, I18nPluralPipe } from '@angular/common';\nimport { A11yParams } from './calendar-a11y.interface';\n\n/**\n * This class is responsible for adding accessibility to the calendar.\n * You may override any of its methods via angulars DI to suit your requirements.\n * For example:\n *\n * ```typescript\n * import { A11yParams, CalendarA11y } from 'angular-calendar';\n * import { formatDate, I18nPluralPipe } from '@angular/common';\n * import { Injectable } from '@angular/core';\n *\n * // adding your own a11y params\n * export interface CustomA11yParams extends A11yParams {\n * isDrSuess?: boolean;\n * }\n *\n * @Injectable()\n * export class CustomCalendarA11y extends CalendarA11y {\n * constructor(protected i18nPlural: I18nPluralPipe) {\n * super(i18nPlural);\n * }\n *\n * // overriding a function\n * public openDayEventsLandmark({ date, locale, isDrSuess }: CustomA11yParams): string {\n * if (isDrSuess) {\n * return `\n * ${formatDate(date, 'EEEE MMMM d', locale)}\n * Today you are you! That is truer than true! There is no one alive\n * who is you-er than you!\n * `;\n * }\n * }\n * }\n *\n * // in your component that uses the calendar\n * providers: [{\n * provide: CalendarA11y,\n * useClass: CustomCalendarA11y\n * }]\n * ```\n */\n@Injectable()\nexport class CalendarA11y {\n constructor(protected i18nPlural: I18nPluralPipe) {}\n\n /**\n * Aria label for the badges/date of a cell\n * @example: `Saturday October 19 1 event click to expand`\n */\n public monthCell({ day, locale }: A11yParams): string {\n if (day.badgeTotal > 0) {\n return `\n ${formatDate(day.date, 'EEEE MMMM d', locale)},\n ${this.i18nPlural.transform(day.badgeTotal, {\n '=0': 'No events',\n '=1': 'One event',\n other: '# events',\n })},\n click to expand\n `;\n } else {\n return `${formatDate(day.date, 'EEEE MMMM d', locale)}`;\n }\n }\n\n /**\n * Aria label for the open day events start landmark\n * @example: `Saturday October 19 expanded view`\n */\n public openDayEventsLandmark({ date, locale }: A11yParams): string {\n return `\n Beginning of expanded view for ${formatDate(date, 'EEEE MMMM dd', locale)}\n `;\n }\n\n /**\n * Aria label for alert that a day in the month view was expanded\n * @example: `Saturday October 19 expanded`\n */\n public openDayEventsAlert({ date, locale }: A11yParams): string {\n return `${formatDate(date, 'EEEE MMMM dd', locale)} expanded`;\n }\n\n /**\n * Descriptive aria label for an event\n * @example: `Saturday October 19th, Scott's Pizza Party, from 11:00am to 5:00pm`\n */\n public eventDescription({ event, locale }: A11yParams): string {\n if (event.allDay === true) {\n return this.allDayEventDescription({ event, locale });\n }\n\n const aria = `\n ${formatDate(event.start, 'EEEE MMMM dd', locale)},\n ${event.title}, from ${formatDate(event.start, 'hh:mm a', locale)}\n `;\n if (event.end) {\n return aria + ` to ${formatDate(event.end, 'hh:mm a', locale)}`;\n }\n return aria;\n }\n\n /**\n * Descriptive aria label for an all day event\n * @example:\n * `Scott's Party, event spans multiple days: start time October 19 5:00pm, no stop time`\n */\n public allDayEventDescription({ event, locale }: A11yParams): string {\n const aria = `\n ${event.title}, event spans multiple days:\n start time ${formatDate(event.start, 'MMMM dd hh:mm a', locale)}\n `;\n if (event.end) {\n return (\n aria + `, stop time ${formatDate(event.end, 'MMMM d hh:mm a', locale)}`\n );\n }\n return aria + `, no stop time`;\n }\n\n /**\n * Aria label for the calendar event actions icons\n * @returns 'Edit' for fa-pencil icons, and 'Delete' for fa-times icons\n */\n public actionButtonLabel({ action }: A11yParams): string {\n return action.a11yLabel;\n }\n\n /**\n * @returns {number} Tab index to be given to month cells\n */\n public monthCellTabIndex(): number {\n return 0;\n }\n\n /**\n * @returns true if the events inside the month cell should be aria-hidden\n */\n public hideMonthCellEvents(): boolean {\n return true;\n }\n\n /**\n * @returns true if event titles should be aria-hidden (global)\n */\n public hideEventTitle(): boolean {\n return true;\n }\n\n /**\n * @returns true if hour segments in the week view should be aria-hidden\n */\n public hideWeekHourSegment(): boolean {\n return true;\n }\n\n /**\n * @returns true if hour segments in the day view should be aria-hidden\n */\n public hideDayHourSegment(): boolean {\n return true;\n }\n}\n","import { Pipe, PipeTransform, LOCALE_ID, Inject } from '@angular/core';\nimport { CalendarA11y } from './calendar-a11y.provider';\nimport { A11yParams } from './calendar-a11y.interface';\n\n/**\n * This pipe is primarily for rendering aria labels. Example usage:\n * ```typescript\n * // where `myEvent` is a `CalendarEvent` and myLocale is a locale identifier\n * {{ { event: myEvent, locale: myLocale } | calendarA11y: 'eventDescription' }}\n * ```\n */\n@Pipe({\n name: 'calendarA11y',\n})\nexport class CalendarA11yPipe implements PipeTransform {\n constructor(\n private calendarA11y: CalendarA11y,\n @Inject(LOCALE_ID) private locale: string\n ) {}\n\n transform(a11yParams: A11yParams, method: string): string {\n a11yParams.locale = a11yParams.locale || this.locale;\n if (typeof this.calendarA11y[method] === 'undefined') {\n const allowedMethods = Object.getOwnPropertyNames(\n Object.getPrototypeOf(CalendarA11y.prototype)\n ).filter((iMethod) => iMethod !== 'constructor');\n throw new Error(\n `${method} is not a valid a11y method. Can only be one of ${allowedMethods.join(\n ', '\n )}`\n );\n }\n return this.calendarA11y[method](a11yParams);\n }\n}\n","import { InjectionToken, Inject, Injectable } from '@angular/core';\nimport {\n CalendarDateFormatterInterface,\n DateFormatterParams,\n} from './calendar-date-formatter.interface';\nimport { getWeekViewPeriod } from './util';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\n\nexport const MOMENT: InjectionToken<string> = new InjectionToken('Moment');\n\n/**\n * This will use <a href=\"http://momentjs.com/\" target=\"_blank\">moment</a> to do all date formatting. To use this class:\n *\n * ```typescript\n * import { CalendarDateFormatter, CalendarMomentDateFormatter, MOMENT } from 'angular-calendar';\n * import moment from 'moment';\n *\n * // in your component\n * provide: [{\n * provide: MOMENT, useValue: moment\n * }, {\n * provide: CalendarDateFormatter, useClass: CalendarMomentDateFormatter\n * }]\n *\n * ```\n */\n@Injectable()\nexport class CalendarMomentDateFormatter\n implements CalendarDateFormatterInterface\n{\n /**\n * @hidden\n */\n constructor(\n @Inject(MOMENT) protected moment: any,\n protected dateAdapter: DateAdapter\n ) {}\n\n /**\n * The month view header week day labels\n */\n public monthViewColumnHeader({ date, locale }: DateFormatterParams): string {\n return this.moment(date).locale(locale).format('dddd');\n }\n\n /**\n * The month view cell day number\n */\n public monthViewDayNumber({ date, locale }: DateFormatterParams): string {\n return this.moment(date).locale(locale).format('D');\n }\n\n /**\n * The month view title\n */\n public monthViewTitle({ date, locale }: DateFormatterParams): string {\n return this.moment(date).locale(locale).format('MMMM YYYY');\n }\n\n /**\n * The week view header week day labels\n */\n public weekViewColumnHeader({ date, locale }: DateFormatterParams): string {\n return this.moment(date).locale(locale).format('dddd');\n }\n\n /**\n * The week view sub header day and month labels\n */\n public weekViewColumnSubHeader({\n date,\n locale,\n }: DateFormatterParams): string {\n return this.moment(date).locale(locale).format('MMM D');\n }\n\n /**\n * The week view title\n */\n public weekViewTitle({\n date,\n locale,\n weekStartsOn,\n excludeDays,\n daysInWeek,\n }: DateFormatterParams): string {\n const { viewStart, viewEnd } = getWeekViewPeriod(\n this.dateAdapter,\n date,\n weekStartsOn,\n excludeDays,\n daysInWeek\n );\n const format = (dateToFormat: Date, showYear: boolean) =>\n this.moment(dateToFormat)\n .locale(locale)\n .format('MMM D' + (showYear ? ', YYYY' : ''));\n return `${format(\n viewStart,\n viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()\n )} - ${format(viewEnd, true)}`;\n }\n\n /**\n * The time formatting down the left hand side of the week view\n */\n public weekViewHour({ date, locale }: DateFormatterParams): string {\n return this.moment(date).locale(locale).format('ha');\n }\n\n /**\n * The time formatting down the left hand side of the day view\n */\n public dayViewHour({ date, locale }: DateFormatterParams): string {\n return this.moment(date).locale(locale).format('ha');\n }\n\n /**\n * The day view title\n */\n public dayViewTitle({ date, locale }: DateFormatterParams): string {\n return this.moment(date).locale(locale).format('dddd, D MMMM, YYYY');\n }\n}\n","import {\n CalendarDateFormatterInterface,\n DateFormatterParams,\n} from './calendar-date-formatter.interface';\nimport { Injectable } from '@angular/core';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\nimport { getWeekViewPeriod } from './util';\n\n/**\n * This will use <a href=\"https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl\" target=\"_blank\">Intl</a> API to do all date formatting.\n *\n * You will need to include a <a href=\"https://github.com/andyearnshaw/Intl.js/\">polyfill</a> for older browsers.\n */\n@Injectable()\nexport class CalendarNativeDateFormatter\n implements CalendarDateFormatterInterface\n{\n constructor(protected dateAdapter: DateAdapter) {}\n\n /**\n * The month view header week day labels\n */\n public monthViewColumnHeader({ date, locale }: DateFormatterParams): string {\n return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);\n }\n\n /**\n * The month view cell day number\n */\n public monthViewDayNumber({ date, locale }: DateFormatterParams): string {\n return new Intl.DateTimeFormat(locale, { day: 'numeric' }).format(date);\n }\n\n /**\n * The month view title\n */\n public monthViewTitle({ date, locale }: DateFormatterParams): string {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n }).format(date);\n }\n\n /**\n * The week view header week day labels\n */\n public weekViewColumnHeader({ date, locale }: DateFormatterParams): string {\n return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);\n }\n\n /**\n * The week view sub header day and month labels\n */\n public weekViewColumnSubHeader({\n date,\n locale,\n }: DateFormatterParams): string {\n return new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'short',\n }).format(date);\n }\n\n /**\n * The week view title\n */\n public weekViewTitle({\n date,\n locale,\n weekStartsOn,\n excludeDays,\n daysInWeek,\n }: DateFormatterParams): string {\n const { viewStart, viewEnd } = getWeekViewPeriod(\n this.dateAdapter,\n date,\n weekStartsOn,\n excludeDays,\n daysInWeek\n );\n\n const format = (dateToFormat: Date, showYear: boolean) =>\n new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'short',\n year: showYear ? 'numeric' : undefined,\n }).format(dateToFormat);\n\n return `${format(\n viewStart,\n viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()\n )} - ${format(viewEnd, true)}`;\n }\n\n /**\n * The time formatting down the left hand side of the week view\n */\n public weekViewHour({ date, locale }: DateFormatterParams): string {\n return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);\n }\n\n /**\n * The time formatting down the left hand side of the day view\n */\n public dayViewHour({ date, locale }: DateFormatterParams): string {\n return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);\n }\n\n /**\n * The day view title\n */\n public dayViewTitle({ date, locale }: DateFormatterParams): string {\n return new Intl.DateTimeFormat(locale, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n weekday: 'long',\n }).format(date);\n }\n}\n","import { CalendarEvent } from 'calendar-utils';\n\nexport enum CalendarEventTimesChangedEventType {\n Drag = 'drag',\n Drop = 'drop',\n Resize = 'resize',\n}\n\n/**\n * The output `$event` type when an event is resized or dragged and dropped.\n */\nexport interface CalendarEventTimesChangedEvent<MetaType = any> {\n type: CalendarEventTimesChangedEventType;\n event: CalendarEvent<MetaType>;\n newStart: Date;\n newEnd?: Date;\n allDay?: boolean;\n}\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { CommonModule, I18nPluralPipe } from '@angular/common';\nimport { CalendarEventActionsComponent } from './calendar-event-actions.component';\nimport { CalendarEventTitleComponent } from './calendar-event-title.component';\nimport {\n CalendarTooltipDirective,\n CalendarTooltipWindowComponent,\n} from './calendar-tooltip.directive';\nimport { CalendarPreviousViewDirective } from './calendar-previous-view.directive';\nimport { CalendarNextViewDirective } from './calendar-next-view.directive';\nimport { CalendarTodayDirective } from './calendar-today.directive';\nimport { CalendarDatePipe } from './calendar-date.pipe';\nimport { CalendarEventTitlePipe } from './calendar-event-title.pipe';\nimport { ClickDirective } from './click.directive';\nimport { KeydownEnterDirective } from './keydown-enter.directive';\nimport { CalendarEventTitleFormatter } from './calendar-event-title-formatter.provider';\nimport { CalendarDateFormatter } from './calendar-date-formatter.provider';\nimport { CalendarUtils } from './calendar-utils.provider';\nimport { CalendarA11y } from './calendar-a11y.provider';\nimport { CalendarA11yPipe } from './calendar-a11y.pipe';\n\nexport interface CalendarModuleConfig {\n eventTitleFormatter?: Provider;\n dateFormatter?: Provider;\n utils?: Provider;\n a11y?: Provider;\n}\n\nexport * from './calendar-event-title-formatter.provider';\nexport * from './calendar-moment-date-formatter.provider';\nexport * from './calendar-native-date-formatter.provider';\nexport * from './calendar-angular-date-formatter.provider';\nexport * from './calendar-date-formatter.provider';\nexport * from './calendar-utils.provider';\nexport * from './calendar-a11y.provider';\nexport * from './calendar-a11y.interface';\nexport * from './calendar-date-formatter.interface';\nexport * from './calendar-event-times-changed-event.interface';\nexport * from '../../date-adapters/date-adapter';\nexport * from './calendar-view.enum';\n\nexport {\n CalendarEvent,\n EventAction as CalendarEventAction,\n DAYS_OF_WEEK,\n ViewPeriod as CalendarViewPeriod,\n} from 'calendar-utils';\n\n/**\n * Import this module to if you're just using a singular view and want to save on bundle size. Example usage:\n *\n * ```typescript\n * import { CalendarCommonModule, CalendarMonthModule } from 'angular-calendar';\n *\n * @NgModule({\n * imports: [\n * CalendarCommonModule.forRoot(),\n * CalendarMonthModule\n * ]\n * })\n * class MyModule {}\n * ```\n *\n */\n@NgModule({\n declarations: [\n CalendarEventActionsComponent,\n CalendarEventTitleComponent,\n CalendarTooltipWindowComponent,\n CalendarTooltipDirective,\n CalendarPreviousViewDirective,\n CalendarNextViewDirective,\n CalendarTodayDirective,\n CalendarDatePipe,\n CalendarEventTitlePipe,\n CalendarA11yPipe,\n ClickDirective,\n KeydownEnterDirective,\n ],\n imports: [CommonModule],\n exports: [\n CalendarEventActionsComponent,\n CalendarEventTitleComponent,\n CalendarTooltipWindowComponent,\n CalendarTooltipDirective,\n CalendarPreviousViewDirective,\n CalendarNextViewDirective,\n CalendarTodayDirective,\n CalendarDatePipe,\n CalendarEventTitlePipe,\n CalendarA11yPipe,\n ClickDirective,\n KeydownEnterDirective,\n ],\n providers: [I18nPluralPipe],\n entryComponents: [CalendarTooltipWindowComponent],\n})\nexport class CalendarCommonModule {\n static forRoot(\n dateAdapter: Provider,\n config: CalendarModuleConfig = {}\n ): ModuleWithProviders<CalendarCommonModule> {\n return {\n ngModule: CalendarCommonModule,\n providers: [\n dateAdapter,\n config.eventTitleFormatter || CalendarEventTitleFormatter,\n config.dateFormatter || CalendarDateFormatter,\n config.utils || CalendarUtils,\n config.a11y || CalendarA11y,\n ],\n };\n }\n}\n","import {\n Component,\n OnChanges,\n Input,\n Output,\n EventEmitter,\n ChangeDetectorRef,\n OnInit,\n OnDestroy,\n LOCALE_ID,\n Inject,\n TemplateRef,\n} from '@angular/core';\nimport {\n CalendarEvent,\n WeekDay,\n MonthView,\n MonthViewDay,\n ViewPeriod,\n} from 'calendar-utils';\nimport { Subject, Subscription } from 'rxjs';\nimport {\n CalendarEventTimesChangedEvent,\n CalendarEventTimesChangedEventType,\n} from '../common/calendar-event-times-changed-event.interface';\nimport { CalendarUtils } from '../common/calendar-utils.provider';\nimport { validateEvents } from '../common/util';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\nimport { PlacementArray } from 'positioning';\n\nexport interface CalendarMonthViewBeforeRenderEvent {\n header: WeekDay[];\n body: MonthViewDay[];\n period: ViewPeriod;\n}\n\nexport interface CalendarMonthViewEventTimesChangedEvent<\n EventMetaType = any,\n DayMetaType = any\n> extends CalendarEventTimesChangedEvent<EventMetaType> {\n day: MonthViewDay<DayMetaType>;\n}\n\n/**\n * Shows all events on a given month. Example usage:\n *\n * ```typescript\n * <mwl-calendar-month-view\n * [viewDate]=\"viewDate\"\n * [events]=\"events\">\n * </mwl-calendar-month-view>\n * ```\n */\n@Component({\n selector: 'mwl-calendar-month-view',\n template: `\n <div class=\"cal-month-view\" role=\"grid\">\n <mwl-calendar-month-view-header\n [days]=\"columnHeaders\"\n [locale]=\"locale\"\n (columnHeaderClicked)=\"columnHeaderClicked.emit($event)\"\n [customTemplate]=\"headerTemplate\"\n >\n </mwl-calendar-month-view-header>\n <div class=\"cal-days\">\n <div\n *ngFor=\"let rowIndex of view.rowOffsets; trackBy: trackByRowOffset\"\n >\n <div role=\"row\" class=\"cal-cell-row\">\n <mwl-calendar-month-cell\n role=\"gridcell\"\n *ngFor=\"\n let day of view.days\n | slice: rowIndex:rowIndex + view.totalDaysVisibleInWeek;\n trackBy: trackByDate\n \"\n [ngClass]=\"day?.cssClass\"\n [day]=\"day\"\n [openDay]=\"openDay\"\n [locale]=\"locale\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipDelay]=\"tooltipDelay\"\n [customTemplate]=\"cellTemplate\"\n [ngStyle]=\"{ backgroundColor: day.backgroundColor }\"\n (mwlClick)=\"dayClicked.emit({ day: day, sourceEvent: $event })\"\n [clickListenerDisabled]=\"dayClicked.observers.length === 0\"\n (mwlKeydownEnter)=\"\n dayClicked.emit({ day: day, sourceEvent: $event })\n \"\n (highlightDay)=\"toggleDayHighlight($event.event, true)\"\n (unhighlightDay)=\"toggleDayHighlight($event.event, false)\"\n mwlDroppable\n dragOverClass=\"cal-drag-over\"\n (drop)=\"\n eventDropped(\n day,\n $event.dropData.event,\n $event.dropData.draggedFrom\n )\n \"\n (eventClicked)=\"\n eventClicked.emit({\n event: $event.event,\n sourceEvent: $event.sourceEvent\n })\n \"\n [attr.tabindex]=\"{} | calendarA11y: 'monthCellTabIndex'\"\n >\n </mwl-calendar-month-cell>\n </div>\n <mwl-calendar-open-day-events\n [locale]=\"locale\"\n [isOpen]=\"openRowIndex === rowIndex\"\n [events]=\"openDay?.events\"\n [date]=\"openDay?.date\"\n [customTemplate]=\"openDayEventsTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n (eventClicked)=\"\n eventClicked.emit({\n event: $event.event,\n sourceEvent: $event.sourceEvent\n })\n \"\n mwlDroppable\n dragOverClass=\"cal-drag-over\"\n (drop)=\"\n eventDropped(\n openDay,\n $event.dropData.event,\n $event.dropData.draggedFrom\n )\n \"\n >\n </mwl-calendar-open-day-events>\n </div>\n </div>\n </div>\n `,\n})\nexport class CalendarMonthViewComponent\n implements OnChanges, OnInit, OnDestroy\n{\n /**\n * The current view date\n */\n @Input() viewDate: Date;\n\n /**\n * An array of events to display on view.\n * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63\n */\n @Input() events: CalendarEvent[] = [];\n\n /**\n * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view\n */\n @Input() excludeDays: number[] = [];\n\n /**\n * Whether the events list for the day of the `viewDate` option is visible or not\n */\n @Input() activeDayIsOpen: boolean = false;\n\n /**\n * If set will be used to determine the day that should be open. If not set, the `viewDate` is used\n */\n @Input() activeDay: Date;\n\n /**\n * An observable that when emitted on will re-render the current view\n */\n @Input() refresh: Subject<any>;\n\n /**\n * The locale used to format dates\n */\n @Input() locale: string;\n\n /**\n * The placement of the event tooltip\n */\n @Input() tooltipPlacement: PlacementArray = 'auto';\n\n /**\n * A custom template to use for the event tooltips\n */\n @Input() tooltipTemplate: TemplateRef<any>;\n\n /**\n * Whether to append tooltips to the body or next to the trigger element\n */\n @Input() tooltipAppendToBody: boolean = true;\n\n /**\n * The delay in milliseconds before the tooltip should be displayed. If not provided the tooltip\n * will be displayed immediately.\n */\n @Input() tooltipDelay: number | null = null;\n\n /**\n * The start number of the week.\n * If using the moment date adapter this option won't do anything and you'll need to set it globally like so:\n * ```\n * moment.updateLocale('en', {\n * week: {\n * dow: 1, // set start of week to monday instead\n * doy: 0,\n * },\n * });\n * ```\n */\n @Input() weekStartsOn: number;\n\n /**\n * A custom template to use to replace the header\n */\n @Input() headerTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use to replace the day cell\n */\n @Input() cellTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for the slide down box of events for the active day\n */\n @Input() openDayEventsTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for event titles\n */\n @Input() eventTitleTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for event actions\n */\n @Input() eventActionsTemplate: TemplateRef<any>;\n\n /**\n * An array of day indexes (0 = sunday, 1 = monday etc) that indicate which days are weekends\n */\n @Input() weekendDays: number[];\n\n /**\n * An output that will be called before the view is rendered for the current month.\n * If you add the `cssClass` property to a day in the body it will add that class to the cell element in the template\n */\n @Output() beforeViewRender =\n new EventEmitter<CalendarMonthViewBeforeRenderEvent>();\n\n /**\n * Called when the day cell is clicked\n */\n @Output() dayClicked = new EventEmitter<{\n day: MonthViewDay;\n sourceEvent: MouseEvent | any;\n }>();\n\n /**\n * Called when the event title is clicked\n */\n @Output() eventClicked = new EventEmitter<{\n event: CalendarEvent;\n sourceEvent: MouseEvent | any;\n }>();\n\n /**\n * Called when a header week day is clicked. Returns ISO day number.\n */\n @Output() columnHeaderClicked = new EventEmitter<{\n isoDayNumber: number;\n sourceEvent: MouseEvent | any;\n }>();\n\n /**\n * Called when an event is dragged and dropped\n */\n @Output()\n eventTimesChanged = new EventEmitter<CalendarMonthViewEventTimesChangedEvent>();\n\n /**\n * @hidden\n */\n columnHeaders: WeekDay[];\n\n /**\n * @hidden\n */\n view: MonthView;\n\n /**\n * @hidden\n */\n openRowIndex: number;\n\n /**\n * @hidden\n */\n openDay: MonthViewDay;\n\n /**\n * @hidden\n */\n refreshSubscription: Subscription;\n\n /**\n * @hidden\n */\n constructor(\n protected cdr: ChangeDetectorRef,\n protected utils: CalendarUtils,\n @Inject(LOCALE_ID) locale: string,\n protected dateAdapter: DateAdapter\n ) {\n this.locale = locale;\n }\n\n /**\n * @hidden\n */\n trackByRowOffset = (index: number, offset: number) =>\n this.view.days\n .slice(offset, this.view.totalDaysVisibleInWeek)\n .map((day) => day.date.toISOString())\n .join('-');\n\n /**\n * @hidden\n */\n trackByDate = (index: number, day: MonthViewDay) => day.date.toISOString();\n\n /**\n * @hidden\n */\n ngOnInit(): void {\n if (this.refresh) {\n this.refreshSubscription = this.refresh.subscribe(() => {\n this.refreshAll();\n this.cdr.markForCheck();\n });\n }\n }\n\n /**\n * @hidden\n */\n ngOnChanges(changes: any): void {\n const refreshHeader =\n changes.viewDate || changes.excludeDays || changes.weekendDays;\n const refreshBody =\n changes.viewDate ||\n changes.events ||\n changes.excludeDays ||\n changes.weekendDays;\n\n if (refreshHeader) {\n this.refreshHeader();\n }\n\n if (changes.events) {\n validateEvents(this.events);\n }\n\n if (refreshBody) {\n this.refreshBody();\n }\n\n if (refreshHeader || refreshBody) {\n this.emitBeforeViewRender();\n }\n\n if (\n changes.activeDayIsOpen ||\n changes.viewDate ||\n changes.events ||\n changes.excludeDays ||\n changes.activeDay\n ) {\n this.checkActiveDayIsOpen();\n }\n }\n\n /**\n * @hidden\n */\n ngOnDestroy(): void {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n }\n }\n\n /**\n * @hidden\n */\n toggleDayHighlight(event: CalendarEvent, isHighlighted: boolean): void {\n this.view.days.forEach((day) => {\n if (isHighlighted && day.events.indexOf(event) > -1) {\n day.backgroundColor =\n (event.color && event.color.secondary) || '#D1E8FF';\n } else {\n delete day.backgroundColor;\n }\n });\n }\n\n /**\n * @hidden\n */\n eventDropped(\n droppedOn: MonthViewDay,\n event: CalendarEvent,\n draggedFrom?: MonthViewDay\n ): void {\n if (droppedOn !== draggedFrom) {\n const year: number = this.dateAdapter.getYear(droppedOn.date);\n const month: number = this.dateAdapter.getMonth(droppedOn.date);\n const date: number = this.dateAdapter.getDate(droppedOn.date);\n const newStart: Date = this.dateAdapter.setDate(\n this.dateAdapter.setMonth(\n this.dateAdapter.setYear(event.start, year),\n month\n ),\n date\n );\n let newEnd: Date;\n if (event.end) {\n const secondsDiff: number = this.dateAdapter.differenceInSeconds(\n newStart,\n event.start\n );\n newEnd = this.dateAdapter.addSeconds(event.end, secondsDiff);\n }\n this.eventTimesChanged.emit({\n event,\n newStart,\n newEnd,\n day: droppedOn,\n type: CalendarEventTimesChangedEventType.Drop,\n });\n }\n }\n\n protected refreshHeader(): void {\n this.columnHeaders = this.utils.getWeekViewHeader({\n viewDate: this.viewDate,\n weekStartsOn: this.weekStartsOn,\n excluded: this.excludeDays,\n weekendDays: this.weekendDays,\n });\n }\n\n protected refreshBody(): void {\n this.view = this.utils.getMonthView({\n events: this.events,\n viewDate: this.viewDate,\n weekStartsOn: this.weekStartsOn,\n excluded: this.excludeDays,\n weekendDays: this.weekendDays,\n });\n }\n\n protected checkActiveDayIsOpen(): void {\n if (this.activeDayIsOpen === true) {\n const activeDay = this.activeDay || this.viewDate;\n this.openDay = this.view.days.find((day) =>\n this.dateAdapter.isSameDay(day.date, activeDay)\n );\n const index: number = this.view.days.indexOf(this.openDay);\n this.openRowIndex =\n Math.floor(index / this.view.totalDaysVisibleInWeek) *\n this.view.totalDaysVisibleInWeek;\n } else {\n this.openRowIndex = null;\n this.openDay = null;\n }\n }\n\n protected refreshAll(): void {\n this.refreshHeader();\n this.refreshBody();\n this.emitBeforeViewRender();\n this.checkActiveDayIsOpen();\n }\n\n protected emitBeforeViewRender(): void {\n if (this.columnHeaders && this.view) {\n this.beforeViewRender.emit({\n header: this.columnHeaders,\n body: this.view.days,\n period: this.view.period,\n });\n }\n }\n}\n","import {\n Component,\n Input,\n TemplateRef,\n EventEmitter,\n Output,\n} from '@angular/core';\nimport { WeekDay } from 'calendar-utils';\nimport { trackByWeekDayHeaderDate } from '../common/util';\n\n@Component({\n selector: 'mwl-calendar-month-view-header',\n template: `\n <ng-template\n #defaultTemplate\n let-days=\"days\"\n let-locale=\"locale\"\n let-trackByWeekDayHeaderDate=\"trackByWeekDayHeaderDate\"\n >\n <div class=\"cal-cell-row cal-header\" role=\"row\">\n <div\n class=\"cal-cell\"\n *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\n [class.cal-past]=\"day.isPast\"\n [class.cal-today]=\"day.isToday\"\n [class.cal-future]=\"day.isFuture\"\n [class.cal-weekend]=\"day.isWeekend\"\n (click)=\"\n columnHeaderClicked.emit({\n isoDayNumber: day.day,\n sourceEvent: $event\n })\n \"\n [ngClass]=\"day.cssClass\"\n tabindex=\"0\"\n role=\"columnheader\"\n >\n {{ day.date | calendarDate: 'monthViewColumnHeader':locale }}\n </div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n days: days,\n locale: locale,\n trackByWeekDayHeaderDate: trackByWeekDayHeaderDate\n }\"\n >\n </ng-template>\n `,\n})\nexport class CalendarMonthViewHeaderComponent {\n @Input() days: WeekDay[];\n\n @Input() locale: string;\n\n @Input() customTemplate: TemplateRef<any>;\n\n @Output() columnHeaderClicked = new EventEmitter<{\n isoDayNumber: number;\n sourceEvent: MouseEvent;\n }>();\n\n trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n TemplateRef,\n} from '@angular/core';\nimport { MonthViewDay, CalendarEvent } from 'calendar-utils';\nimport { isWithinThreshold, trackByEventId } from '../common/util';\nimport { PlacementArray } from 'positioning';\n\n@Component({\n selector: 'mwl-calendar-month-cell',\n template: `\n <ng-template\n #defaultTemplate\n let-day=\"day\"\n let-openDay=\"openDay\"\n let-locale=\"locale\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-highlightDay=\"highlightDay\"\n let-unhighlightDay=\"unhighlightDay\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDelay=\"tooltipDelay\"\n let-trackByEventId=\"trackByEventId\"\n let-validateDrag=\"validateDrag\"\n >\n <div\n class=\"cal-cell-top\"\n [attr.aria-label]=\"\n { day: day, locale: locale } | calendarA11y: 'monthCell'\n \"\n >\n <span aria-hidden=\"true\">\n <span class=\"cal-day-badge\" *ngIf=\"day.badgeTotal > 0\">{{\n day.badgeTotal\n }}</span>\n <span class=\"cal-day-number\">{{\n day.date | calendarDate: 'monthViewDayNumber':locale\n }}</span>\n </span>\n </div>\n <div class=\"cal-events\" *ngIf=\"day.events.length > 0\">\n <div\n class=\"cal-event\"\n *ngFor=\"let event of day.events; trackBy: trackByEventId\"\n [ngStyle]=\"{ backgroundColor: event.color?.primary }\"\n [ngClass]=\"event?.cssClass\"\n (mouseenter)=\"highlightDay.emit({ event: event })\"\n (mouseleave)=\"unhighlightDay.emit({ event: event })\"\n [mwlCalendarTooltip]=\"\n event.title | calendarEventTitle: 'monthTooltip':event\n \"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n mwlDraggable\n [class.cal-draggable]=\"event.draggable\"\n dragActiveClass=\"cal-drag-active\"\n [dropData]=\"{ event: event, draggedFrom: day }\"\n [dragAxis]=\"{ x: event.draggable, y: event.draggable }\"\n [validateDrag]=\"validateDrag\"\n [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n (mwlClick)=\"eventClicked.emit({ event: event, sourceEvent: $event })\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideMonthCellEvents'\"\n ></div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n day: day,\n openDay: openDay,\n locale: locale,\n tooltipPlacement: tooltipPlacement,\n highlightDay: highlightDay,\n unhighlightDay: unhighlightDay,\n eventClicked: eventClicked,\n tooltipTemplate: tooltipTemplate,\n tooltipAppendToBody: tooltipAppendToBody,\n tooltipDelay: tooltipDelay,\n trackByEventId: trackByEventId,\n validateDrag: validateDrag\n }\"\n >\n </ng-template>\n `,\n host: {\n class: 'cal-cell cal-day-cell',\n '[class.cal-past]': 'day.isPast',\n '[class.cal-today]': 'day.isToday',\n '[class.cal-future]': 'day.isFuture',\n '[class.cal-weekend]': 'day.isWeekend',\n '[class.cal-in-month]': 'day.inMonth',\n '[class.cal-out-month]': '!day.inMonth',\n '[class.cal-has-events]': 'day.events.length > 0',\n '[class.cal-open]': 'day === openDay',\n '[class.cal-event-highlight]': '!!day.backgroundColor',\n },\n})\nexport class CalendarMonthCellComponent {\n @Input() day: MonthViewDay;\n\n @Input() openDay: MonthViewDay;\n\n @Input() locale: string;\n\n @Input() tooltipPlacement: PlacementArray;\n\n @Input() tooltipAppendToBody: boolean;\n\n @Input() customTemplate: TemplateRef<any>;\n\n @Input() tooltipTemplate: TemplateRef<any>;\n\n @Input() tooltipDelay: number | null;\n\n @Output() highlightDay: EventEmitter<any> = new EventEmitter();\n\n @Output() unhighlightDay: EventEmitter<any> = new EventEmitter();\n\n @Output() eventClicked = new EventEmitter<{\n event: CalendarEvent;\n sourceEvent: MouseEvent;\n }>();\n\n trackByEventId = trackByEventId;\n\n validateDrag = isWithinThreshold;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n TemplateRef,\n} from '@angular/core';\nimport {\n trigger,\n style,\n state,\n transition,\n animate,\n AnimationTriggerMetadata,\n} from '@angular/animations';\nimport { CalendarEvent } from 'calendar-utils';\nimport { isWithinThreshold, trackByEventId } from '../common/util';\n\nexport const collapseAnimation: AnimationTriggerMetadata = trigger('collapse', [\n state(\n 'void',\n style({\n height: 0,\n overflow: 'hidden',\n 'padding-top': 0,\n 'padding-bottom': 0,\n })\n ),\n state(\n '*',\n style({\n height: '*',\n overflow: 'hidden',\n 'padding-top': '*',\n 'padding-bottom': '*',\n })\n ),\n transition('* => void', animate('150ms ease-out')),\n transition('void => *', animate('150ms ease-in')),\n]);\n\n@Component({\n selector: 'mwl-calendar-open-day-events',\n template: `\n <ng-template\n #defaultTemplate\n let-events=\"events\"\n let-eventClicked=\"eventClicked\"\n let-isOpen=\"isOpen\"\n let-trackByEventId=\"trackByEventId\"\n let-validateDrag=\"validateDrag\"\n >\n <div\n class=\"cal-open-day-events\"\n [@collapse]\n *ngIf=\"isOpen\"\n role=\"application\"\n >\n <span\n tabindex=\"-1\"\n role=\"alert\"\n [attr.aria-label]=\"\n { date: date, locale: locale } | calendarA11y: 'openDayEventsAlert'\n \"\n ></span>\n <span\n tabindex=\"0\"\n role=\"landmark\"\n [attr.aria-label]=\"\n { date: date, locale: locale }\n | calendarA11y: 'openDayEventsLandmark'\n \"\n ></span>\n <div\n *ngFor=\"let event of events; trackBy: trackByEventId\"\n [ngClass]=\"event?.cssClass\"\n mwlDraggable\n [class.cal-draggable]=\"event.draggable\"\n dragActiveClass=\"cal-drag-active\"\n [dropData]=\"{ event: event }\"\n [dragAxis]=\"{ x: event.draggable, y: event.draggable }\"\n [validateDrag]=\"validateDrag\"\n [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n >\n <span\n class=\"cal-event\"\n [ngStyle]=\"{ backgroundColor: event.color?.primary }\"\n >\n </span>\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"event\"\n [customTemplate]=\"eventTitleTemplate\"\n view=\"month\"\n (mwlClick)=\"\n eventClicked.emit({ event: event, sourceEvent: $event })\n \"\n (mwlKeydownEnter)=\"\n eventClicked.emit({ event: event, sourceEvent: $event })\n \"\n tabindex=\"0\"\n [attr.aria-label]=\"\n { event: event, locale: locale }\n | calendarA11y: 'eventDescription'\n \"\n >\n </mwl-calendar-event-title>\n &ngsp;\n <mwl-calendar-event-actions\n [event]=\"event\"\n [customTemplate]=\"eventActionsTemplate\"\n >\n </mwl-calendar-event-actions>\n </div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n events: events,\n eventClicked: eventClicked,\n isOpen: isOpen,\n trackByEventId: trackByEventId,\n validateDrag: validateDrag\n }\"\n >\n </ng-template>\n `,\n animations: [collapseAnimation],\n})\nexport class CalendarOpenDayEventsComponent {\n @Input() locale: string;\n\n @Input() isOpen: boolean = false;\n\n @Input() events: CalendarEvent[];\n\n @Input() customTemplate: TemplateRef<any>;\n\n @Input() eventTitleTemplate: TemplateRef<any>;\n\n @Input() eventActionsTemplate: TemplateRef<any>;\n\n @Input() date: Date;\n\n @Output() eventClicked = new EventEmitter<{\n event: CalendarEvent;\n sourceEvent: MouseEvent | any;\n }>();\n\n trackByEventId = trackByEventId;\n\n validateDrag = isWithinThreshold;\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragAndDropModule } from 'angular-draggable-droppable';\nimport { CalendarMonthViewComponent } from './calendar-month-view.component';\nimport { CalendarMonthViewHeaderComponent } from './calendar-month-view-header.component';\nimport { CalendarMonthCellComponent } from './calendar-month-cell.component';\nimport { CalendarOpenDayEventsComponent } from './calendar-open-day-events.component';\nimport { CalendarCommonModule } from '../common/calendar-common.module';\n\nexport {\n CalendarMonthViewComponent,\n CalendarMonthViewBeforeRenderEvent,\n CalendarMonthViewEventTimesChangedEvent,\n} from './calendar-month-view.component';\nexport { MonthViewDay as CalendarMonthViewDay } from 'calendar-utils';\nexport { collapseAnimation } from './calendar-open-day-events.component';\n\n@NgModule({\n imports: [CommonModule, DragAndDropModule, CalendarCommonModule],\n declarations: [\n CalendarMonthViewComponent,\n CalendarMonthCellComponent,\n CalendarOpenDayEventsComponent,\n CalendarMonthViewHeaderComponent,\n ],\n exports: [\n DragAndDropModule,\n CalendarMonthViewComponent,\n CalendarMonthCellComponent,\n CalendarOpenDayEventsComponent,\n CalendarMonthViewHeaderComponent,\n ],\n})\nexport class CalendarMonthModule {}\n","import { isInside, isWithinThreshold } from './util';\nimport { ValidateDragParams } from 'angular-draggable-droppable';\n\nexport class CalendarDragHelper {\n private readonly startPosition: ClientRect;\n\n constructor(\n private dragContainerElement: HTMLElement,\n draggableElement: HTMLElement\n ) {\n this.startPosition = draggableElement.getBoundingClientRect();\n }\n\n validateDrag({\n x,\n y,\n snapDraggedEvents,\n dragAlreadyMoved,\n transform,\n }: {\n x: number;\n y: number;\n snapDraggedEvents: boolean;\n dragAlreadyMoved: boolean;\n transform: ValidateDragParams['transform'];\n }): boolean {\n if (snapDraggedEvents) {\n const newRect: ClientRect = Object.assign({}, this.startPosition, {\n left: this.startPosition.left + transform.x,\n right: this.startPosition.right + transform.x,\n top: this.startPosition.top + transform.y,\n bottom: this.startPosition.bottom + transform.y,\n });\n\n return (\n (isWithinThreshold({ x, y }) || dragAlreadyMoved) &&\n isInside(this.dragContainerElement.getBoundingClientRect(), newRect)\n );\n } else {\n return isWithinThreshold({ x, y }) || dragAlreadyMoved;\n }\n }\n}\n","import { isInside } from './util';\n\nexport class CalendarResizeHelper {\n constructor(\n private resizeContainerElement: HTMLElement,\n private minWidth?: number\n ) {}\n\n validateResize({ rectangle }: { rectangle: ClientRect }): boolean {\n if (\n this.minWidth &&\n Math.ceil(rectangle.width) < Math.ceil(this.minWidth)\n ) {\n return false;\n }\n\n return isInside(\n this.resizeContainerElement.getBoundingClientRect(),\n rectangle\n );\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectorRef,\n OnChanges,\n OnInit,\n OnDestroy,\n LOCALE_ID,\n Inject,\n TemplateRef,\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport {\n WeekDay,\n CalendarEvent,\n WeekViewAllDayEvent,\n WeekView,\n ViewPeriod,\n WeekViewHourColumn,\n WeekViewTimeEvent,\n WeekViewHourSegment,\n WeekViewHour,\n WeekViewAllDayEventRow,\n} from 'calendar-utils';\nimport { ResizeEvent } from 'angular-resizable-element';\nimport { CalendarDragHelper } from '../common/calendar-drag-helper.provider';\nimport { CalendarResizeHelper } from '../common/calendar-resize-helper.provider';\nimport {\n CalendarEventTimesChangedEvent,\n CalendarEventTimesChangedEventType,\n} from '../common/calendar-event-times-changed-event.interface';\nimport { CalendarUtils } from '../common/calendar-utils.provider';\nimport {\n validateEvents,\n roundToNearest,\n trackByWeekDayHeaderDate,\n trackByHourSegment,\n trackByHour,\n getMinutesMoved,\n getDefaultEventEnd,\n getMinimumEventHeightInMinutes,\n addDaysWithExclusions,\n isDraggedWithinPeriod,\n shouldFireDroppedEvent,\n getWeekViewPeriod,\n trackByWeekAllDayEvent,\n trackByWeekTimeEvent,\n} from '../common/util';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\nimport {\n DragEndEvent,\n DropEvent,\n DragMoveEvent,\n ValidateDrag,\n} from 'angular-draggable-droppable';\nimport { PlacementArray } from 'positioning';\n\nexport interface WeekViewAllDayEventResize {\n originalOffset: number;\n originalSpan: number;\n edge: string;\n}\n\nexport interface CalendarWeekViewBeforeRenderEvent extends WeekView {\n header: WeekDay[];\n}\n\n/**\n * Shows all events on a given week. Example usage:\n *\n * ```typescript\n * <mwl-calendar-week-view\n * [viewDate]=\"viewDate\"\n * [events]=\"events\">\n * </mwl-calendar-week-view>\n * ```\n */\n@Component({\n selector: 'mwl-calendar-week-view',\n template: `\n <div class=\"cal-week-view\" role=\"grid\">\n <mwl-calendar-week-view-header\n [days]=\"days\"\n [locale]=\"locale\"\n [customTemplate]=\"headerTemplate\"\n (dayHeaderClicked)=\"dayHeaderClicked.emit($event)\"\n (eventDropped)=\"\n eventDropped({ dropData: $event }, $event.newStart, true)\n \"\n (dragEnter)=\"dateDragEnter($event.date)\"\n >\n </mwl-calendar-week-view-header>\n <div\n class=\"cal-all-day-events\"\n #allDayEventsContainer\n *ngIf=\"view.allDayEventRows.length > 0\"\n mwlDroppable\n (dragEnter)=\"dragEnter('allDay')\"\n (dragLeave)=\"dragLeave('allDay')\"\n >\n <div class=\"cal-day-columns\">\n <div\n class=\"cal-time-label-column\"\n [ngTemplateOutlet]=\"allDayEventsLabelTemplate\"\n ></div>\n <div\n class=\"cal-day-column\"\n *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\n mwlDroppable\n dragOverClass=\"cal-drag-over\"\n (drop)=\"eventDropped($event, day.date, true)\"\n (dragEnter)=\"dateDragEnter(day.date)\"\n ></div>\n </div>\n <div\n *ngFor=\"let eventRow of view.allDayEventRows; trackBy: trackById\"\n #eventRowContainer\n class=\"cal-events-row\"\n >\n <div\n *ngFor=\"\n let allDayEvent of eventRow.row;\n trackBy: trackByWeekAllDayEvent\n \"\n #event\n class=\"cal-event-container\"\n [class.cal-draggable]=\"\n allDayEvent.event.draggable && allDayEventResizes.size === 0\n \"\n [class.cal-starts-within-week]=\"!allDayEvent.startsBeforeWeek\"\n [class.cal-ends-within-week]=\"!allDayEvent.endsAfterWeek\"\n [ngClass]=\"allDayEvent.event?.cssClass\"\n [style.width.%]=\"(100 / days.length) * allDayEvent.span\"\n [style.marginLeft.%]=\"(100 / days.length) * allDayEvent.offset\"\n mwlResizable\n [resizeSnapGrid]=\"{ left: dayColumnWidth, right: dayColumnWidth }\"\n [validateResize]=\"validateResize\"\n (resizeStart)=\"\n allDayEventResizeStarted(eventRowContainer, allDayEvent, $event)\n \"\n (resizing)=\"\n allDayEventResizing(allDayEvent, $event, dayColumnWidth)\n \"\n (resizeEnd)=\"allDayEventResizeEnded(allDayEvent)\"\n mwlDraggable\n dragActiveClass=\"cal-drag-active\"\n [dropData]=\"{ event: allDayEvent.event, calendarId: calendarId }\"\n [dragAxis]=\"{\n x: allDayEvent.event.draggable && allDayEventResizes.size === 0,\n y:\n !snapDraggedEvents &&\n allDayEvent.event.draggable &&\n allDayEventResizes.size === 0\n }\"\n [dragSnapGrid]=\"snapDraggedEvents ? { x: dayColumnWidth } : {}\"\n [validateDrag]=\"validateDrag\"\n [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n (dragStart)=\"dragStarted(eventRowContainer, event)\"\n (dragging)=\"allDayEventDragMove()\"\n (dragEnd)=\"dragEnded(allDayEvent, $event, dayColumnWidth)\"\n >\n <div\n class=\"cal-resize-handle cal-resize-handle-before-start\"\n *ngIf=\"\n allDayEvent.event?.resizable?.beforeStart &&\n !allDayEvent.startsBeforeWeek\n \"\n mwlResizeHandle\n [resizeEdges]=\"{ left: true }\"\n ></div>\n <mwl-calendar-week-view-event\n [locale]=\"locale\"\n [weekEvent]=\"allDayEvent\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n [customTemplate]=\"eventTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n [daysInWeek]=\"daysInWeek\"\n (eventClicked)=\"\n eventClicked.emit({\n event: allDayEvent.event,\n sourceEvent: $event.sourceEvent\n })\n \"\n >\n </mwl-calendar-week-view-event>\n <div\n class=\"cal-resize-handle cal-resize-handle-after-end\"\n *ngIf=\"\n allDayEvent.event?.resizable?.afterEnd &&\n !allDayEvent.endsAfterWeek\n \"\n mwlResizeHandle\n [resizeEdges]=\"{ right: true }\"\n ></div>\n </div>\n </div>\n </div>\n <div\n class=\"cal-time-events\"\n mwlDroppable\n (dragEnter)=\"dragEnter('time')\"\n (dragLeave)=\"dragLeave('time')\"\n >\n <div\n class=\"cal-time-label-column\"\n *ngIf=\"view.hourColumns.length > 0 && daysInWeek !== 1\"\n >\n <div\n *ngFor=\"\n let hour of view.hourColumns[0].hours;\n trackBy: trackByHour;\n let odd = odd\n \"\n class=\"cal-hour\"\n [class.cal-hour-odd]=\"odd\"\n >\n <mwl-calendar-week-view-hour-segment\n *ngFor=\"let segment of hour.segments; trackBy: trackByHourSegment\"\n [style.height.px]=\"hourSegmentHeight\"\n [segment]=\"segment\"\n [segmentHeight]=\"hourSegmentHeight\"\n [locale]=\"locale\"\n [customTemplate]=\"hourSegmentTemplate\"\n [isTimeLabel]=\"true\"\n [daysInWeek]=\"daysInWeek\"\n >\n </mwl-calendar-week-view-hour-segment>\n </div>\n </div>\n <div\n class=\"cal-day-columns\"\n [class.cal-resize-active]=\"timeEventResizes.size > 0\"\n #dayColumns\n >\n <div\n class=\"cal-day-column\"\n *ngFor=\"let column of view.hourColumns; trackBy: trackByHourColumn\"\n >\n <mwl-calendar-week-view-current-time-marker\n [columnDate]=\"column.date\"\n [dayStartHour]=\"dayStartHour\"\n [dayStartMinute]=\"dayStartMinute\"\n [dayEndHour]=\"dayEndHour\"\n [dayEndMinute]=\"dayEndMinute\"\n [hourSegments]=\"hourSegments\"\n [hourSegmentHeight]=\"hourSegmentHeight\"\n [customTemplate]=\"currentTimeMarkerTemplate\"\n ></mwl-calendar-week-view-current-time-marker>\n <div class=\"cal-events-container\">\n <div\n *ngFor=\"\n let timeEvent of column.events;\n trackBy: trackByWeekTimeEvent\n \"\n #event\n class=\"cal-event-container\"\n [class.cal-draggable]=\"\n timeEvent.event.draggable && timeEventResizes.size === 0\n \"\n [class.cal-starts-within-day]=\"!timeEvent.startsBeforeDay\"\n [class.cal-ends-within-day]=\"!timeEvent.endsAfterDay\"\n [ngClass]=\"timeEvent.event.cssClass\"\n [hidden]=\"timeEvent.height === 0 && timeEvent.width === 0\"\n [style.top.px]=\"timeEvent.top\"\n [style.height.px]=\"timeEvent.height\"\n [style.left.%]=\"timeEvent.left\"\n [style.width.%]=\"timeEvent.width\"\n mwlResizable\n [resizeSnapGrid]=\"{\n left: dayColumnWidth,\n right: dayColumnWidth,\n top: eventSnapSize || hourSegmentHeight,\n bottom: eventSnapSize || hourSegmentHeight\n }\"\n [validateResize]=\"validateResize\"\n [allowNegativeResizes]=\"true\"\n (resizeStart)=\"\n timeEventResizeStarted(dayColumns, timeEvent, $event)\n \"\n (resizing)=\"timeEventResizing(timeEvent, $event)\"\n (resizeEnd)=\"timeEventResizeEnded(timeEvent)\"\n mwlDraggable\n dragActiveClass=\"cal-drag-active\"\n [dropData]=\"{ event: timeEvent.event, calendarId: calendarId }\"\n [dragAxis]=\"{\n x: timeEvent.event.draggable && timeEventResizes.size === 0,\n y: timeEvent.event.draggable && timeEventResizes.size === 0\n }\"\n [dragSnapGrid]=\"\n snapDraggedEvents\n ? {\n x: dayColumnWidth,\n y: eventSnapSize || hourSegmentHeight\n }\n : {}\n \"\n [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n [ghostDragEnabled]=\"!snapDraggedEvents\"\n [ghostElementTemplate]=\"weekEventTemplate\"\n [validateDrag]=\"validateDrag\"\n (dragStart)=\"dragStarted(dayColumns, event, timeEvent)\"\n (dragging)=\"dragMove(timeEvent, $event)\"\n (dragEnd)=\"dragEnded(timeEvent, $event, dayColumnWidth, true)\"\n >\n <div\n class=\"cal-resize-handle cal-resize-handle-before-start\"\n *ngIf=\"\n timeEvent.event?.resizable?.beforeStart &&\n !timeEvent.startsBeforeDay\n \"\n mwlResizeHandle\n [resizeEdges]=\"{\n left: true,\n top: true\n }\"\n ></div>\n <ng-template\n [ngTemplateOutlet]=\"weekEventTemplate\"\n ></ng-template>\n <ng-template #weekEventTemplate>\n <mwl-calendar-week-view-event\n [locale]=\"locale\"\n [weekEvent]=\"timeEvent\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDisabled]=\"dragActive || timeEventResizes.size > 0\"\n [tooltipDelay]=\"tooltipDelay\"\n [customTemplate]=\"eventTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n [column]=\"column\"\n [daysInWeek]=\"daysInWeek\"\n (eventClicked)=\"\n eventClicked.emit({\n event: timeEvent.event,\n sourceEvent: $event.sourceEvent\n })\n \"\n >\n </mwl-calendar-week-view-event>\n </ng-template>\n <div\n class=\"cal-resize-handle cal-resize-handle-after-end\"\n *ngIf=\"\n timeEvent.event?.resizable?.afterEnd &&\n !timeEvent.endsAfterDay\n \"\n mwlResizeHandle\n [resizeEdges]=\"{\n right: true,\n bottom: true\n }\"\n ></div>\n </div>\n </div>\n\n <div\n *ngFor=\"\n let hour of column.hours;\n trackBy: trackByHour;\n let odd = odd\n \"\n class=\"cal-hour\"\n [class.cal-hour-odd]=\"odd\"\n >\n <mwl-calendar-week-view-hour-segment\n *ngFor=\"\n let segment of hour.segments;\n trackBy: trackByHourSegment\n \"\n [style.height.px]=\"hourSegmentHeight\"\n [segment]=\"segment\"\n [segmentHeight]=\"hourSegmentHeight\"\n [locale]=\"locale\"\n [customTemplate]=\"hourSegmentTemplate\"\n [daysInWeek]=\"daysInWeek\"\n (mwlClick)=\"\n hourSegmentClicked.emit({\n date: segment.date,\n sourceEvent: $event\n })\n \"\n [clickListenerDisabled]=\"\n hourSegmentClicked.observers.length === 0\n \"\n mwlDroppable\n [dragOverClass]=\"\n !dragActive || !snapDraggedEvents ? 'cal-drag-over' : null\n \"\n dragActiveClass=\"cal-drag-active\"\n (drop)=\"eventDropped($event, segment.date, false)\"\n (dragEnter)=\"dateDragEnter(segment.date)\"\n [isTimeLabel]=\"daysInWeek === 1\"\n >\n </mwl-calendar-week-view-hour-segment>\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n})\nexport class CalendarWeekViewComponent implements OnChanges, OnInit, OnDestroy {\n /**\n * The current view date\n */\n @Input() viewDate: Date;\n\n /**\n * An array of events to display on view\n * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63\n */\n @Input() events: CalendarEvent[] = [];\n\n /**\n * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view\n */\n @Input() excludeDays: number[] = [];\n\n /**\n * An observable that when emitted on will re-render the current view\n */\n @Input() refresh: Subject<any>;\n\n /**\n * The locale used to format dates\n */\n @Input() locale: string;\n\n /**\n * The placement of the event tooltip\n */\n @Input() tooltipPlacement: PlacementArray = 'auto';\n\n /**\n * A custom template to use for the event tooltips\n */\n @Input() tooltipTemplate: TemplateRef<any>;\n\n /**\n * Whether to append tooltips to the body or next to the trigger element\n */\n @Input() tooltipAppendToBody: boolean = true;\n\n /**\n * The delay in milliseconds before the tooltip should be displayed. If not provided the tooltip\n * will be displayed immediately.\n */\n @Input() tooltipDelay: number | null = null;\n\n /**\n * The start number of the week.\n * This is ignored when the `daysInWeek` input is also set as the `viewDate` will be used as the start of the week instead.\n * Note, you should also pass this to the calendar title pipe so it shows the same days: {{ viewDate | calendarDate:(view + 'ViewTitle'):locale:weekStartsOn }}\n * If using the moment date adapter this option won't do anything and you'll need to set it globally like so:\n * ```\n * moment.updateLocale('en', {\n * week: {\n * dow: 1, // set start of week to monday instead\n * doy: 0,\n * },\n * });\n * ```\n */\n @Input() weekStartsOn: number;\n\n /**\n * A custom template to use to replace the header\n */\n @Input() headerTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for week view events\n */\n @Input() eventTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for event titles\n */\n @Input() eventTitleTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for event actions\n */\n @Input() eventActionsTemplate: TemplateRef<any>;\n\n /**\n * The precision to display events.\n * `days` will round event start and end dates to the nearest day and `minutes` will not do this rounding\n */\n @Input() precision: 'days' | 'minutes' = 'days';\n\n /**\n * An array of day indexes (0 = sunday, 1 = monday etc) that indicate which days are weekends\n */\n @Input() weekendDays: number[];\n\n /**\n * Whether to snap events to a grid when dragging\n */\n @Input() snapDraggedEvents: boolean = true;\n\n /**\n * The number of segments in an hour. Must divide equally into 60.\n */\n @Input() hourSegments: number = 2;\n\n /**\n * The height in pixels of each hour segment\n */\n @Input() hourSegmentHeight: number = 30;\n\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayStartHour: number = 0;\n\n /**\n * The day start minutes. Must be 0-59\n */\n @Input() dayStartMinute: number = 0;\n\n /**\n * The day end hours in 24 hour time. Must be 0-23\n */\n @Input() dayEndHour: number = 23;\n\n /**\n * The day end minutes. Must be 0-59\n */\n @Input() dayEndMinute: number = 59;\n\n /**\n * A custom template to use to replace the hour segment\n */\n @Input() hourSegmentTemplate: TemplateRef<any>;\n\n /**\n * The grid size to snap resizing and dragging of hourly events to\n */\n @Input() eventSnapSize: number;\n\n /**\n * A custom template to use for the all day events label text\n */\n @Input() allDayEventsLabelTemplate: TemplateRef<any>;\n\n /**\n * The number of days in a week. Can be used to create a shorter or longer week view.\n * The first day of the week will always be the `viewDate` and `weekStartsOn` if set will be ignored\n */\n @Input() daysInWeek: number;\n\n /**\n * A custom template to use for the current time marker\n */\n @Input() currentTimeMarkerTemplate: TemplateRef<any>;\n\n /**\n * Called when a header week day is clicked. Adding a `cssClass` property on `$event.day` will add that class to the header element\n */\n @Output() dayHeaderClicked = new EventEmitter<{\n day: WeekDay;\n sourceEvent: MouseEvent;\n }>();\n\n /**\n * Called when the event title is clicked\n */\n @Output() eventClicked = new EventEmitter<{\n event: CalendarEvent;\n sourceEvent: MouseEvent | any;\n }>();\n\n /**\n * Called when an event is resized or dragged and dropped\n */\n @Output() eventTimesChanged =\n new EventEmitter<CalendarEventTimesChangedEvent>();\n\n /**\n * An output that will be called before the view is rendered for the current week.\n * If you add the `cssClass` property to a day in the header it will add that class to the cell element in the template\n */\n @Output() beforeViewRender =\n new EventEmitter<CalendarWeekViewBeforeRenderEvent>();\n\n /**\n * Called when an hour segment is clicked\n */\n @Output() hourSegmentClicked = new EventEmitter<{\n date: Date;\n sourceEvent: MouseEvent;\n }>();\n\n /**\n * @hidden\n */\n days: WeekDay[];\n\n /**\n * @hidden\n */\n view: WeekView;\n\n /**\n * @hidden\n */\n refreshSubscription: Subscription;\n\n /**\n * @hidden\n */\n allDayEventResizes: Map<WeekViewAllDayEvent, WeekViewAllDayEventResize> =\n new Map();\n\n /**\n * @hidden\n */\n timeEventResizes: Map<CalendarEvent, ResizeEvent> = new Map();\n\n /**\n * @hidden\n */\n eventDragEnterByType = {\n allDay: 0,\n time: 0,\n };\n\n /**\n * @hidden\n */\n dragActive = false;\n\n /**\n * @hidden\n */\n dragAlreadyMoved = false;\n\n /**\n * @hidden\n */\n validateDrag: ValidateDrag;\n\n /**\n * @hidden\n */\n validateResize: (args: any) => boolean;\n\n /**\n * @hidden\n */\n dayColumnWidth: number;\n\n /**\n * @hidden\n */\n calendarId = Symbol('angular calendar week view id');\n\n /**\n * @hidden\n */\n lastDraggedEvent: CalendarEvent;\n\n /**\n * @hidden\n */\n trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;\n\n /**\n * @hidden\n */\n trackByHourSegment = trackByHourSegment;\n\n /**\n * @hidden\n */\n trackByHour = trackByHour;\n\n /**\n * @hidden\n */\n trackByWeekAllDayEvent = trackByWeekAllDayEvent;\n\n /**\n * @hidden\n */\n trackByWeekTimeEvent = trackByWeekTimeEvent;\n\n /**\n * @hidden\n */\n private lastDragEnterDate: Date;\n\n /**\n * @hidden\n */\n constructor(\n protected cdr: ChangeDetectorRef,\n protected utils: CalendarUtils,\n @Inject(LOCALE_ID) locale: string,\n protected dateAdapter: DateAdapter\n ) {\n this.locale = locale;\n }\n\n /**\n * @hidden\n */\n trackByHourColumn = (index: number, column: WeekViewHourColumn) =>\n column.hours[0] ? column.hours[0].segments[0].date.toISOString() : column;\n\n /**\n * @hidden\n */\n trackById = (index: number, row: WeekViewAllDayEventRow) => row.id;\n\n /**\n * @hidden\n */\n ngOnInit(): void {\n if (this.refresh) {\n this.refreshSubscription = this.refresh.subscribe(() => {\n this.refreshAll();\n this.cdr.markForCheck();\n });\n }\n }\n\n /**\n * @hidden\n */\n ngOnChanges(changes: any): void {\n const refreshHeader =\n changes.viewDate ||\n changes.excludeDays ||\n changes.weekendDays ||\n changes.daysInWeek ||\n changes.weekStartsOn;\n\n const refreshBody =\n changes.viewDate ||\n changes.dayStartHour ||\n changes.dayStartMinute ||\n changes.dayEndHour ||\n changes.dayEndMinute ||\n changes.hourSegments ||\n changes.weekStartsOn ||\n changes.weekendDays ||\n changes.excludeDays ||\n changes.hourSegmentHeight ||\n changes.events ||\n changes.daysInWeek;\n\n if (refreshHeader) {\n this.refreshHeader();\n }\n\n if (changes.events) {\n validateEvents(this.events);\n }\n\n if (refreshBody) {\n this.refreshBody();\n }\n\n if (refreshHeader || refreshBody) {\n this.emitBeforeViewRender();\n }\n }\n\n /**\n * @hidden\n */\n ngOnDestroy(): void {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n }\n }\n\n /**\n * @hidden\n */\n timeEventResizeStarted(\n eventsContainer: HTMLElement,\n timeEvent: WeekViewTimeEvent,\n resizeEvent: ResizeEvent\n ): void {\n this.timeEventResizes.set(timeEvent.event, resizeEvent);\n this.resizeStarted(eventsContainer);\n }\n\n /**\n * @hidden\n */\n timeEventResizing(timeEvent: WeekViewTimeEvent, resizeEvent: ResizeEvent) {\n this.timeEventResizes.set(timeEvent.event, resizeEvent);\n const adjustedEvents = new Map<CalendarEvent, CalendarEvent>();\n\n const tempEvents = [...this.events];\n\n this.timeEventResizes.forEach((lastResizeEvent, event) => {\n const newEventDates = this.getTimeEventResizedDates(\n event,\n lastResizeEvent\n );\n const adjustedEvent = { ...event, ...newEventDates };\n adjustedEvents.set(adjustedEvent, event);\n const eventIndex = tempEvents.indexOf(event);\n tempEvents[eventIndex] = adjustedEvent;\n });\n\n this.restoreOriginalEvents(tempEvents, adjustedEvents, true);\n }\n\n /**\n * @hidden\n */\n timeEventResizeEnded(timeEvent: WeekViewTimeEvent) {\n this.view = this.getWeekView(this.events);\n const lastResizeEvent = this.timeEventResizes.get(timeEvent.event);\n if (lastResizeEvent) {\n this.timeEventResizes.delete(timeEvent.event);\n const newEventDates = this.getTimeEventResizedDates(\n timeEvent.event,\n lastResizeEvent\n );\n this.eventTimesChanged.emit({\n newStart: newEventDates.start,\n newEnd: newEventDates.end,\n event: timeEvent.event,\n type: CalendarEventTimesChangedEventType.Resize,\n });\n }\n }\n\n /**\n * @hidden\n */\n allDayEventResizeStarted(\n allDayEventsContainer: HTMLElement,\n allDayEvent: WeekViewAllDayEvent,\n resizeEvent: ResizeEvent\n ): void {\n this.allDayEventResizes.set(allDayEvent, {\n originalOffset: allDayEvent.offset,\n originalSpan: allDayEvent.span,\n edge: typeof resizeEvent.edges.left !== 'undefined' ? 'left' : 'right',\n });\n this.resizeStarted(\n allDayEventsContainer,\n this.getDayColumnWidth(allDayEventsContainer)\n );\n }\n\n /**\n * @hidden\n */\n allDayEventResizing(\n allDayEvent: WeekViewAllDayEvent,\n resizeEvent: ResizeEvent,\n dayWidth: number\n ): void {\n const currentResize: WeekViewAllDayEventResize =\n this.allDayEventResizes.get(allDayEvent);\n\n if (typeof resizeEvent.edges.left !== 'undefined') {\n const diff: number = Math.round(+resizeEvent.edges.left / dayWidth);\n allDayEvent.offset = currentResize.originalOffset + diff;\n allDayEvent.span = currentResize.originalSpan - diff;\n } else if (typeof resizeEvent.edges.right !== 'undefined') {\n const diff: number = Math.round(+resizeEvent.edges.right / dayWidth);\n allDayEvent.span = currentResize.originalSpan + diff;\n }\n }\n\n /**\n * @hidden\n */\n allDayEventResizeEnded(allDayEvent: WeekViewAllDayEvent): void {\n const currentResize: WeekViewAllDayEventResize =\n this.allDayEventResizes.get(allDayEvent);\n\n if (currentResize) {\n const allDayEventResizingBeforeStart = currentResize.edge === 'left';\n let daysDiff: number;\n if (allDayEventResizingBeforeStart) {\n daysDiff = allDayEvent.offset - currentResize.originalOffset;\n } else {\n daysDiff = allDayEvent.span - currentResize.originalSpan;\n }\n\n allDayEvent.offset = currentResize.originalOffset;\n allDayEvent.span = currentResize.originalSpan;\n\n let newStart: Date = allDayEvent.event.start;\n let newEnd: Date = allDayEvent.event.end || allDayEvent.event.start;\n if (allDayEventResizingBeforeStart) {\n newStart = addDaysWithExclusions(\n this.dateAdapter,\n newStart,\n daysDiff,\n this.excludeDays\n );\n } else {\n newEnd = addDaysWithExclusions(\n this.dateAdapter,\n newEnd,\n daysDiff,\n this.excludeDays\n );\n }\n\n this.eventTimesChanged.emit({\n newStart,\n newEnd,\n event: allDayEvent.event,\n type: CalendarEventTimesChangedEventType.Resize,\n });\n this.allDayEventResizes.delete(allDayEvent);\n }\n }\n\n /**\n * @hidden\n */\n getDayColumnWidth(eventRowContainer: HTMLElement): number {\n return Math.floor(eventRowContainer.offsetWidth / this.days.length);\n }\n\n /**\n * @hidden\n */\n dateDragEnter(date: Date) {\n this.lastDragEnterDate = date;\n }\n\n /**\n * @hidden\n */\n eventDropped(\n dropEvent: DropEvent<{ event?: CalendarEvent; calendarId?: symbol }>,\n date: Date,\n allDay: boolean\n ): void {\n if (\n shouldFireDroppedEvent(dropEvent, date, allDay, this.calendarId) &&\n this.lastDragEnterDate.getTime() === date.getTime() &&\n (!this.snapDraggedEvents ||\n dropEvent.dropData.event !== this.lastDraggedEvent)\n ) {\n this.eventTimesChanged.emit({\n type: CalendarEventTimesChangedEventType.Drop,\n event: dropEvent.dropData.event,\n newStart: date,\n allDay,\n });\n }\n this.lastDraggedEvent = null;\n }\n\n /**\n * @hidden\n */\n dragEnter(type: 'allDay' | 'time') {\n this.eventDragEnterByType[type]++;\n }\n\n /**\n * @hidden\n */\n dragLeave(type: 'allDay' | 'time') {\n this.eventDragEnterByType[type]--;\n }\n\n /**\n * @hidden\n */\n dragStarted(\n eventsContainer: HTMLElement,\n event: HTMLElement,\n dayEvent?: WeekViewTimeEvent\n ): void {\n this.dayColumnWidth = this.getDayColumnWidth(eventsContainer);\n const dragHelper: CalendarDragHelper = new CalendarDragHelper(\n eventsContainer,\n event\n );\n this.validateDrag = ({ x, y, transform }) =>\n this.allDayEventResizes.size === 0 &&\n this.timeEventResizes.size === 0 &&\n dragHelper.validateDrag({\n x,\n y,\n snapDraggedEvents: this.snapDraggedEvents,\n dragAlreadyMoved: this.dragAlreadyMoved,\n transform,\n });\n this.dragActive = true;\n this.dragAlreadyMoved = false;\n this.lastDraggedEvent = null;\n this.eventDragEnterByType = {\n allDay: 0,\n time: 0,\n };\n if (!this.snapDraggedEvents && dayEvent) {\n this.view.hourColumns.forEach((column) => {\n const linkedEvent = column.events.find(\n (columnEvent) =>\n columnEvent.event === dayEvent.event && columnEvent !== dayEvent\n );\n // hide any linked events while dragging\n if (linkedEvent) {\n linkedEvent.width = 0;\n linkedEvent.height = 0;\n }\n });\n }\n this.cdr.markForCheck();\n }\n\n /**\n * @hidden\n */\n dragMove(dayEvent: WeekViewTimeEvent, dragEvent: DragMoveEvent) {\n const newEventTimes = this.getDragMovedEventTimes(\n dayEvent,\n dragEvent,\n this.dayColumnWidth,\n true\n );\n const originalEvent = dayEvent.event;\n const adjustedEvent = { ...originalEvent, ...newEventTimes };\n const tempEvents = this.events.map((event) => {\n if (event === originalEvent) {\n return adjustedEvent;\n }\n return event;\n });\n this.restoreOriginalEvents(\n tempEvents,\n new Map([[adjustedEvent, originalEvent]]),\n this.snapDraggedEvents\n );\n this.dragAlreadyMoved = true;\n }\n\n /**\n * @hidden\n */\n allDayEventDragMove() {\n this.dragAlreadyMoved = true;\n }\n\n /**\n * @hidden\n */\n dragEnded(\n weekEvent: WeekViewAllDayEvent | WeekViewTimeEvent,\n dragEndEvent: DragEndEvent,\n dayWidth: number,\n useY = false\n ): void {\n this.view = this.getWeekView(this.events);\n this.dragActive = false;\n this.validateDrag = null;\n const { start, end } = this.getDragMovedEventTimes(\n weekEvent,\n dragEndEvent,\n dayWidth,\n useY\n );\n if (\n (this.snapDraggedEvents ||\n this.eventDragEnterByType[useY ? 'time' : 'allDay'] > 0) &&\n isDraggedWithinPeriod(start, end, this.view.period)\n ) {\n this.lastDraggedEvent = weekEvent.event;\n this.eventTimesChanged.emit({\n newStart: start,\n newEnd: end,\n event: weekEvent.event,\n type: CalendarEventTimesChangedEventType.Drag,\n allDay: !useY,\n });\n }\n }\n\n protected refreshHeader(): void {\n this.days = this.utils.getWeekViewHeader({\n viewDate: this.viewDate,\n weekStartsOn: this.weekStartsOn,\n excluded: this.excludeDays,\n weekendDays: this.weekendDays,\n ...getWeekViewPeriod(\n this.dateAdapter,\n this.viewDate,\n this.weekStartsOn,\n this.excludeDays,\n this.daysInWeek\n ),\n });\n }\n\n protected refreshBody(): void {\n this.view = this.getWeekView(this.events);\n }\n\n protected refreshAll(): void {\n this.refreshHeader();\n this.refreshBody();\n this.emitBeforeViewRender();\n }\n\n protected emitBeforeViewRender(): void {\n if (this.days && this.view) {\n this.beforeViewRender.emit({\n header: this.days,\n ...this.view,\n });\n }\n }\n\n protected getWeekView(events: CalendarEvent[]) {\n return this.utils.getWeekView({\n events,\n viewDate: this.viewDate,\n weekStartsOn: this.weekStartsOn,\n excluded: this.excludeDays,\n precision: this.precision,\n absolutePositionedEvents: true,\n hourSegments: this.hourSegments,\n dayStart: {\n hour: this.dayStartHour,\n minute: this.dayStartMinute,\n },\n dayEnd: {\n hour: this.dayEndHour,\n minute: this.dayEndMinute,\n },\n segmentHeight: this.hourSegmentHeight,\n weekendDays: this.weekendDays,\n ...getWeekViewPeriod(\n this.dateAdapter,\n this.viewDate,\n this.weekStartsOn,\n this.excludeDays,\n this.daysInWeek\n ),\n });\n }\n\n protected getDragMovedEventTimes(\n weekEvent: WeekViewAllDayEvent | WeekViewTimeEvent,\n dragEndEvent: DragEndEvent | DragMoveEvent,\n dayWidth: number,\n useY: boolean\n ) {\n const daysDragged = roundToNearest(dragEndEvent.x, dayWidth) / dayWidth;\n const minutesMoved = useY\n ? getMinutesMoved(\n dragEndEvent.y,\n this.hourSegments,\n this.hourSegmentHeight,\n this.eventSnapSize\n )\n : 0;\n\n const start = this.dateAdapter.addMinutes(\n addDaysWithExclusions(\n this.dateAdapter,\n weekEvent.event.start,\n daysDragged,\n this.excludeDays\n ),\n minutesMoved\n );\n let end: Date;\n if (weekEvent.event.end) {\n end = this.dateAdapter.addMinutes(\n addDaysWithExclusions(\n this.dateAdapter,\n weekEvent.event.end,\n daysDragged,\n this.excludeDays\n ),\n minutesMoved\n );\n }\n\n return { start, end };\n }\n\n protected restoreOriginalEvents(\n tempEvents: CalendarEvent[],\n adjustedEvents: Map<CalendarEvent, CalendarEvent>,\n snapDraggedEvents = true\n ) {\n const previousView = this.view;\n if (snapDraggedEvents) {\n this.view = this.getWeekView(tempEvents);\n }\n\n const adjustedEventsArray = tempEvents.filter((event) =>\n adjustedEvents.has(event)\n );\n this.view.hourColumns.forEach((column, columnIndex) => {\n previousView.hourColumns[columnIndex].hours.forEach((hour, hourIndex) => {\n hour.segments.forEach((segment, segmentIndex) => {\n column.hours[hourIndex].segments[segmentIndex].cssClass =\n segment.cssClass;\n });\n });\n\n adjustedEventsArray.forEach((adjustedEvent) => {\n const originalEvent = adjustedEvents.get(adjustedEvent);\n const existingColumnEvent = column.events.find(\n (columnEvent) =>\n columnEvent.event ===\n (snapDraggedEvents ? adjustedEvent : originalEvent)\n );\n if (existingColumnEvent) {\n // restore the original event so trackBy kicks in and the dom isn't changed\n existingColumnEvent.event = originalEvent;\n existingColumnEvent['tempEvent'] = adjustedEvent;\n if (!snapDraggedEvents) {\n existingColumnEvent.height = 0;\n existingColumnEvent.width = 0;\n }\n } else {\n // add a dummy event to the drop so if the event was removed from the original column the drag doesn't end early\n const event = {\n event: originalEvent,\n left: 0,\n top: 0,\n height: 0,\n width: 0,\n startsBeforeDay: false,\n endsAfterDay: false,\n tempEvent: adjustedEvent,\n };\n column.events.push(event);\n }\n });\n });\n adjustedEvents.clear();\n }\n\n protected getTimeEventResizedDates(\n calendarEvent: CalendarEvent,\n resizeEvent: ResizeEvent\n ) {\n const minimumEventHeight = getMinimumEventHeightInMinutes(\n this.hourSegments,\n this.hourSegmentHeight\n );\n const newEventDates = {\n start: calendarEvent.start,\n end: getDefaultEventEnd(\n this.dateAdapter,\n calendarEvent,\n minimumEventHeight\n ),\n };\n const { end, ...eventWithoutEnd } = calendarEvent;\n const smallestResizes = {\n start: this.dateAdapter.addMinutes(\n newEventDates.end,\n minimumEventHeight * -1\n ),\n end: getDefaultEventEnd(\n this.dateAdapter,\n eventWithoutEnd,\n minimumEventHeight\n ),\n };\n\n if (typeof resizeEvent.edges.left !== 'undefined') {\n const daysDiff = Math.round(\n +resizeEvent.edges.left / this.dayColumnWidth\n );\n const newStart = addDaysWithExclusions(\n this.dateAdapter,\n newEventDates.start,\n daysDiff,\n this.excludeDays\n );\n if (newStart < smallestResizes.start) {\n newEventDates.start = newStart;\n } else {\n newEventDates.start = smallestResizes.start;\n }\n } else if (typeof resizeEvent.edges.right !== 'undefined') {\n const daysDiff = Math.round(\n +resizeEvent.edges.right / this.dayColumnWidth\n );\n const newEnd = addDaysWithExclusions(\n this.dateAdapter,\n newEventDates.end,\n daysDiff,\n this.excludeDays\n );\n if (newEnd > smallestResizes.end) {\n newEventDates.end = newEnd;\n } else {\n newEventDates.end = smallestResizes.end;\n }\n }\n\n if (typeof resizeEvent.edges.top !== 'undefined') {\n const minutesMoved = getMinutesMoved(\n resizeEvent.edges.top as number,\n this.hourSegments,\n this.hourSegmentHeight,\n this.eventSnapSize\n );\n const newStart = this.dateAdapter.addMinutes(\n newEventDates.start,\n minutesMoved\n );\n if (newStart < smallestResizes.start) {\n newEventDates.start = newStart;\n } else {\n newEventDates.start = smallestResizes.start;\n }\n } else if (typeof resizeEvent.edges.bottom !== 'undefined') {\n const minutesMoved = getMinutesMoved(\n resizeEvent.edges.bottom as number,\n this.hourSegments,\n this.hourSegmentHeight,\n this.eventSnapSize\n );\n const newEnd = this.dateAdapter.addMinutes(\n newEventDates.end,\n minutesMoved\n );\n if (newEnd > smallestResizes.end) {\n newEventDates.end = newEnd;\n } else {\n newEventDates.end = smallestResizes.end;\n }\n }\n\n return newEventDates;\n }\n\n protected resizeStarted(eventsContainer: HTMLElement, minWidth?: number) {\n this.dayColumnWidth = this.getDayColumnWidth(eventsContainer);\n const resizeHelper: CalendarResizeHelper = new CalendarResizeHelper(\n eventsContainer,\n minWidth\n );\n this.validateResize = ({ rectangle }) =>\n resizeHelper.validateResize({ rectangle });\n this.cdr.markForCheck();\n }\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n TemplateRef,\n} from '@angular/core';\nimport { CalendarEvent, WeekDay } from 'calendar-utils';\nimport { trackByWeekDayHeaderDate } from '../common/util';\n\n@Component({\n selector: 'mwl-calendar-week-view-header',\n template: `\n <ng-template\n #defaultTemplate\n let-days=\"days\"\n let-locale=\"locale\"\n let-dayHeaderClicked=\"dayHeaderClicked\"\n let-eventDropped=\"eventDropped\"\n let-trackByWeekDayHeaderDate=\"trackByWeekDayHeaderDate\"\n let-dragEnter=\"dragEnter\"\n >\n <div class=\"cal-day-headers\" role=\"row\">\n <div\n class=\"cal-header\"\n *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\n [class.cal-past]=\"day.isPast\"\n [class.cal-today]=\"day.isToday\"\n [class.cal-future]=\"day.isFuture\"\n [class.cal-weekend]=\"day.isWeekend\"\n [ngClass]=\"day.cssClass\"\n (mwlClick)=\"dayHeaderClicked.emit({ day: day, sourceEvent: $event })\"\n mwlDroppable\n dragOverClass=\"cal-drag-over\"\n (drop)=\"\n eventDropped.emit({\n event: $event.dropData.event,\n newStart: day.date\n })\n \"\n (dragEnter)=\"dragEnter.emit({ date: day.date })\"\n tabindex=\"0\"\n role=\"columnheader\"\n >\n <b>{{ day.date | calendarDate: 'weekViewColumnHeader':locale }}</b\n ><br />\n <span>{{\n day.date | calendarDate: 'weekViewColumnSubHeader':locale\n }}</span>\n </div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n days: days,\n locale: locale,\n dayHeaderClicked: dayHeaderClicked,\n eventDropped: eventDropped,\n dragEnter: dragEnter,\n trackByWeekDayHeaderDate: trackByWeekDayHeaderDate\n }\"\n >\n </ng-template>\n `,\n})\nexport class CalendarWeekViewHeaderComponent {\n @Input() days: WeekDay[];\n\n @Input() locale: string;\n\n @Input() customTemplate: TemplateRef<any>;\n\n @Output() dayHeaderClicked = new EventEmitter<{\n day: WeekDay;\n sourceEvent: MouseEvent;\n }>();\n\n @Output() eventDropped = new EventEmitter<{\n event: CalendarEvent;\n newStart: Date;\n }>();\n\n @Output() dragEnter = new EventEmitter<{ date: Date }>();\n\n trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n TemplateRef,\n} from '@angular/core';\nimport {\n WeekViewAllDayEvent,\n WeekViewTimeEvent,\n WeekViewHourColumn,\n} from 'calendar-utils';\nimport { PlacementArray } from 'positioning';\n\n@Component({\n selector: 'mwl-calendar-week-view-event',\n template: `\n <ng-template\n #defaultTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [ngStyle]=\"{\n backgroundColor: weekEvent.event.color?.secondary,\n borderColor: weekEvent.event.color?.primary\n }\"\n [mwlCalendarTooltip]=\"\n !tooltipDisabled\n ? (weekEvent.event.title\n | calendarEventTitle\n : (daysInWeek === 1 ? 'dayTooltip' : 'weekTooltip')\n : weekEvent.tempEvent || weekEvent.event)\n : ''\n \"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale }\n | calendarA11y: 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventActionsTemplate\"\n >\n </mwl-calendar-event-actions>\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n weekEvent: weekEvent,\n tooltipPlacement: tooltipPlacement,\n eventClicked: eventClicked,\n tooltipTemplate: tooltipTemplate,\n tooltipAppendToBody: tooltipAppendToBody,\n tooltipDisabled: tooltipDisabled,\n tooltipDelay: tooltipDelay,\n column: column,\n daysInWeek: daysInWeek\n }\"\n >\n </ng-template>\n `,\n})\nexport class CalendarWeekViewEventComponent {\n @Input() locale: string;\n\n @Input() weekEvent: WeekViewAllDayEvent | WeekViewTimeEvent;\n\n @Input() tooltipPlacement: PlacementArray;\n\n @Input() tooltipAppendToBody: boolean;\n\n @Input() tooltipDisabled: boolean;\n\n @Input() tooltipDelay: number | null;\n\n @Input() customTemplate: TemplateRef<any>;\n\n @Input() eventTitleTemplate: TemplateRef<any>;\n\n @Input() eventActionsTemplate: TemplateRef<any>;\n\n @Input() tooltipTemplate: TemplateRef<any>;\n\n @Input() column: WeekViewHourColumn;\n\n @Input() daysInWeek: number;\n\n @Output() eventClicked = new EventEmitter<{\n sourceEvent: MouseEvent | any;\n }>();\n}\n","import { Component, Input, TemplateRef } from '@angular/core';\nimport { WeekViewHourSegment } from 'calendar-utils';\n\n@Component({\n selector: 'mwl-calendar-week-view-hour-segment',\n template: `\n <ng-template\n #defaultTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n [attr.aria-hidden]=\"\n {}\n | calendarA11y\n : (daysInWeek === 1\n ? 'hideDayHourSegment'\n : 'hideWeekHourSegment')\n \"\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n >\n <div class=\"cal-time\" *ngIf=\"isTimeLabel\">\n {{\n segment.displayDate\n | calendarDate\n : (daysInWeek === 1 ? 'dayViewHour' : 'weekViewHour')\n : locale\n }}\n </div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n segment: segment,\n locale: locale,\n segmentHeight: segmentHeight,\n isTimeLabel: isTimeLabel,\n daysInWeek: daysInWeek\n }\"\n >\n </ng-template>\n `,\n})\nexport class CalendarWeekViewHourSegmentComponent {\n @Input() segment: WeekViewHourSegment;\n\n @Input() segmentHeight: number;\n\n @Input() locale: string;\n\n @Input() isTimeLabel: boolean;\n\n @Input() daysInWeek: number;\n\n @Input() customTemplate: TemplateRef<any>;\n}\n","import {\n Component,\n Input,\n NgZone,\n OnChanges,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\nimport { BehaviorSubject, interval, Observable } from 'rxjs';\nimport { switchMapTo, startWith, map, switchMap } from 'rxjs/operators';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\n\n@Component({\n selector: 'mwl-calendar-week-view-current-time-marker',\n template: `\n <ng-template\n #defaultTemplate\n let-columnDate=\"columnDate\"\n let-dayStartHour=\"dayStartHour\"\n let-dayStartMinute=\"dayStartMinute\"\n let-dayEndHour=\"dayEndHour\"\n let-dayEndMinute=\"dayEndMinute\"\n let-isVisible=\"isVisible\"\n let-topPx=\"topPx\"\n >\n <div\n class=\"cal-current-time-marker\"\n *ngIf=\"isVisible\"\n [style.top.px]=\"topPx\"\n ></div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n columnDate: columnDate,\n dayStartHour: dayStartHour,\n dayStartMinute: dayStartMinute,\n dayEndHour: dayEndHour,\n dayEndMinute: dayEndMinute,\n isVisible: (marker$ | async)?.isVisible,\n topPx: (marker$ | async)?.top\n }\"\n >\n </ng-template>\n `,\n})\nexport class CalendarWeekViewCurrentTimeMarkerComponent implements OnChanges {\n @Input() columnDate: Date;\n\n @Input() dayStartHour: number;\n\n @Input() dayStartMinute: number;\n\n @Input() dayEndHour: number;\n\n @Input() dayEndMinute: number;\n\n @Input() hourSegments: number;\n\n @Input() hourSegmentHeight: number;\n\n @Input() customTemplate: TemplateRef<any>;\n\n columnDate$ = new BehaviorSubject<Date>(this.columnDate);\n\n marker$: Observable<{\n isVisible: boolean;\n top: number;\n }> = this.zone.onStable.pipe(\n switchMap(() => interval(60 * 1000)),\n startWith(0),\n switchMapTo(this.columnDate$),\n map((columnDate) => {\n const startOfDay = this.dateAdapter.setMinutes(\n this.dateAdapter.setHours(columnDate, this.dayStartHour),\n this.dayStartMinute\n );\n const endOfDay = this.dateAdapter.setMinutes(\n this.dateAdapter.setHours(columnDate, this.dayEndHour),\n this.dayEndMinute\n );\n const hourHeightModifier =\n (this.hourSegments * this.hourSegmentHeight) / 60;\n const now = new Date();\n return {\n isVisible:\n this.dateAdapter.isSameDay(columnDate, now) &&\n now >= startOfDay &&\n now <= endOfDay,\n top:\n this.dateAdapter.differenceInMinutes(now, startOfDay) *\n hourHeightModifier,\n };\n })\n );\n\n constructor(private dateAdapter: DateAdapter, private zone: NgZone) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.columnDate) {\n this.columnDate$.next(changes.columnDate.currentValue);\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResizableModule } from 'angular-resizable-element';\nimport { DragAndDropModule } from 'angular-draggable-droppable';\nimport { CalendarWeekViewComponent } from './calendar-week-view.component';\nimport { CalendarWeekViewHeaderComponent } from './calendar-week-view-header.component';\nimport { CalendarWeekViewEventComponent } from './calendar-week-view-event.component';\nimport { CalendarCommonModule } from '../common/calendar-common.module';\nimport { CalendarWeekViewHourSegmentComponent } from './calendar-week-view-hour-segment.component';\nimport { CalendarWeekViewCurrentTimeMarkerComponent } from './calendar-week-view-current-time-marker.component';\n\nexport {\n CalendarWeekViewComponent,\n CalendarWeekViewBeforeRenderEvent,\n} from './calendar-week-view.component';\nexport {\n WeekViewAllDayEvent as CalendarWeekViewAllDayEvent,\n WeekViewAllDayEventRow as CalendarWeekViewAllDayEventRow,\n GetWeekViewArgs as CalendarGetWeekViewArgs,\n} from 'calendar-utils';\nexport { getWeekViewPeriod } from '../common/util';\n\n@NgModule({\n imports: [\n CommonModule,\n ResizableModule,\n DragAndDropModule,\n CalendarCommonModule,\n ],\n declarations: [\n CalendarWeekViewComponent,\n CalendarWeekViewHeaderComponent,\n CalendarWeekViewEventComponent,\n CalendarWeekViewHourSegmentComponent,\n CalendarWeekViewCurrentTimeMarkerComponent,\n ],\n exports: [\n ResizableModule,\n DragAndDropModule,\n CalendarWeekViewComponent,\n CalendarWeekViewHeaderComponent,\n CalendarWeekViewEventComponent,\n CalendarWeekViewHourSegmentComponent,\n CalendarWeekViewCurrentTimeMarkerComponent,\n ],\n})\nexport class CalendarWeekModule {}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n TemplateRef,\n} from '@angular/core';\nimport { CalendarEvent } from 'calendar-utils';\nimport { Subject } from 'rxjs';\nimport { CalendarEventTimesChangedEvent } from '../common/calendar-event-times-changed-event.interface';\nimport { PlacementArray } from 'positioning';\nimport { CalendarWeekViewBeforeRenderEvent } from '../week/calendar-week.module';\n\nexport type CalendarDayViewBeforeRenderEvent =\n CalendarWeekViewBeforeRenderEvent;\n\n/**\n * Shows all events on a given day. Example usage:\n *\n * ```typescript\n * <mwl-calendar-day-view\n * [viewDate]=\"viewDate\"\n * [events]=\"events\">\n * </mwl-calendar-day-view>\n * ```\n */\n@Component({\n selector: 'mwl-calendar-day-view',\n template: `\n <mwl-calendar-week-view\n class=\"cal-day-view\"\n [daysInWeek]=\"1\"\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [hourSegments]=\"hourSegments\"\n [hourSegmentHeight]=\"hourSegmentHeight\"\n [dayStartHour]=\"dayStartHour\"\n [dayStartMinute]=\"dayStartMinute\"\n [dayEndHour]=\"dayEndHour\"\n [dayEndMinute]=\"dayEndMinute\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [eventSnapSize]=\"eventSnapSize\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n [eventTemplate]=\"eventTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n [snapDraggedEvents]=\"snapDraggedEvents\"\n [allDayEventsLabelTemplate]=\"allDayEventsLabelTemplate\"\n [currentTimeMarkerTemplate]=\"currentTimeMarkerTemplate\"\n (eventClicked)=\"eventClicked.emit($event)\"\n (hourSegmentClicked)=\"hourSegmentClicked.emit($event)\"\n (eventTimesChanged)=\"eventTimesChanged.emit($event)\"\n (beforeViewRender)=\"beforeViewRender.emit($event)\"\n ></mwl-calendar-week-view>\n `,\n})\nexport class CalendarDayViewComponent {\n /**\n * The current view date\n */\n @Input() viewDate: Date;\n\n /**\n * An array of events to display on view\n * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63\n */\n @Input() events: CalendarEvent[] = [];\n\n /**\n * The number of segments in an hour. Must divide equally into 60.\n */\n @Input() hourSegments: number = 2;\n\n /**\n * The height in pixels of each hour segment\n */\n @Input() hourSegmentHeight: number = 30;\n\n /**\n * The day start hours in 24 hour time. Must be 0-23\n */\n @Input() dayStartHour: number = 0;\n\n /**\n * The day start minutes. Must be 0-59\n */\n @Input() dayStartMinute: number = 0;\n\n /**\n * The day end hours in 24 hour time. Must be 0-23\n */\n @Input() dayEndHour: number = 23;\n\n /**\n * The day end minutes. Must be 0-59\n */\n @Input() dayEndMinute: number = 59;\n\n /**\n * An observable that when emitted on will re-render the current view\n */\n @Input() refresh: Subject<any>;\n\n /**\n * The locale used to format dates\n */\n @Input() locale: string;\n\n /**\n * The grid size to snap resizing and dragging of events to\n */\n @Input() eventSnapSize: number;\n\n /**\n * The placement of the event tooltip\n */\n @Input() tooltipPlacement: PlacementArray = 'auto';\n\n /**\n * A custom template to use for the event tooltips\n */\n @Input() tooltipTemplate: TemplateRef<any>;\n\n /**\n * Whether to append tooltips to the body or next to the trigger element\n */\n @Input() tooltipAppendToBody: boolean = true;\n\n /**\n * The delay in milliseconds before the tooltip should be displayed. If not provided the tooltip\n * will be displayed immediately.\n */\n @Input() tooltipDelay: number | null = null;\n\n /**\n * A custom template to use to replace the hour segment\n */\n @Input() hourSegmentTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for day view events\n */\n @Input() eventTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for event titles\n */\n @Input() eventTitleTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for event actions\n */\n @Input() eventActionsTemplate: TemplateRef<any>;\n\n /**\n * Whether to snap events to a grid when dragging\n */\n @Input() snapDraggedEvents: boolean = true;\n\n /**\n * A custom template to use for the all day events label text\n */\n @Input() allDayEventsLabelTemplate: TemplateRef<any>;\n\n /**\n * A custom template to use for the current time marker\n */\n @Input() currentTimeMarkerTemplate: TemplateRef<any>;\n\n /**\n * Called when an event title is clicked\n */\n @Output() eventClicked = new EventEmitter<{\n event: CalendarEvent;\n sourceEvent: MouseEvent | any;\n }>();\n\n /**\n * Called when an hour segment is clicked\n */\n @Output() hourSegmentClicked = new EventEmitter<{\n date: Date;\n sourceEvent: MouseEvent;\n }>();\n\n /**\n * Called when an event is resized or dragged and dropped\n */\n @Output() eventTimesChanged =\n new EventEmitter<CalendarEventTimesChangedEvent>();\n\n /**\n * An output that will be called before the view is rendered for the current day.\n * If you add the `cssClass` property to an hour grid segment it will add that class to the hour segment in the template\n */\n @Output() beforeViewRender =\n new EventEmitter<CalendarDayViewBeforeRenderEvent>();\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CalendarDayViewComponent } from './calendar-day-view.component';\nimport { CalendarCommonModule } from '../common/calendar-common.module';\nimport { CalendarWeekModule } from '../week/calendar-week.module';\n\nexport {\n CalendarDayViewComponent,\n CalendarDayViewBeforeRenderEvent,\n} from './calendar-day-view.component';\n\n@NgModule({\n imports: [CommonModule, CalendarCommonModule, CalendarWeekModule],\n declarations: [CalendarDayViewComponent],\n exports: [CalendarDayViewComponent],\n})\nexport class CalendarDayModule {}\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport {\n CalendarCommonModule,\n CalendarModuleConfig,\n CalendarEventTitleFormatter,\n CalendarDateFormatter,\n CalendarA11y,\n} from './common/calendar-common.module';\nimport { CalendarMonthModule } from './month/calendar-month.module';\nimport { CalendarWeekModule } from './week/calendar-week.module';\nimport { CalendarDayModule } from './day/calendar-day.module';\nimport { CalendarUtils } from './common/calendar-utils.provider';\n\nexport * from './common/calendar-common.module';\nexport * from './month/calendar-month.module';\nexport * from './week/calendar-week.module';\nexport * from './day/calendar-day.module';\n\n/**\n * The main module of this library. Example usage:\n *\n * ```typescript\n * import { CalenderModule } from 'angular-calendar';\n *\n * @NgModule({\n * imports: [\n * CalenderModule.forRoot()\n * ]\n * })\n * class MyModule {}\n * ```\n *\n */\n@NgModule({\n imports: [\n CalendarCommonModule,\n CalendarMonthModule,\n CalendarWeekModule,\n CalendarDayModule,\n ],\n exports: [\n CalendarCommonModule,\n CalendarMonthModule,\n CalendarWeekModule,\n CalendarDayModule,\n ],\n})\nexport class CalendarModule {\n static forRoot(\n dateAdapter: Provider,\n config: CalendarModuleConfig = {}\n ): ModuleWithProviders<CalendarModule> {\n return {\n ngModule: CalendarModule,\n providers: [\n dateAdapter,\n config.eventTitleFormatter || CalendarEventTitleFormatter,\n config.dateFormatter || CalendarDateFormatter,\n config.utils || CalendarUtils,\n config.a11y || CalendarA11y,\n ],\n };\n }\n}\n","/*\n * Public API Surface of angular-calendar\n */\n\nexport * from './modules/calendar.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {CalendarA11yPipe as ɵk} from './modules/common/calendar-a11y.pipe';\nexport {CalendarDatePipe as ɵi} from './modules/common/calendar-date.pipe';\nexport {CalendarEventActionsComponent as ɵb} from './modules/common/calendar-event-actions.component';\nexport {CalendarEventTitleComponent as ɵc} from './modules/common/calendar-event-title.component';\nexport {CalendarEventTitlePipe as ɵj} from './modules/common/calendar-event-title.pipe';\nexport {CalendarNextViewDirective as ɵg} from './modules/common/calendar-next-view.directive';\nexport {CalendarPreviousViewDirective as ɵf} from './modules/common/calendar-previous-view.directive';\nexport {CalendarTodayDirective as ɵh} from './modules/common/calendar-today.directive';\nexport {CalendarTooltipDirective as ɵe,CalendarTooltipWindowComponent as ɵd} from './modules/common/calendar-tooltip.directive';\nexport {ClickDirective as ɵl} from './modules/common/click.directive';\nexport {KeydownEnterDirective as ɵm} from './modules/common/keydown-enter.directive';\nexport {CalendarMonthCellComponent as ɵn} from './modules/month/calendar-month-cell.component';\nexport {CalendarMonthViewHeaderComponent as ɵo} from './modules/month/calendar-month-view-header.component';\nexport {CalendarOpenDayEventsComponent as ɵa} from './modules/month/calendar-open-day-events.component';\nexport {CalendarWeekViewCurrentTimeMarkerComponent as ɵs} from './modules/week/calendar-week-view-current-time-marker.component';\nexport {CalendarWeekViewEventComponent as ɵq} from './modules/week/calendar-week-view-event.component';\nexport {CalendarWeekViewHeaderComponent as ɵp} from './modules/week/calendar-week-view-header.component';\nexport {CalendarWeekViewHourSegmentComponent as ɵr} from './modules/week/calendar-week-view-hour-segment.component';"],"names":["validateEventsWithoutLog"],"mappings":"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"}
\No newline at end of file