UNPKG

250 kBSource Map (JSON)View Raw
1{"version":3,"file":"angular-calendar.mjs","sources":["../../../projects/angular-calendar/src/modules/common/click/click.directive.ts","../../../projects/angular-calendar/src/modules/common/keydown-enter/keydown-enter.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-a11y/calendar-a11y.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-a11y/calendar-a11y.pipe.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-actions/calendar-event-actions.component.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-title-formatter/calendar-event-title-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-title/calendar-event-title.pipe.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-title/calendar-event-title.component.ts","../../../projects/angular-calendar/src/modules/common/calendar-tooltip/calendar-tooltip.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-view/calendar-view.enum.ts","../../../projects/angular-calendar/src/modules/common/util/util.ts","../../../projects/angular-calendar/src/date-adapters/date-adapter.ts","../../../projects/angular-calendar/src/modules/common/calendar-previous-view/calendar-previous-view.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-next-view/calendar-next-view.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-today/calendar-today.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-angular-date-formatter/calendar-angular-date-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-date-formatter/calendar-date-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-date/calendar-date.pipe.ts","../../../projects/angular-calendar/src/modules/common/calendar-utils/calendar-utils.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-moment-date-formatter/calendar-moment-date-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-native-date-formatter/calendar-native-date-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-times-changed-event/calendar-event-times-changed-event.interface.ts","../../../projects/angular-calendar/src/modules/common/calendar-common.module.ts","../../../projects/angular-calendar/src/modules/month/calendar-month-view/calendar-month-cell/calendar-month-cell.component.ts","../../../projects/angular-calendar/src/modules/month/calendar-month-view/calendar-open-day-events/calendar-open-day-events.component.ts","../../../projects/angular-calendar/src/modules/month/calendar-month-view/calendar-month-view-header/calendar-month-view-header.component.ts","../../../projects/angular-calendar/src/modules/month/calendar-month-view/calendar-month-view.component.ts","../../../projects/angular-calendar/src/modules/month/calendar-month.module.ts","../../../projects/angular-calendar/src/modules/common/calendar-drag-helper/calendar-drag-helper.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-resize-helper/calendar-resize-helper.provider.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view/calendar-week-view-header/calendar-week-view-header.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view/calendar-week-view-event/calendar-week-view-event.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view/calendar-week-view-hour-segment/calendar-week-view-hour-segment.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view/calendar-week-view-current-time-marker/calendar-week-view-current-time-marker.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view/calendar-week-view.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week.module.ts","../../../projects/angular-calendar/src/modules/day/calendar-day-view/calendar-day-view.component.ts","../../../projects/angular-calendar/src/modules/day/calendar-day.module.ts","../../../projects/angular-calendar/src/modules/calendar.module.ts","../../../projects/angular-calendar/src/index.ts","../../../projects/angular-calendar/src/angular-calendar.ts"],"sourcesContent":["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>(); // eslint-disable-line\n\n private destroy$ = new Subject<void>();\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({\n selector: '[mwlKeydownEnter]',\n})\nexport class KeydownEnterDirective implements OnInit, OnDestroy {\n @Output('mwlKeydownEnter') keydown = new EventEmitter<KeyboardEvent>(); // eslint-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: KeyboardEvent) => {\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 { 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 { 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 { 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/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 { 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; // eslint-disable-line @angular-eslint/no-input-rename\n\n @Input('tooltipPlacement') placement: PlacementArray = 'auto'; // eslint-disable-line @angular-eslint/no-input-rename\n\n @Input('tooltipTemplate') customTemplate: TemplateRef<any>; // eslint-disable-line @angular-eslint/no-input-rename\n\n @Input('tooltipEvent') event: CalendarEvent; // eslint-disable-line @angular-eslint/no-input-rename\n\n @Input('tooltipAppendToBody') appendToBody: boolean; // eslint-disable-line @angular-eslint/no-input-rename\n\n @Input('tooltipDelay') delay: number | null = null; // eslint-disable-line @angular-eslint/no-input-rename\n\n private tooltipFactory: ComponentFactory<CalendarTooltipWindowComponent>;\n private tooltipRef: ComponentRef<CalendarTooltipWindowComponent>;\n private cancelTooltipDelay$ = new Subject<void>();\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 // eslint-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","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 isInsideLeftAndRight(\n outer: ClientRect,\n inner: ClientRect\n): 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 );\n}\n\nfunction isInsideTopAndBottom(outer: ClientRect, inner: ClientRect): boolean {\n return (\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 isInside(outer: ClientRect, inner: ClientRect): boolean {\n return (\n isInsideLeftAndRight(outer, inner) && isInsideTopAndBottom(outer, inner)\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 hourDuration?: number\n) {\n return (hourDuration || MINUTES_IN_HOUR) / (hourSegments * hourSegmentHeight);\n}\n\nexport function getMinutesMoved(\n movedY: number,\n hourSegments: number,\n hourSegmentHeight: number,\n eventSnapSize: number,\n hourDuration?: number\n): number {\n const draggedInPixelsSnapSize = roundToNearest(\n movedY,\n eventSnapSize || hourSegmentHeight\n );\n const pixelAmountInMinutes = getPixelAmountInMinutes(\n hourSegments,\n hourSegmentHeight,\n hourDuration\n );\n return draggedInPixelsSnapSize * pixelAmountInMinutes;\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 { 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 abstract getTimezoneOffset(date: Date | number): number;\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/calendar-view.enum';\nimport { addDaysWithExclusions } from '../util/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/calendar-view.enum';\nimport { addDaysWithExclusions } from '../util/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/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/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/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/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 { 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 { InjectionToken, Inject, Injectable } from '@angular/core';\nimport {\n CalendarDateFormatterInterface,\n DateFormatterParams,\n} from '../calendar-date-formatter/calendar-date-formatter.interface';\nimport { getWeekViewPeriod } from '../util/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, LL'); // dddd = Thursday\n } // LL = locale-dependent Month Day, Year\n}\n","import {\n CalendarDateFormatterInterface,\n DateFormatterParams,\n} from '../calendar-date-formatter/calendar-date-formatter.interface';\nimport { Injectable } from '@angular/core';\nimport { DateAdapter } from '../../../date-adapters/date-adapter';\nimport { getWeekViewPeriod } from '../util/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/calendar-event-actions.component';\nimport { CalendarEventTitleComponent } from './calendar-event-title/calendar-event-title.component';\nimport {\n CalendarTooltipDirective,\n CalendarTooltipWindowComponent,\n} from './calendar-tooltip/calendar-tooltip.directive';\nimport { CalendarPreviousViewDirective } from './calendar-previous-view/calendar-previous-view.directive';\nimport { CalendarNextViewDirective } from './calendar-next-view/calendar-next-view.directive';\nimport { CalendarTodayDirective } from './calendar-today/calendar-today.directive';\nimport { CalendarDatePipe } from './calendar-date/calendar-date.pipe';\nimport { CalendarEventTitlePipe } from './calendar-event-title/calendar-event-title.pipe';\nimport { ClickDirective } from './click/click.directive';\nimport { KeydownEnterDirective } from './keydown-enter/keydown-enter.directive';\nimport { CalendarEventTitleFormatter } from './calendar-event-title-formatter/calendar-event-title-formatter.provider';\nimport { CalendarDateFormatter } from './calendar-date-formatter/calendar-date-formatter.provider';\nimport { CalendarUtils } from './calendar-utils/calendar-utils.provider';\nimport { CalendarA11y } from './calendar-a11y/calendar-a11y.provider';\nimport { CalendarA11yPipe } from './calendar-a11y/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/calendar-event-title-formatter.provider';\nexport * from './calendar-moment-date-formatter/calendar-moment-date-formatter.provider';\nexport * from './calendar-native-date-formatter/calendar-native-date-formatter.provider';\nexport * from './calendar-angular-date-formatter/calendar-angular-date-formatter.provider';\nexport * from './calendar-date-formatter/calendar-date-formatter.provider';\nexport * from './calendar-utils/calendar-utils.provider';\nexport * from './calendar-a11y/calendar-a11y.provider';\nexport * from './calendar-a11y/calendar-a11y.interface';\nexport * from './calendar-date-formatter/calendar-date-formatter.interface';\nexport * from './calendar-event-times-changed-event/calendar-event-times-changed-event.interface';\nexport * from '../../date-adapters/date-adapter';\nexport * from './calendar-view/calendar-view.enum';\n\n// needed for ivy, not part of the public api\nexport { CalendarEventActionsComponent as ɵCalendarEventActionsComponent } from './calendar-event-actions/calendar-event-actions.component';\nexport { CalendarEventTitleComponent as ɵCalendarEventTitleComponent } from './calendar-event-title/calendar-event-title.component';\nexport {\n CalendarTooltipDirective as ɵCalendarTooltipDirective,\n CalendarTooltipWindowComponent as ɵCalendarTooltipWindowComponent,\n} from './calendar-tooltip/calendar-tooltip.directive';\nexport { CalendarPreviousViewDirective as ɵCalendarPreviousViewDirective } from './calendar-previous-view/calendar-previous-view.directive';\nexport { CalendarNextViewDirective as ɵCalendarNextViewDirective } from './calendar-next-view/calendar-next-view.directive';\nexport { CalendarTodayDirective as ɵCalendarTodayDirective } from './calendar-today/calendar-today.directive';\nexport { CalendarDatePipe as ɵCalendarDatePipe } from './calendar-date/calendar-date.pipe';\nexport { CalendarEventTitlePipe as ɵCalendarEventTitlePipe } from './calendar-event-title/calendar-event-title.pipe';\nexport { ClickDirective as ɵClickDirective } from './click/click.directive';\nexport { KeydownEnterDirective as ɵKeydownEnterDirective } from './keydown-enter/keydown-enter.directive';\nexport { CalendarA11yPipe as ɵCalendarA11yPipe } from './calendar-a11y/calendar-a11y.pipe';\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})\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 Input,\n Output,\n EventEmitter,\n TemplateRef,\n} from '@angular/core';\nimport { MonthViewDay, CalendarEvent } from 'calendar-utils';\nimport { isWithinThreshold, trackByEventId } from '../../../common/util/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 // eslint-disable-next-line @angular-eslint/no-host-metadata-property\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/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 | KeyboardEvent;\n }>();\n\n trackByEventId = trackByEventId;\n\n validateDrag = isWithinThreshold;\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/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 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/calendar-event-times-changed-event.interface';\nimport { CalendarUtils } from '../../common/calendar-utils/calendar-utils.provider';\nimport { validateEvents } from '../../common/util/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 | KeyboardEvent;\n }>();\n\n /**\n * Called when the event title is clicked\n */\n @Output() eventClicked = new EventEmitter<{\n event: CalendarEvent;\n sourceEvent: MouseEvent | KeyboardEvent;\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 | KeyboardEvent;\n }>();\n\n /**\n * Called when an event is dragged and dropped\n */\n @Output()\n eventTimesChanged =\n 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 { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragAndDropModule } from 'angular-draggable-droppable';\nimport { CalendarMonthViewComponent } from './calendar-month-view/calendar-month-view.component';\nimport { CalendarMonthViewHeaderComponent } from './calendar-month-view/calendar-month-view-header/calendar-month-view-header.component';\nimport { CalendarMonthCellComponent } from './calendar-month-view/calendar-month-cell/calendar-month-cell.component';\nimport { CalendarOpenDayEventsComponent } from './calendar-month-view/calendar-open-day-events/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/calendar-month-view.component';\nexport { MonthViewDay as CalendarMonthViewDay } from 'calendar-utils';\nexport { collapseAnimation } from './calendar-month-view/calendar-open-day-events/calendar-open-day-events.component';\n\n// needed for ivy, not part of the public api\nexport { CalendarMonthCellComponent as ɵCalendarMonthCellComponent } from './calendar-month-view/calendar-month-cell/calendar-month-cell.component';\nexport { CalendarMonthViewHeaderComponent as ɵCalendarMonthViewHeaderComponent } from './calendar-month-view/calendar-month-view-header/calendar-month-view-header.component';\nexport { CalendarOpenDayEventsComponent as ɵCalendarOpenDayEventsComponent } from './calendar-month-view/calendar-open-day-events/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 { isInsideLeftAndRight, isWithinThreshold } from '../util/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 const isDraggedWithinThreshold =\n isWithinThreshold({ x, y }) || dragAlreadyMoved;\n\n if (snapDraggedEvents) {\n const inner: 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 if (isDraggedWithinThreshold) {\n const outer = this.dragContainerElement.getBoundingClientRect();\n\n const isTopInside = outer.top < inner.top && inner.top < outer.bottom;\n\n const isBottomInside =\n outer.top < inner.bottom && inner.bottom < outer.bottom;\n\n return (\n isInsideLeftAndRight(outer, inner) && (isTopInside || isBottomInside)\n );\n }\n\n /* istanbul ignore next */\n return false;\n } else {\n return isDraggedWithinThreshold;\n }\n }\n}\n","import { isInside } from '../util/util';\n\nexport class CalendarResizeHelper {\n constructor(\n private resizeContainerElement: HTMLElement,\n private minWidth: number,\n private rtl: boolean\n ) {}\n\n validateResize({ rectangle, edges }): boolean {\n if (this.rtl) {\n // TODO - find a way of testing this, for some reason the tests always fail but it does actually work\n /* istanbul ignore next */\n if (typeof edges.left !== 'undefined') {\n rectangle.left -= edges.left;\n rectangle.right += edges.left;\n } else if (typeof edges.right !== 'undefined') {\n rectangle.left += edges.right;\n rectangle.right -= edges.right;\n }\n rectangle.width = rectangle.right - rectangle.left;\n }\n\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 TemplateRef,\n} from '@angular/core';\nimport { CalendarEvent, WeekDay } from 'calendar-utils';\nimport { trackByWeekDayHeaderDate } from '../../../common/util/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 color: weekEvent.event.color?.secondaryText,\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 | KeyboardEvent;\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() hourDuration: number;\n\n @Input() hourSegmentHeight: number;\n\n @Input() customTemplate: TemplateRef<any>;\n\n columnDate$ = new BehaviorSubject<Date>(undefined);\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) /\n (this.hourDuration || 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 {\n Component,\n Input,\n Output,\n EventEmitter,\n ChangeDetectorRef,\n OnChanges,\n OnInit,\n OnDestroy,\n LOCALE_ID,\n Inject,\n TemplateRef,\n ElementRef,\n AfterViewInit,\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 { ResizeCursors } from 'angular-resizable-element';\nimport { CalendarDragHelper } from '../../common/calendar-drag-helper/calendar-drag-helper.provider';\nimport { CalendarResizeHelper } from '../../common/calendar-resize-helper/calendar-resize-helper.provider';\nimport {\n CalendarEventTimesChangedEvent,\n CalendarEventTimesChangedEventType,\n} from '../../common/calendar-event-times-changed-event/calendar-event-times-changed-event.interface';\nimport { CalendarUtils } from '../../common/calendar-utils/calendar-utils.provider';\nimport {\n validateEvents,\n roundToNearest,\n trackByWeekDayHeaderDate,\n trackByHourSegment,\n trackByHour,\n getMinutesMoved,\n getDefaultEventEnd,\n addDaysWithExclusions,\n isDraggedWithinPeriod,\n shouldFireDroppedEvent,\n getWeekViewPeriod,\n trackByWeekAllDayEvent,\n trackByWeekTimeEvent,\n} from '../../common/util/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 class=\"cal-time-label-column\">\n <ng-container\n *ngTemplateOutlet=\"allDayEventsLabelTemplate\"\n ></ng-container>\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.%]=\"\n rtl ? null : (100 / days.length) * allDayEvent.offset\n \"\n [style.marginRight.%]=\"\n rtl ? (100 / days.length) * allDayEvent.offset : null\n \"\n mwlResizable\n [resizeCursors]=\"resizeCursors\"\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)=\"\n dragStarted(eventRowContainer, event, allDayEvent, false)\n \"\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 [hourDuration]=\"hourDuration\"\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 [resizeCursors]=\"resizeCursors\"\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, true)\"\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\n implements OnChanges, OnInit, OnDestroy, AfterViewInit\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 * 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 duration of each segment group in minutes\n */\n @Input() hourDuration: number;\n\n /**\n * The height in pixels of each hour segment\n */\n @Input() hourSegmentHeight: number = 30;\n\n /**\n * The minimum height in pixels of each event\n */\n @Input() minimumEventHeight: 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 * Allow you to customise where events can be dragged and resized to.\n * Return true to allow dragging and resizing to the new location, or false to prevent it\n */\n @Input() validateEventTimesChanged: (\n event: CalendarEventTimesChangedEvent\n ) => boolean;\n\n /**\n * Customise the document cursor when dragging to resize an event\n */\n @Input() resizeCursors: Partial<\n Pick<ResizeCursors, 'leftOrRight' | 'topOrBottom'>\n >;\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 an event title is clicked\n */\n @Output() eventClicked = new EventEmitter<{\n event: CalendarEvent;\n sourceEvent: MouseEvent | KeyboardEvent;\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 rtl = false;\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 protected element: ElementRef<HTMLElement>\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.hourDuration ||\n changes.weekStartsOn ||\n changes.weekendDays ||\n changes.excludeDays ||\n changes.hourSegmentHeight ||\n changes.events ||\n changes.daysInWeek ||\n changes.minimumEventHeight;\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 ngAfterViewInit() {\n this.rtl =\n typeof window !== 'undefined' &&\n getComputedStyle(this.element.nativeElement).direction === 'rtl';\n this.cdr.detectChanges();\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, timeEvent);\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 allDayEvent,\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 const modifier = this.rtl ? -1 : 1;\n if (typeof resizeEvent.edges.left !== 'undefined') {\n const diff: number =\n Math.round(+resizeEvent.edges.left / dayWidth) * modifier;\n allDayEvent.offset = currentResize.originalOffset + diff;\n allDayEvent.span = currentResize.originalSpan - diff;\n } else if (typeof resizeEvent.edges.right !== 'undefined') {\n const diff: number =\n Math.round(+resizeEvent.edges.right / dayWidth) * modifier;\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 const newDates = this.getAllDayEventResizedDates(\n allDayEvent.event,\n daysDiff,\n allDayEventResizingBeforeStart\n );\n\n this.eventTimesChanged.emit({\n newStart: newDates.start,\n newEnd: newDates.end,\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: Pick<\n DropEvent<{ event?: CalendarEvent; calendarId?: symbol }>,\n 'dropData'\n >,\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 eventsContainerElement: HTMLElement,\n eventElement: HTMLElement,\n event: WeekViewTimeEvent | WeekViewAllDayEvent,\n useY: boolean\n ): void {\n this.dayColumnWidth = this.getDayColumnWidth(eventsContainerElement);\n const dragHelper: CalendarDragHelper = new CalendarDragHelper(\n eventsContainerElement,\n eventElement\n );\n this.validateDrag = ({ x, y, transform }) => {\n const isAllowed =\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 if (isAllowed && this.validateEventTimesChanged) {\n const newEventTimes = this.getDragMovedEventTimes(\n event,\n { x, y },\n this.dayColumnWidth,\n useY\n );\n return this.validateEventTimesChanged({\n type: CalendarEventTimesChangedEventType.Drag,\n event: event.event,\n newStart: newEventTimes.start,\n newEnd: newEventTimes.end,\n });\n }\n\n return isAllowed;\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 && useY) {\n this.view.hourColumns.forEach((column) => {\n const linkedEvent = column.events.find(\n (columnEvent) =>\n columnEvent.event === event.event && columnEvent !== event\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 hourDuration: this.hourDuration,\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 minimumEventHeight: this.minimumEventHeight,\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 =\n (roundToNearest(dragEndEvent.x, dayWidth) / dayWidth) *\n (this.rtl ? -1 : 1);\n const minutesMoved = useY\n ? getMinutesMoved(\n dragEndEvent.y,\n this.hourSegments,\n this.hourSegmentHeight,\n this.eventSnapSize,\n this.hourDuration\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 newEventDates = {\n start: calendarEvent.start,\n end: getDefaultEventEnd(\n this.dateAdapter,\n calendarEvent,\n this.minimumEventHeight\n ),\n };\n const { end, ...eventWithoutEnd } = calendarEvent;\n const smallestResizes = {\n start: this.dateAdapter.addMinutes(\n newEventDates.end,\n this.minimumEventHeight * -1\n ),\n end: getDefaultEventEnd(\n this.dateAdapter,\n eventWithoutEnd,\n this.minimumEventHeight\n ),\n };\n\n const modifier = this.rtl ? -1 : 1;\n\n if (typeof resizeEvent.edges.left !== 'undefined') {\n const daysDiff =\n Math.round(+resizeEvent.edges.left / this.dayColumnWidth) * modifier;\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 =\n Math.round(+resizeEvent.edges.right / this.dayColumnWidth) * modifier;\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 this.hourDuration\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 this.hourDuration\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(\n eventsContainer: HTMLElement,\n event: WeekViewTimeEvent | WeekViewAllDayEvent,\n dayWidth?: number\n ) {\n this.dayColumnWidth = this.getDayColumnWidth(eventsContainer);\n const resizeHelper = new CalendarResizeHelper(\n eventsContainer,\n dayWidth,\n this.rtl\n );\n this.validateResize = ({ rectangle, edges }) => {\n const isWithinBoundary = resizeHelper.validateResize({\n rectangle: { ...rectangle },\n edges,\n });\n\n if (isWithinBoundary && this.validateEventTimesChanged) {\n let newEventDates;\n if (!dayWidth) {\n newEventDates = this.getTimeEventResizedDates(event.event, {\n rectangle,\n edges,\n });\n } else {\n const modifier = this.rtl ? -1 : 1;\n if (typeof edges.left !== 'undefined') {\n const diff = Math.round(+edges.left / dayWidth) * modifier;\n newEventDates = this.getAllDayEventResizedDates(\n event.event,\n diff,\n !this.rtl\n );\n } else {\n const diff = Math.round(+edges.right / dayWidth) * modifier;\n newEventDates = this.getAllDayEventResizedDates(\n event.event,\n diff,\n this.rtl\n );\n }\n }\n return this.validateEventTimesChanged({\n type: CalendarEventTimesChangedEventType.Resize,\n event: event.event,\n newStart: newEventDates.start,\n newEnd: newEventDates.end,\n });\n }\n\n return isWithinBoundary;\n };\n this.cdr.markForCheck();\n }\n\n /**\n * @hidden\n */\n protected getAllDayEventResizedDates(\n event: CalendarEvent,\n daysDiff: number,\n beforeStart: boolean\n ) {\n let start: Date = event.start;\n let end: Date = event.end || event.start;\n if (beforeStart) {\n start = addDaysWithExclusions(\n this.dateAdapter,\n start,\n daysDiff,\n this.excludeDays\n );\n } else {\n end = addDaysWithExclusions(\n this.dateAdapter,\n end,\n daysDiff,\n this.excludeDays\n );\n }\n\n return { start, end };\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/calendar-week-view.component';\nimport { CalendarWeekViewHeaderComponent } from './calendar-week-view/calendar-week-view-header/calendar-week-view-header.component';\nimport { CalendarWeekViewEventComponent } from './calendar-week-view/calendar-week-view-event/calendar-week-view-event.component';\nimport { CalendarCommonModule } from '../common/calendar-common.module';\nimport { CalendarWeekViewHourSegmentComponent } from './calendar-week-view/calendar-week-view-hour-segment/calendar-week-view-hour-segment.component';\nimport { CalendarWeekViewCurrentTimeMarkerComponent } from './calendar-week-view/calendar-week-view-current-time-marker/calendar-week-view-current-time-marker.component';\n\nexport {\n CalendarWeekViewComponent,\n CalendarWeekViewBeforeRenderEvent,\n} from './calendar-week-view/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/util';\n\n// needed for ivy, not part of the public api\nexport { CalendarWeekViewHeaderComponent as ɵCalendarWeekViewHeaderComponent } from './calendar-week-view/calendar-week-view-header/calendar-week-view-header.component';\nexport { CalendarWeekViewEventComponent as ɵCalendarWeekViewEventComponent } from './calendar-week-view/calendar-week-view-event/calendar-week-view-event.component';\nexport { CalendarWeekViewHourSegmentComponent as ɵCalendarWeekViewHourSegmentComponent } from './calendar-week-view/calendar-week-view-hour-segment/calendar-week-view-hour-segment.component';\nexport { CalendarWeekViewCurrentTimeMarkerComponent as ɵCalendarWeekViewCurrentTimeMarkerComponent } from './calendar-week-view/calendar-week-view-current-time-marker/calendar-week-view-current-time-marker.component';\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/calendar-event-times-changed-event.interface';\nimport { PlacementArray } from 'positioning';\nimport { CalendarWeekViewBeforeRenderEvent } from '../../week/calendar-week.module';\nimport { ResizeCursors } from 'angular-resizable-element';\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 [hourDuration]=\"hourDuration\"\n [hourSegmentHeight]=\"hourSegmentHeight\"\n [minimumEventHeight]=\"minimumEventHeight\"\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 [resizeCursors]=\"resizeCursors\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n [eventTemplate]=\"eventTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n [snapDraggedEvents]=\"snapDraggedEvents\"\n [allDayEventsLabelTemplate]=\"allDayEventsLabelTemplate\"\n [currentTimeMarkerTemplate]=\"currentTimeMarkerTemplate\"\n [validateEventTimesChanged]=\"validateEventTimesChanged\"\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 duration of each segment group in minutes\n */\n @Input() hourDuration: number;\n\n /**\n * The minimum height in pixels of each event\n */\n @Input() minimumEventHeight: 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 * Allow you to customise where events can be dragged and resized to.\n * Return true to allow dragging and resizing to the new location, or false to prevent it\n */\n @Input() validateEventTimesChanged: (\n event: CalendarEventTimesChangedEvent\n ) => boolean;\n\n /**\n * Customise the document cursor when dragging to resize an event\n */\n @Input() resizeCursors: Partial<\n Pick<ResizeCursors, 'leftOrRight' | 'topOrBottom'>\n >;\n\n /**\n * Called when an event title is clicked\n */\n @Output() eventClicked = new EventEmitter<{\n event: CalendarEvent;\n sourceEvent: MouseEvent | KeyboardEvent;\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/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/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/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"],"names":["i2.ClickDirective","i3.KeydownEnterDirective","i4.CalendarA11yPipe","i1.CalendarEventTitleFormatter","i2.CalendarEventTitlePipe","i3.CalendarA11yPipe","validateEventsWithoutLog","i1.DateAdapter","i3.CalendarTooltipDirective","i4.ClickDirective","i5.CalendarDatePipe","i6.CalendarEventTitlePipe","i7.CalendarA11yPipe","i3.CalendarEventActionsComponent","i4.CalendarEventTitleComponent","i5.ClickDirective","i6.KeydownEnterDirective","i2.CalendarDatePipe","i2.DateAdapter","i3","i4","i7.CalendarMonthCellComponent","i8.CalendarOpenDayEventsComponent","i9.CalendarMonthViewHeaderComponent","i10.CalendarA11yPipe","i3.ClickDirective","i4.CalendarDatePipe","i2.CalendarEventActionsComponent","i3.CalendarEventTitleComponent","i4.CalendarTooltipDirective","i7.CalendarEventTitlePipe","i8.CalendarA11yPipe","i2","i5","i6.ClickDirective","i7.CalendarWeekViewHeaderComponent","i8.CalendarWeekViewEventComponent","i9.CalendarWeekViewHourSegmentComponent","i10.CalendarWeekViewCurrentTimeMarkerComponent","i1.CalendarWeekViewComponent"],"mappings":"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"}
\No newline at end of file