{"version":3,"file":"angular-calendar-ext.mjs","sources":["../../../projects/angular-calendar/src/modules/common/click.directive.ts","../../../projects/angular-calendar/src/modules/common/keydown-enter.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-a11y.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-a11y.pipe.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-actions.component.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-title-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-title.pipe.ts","../../../projects/angular-calendar/src/modules/common/calendar-event-title.component.ts","../../../projects/angular-calendar/src/modules/common/calendar-tooltip.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-view.enum.ts","../../../projects/angular-calendar/src/modules/common/util.ts","../../../projects/angular-calendar/src/date-adapters/date-adapter.ts","../../../projects/angular-calendar/src/modules/common/calendar-previous-view.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-next-view.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-today.directive.ts","../../../projects/angular-calendar/src/modules/common/calendar-angular-date-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-date-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-date.pipe.ts","../../../projects/angular-calendar/src/modules/common/calendar-utils.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-toolbar/calendar-toolbar.component.ts","../../../projects/angular-calendar/src/modules/common/calendar-toolbar/calendar-toolbar.component.html","../../../projects/angular-calendar/src/modules/common/material.module.ts","../../../projects/angular-calendar/src/modules/common/calendar-moment-date-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-native-date-formatter.provider.ts","../../../projects/angular-calendar/src/modules/common/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-cell.component.ts","../../../projects/angular-calendar/src/modules/month/calendar-open-day-events.component.ts","../../../projects/angular-calendar/src/modules/month/calendar-month-view-header.component.ts","../../../projects/angular-calendar/src/modules/month/calendar-month-view.component.ts","../../../projects/angular-calendar/src/modules/month/calendar-month.module.ts","../../../projects/angular-calendar/src/modules/common/calendar-drag-helper.provider.ts","../../../projects/angular-calendar/src/modules/common/calendar-resize-helper.provider.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view-header.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view-event.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view-hour-segment.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view-current-time-marker.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week-view.component.ts","../../../projects/angular-calendar/src/modules/week/calendar-week.module.ts","../../../projects/angular-calendar/src/modules/day/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-ext.ts"],"sourcesContent":["import {\r\n  Directive,\r\n  Renderer2,\r\n  ElementRef,\r\n  OnInit,\r\n  OnDestroy,\r\n  Output,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  NgZone,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Directive({\r\n  selector: '[mwlClick]',\r\n})\r\nexport class ClickDirective implements OnInit, OnDestroy {\r\n  @Input() clickListenerDisabled = false;\r\n\r\n  @Output('mwlClick') click = new EventEmitter<MouseEvent>(); // eslint-disable-line\r\n\r\n  private destroy$ = new Subject<void>();\r\n\r\n  constructor(\r\n    private renderer: Renderer2,\r\n    private elm: ElementRef<HTMLElement>,\r\n    @Inject(DOCUMENT) private document\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    if (!this.clickListenerDisabled) {\r\n      this.listen()\r\n        .pipe(takeUntil(this.destroy$))\r\n        .subscribe((event) => {\r\n          event.stopPropagation();\r\n          this.click.emit(event);\r\n        });\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.destroy$.next();\r\n  }\r\n\r\n  private listen() {\r\n    return new Observable<MouseEvent>((observer) => {\r\n      return this.renderer.listen(this.elm.nativeElement, 'click', (event) => {\r\n        observer.next(event);\r\n      });\r\n    });\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  Output,\r\n  EventEmitter,\r\n  ElementRef,\r\n  NgZone,\r\n  Renderer2,\r\n  OnInit,\r\n  OnDestroy,\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[mwlKeydownEnter]',\r\n})\r\nexport class KeydownEnterDirective implements OnInit, OnDestroy {\r\n  @Output('mwlKeydownEnter') keydown = new EventEmitter<KeyboardEvent>(); // eslint-disable-line\r\n\r\n  private keydownListener: VoidFunction | null = null;\r\n\r\n  constructor(\r\n    private host: ElementRef<HTMLElement>,\r\n    private ngZone: NgZone,\r\n    private renderer: Renderer2\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.ngZone.runOutsideAngular(() => {\r\n      this.keydownListener = this.renderer.listen(\r\n        this.host.nativeElement,\r\n        'keydown',\r\n        (event: KeyboardEvent) => {\r\n          if (\r\n            event.keyCode === 13 ||\r\n            event.which === 13 ||\r\n            event.key === 'Enter'\r\n          ) {\r\n            event.preventDefault();\r\n            event.stopPropagation();\r\n\r\n            this.ngZone.run(() => {\r\n              this.keydown.emit(event);\r\n            });\r\n          }\r\n        }\r\n      );\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.keydownListener !== null) {\r\n      this.keydownListener();\r\n      this.keydownListener = null;\r\n    }\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { formatDate, I18nPluralPipe } from '@angular/common';\r\nimport { A11yParams } from './calendar-a11y.interface';\r\n\r\n/**\r\n * This class is responsible for adding accessibility to the calendar.\r\n * You may override any of its methods via angulars DI to suit your requirements.\r\n * For example:\r\n *\r\n * ```typescript\r\n * import { A11yParams, CalendarA11y } from 'angular-calendar';\r\n * import { formatDate, I18nPluralPipe } from '@angular/common';\r\n * import { Injectable } from '@angular/core';\r\n *\r\n * // adding your own a11y params\r\n * export interface CustomA11yParams extends A11yParams {\r\n *   isDrSuess?: boolean;\r\n * }\r\n *\r\n * @Injectable()\r\n * export class CustomCalendarA11y extends CalendarA11y {\r\n *   constructor(protected i18nPlural: I18nPluralPipe) {\r\n *     super(i18nPlural);\r\n *   }\r\n *\r\n *   // overriding a function\r\n *   public openDayEventsLandmark({ date, locale, isDrSuess }: CustomA11yParams): string {\r\n *     if (isDrSuess) {\r\n *       return `\r\n *         ${formatDate(date, 'EEEE MMMM d', locale)}\r\n *          Today you are you! That is truer than true! There is no one alive\r\n *          who is you-er than you!\r\n *       `;\r\n *     }\r\n *   }\r\n * }\r\n *\r\n * // in your component that uses the calendar\r\n * providers: [{\r\n *  provide: CalendarA11y,\r\n *  useClass: CustomCalendarA11y\r\n * }]\r\n * ```\r\n */\r\n@Injectable()\r\nexport class CalendarA11y {\r\n  constructor(protected i18nPlural: I18nPluralPipe) {}\r\n\r\n  /**\r\n   * Aria label for the badges/date of a cell\r\n   * @example: `Saturday October 19 1 event click to expand`\r\n   */\r\n  public monthCell({ day, locale }: A11yParams): string {\r\n    if (day.badgeTotal > 0) {\r\n      return `\r\n        ${formatDate(day.date, 'EEEE MMMM d', locale)},\r\n        ${this.i18nPlural.transform(day.badgeTotal, {\r\n          '=0': 'No events',\r\n          '=1': 'One event',\r\n          other: '# events',\r\n        })},\r\n         click to expand\r\n      `;\r\n    } else {\r\n      return `${formatDate(day.date, 'EEEE MMMM d', locale)}`;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Aria label for the open day events start landmark\r\n   * @example: `Saturday October 19 expanded view`\r\n   */\r\n  public openDayEventsLandmark({ date, locale }: A11yParams): string {\r\n    return `\r\n      Beginning of expanded view for ${formatDate(date, 'EEEE MMMM dd', locale)}\r\n    `;\r\n  }\r\n\r\n  /**\r\n   * Aria label for alert that a day in the month view was expanded\r\n   * @example: `Saturday October 19 expanded`\r\n   */\r\n  public openDayEventsAlert({ date, locale }: A11yParams): string {\r\n    return `${formatDate(date, 'EEEE MMMM dd', locale)} expanded`;\r\n  }\r\n\r\n  /**\r\n   * Descriptive aria label for an event\r\n   * @example: `Saturday October 19th, Scott's Pizza Party, from 11:00am to 5:00pm`\r\n   */\r\n  public eventDescription({ event, locale }: A11yParams): string {\r\n    if (event.allDay === true) {\r\n      return this.allDayEventDescription({ event, locale });\r\n    }\r\n\r\n    const aria = `\r\n      ${formatDate(event.start, 'EEEE MMMM dd', locale)},\r\n      ${event.title}, from ${formatDate(event.start, 'hh:mm a', locale)}\r\n    `;\r\n    if (event.end) {\r\n      return aria + ` to ${formatDate(event.end, 'hh:mm a', locale)}`;\r\n    }\r\n    return aria;\r\n  }\r\n\r\n  /**\r\n   * Descriptive aria label for an all day event\r\n   * @example:\r\n   * `Scott's Party, event spans multiple days: start time October 19 5:00pm, no stop time`\r\n   */\r\n  public allDayEventDescription({ event, locale }: A11yParams): string {\r\n    const aria = `\r\n      ${event.title}, event spans multiple days:\r\n      start time ${formatDate(event.start, 'MMMM dd hh:mm a', locale)}\r\n    `;\r\n    if (event.end) {\r\n      return (\r\n        aria + `, stop time ${formatDate(event.end, 'MMMM d hh:mm a', locale)}`\r\n      );\r\n    }\r\n    return aria + `, no stop time`;\r\n  }\r\n\r\n  /**\r\n   * Aria label for the calendar event actions icons\r\n   * @returns 'Edit' for fa-pencil icons, and 'Delete' for fa-times icons\r\n   */\r\n  public actionButtonLabel({ action }: A11yParams): string {\r\n    return action.a11yLabel;\r\n  }\r\n\r\n  /**\r\n   * @returns {number} Tab index to be given to month cells\r\n   */\r\n  public monthCellTabIndex(): number {\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * @returns true if the events inside the month cell should be aria-hidden\r\n   */\r\n  public hideMonthCellEvents(): boolean {\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * @returns true if event titles should be aria-hidden (global)\r\n   */\r\n  public hideEventTitle(): boolean {\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * @returns true if hour segments in the week view should be aria-hidden\r\n   */\r\n  public hideWeekHourSegment(): boolean {\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * @returns true if hour segments in the day view should be aria-hidden\r\n   */\r\n  public hideDayHourSegment(): boolean {\r\n    return true;\r\n  }\r\n}\r\n","import { Pipe, PipeTransform, LOCALE_ID, Inject } from '@angular/core';\r\nimport { CalendarA11y } from './calendar-a11y.provider';\r\nimport { A11yParams } from './calendar-a11y.interface';\r\n\r\n/**\r\n * This pipe is primarily for rendering aria labels. Example usage:\r\n * ```typescript\r\n * // where `myEvent` is a `CalendarEvent` and myLocale is a locale identifier\r\n * {{ { event: myEvent, locale: myLocale } | calendarA11y: 'eventDescription' }}\r\n * ```\r\n */\r\n@Pipe({\r\n  name: 'calendarA11y',\r\n})\r\nexport class CalendarA11yPipe implements PipeTransform {\r\n  constructor(\r\n    private calendarA11y: CalendarA11y,\r\n    @Inject(LOCALE_ID) private locale: string\r\n  ) {}\r\n\r\n  transform(a11yParams: A11yParams, method: string): string {\r\n    a11yParams.locale = a11yParams.locale || this.locale;\r\n    if (typeof this.calendarA11y[method] === 'undefined') {\r\n      const allowedMethods = Object.getOwnPropertyNames(\r\n        Object.getPrototypeOf(CalendarA11y.prototype)\r\n      ).filter((iMethod) => iMethod !== 'constructor');\r\n      throw new Error(\r\n        `${method} is not a valid a11y method. Can only be one of ${allowedMethods.join(\r\n          ', '\r\n        )}`\r\n      );\r\n    }\r\n    return this.calendarA11y[method](a11yParams);\r\n  }\r\n}\r\n","import { Component, Input, TemplateRef } from '@angular/core';\r\nimport { CalendarEvent, EventAction } from 'calendar-utils';\r\n\r\n@Component({\r\n  selector: 'mwl-calendar-event-actions',\r\n  template: `\r\n    <ng-template\r\n      #defaultTemplate\r\n      let-event=\"event\"\r\n      let-trackByActionId=\"trackByActionId\"\r\n    >\r\n      <span *ngIf=\"event.actions\" class=\"cal-event-actions\">\r\n        <a\r\n          class=\"cal-event-action\"\r\n          href=\"javascript:;\"\r\n          *ngFor=\"let action of event.actions; trackBy: trackByActionId\"\r\n          (mwlClick)=\"action.onClick({ event: event, sourceEvent: $event })\"\r\n          (mwlKeydownEnter)=\"\r\n            action.onClick({ event: event, sourceEvent: $event })\r\n          \"\r\n          [ngClass]=\"action.cssClass\"\r\n          [innerHtml]=\"action.label\"\r\n          tabindex=\"0\"\r\n          role=\"button\"\r\n          [attr.aria-label]=\"\r\n            { action: action } | calendarA11y: 'actionButtonLabel'\r\n          \"\r\n        >\r\n        </a>\r\n      </span>\r\n    </ng-template>\r\n    <ng-template\r\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\r\n      [ngTemplateOutletContext]=\"{\r\n        event: event,\r\n        trackByActionId: trackByActionId\r\n      }\"\r\n    >\r\n    </ng-template>\r\n  `,\r\n})\r\nexport class CalendarEventActionsComponent {\r\n  @Input() event: CalendarEvent;\r\n\r\n  @Input() customTemplate: TemplateRef<any>;\r\n\r\n  trackByActionId = (index: number, action: EventAction) =>\r\n    action.id ? action.id : action;\r\n}\r\n","import { CalendarEvent } from 'calendar-utils';\r\n\r\n/**\r\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:\r\n *\r\n * ```typescript\r\n * import { Injectable } from '@angular/core';\r\n * import { CalendarEventTitleFormatter, CalendarEvent } from 'angular-calendar';\r\n *\r\n * @Injectable()\r\n * class CustomEventTitleFormatter extends CalendarEventTitleFormatter {\r\n *\r\n *   month(event: CalendarEvent): string {\r\n *     return `Custom prefix: ${event.title}`;\r\n *   }\r\n *\r\n * }\r\n *\r\n * // in your component\r\n * providers: [{\r\n *  provide: CalendarEventTitleFormatter,\r\n *  useClass: CustomEventTitleFormatter\r\n * }]\r\n * ```\r\n */\r\nexport class CalendarEventTitleFormatter {\r\n  /**\r\n   * The month view event title.\r\n   */\r\n  month(event: CalendarEvent, title: string): string {\r\n    return event.title;\r\n  }\r\n\r\n  /**\r\n   * The month view event tooltip. Return a falsey value from this to disable the tooltip.\r\n   */\r\n  monthTooltip(event: CalendarEvent, title: string): string {\r\n    return event.title;\r\n  }\r\n\r\n  /**\r\n   * The week view event title.\r\n   */\r\n  week(event: CalendarEvent, title: string): string {\r\n    return event.title;\r\n  }\r\n\r\n  /**\r\n   * The week view event tooltip. Return a falsey value from this to disable the tooltip.\r\n   */\r\n  weekTooltip(event: CalendarEvent, title: string): string {\r\n    return event.title;\r\n  }\r\n\r\n  /**\r\n   * The day view event title.\r\n   */\r\n  day(event: CalendarEvent, title: string): string {\r\n    return event.title;\r\n  }\r\n\r\n  /**\r\n   * The day view event tooltip. Return a falsey value from this to disable the tooltip.\r\n   */\r\n  dayTooltip(event: CalendarEvent, title: string): string {\r\n    return event.title;\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { CalendarEvent } from 'calendar-utils';\r\nimport { CalendarEventTitleFormatter } from './calendar-event-title-formatter.provider';\r\n\r\n@Pipe({\r\n  name: 'calendarEventTitle',\r\n})\r\nexport class CalendarEventTitlePipe implements PipeTransform {\r\n  constructor(private calendarEventTitle: CalendarEventTitleFormatter) {}\r\n\r\n  transform(title: string, titleType: string, event: CalendarEvent): string {\r\n    return this.calendarEventTitle[titleType](event, title);\r\n  }\r\n}\r\n","import { Component, Input, TemplateRef } from '@angular/core';\r\nimport { CalendarEvent } from 'calendar-utils';\r\n\r\n@Component({\r\n  selector: 'mwl-calendar-event-title',\r\n  template: `\r\n    <ng-template #defaultTemplate let-event=\"event\" let-view=\"view\">\r\n      <span\r\n        class=\"cal-event-title\"\r\n        [innerHTML]=\"event.title | calendarEventTitle: view:event\"\r\n        [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\r\n      >\r\n      </span>\r\n    </ng-template>\r\n    <ng-template\r\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\r\n      [ngTemplateOutletContext]=\"{\r\n        event: event,\r\n        view: view\r\n      }\"\r\n    >\r\n    </ng-template>\r\n  `,\r\n})\r\nexport class CalendarEventTitleComponent {\r\n  @Input() event: CalendarEvent;\r\n\r\n  @Input() customTemplate: TemplateRef<any>;\r\n\r\n  @Input() view: string;\r\n}\r\n","import {\r\n  Directive,\r\n  Component,\r\n  HostListener,\r\n  OnDestroy,\r\n  Input,\r\n  ComponentRef,\r\n  Injector,\r\n  ComponentFactoryResolver,\r\n  ViewContainerRef,\r\n  ElementRef,\r\n  ComponentFactory,\r\n  Inject,\r\n  Renderer2,\r\n  TemplateRef,\r\n  OnChanges,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { PlacementArray, positionElements } from 'positioning';\r\nimport { CalendarEvent } from 'calendar-utils';\r\nimport { Observable, of, Subject, timer } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Component({\r\n  selector: 'mwl-calendar-tooltip-window',\r\n  template: `\r\n    <ng-template\r\n      #defaultTemplate\r\n      let-contents=\"contents\"\r\n      let-placement=\"placement\"\r\n      let-event=\"event\"\r\n    >\r\n      <div class=\"cal-tooltip\" [ngClass]=\"'cal-tooltip-' + placement\">\r\n        <div class=\"cal-tooltip-arrow\"></div>\r\n        <div class=\"cal-tooltip-inner\" [innerHtml]=\"contents\"></div>\r\n      </div>\r\n    </ng-template>\r\n    <ng-template\r\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\r\n      [ngTemplateOutletContext]=\"{\r\n        contents: contents,\r\n        placement: placement,\r\n        event: event\r\n      }\"\r\n    >\r\n    </ng-template>\r\n  `,\r\n})\r\nexport class CalendarTooltipWindowComponent {\r\n  @Input() contents: string;\r\n\r\n  @Input() placement: string;\r\n\r\n  @Input() event: CalendarEvent;\r\n\r\n  @Input() customTemplate: TemplateRef<any>;\r\n}\r\n\r\n@Directive({\r\n  selector: '[mwlCalendarTooltip]',\r\n})\r\nexport class CalendarTooltipDirective implements OnDestroy, OnChanges {\r\n  @Input('mwlCalendarTooltip') contents: string; // eslint-disable-line  @angular-eslint/no-input-rename\r\n\r\n  @Input('tooltipPlacement') placement: PlacementArray = 'auto'; // eslint-disable-line  @angular-eslint/no-input-rename\r\n\r\n  @Input('tooltipTemplate') customTemplate: TemplateRef<any>; // eslint-disable-line  @angular-eslint/no-input-rename\r\n\r\n  @Input('tooltipEvent') event: CalendarEvent; // eslint-disable-line  @angular-eslint/no-input-rename\r\n\r\n  @Input('tooltipAppendToBody') appendToBody: boolean; // eslint-disable-line  @angular-eslint/no-input-rename\r\n\r\n  @Input('tooltipDelay') delay: number | null = null; // eslint-disable-line  @angular-eslint/no-input-rename\r\n\r\n  private tooltipFactory: ComponentFactory<CalendarTooltipWindowComponent>;\r\n  private tooltipRef: ComponentRef<CalendarTooltipWindowComponent>;\r\n  private cancelTooltipDelay$ = new Subject<void>();\r\n\r\n  constructor(\r\n    private elementRef: ElementRef,\r\n    private injector: Injector,\r\n    private renderer: Renderer2,\r\n    componentFactoryResolver: ComponentFactoryResolver,\r\n    private viewContainerRef: ViewContainerRef,\r\n    @Inject(DOCUMENT) private document // eslint-disable-line\r\n  ) {\r\n    this.tooltipFactory = componentFactoryResolver.resolveComponentFactory(\r\n      CalendarTooltipWindowComponent\r\n    );\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (\r\n      this.tooltipRef &&\r\n      (changes.contents || changes.customTemplate || changes.event)\r\n    ) {\r\n      this.tooltipRef.instance.contents = this.contents;\r\n      this.tooltipRef.instance.customTemplate = this.customTemplate;\r\n      this.tooltipRef.instance.event = this.event;\r\n      this.tooltipRef.changeDetectorRef.markForCheck();\r\n\r\n      if (!this.contents) {\r\n        this.hide();\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.hide();\r\n  }\r\n\r\n  @HostListener('mouseenter')\r\n  onMouseOver(): void {\r\n    const delay$: Observable<any> =\r\n      this.delay === null ? of('now') : timer(this.delay);\r\n    delay$.pipe(takeUntil(this.cancelTooltipDelay$)).subscribe(() => {\r\n      this.show();\r\n    });\r\n  }\r\n\r\n  @HostListener('mouseleave')\r\n  onMouseOut(): void {\r\n    this.hide();\r\n  }\r\n\r\n  private show(): void {\r\n    if (!this.tooltipRef && this.contents) {\r\n      this.tooltipRef = this.viewContainerRef.createComponent(\r\n        this.tooltipFactory,\r\n        0,\r\n        this.injector,\r\n        []\r\n      );\r\n      this.tooltipRef.instance.contents = this.contents;\r\n      this.tooltipRef.instance.customTemplate = this.customTemplate;\r\n      this.tooltipRef.instance.event = this.event;\r\n      if (this.appendToBody) {\r\n        this.document.body.appendChild(this.tooltipRef.location.nativeElement);\r\n      }\r\n      requestAnimationFrame(() => {\r\n        this.positionTooltip();\r\n      });\r\n    }\r\n  }\r\n\r\n  private hide(): void {\r\n    if (this.tooltipRef) {\r\n      this.viewContainerRef.remove(\r\n        this.viewContainerRef.indexOf(this.tooltipRef.hostView)\r\n      );\r\n      this.tooltipRef = null;\r\n    }\r\n    this.cancelTooltipDelay$.next();\r\n  }\r\n\r\n  private positionTooltip(previousPositions: string[] = []): void {\r\n    if (this.tooltipRef) {\r\n      this.tooltipRef.changeDetectorRef.detectChanges();\r\n      this.tooltipRef.instance.placement = positionElements(\r\n        this.elementRef.nativeElement,\r\n        this.tooltipRef.location.nativeElement.children[0],\r\n        this.placement,\r\n        this.appendToBody\r\n      );\r\n      // keep re-positioning the tooltip until the arrow position doesn't make a difference\r\n      if (\r\n        previousPositions.indexOf(this.tooltipRef.instance.placement) === -1\r\n      ) {\r\n        this.positionTooltip([\r\n          ...previousPositions,\r\n          this.tooltipRef.instance.placement,\r\n        ]);\r\n      }\r\n    }\r\n  }\r\n}\r\n","export enum CalendarView {\r\n  Month = 'month',\r\n  Week = 'week',\r\n  Day = 'day',\r\n}\r\n","import {\r\n  CalendarEvent,\r\n  WeekViewTimeEvent,\r\n  WeekViewHour,\r\n  WeekViewHourSegment,\r\n  validateEvents as validateEventsWithoutLog,\r\n  ViewPeriod,\r\n  WeekDay,\r\n  WeekViewAllDayEvent,\r\n} from 'calendar-utils';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\n\r\nexport const validateEvents = (events: CalendarEvent[]) => {\r\n  const warn = (...args) => console.warn('angular-calendar', ...args);\r\n  return validateEventsWithoutLog(events, warn);\r\n};\r\n\r\nexport function isInsideLeftAndRight(\r\n  outer: ClientRect,\r\n  inner: ClientRect\r\n): boolean {\r\n  return (\r\n    Math.floor(outer.left) <= Math.ceil(inner.left) &&\r\n    Math.floor(inner.left) <= Math.ceil(outer.right) &&\r\n    Math.floor(outer.left) <= Math.ceil(inner.right) &&\r\n    Math.floor(inner.right) <= Math.ceil(outer.right)\r\n  );\r\n}\r\n\r\nfunction isInsideTopAndBottom(outer: ClientRect, inner: ClientRect): boolean {\r\n  return (\r\n    Math.floor(outer.top) <= Math.ceil(inner.top) &&\r\n    Math.floor(inner.top) <= Math.ceil(outer.bottom) &&\r\n    Math.floor(outer.top) <= Math.ceil(inner.bottom) &&\r\n    Math.floor(inner.bottom) <= Math.ceil(outer.bottom)\r\n  );\r\n}\r\n\r\nexport function isInside(outer: ClientRect, inner: ClientRect): boolean {\r\n  return (\r\n    isInsideLeftAndRight(outer, inner) && isInsideTopAndBottom(outer, inner)\r\n  );\r\n}\r\n\r\nexport function roundToNearest(amount: number, precision: number) {\r\n  return Math.round(amount / precision) * precision;\r\n}\r\n\r\nexport const trackByEventId = (index: number, event: CalendarEvent) =>\r\n  event.id ? event.id : event;\r\n\r\nexport const trackByWeekDayHeaderDate = (index: number, day: WeekDay) =>\r\n  day.date.toISOString();\r\n\r\nexport const trackByHourSegment = (\r\n  index: number,\r\n  segment: WeekViewHourSegment\r\n) => segment.date.toISOString();\r\n\r\nexport const trackByHour = (index: number, hour: WeekViewHour) =>\r\n  hour.segments[0].date.toISOString();\r\n\r\nexport const trackByWeekAllDayEvent = (\r\n  index: number,\r\n  weekEvent: WeekViewAllDayEvent\r\n) => (weekEvent.event.id ? weekEvent.event.id : weekEvent.event);\r\n\r\nexport const trackByWeekTimeEvent = (\r\n  index: number,\r\n  weekEvent: WeekViewTimeEvent\r\n) => (weekEvent.event.id ? weekEvent.event.id : weekEvent.event);\r\n\r\nconst MINUTES_IN_HOUR = 60;\r\n\r\nfunction getPixelAmountInMinutes(\r\n  hourSegments: number,\r\n  hourSegmentHeight: number,\r\n  hourDuration?: number\r\n) {\r\n  return (hourDuration || MINUTES_IN_HOUR) / (hourSegments * hourSegmentHeight);\r\n}\r\n\r\nexport function getMinutesMoved(\r\n  movedY: number,\r\n  hourSegments: number,\r\n  hourSegmentHeight: number,\r\n  eventSnapSize: number,\r\n  hourDuration?: number\r\n): number {\r\n  const draggedInPixelsSnapSize = roundToNearest(\r\n    movedY,\r\n    eventSnapSize || hourSegmentHeight\r\n  );\r\n  const pixelAmountInMinutes = getPixelAmountInMinutes(\r\n    hourSegments,\r\n    hourSegmentHeight,\r\n    hourDuration\r\n  );\r\n  return draggedInPixelsSnapSize * pixelAmountInMinutes;\r\n}\r\n\r\nexport function getDefaultEventEnd(\r\n  dateAdapter: DateAdapter,\r\n  event: CalendarEvent,\r\n  minimumMinutes: number\r\n): Date {\r\n  if (event.end) {\r\n    return event.end;\r\n  } else {\r\n    return dateAdapter.addMinutes(event.start, minimumMinutes);\r\n  }\r\n}\r\n\r\nexport function addDaysWithExclusions(\r\n  dateAdapter: DateAdapter,\r\n  date: Date,\r\n  days: number,\r\n  excluded: number[]\r\n): Date {\r\n  let daysCounter = 0;\r\n  let daysToAdd = 0;\r\n  const changeDays = days < 0 ? dateAdapter.subDays : dateAdapter.addDays;\r\n  let result = date;\r\n  while (daysToAdd <= Math.abs(days)) {\r\n    result = changeDays(date, daysCounter);\r\n    const day = dateAdapter.getDay(result);\r\n    if (excluded.indexOf(day) === -1) {\r\n      daysToAdd++;\r\n    }\r\n    daysCounter++;\r\n  }\r\n  return result;\r\n}\r\n\r\nexport function isDraggedWithinPeriod(\r\n  newStart: Date,\r\n  newEnd: Date,\r\n  period: ViewPeriod\r\n): boolean {\r\n  const end = newEnd || newStart;\r\n  return (\r\n    (period.start <= newStart && newStart <= period.end) ||\r\n    (period.start <= end && end <= period.end)\r\n  );\r\n}\r\n\r\nexport function shouldFireDroppedEvent(\r\n  dropEvent: { dropData?: { event?: CalendarEvent; calendarId?: symbol } },\r\n  date: Date,\r\n  allDay: boolean,\r\n  calendarId: symbol\r\n) {\r\n  return (\r\n    dropEvent.dropData &&\r\n    dropEvent.dropData.event &&\r\n    (dropEvent.dropData.calendarId !== calendarId ||\r\n      (dropEvent.dropData.event.allDay && !allDay) ||\r\n      (!dropEvent.dropData.event.allDay && allDay))\r\n  );\r\n}\r\n\r\nexport function getWeekViewPeriod(\r\n  dateAdapter: DateAdapter,\r\n  viewDate: Date,\r\n  weekStartsOn: number,\r\n  excluded: number[] = [],\r\n  daysInWeek?: number\r\n): { viewStart: Date; viewEnd: Date } {\r\n  let viewStart = daysInWeek\r\n    ? dateAdapter.startOfDay(viewDate)\r\n    : dateAdapter.startOfWeek(viewDate, { weekStartsOn });\r\n  const endOfWeek = dateAdapter.endOfWeek(viewDate, { weekStartsOn });\r\n  while (\r\n    excluded.indexOf(dateAdapter.getDay(viewStart)) > -1 &&\r\n    viewStart < endOfWeek\r\n  ) {\r\n    viewStart = dateAdapter.addDays(viewStart, 1);\r\n  }\r\n  if (daysInWeek) {\r\n    const viewEnd = dateAdapter.endOfDay(\r\n      addDaysWithExclusions(dateAdapter, viewStart, daysInWeek - 1, excluded)\r\n    );\r\n    return { viewStart, viewEnd };\r\n  } else {\r\n    let viewEnd = endOfWeek;\r\n    while (\r\n      excluded.indexOf(dateAdapter.getDay(viewEnd)) > -1 &&\r\n      viewEnd > viewStart\r\n    ) {\r\n      viewEnd = dateAdapter.subDays(viewEnd, 1);\r\n    }\r\n    return { viewStart, viewEnd };\r\n  }\r\n}\r\n\r\nexport function isWithinThreshold({ x, y }: { x: number; y: number }) {\r\n  const DRAG_THRESHOLD = 1;\r\n  return Math.abs(x) > DRAG_THRESHOLD || Math.abs(y) > DRAG_THRESHOLD;\r\n}\r\n","import { DateAdapter as BaseDateAdapter } from 'calendar-utils/date-adapters/date-adapter';\r\n\r\nexport abstract class DateAdapter implements BaseDateAdapter {\r\n  abstract addWeeks(date: Date | number, amount: number): Date;\r\n\r\n  abstract addMonths(date: Date | number, amount: number): Date;\r\n\r\n  abstract subDays(date: Date | number, amount: number): Date;\r\n\r\n  abstract subWeeks(date: Date | number, amount: number): Date;\r\n\r\n  abstract subMonths(date: Date | number, amount: number): Date;\r\n\r\n  abstract getISOWeek(date: Date | number): number;\r\n\r\n  abstract setDate(date: Date | number, dayOfMonth: number): Date;\r\n\r\n  abstract setMonth(date: Date | number, month: number): Date;\r\n\r\n  abstract setYear(date: Date | number, year: number): Date;\r\n\r\n  abstract getDate(date: Date | number): number;\r\n\r\n  abstract getMonth(date: Date | number): number;\r\n\r\n  abstract getYear(date: Date | number): number;\r\n\r\n  abstract addDays(date: Date | number, amount: number): Date;\r\n\r\n  abstract addHours(date: Date | number, amount: number): Date;\r\n\r\n  abstract addMinutes(date: Date | number, amount: number): Date;\r\n\r\n  abstract addSeconds(date: Date | number, amount: number): Date;\r\n\r\n  abstract differenceInDays(\r\n    dateLeft: Date | number,\r\n    dateRight: Date | number\r\n  ): number;\r\n\r\n  abstract differenceInMinutes(\r\n    dateLeft: Date | number,\r\n    dateRight: Date | number\r\n  ): number;\r\n\r\n  abstract differenceInSeconds(\r\n    dateLeft: Date | number,\r\n    dateRight: Date | number\r\n  ): number;\r\n\r\n  abstract endOfDay(date: Date | number): Date;\r\n\r\n  abstract endOfMonth(date: Date | number): Date;\r\n\r\n  abstract endOfWeek(\r\n    date: Date | number,\r\n    options?: { weekStartsOn?: number }\r\n  ): Date;\r\n\r\n  abstract getDay(date: Date | number): number;\r\n\r\n  abstract isSameDay(\r\n    dateLeft: Date | number,\r\n    dateRight: Date | number\r\n  ): boolean;\r\n\r\n  abstract isSameMonth(\r\n    dateLeft: Date | number,\r\n    dateRight: Date | number\r\n  ): boolean;\r\n\r\n  abstract isSameSecond(\r\n    dateLeft: Date | number,\r\n    dateRight: Date | number\r\n  ): boolean;\r\n\r\n  abstract max(dates: (Date | number)[]): Date;\r\n\r\n  abstract setHours(date: Date | number, hours: number): Date;\r\n\r\n  abstract setMinutes(date: Date | number, minutes: number): Date;\r\n\r\n  abstract startOfDay(date: Date | number): Date;\r\n\r\n  abstract startOfMinute(date: Date | number): Date;\r\n\r\n  abstract startOfMonth(date: Date | number): Date;\r\n\r\n  abstract startOfWeek(\r\n    date: Date | number,\r\n    options?: { weekStartsOn?: number }\r\n  ): Date;\r\n\r\n  abstract getHours(date: Date | number): number;\r\n\r\n  abstract getMinutes(date: Date | number): number;\r\n\r\n  abstract getTimezoneOffset(date: Date | number): number;\r\n}\r\n","import {\r\n  Directive,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n} from '@angular/core';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\nimport { CalendarView } from './calendar-view.enum';\r\nimport { addDaysWithExclusions } from './util';\r\n\r\n/**\r\n * Change the view date to the previous view. For example:\r\n *\r\n * ```typescript\r\n * <button\r\n *  mwlCalendarPreviousView\r\n *  [(viewDate)]=\"viewDate\"\r\n *  [view]=\"view\">\r\n *  Previous\r\n * </button>\r\n * ```\r\n */\r\n@Directive({\r\n  selector: '[mwlCalendarPreviousView]',\r\n})\r\nexport class CalendarPreviousViewDirective {\r\n  /**\r\n   * The current view\r\n   */\r\n  @Input() view: CalendarView | 'month' | 'week' | 'day';\r\n\r\n  /**\r\n   * The current view date\r\n   */\r\n  @Input() viewDate: Date;\r\n\r\n  /**\r\n   * Days to skip when going back by 1 day\r\n   */\r\n  @Input() excludeDays: number[] = [];\r\n\r\n  /**\r\n   * The number of days in a week. If set will subtract this amount of days instead of 1 week\r\n   */\r\n  @Input() daysInWeek: number;\r\n\r\n  /**\r\n   * Called when the view date is changed\r\n   */\r\n  @Output() viewDateChange: EventEmitter<Date> = new EventEmitter();\r\n\r\n  constructor(private dateAdapter: DateAdapter) {}\r\n\r\n  /**\r\n   * @hidden\r\n   */\r\n  @HostListener('click')\r\n  onClick(): void {\r\n    const subFn: any = {\r\n      day: this.dateAdapter.subDays,\r\n      week: this.dateAdapter.subWeeks,\r\n      month: this.dateAdapter.subMonths,\r\n    }[this.view];\r\n\r\n    if (this.view === CalendarView.Day) {\r\n      this.viewDateChange.emit(\r\n        addDaysWithExclusions(\r\n          this.dateAdapter,\r\n          this.viewDate,\r\n          -1,\r\n          this.excludeDays\r\n        )\r\n      );\r\n    } else if (this.view === CalendarView.Week && this.daysInWeek) {\r\n      this.viewDateChange.emit(\r\n        addDaysWithExclusions(\r\n          this.dateAdapter,\r\n          this.viewDate,\r\n          -this.daysInWeek,\r\n          this.excludeDays\r\n        )\r\n      );\r\n    } else {\r\n      this.viewDateChange.emit(subFn(this.viewDate, 1));\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  EventEmitter,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n} from '@angular/core';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\nimport { CalendarView } from './calendar-view.enum';\r\nimport { addDaysWithExclusions } from './util';\r\n\r\n/**\r\n * Change the view date to the next view. For example:\r\n *\r\n * ```typescript\r\n * <button\r\n *  mwlCalendarNextView\r\n *  [(viewDate)]=\"viewDate\"\r\n *  [view]=\"view\">\r\n *  Next\r\n * </button>\r\n * ```\r\n */\r\n@Directive({\r\n  selector: '[mwlCalendarNextView]',\r\n})\r\nexport class CalendarNextViewDirective {\r\n  /**\r\n   * The current view\r\n   */\r\n  @Input() view: CalendarView | 'month' | 'week' | 'day';\r\n\r\n  /**\r\n   * The current view date\r\n   */\r\n  @Input() viewDate: Date;\r\n\r\n  /**\r\n   * Days to skip when going forward by 1 day\r\n   */\r\n  @Input() excludeDays: number[] = [];\r\n\r\n  /**\r\n   * The number of days in a week. If set will add this amount of days instead of 1 week\r\n   */\r\n  @Input() daysInWeek: number;\r\n\r\n  /**\r\n   * Called when the view date is changed\r\n   */\r\n  @Output() viewDateChange: EventEmitter<Date> = new EventEmitter();\r\n\r\n  constructor(private dateAdapter: DateAdapter) {}\r\n\r\n  /**\r\n   * @hidden\r\n   */\r\n  @HostListener('click')\r\n  onClick(): void {\r\n    const addFn: any = {\r\n      day: this.dateAdapter.addDays,\r\n      week: this.dateAdapter.addWeeks,\r\n      month: this.dateAdapter.addMonths,\r\n    }[this.view];\r\n\r\n    if (this.view === CalendarView.Day) {\r\n      this.viewDateChange.emit(\r\n        addDaysWithExclusions(\r\n          this.dateAdapter,\r\n          this.viewDate,\r\n          1,\r\n          this.excludeDays\r\n        )\r\n      );\r\n    } else if (this.view === CalendarView.Week && this.daysInWeek) {\r\n      this.viewDateChange.emit(\r\n        addDaysWithExclusions(\r\n          this.dateAdapter,\r\n          this.viewDate,\r\n          this.daysInWeek,\r\n          this.excludeDays\r\n        )\r\n      );\r\n    } else {\r\n      this.viewDateChange.emit(addFn(this.viewDate, 1));\r\n    }\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  HostListener,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n} from '@angular/core';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\n\r\n/**\r\n * Change the view date to the current day. For example:\r\n *\r\n * ```typescript\r\n * <button\r\n *  mwlCalendarToday\r\n *  [(viewDate)]=\"viewDate\">\r\n *  Today\r\n * </button>\r\n * ```\r\n */\r\n@Directive({\r\n  selector: '[mwlCalendarToday]',\r\n})\r\nexport class CalendarTodayDirective {\r\n  /**\r\n   * The current view date\r\n   */\r\n  @Input() viewDate: Date;\r\n\r\n  /**\r\n   * Called when the view date is changed\r\n   */\r\n  @Output() viewDateChange: EventEmitter<Date> = new EventEmitter();\r\n\r\n  constructor(private dateAdapter: DateAdapter) {}\r\n\r\n  /**\r\n   * @hidden\r\n   */\r\n  @HostListener('click')\r\n  onClick(): void {\r\n    this.viewDateChange.emit(this.dateAdapter.startOfDay(new Date()));\r\n  }\r\n}\r\n","import {\r\n  CalendarDateFormatterInterface,\r\n  DateFormatterParams,\r\n} from './calendar-date-formatter.interface';\r\nimport { formatDate } from '@angular/common';\r\nimport { Injectable } from '@angular/core';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\nimport { getWeekViewPeriod } from './util';\r\n\r\n/**\r\n * This will use the angular date pipe to do all date formatting. It is the default date formatter used by the calendar.\r\n */\r\n@Injectable()\r\nexport class CalendarAngularDateFormatter\r\n  implements CalendarDateFormatterInterface\r\n{\r\n  constructor(protected dateAdapter: DateAdapter) {}\r\n\r\n  /**\r\n   * The month view header week day labels\r\n   */\r\n  public monthViewColumnHeader({ date, locale }: DateFormatterParams): string {\r\n    return formatDate(date, 'EEEE', locale);\r\n  }\r\n\r\n  /**\r\n   * The month view cell day number\r\n   */\r\n  public monthViewDayNumber({ date, locale }: DateFormatterParams): string {\r\n    return formatDate(date, 'd', locale);\r\n  }\r\n\r\n  /**\r\n   * The month view title\r\n   */\r\n  public monthViewTitle({ date, locale }: DateFormatterParams): string {\r\n    return formatDate(date, 'LLLL y', locale);\r\n  }\r\n\r\n  /**\r\n   * The week view header week day labels\r\n   */\r\n  public weekViewColumnHeader({ date, locale }: DateFormatterParams): string {\r\n    return formatDate(date, 'EEEE', locale);\r\n  }\r\n\r\n  /**\r\n   * The week view sub header day and month labels\r\n   */\r\n  public weekViewColumnSubHeader({\r\n    date,\r\n    locale,\r\n  }: DateFormatterParams): string {\r\n    return formatDate(date, 'MMM d', locale);\r\n  }\r\n\r\n  /**\r\n   * The week view title\r\n   */\r\n  public weekViewTitle({\r\n    date,\r\n    locale,\r\n    weekStartsOn,\r\n    excludeDays,\r\n    daysInWeek,\r\n  }: DateFormatterParams): string {\r\n    const { viewStart, viewEnd } = getWeekViewPeriod(\r\n      this.dateAdapter,\r\n      date,\r\n      weekStartsOn,\r\n      excludeDays,\r\n      daysInWeek\r\n    );\r\n    const format = (dateToFormat: Date, showYear: boolean) =>\r\n      formatDate(dateToFormat, 'MMM d' + (showYear ? ', yyyy' : ''), locale);\r\n    return `${format(\r\n      viewStart,\r\n      viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()\r\n    )} - ${format(viewEnd, true)}`;\r\n  }\r\n\r\n  /**\r\n   * The time formatting down the left hand side of the week view\r\n   */\r\n  public weekViewHour({ date, locale }: DateFormatterParams): string {\r\n    return formatDate(date, 'h a', locale);\r\n  }\r\n\r\n  /**\r\n   * The time formatting down the left hand side of the day view\r\n   */\r\n  public dayViewHour({ date, locale }: DateFormatterParams): string {\r\n    return formatDate(date, 'h a', locale);\r\n  }\r\n\r\n  /**\r\n   * The day view title\r\n   */\r\n  public dayViewTitle({ date, locale }: DateFormatterParams): string {\r\n    return formatDate(date, 'EEEE, MMMM d, y', locale);\r\n  }\r\n}\r\n","import { CalendarAngularDateFormatter } from './calendar-angular-date-formatter.provider';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\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>.\r\n *\r\n * If you wish, you may override any of the defaults via angulars DI. For example:\r\n *\r\n * ```typescript\r\n * import { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';\r\n * import { formatDate } from '@angular/common';\r\n * import { Injectable } from '@angular/core';\r\n *\r\n * @Injectable()\r\n * class CustomDateFormatter extends CalendarDateFormatter {\r\n *\r\n *   public monthViewColumnHeader({date, locale}: DateFormatterParams): string {\r\n *     return formatDate(date, 'EEE', locale); // use short week days\r\n *   }\r\n *\r\n * }\r\n *\r\n * // in your component that uses the calendar\r\n * providers: [{\r\n *   provide: CalendarDateFormatter,\r\n *   useClass: CustomDateFormatter\r\n * }]\r\n * ```\r\n */\r\n@Injectable()\r\nexport class CalendarDateFormatter extends CalendarAngularDateFormatter {}\r\n","import { Pipe, PipeTransform, LOCALE_ID, Inject } from '@angular/core';\r\nimport { CalendarDateFormatter } from './calendar-date-formatter.provider';\r\n\r\n/**\r\n * This pipe is primarily for rendering the current view title. Example usage:\r\n * ```typescript\r\n * // where `viewDate` is a `Date` and view is `'month' | 'week' | 'day'`\r\n * {{ viewDate | calendarDate:(view + 'ViewTitle'):'en' }}\r\n * ```\r\n */\r\n@Pipe({\r\n  name: 'calendarDate',\r\n})\r\nexport class CalendarDatePipe implements PipeTransform {\r\n  constructor(\r\n    private dateFormatter: CalendarDateFormatter,\r\n    @Inject(LOCALE_ID) private locale: string\r\n  ) {}\r\n\r\n  transform(\r\n    date: Date,\r\n    method: string,\r\n    locale: string = this.locale,\r\n    weekStartsOn: number = 0,\r\n    excludeDays: number[] = [],\r\n    daysInWeek?: number\r\n  ): string {\r\n    if (typeof this.dateFormatter[method] === 'undefined') {\r\n      const allowedMethods = Object.getOwnPropertyNames(\r\n        Object.getPrototypeOf(CalendarDateFormatter.prototype)\r\n      ).filter((iMethod) => iMethod !== 'constructor');\r\n      throw new Error(\r\n        `${method} is not a valid date formatter. Can only be one of ${allowedMethods.join(\r\n          ', '\r\n        )}`\r\n      );\r\n    }\r\n    return this.dateFormatter[method]({\r\n      date,\r\n      locale,\r\n      weekStartsOn,\r\n      excludeDays,\r\n      daysInWeek,\r\n    });\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  GetMonthViewArgs,\r\n  MonthView,\r\n  GetWeekViewHeaderArgs,\r\n  WeekDay,\r\n  GetWeekViewArgs,\r\n  WeekView,\r\n  getMonthView,\r\n  getWeekViewHeader,\r\n  getWeekView,\r\n} from 'calendar-utils';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\n\r\n@Injectable()\r\nexport class CalendarUtils {\r\n  constructor(protected dateAdapter: DateAdapter) {}\r\n\r\n  getMonthView(args: GetMonthViewArgs): MonthView {\r\n    return getMonthView(this.dateAdapter, args);\r\n  }\r\n\r\n  getWeekViewHeader(args: GetWeekViewHeaderArgs): WeekDay[] {\r\n    return getWeekViewHeader(this.dateAdapter, args);\r\n  }\r\n\r\n  getWeekView(args: GetWeekViewArgs): WeekView {\r\n    return getWeekView(this.dateAdapter, args);\r\n  }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'mwl-calendar-toolbar',\n  templateUrl: './calendar-toolbar.component.html',\n  styleUrls: ['./calendar-toolbar.component.scss'],\n})\nexport class CalendarToolbarComponent {\n  @Input() viewDate: Date = new Date();\n  @Output() currentViewDate = new EventEmitter<Date>();\n\n  @Input() view: 'month' | 'week' | 'day' = 'month';\n\n  emitDate(): void {\n    this.currentViewDate.emit(this.viewDate);\n  }\n}\n","<div class=\"btn-group month-ctrl-button-container\">\n  <button\n    mat-icon-button\n    class=\"month-ctrl-buttons\"\n    color=\"primary\"\n    mwlCalendarPreviousView\n    [view]=\"view\"\n    [(viewDate)]=\"viewDate\"\n    (click)=\"emitDate()\"\n  >\n    <mat-icon>navigate_before</mat-icon>\n  </button>\n  <button\n    mat-icon-button\n    class=\"month-ctrl-buttons\"\n    color=\"primary\"\n    mwlCalendarNextView\n    [view]=\"view\"\n    [(viewDate)]=\"viewDate\"\n    (click)=\"emitDate()\"\n  >\n    <mat-icon>navigate_next</mat-icon>\n  </button>\n  <span class=\"month-year-container\">{{\n    viewDate | calendarDate: view + 'ViewTitle':'en'\n  }}</span>\n  <button\n    mat-icon-button\n    title=\"Go to Today\"\n    color=\"primary\"\n    mwlCalendarToday\n    [(viewDate)]=\"viewDate\"\n    (click)=\"emitDate()\"\n  >\n    <mat-icon>today</mat-icon>\n  </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { CdkAccordionModule } from '@angular/cdk/accordion';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CdkStepperModule } from '@angular/cdk/stepper';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CdkTreeModule } from '@angular/cdk/tree';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatBottomSheetModule } from '@angular/material/bottom-sheet';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport {\n  MatNativeDateModule,\n  MatPseudoCheckboxModule,\n  MatRippleModule,\n} from '@angular/material/core';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTreeModule } from '@angular/material/tree';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CdkMenuModule } from '@angular/cdk/menu';\nimport { DialogModule } from '@angular/cdk/dialog';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\n@NgModule({\n  exports: [\n    A11yModule,\n    CdkAccordionModule,\n    ClipboardModule,\n    CdkMenuModule,\n    CdkStepperModule,\n    CdkTableModule,\n    CdkTreeModule,\n    DragDropModule,\n    MatAutocompleteModule,\n    MatBadgeModule,\n    MatBottomSheetModule,\n    MatButtonModule,\n    MatButtonToggleModule,\n    MatCardModule,\n    MatChipsModule,\n    MatStepperModule,\n    MatDatepickerModule,\n    MatDialogModule,\n    MatDividerModule,\n    MatExpansionModule,\n    MatGridListModule,\n    MatIconModule,\n    MatInputModule,\n    MatListModule,\n    MatMenuModule,\n    MatNativeDateModule,\n    MatPaginatorModule,\n    MatProgressBarModule,\n    MatProgressSpinnerModule,\n    MatRadioModule,\n    MatRippleModule,\n    MatSelectModule,\n    MatSidenavModule,\n    MatSlideToggleModule,\n    MatSnackBarModule,\n    MatSortModule,\n    MatTableModule,\n    MatTabsModule,\n    MatToolbarModule,\n    MatTooltipModule,\n    MatTreeModule,\n    OverlayModule,\n    PortalModule,\n    ScrollingModule,\n    DialogModule,\n    MatCheckboxModule,\n  ],\n})\nexport class AngularMaterialModule {}\n","import { InjectionToken, Inject, Injectable } from '@angular/core';\r\nimport {\r\n  CalendarDateFormatterInterface,\r\n  DateFormatterParams,\r\n} from './calendar-date-formatter.interface';\r\nimport { getWeekViewPeriod } from './util';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\n\r\nexport const MOMENT: InjectionToken<string> = new InjectionToken('Moment');\r\n\r\n/**\r\n * This will use <a href=\"http://momentjs.com/\" target=\"_blank\">moment</a> to do all date formatting. To use this class:\r\n *\r\n * ```typescript\r\n * import { CalendarDateFormatter, CalendarMomentDateFormatter, MOMENT } from 'angular-calendar';\r\n * import moment from 'moment';\r\n *\r\n * // in your component\r\n * provide: [{\r\n *   provide: MOMENT, useValue: moment\r\n * }, {\r\n *   provide: CalendarDateFormatter, useClass: CalendarMomentDateFormatter\r\n * }]\r\n *\r\n * ```\r\n */\r\n@Injectable()\r\nexport class CalendarMomentDateFormatter\r\n  implements CalendarDateFormatterInterface\r\n{\r\n  /**\r\n   * @hidden\r\n   */\r\n  constructor(\r\n    @Inject(MOMENT) protected moment: any,\r\n    protected dateAdapter: DateAdapter\r\n  ) {}\r\n\r\n  /**\r\n   * The month view header week day labels\r\n   */\r\n  public monthViewColumnHeader({ date, locale }: DateFormatterParams): string {\r\n    return this.moment(date).locale(locale).format('dddd');\r\n  }\r\n\r\n  /**\r\n   * The month view cell day number\r\n   */\r\n  public monthViewDayNumber({ date, locale }: DateFormatterParams): string {\r\n    return this.moment(date).locale(locale).format('D');\r\n  }\r\n\r\n  /**\r\n   * The month view title\r\n   */\r\n  public monthViewTitle({ date, locale }: DateFormatterParams): string {\r\n    return this.moment(date).locale(locale).format('MMMM YYYY');\r\n  }\r\n\r\n  /**\r\n   * The week view header week day labels\r\n   */\r\n  public weekViewColumnHeader({ date, locale }: DateFormatterParams): string {\r\n    return this.moment(date).locale(locale).format('dddd');\r\n  }\r\n\r\n  /**\r\n   * The week view sub header day and month labels\r\n   */\r\n  public weekViewColumnSubHeader({\r\n    date,\r\n    locale,\r\n  }: DateFormatterParams): string {\r\n    return this.moment(date).locale(locale).format('MMM D');\r\n  }\r\n\r\n  /**\r\n   * The week view title\r\n   */\r\n  public weekViewTitle({\r\n    date,\r\n    locale,\r\n    weekStartsOn,\r\n    excludeDays,\r\n    daysInWeek,\r\n  }: DateFormatterParams): string {\r\n    const { viewStart, viewEnd } = getWeekViewPeriod(\r\n      this.dateAdapter,\r\n      date,\r\n      weekStartsOn,\r\n      excludeDays,\r\n      daysInWeek\r\n    );\r\n    const format = (dateToFormat: Date, showYear: boolean) =>\r\n      this.moment(dateToFormat)\r\n        .locale(locale)\r\n        .format('MMM D' + (showYear ? ', YYYY' : ''));\r\n    return `${format(\r\n      viewStart,\r\n      viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()\r\n    )} - ${format(viewEnd, true)}`;\r\n  }\r\n\r\n  /**\r\n   * The time formatting down the left hand side of the week view\r\n   */\r\n  public weekViewHour({ date, locale }: DateFormatterParams): string {\r\n    return this.moment(date).locale(locale).format('ha');\r\n  }\r\n\r\n  /**\r\n   * The time formatting down the left hand side of the day view\r\n   */\r\n  public dayViewHour({ date, locale }: DateFormatterParams): string {\r\n    return this.moment(date).locale(locale).format('ha');\r\n  }\r\n\r\n  /**\r\n   * The day view title\r\n   */\r\n  public dayViewTitle({ date, locale }: DateFormatterParams): string {\r\n    return this.moment(date).locale(locale).format('dddd, LL'); // dddd = Thursday\r\n  } // LL = locale-dependent Month Day, Year\r\n}\r\n","import {\r\n  CalendarDateFormatterInterface,\r\n  DateFormatterParams,\r\n} from './calendar-date-formatter.interface';\r\nimport { Injectable } from '@angular/core';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\nimport { getWeekViewPeriod } from './util';\r\n\r\n/**\r\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.\r\n *\r\n * You will need to include a <a href=\"https://github.com/andyearnshaw/Intl.js/\">polyfill</a> for older browsers.\r\n */\r\n@Injectable()\r\nexport class CalendarNativeDateFormatter\r\n  implements CalendarDateFormatterInterface\r\n{\r\n  constructor(protected dateAdapter: DateAdapter) {}\r\n\r\n  /**\r\n   * The month view header week day labels\r\n   */\r\n  public monthViewColumnHeader({ date, locale }: DateFormatterParams): string {\r\n    return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);\r\n  }\r\n\r\n  /**\r\n   * The month view cell day number\r\n   */\r\n  public monthViewDayNumber({ date, locale }: DateFormatterParams): string {\r\n    return new Intl.DateTimeFormat(locale, { day: 'numeric' }).format(date);\r\n  }\r\n\r\n  /**\r\n   * The month view title\r\n   */\r\n  public monthViewTitle({ date, locale }: DateFormatterParams): string {\r\n    return new Intl.DateTimeFormat(locale, {\r\n      year: 'numeric',\r\n      month: 'long',\r\n    }).format(date);\r\n  }\r\n\r\n  /**\r\n   * The week view header week day labels\r\n   */\r\n  public weekViewColumnHeader({ date, locale }: DateFormatterParams): string {\r\n    return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);\r\n  }\r\n\r\n  /**\r\n   * The week view sub header day and month labels\r\n   */\r\n  public weekViewColumnSubHeader({\r\n    date,\r\n    locale,\r\n  }: DateFormatterParams): string {\r\n    return new Intl.DateTimeFormat(locale, {\r\n      day: 'numeric',\r\n      month: 'short',\r\n    }).format(date);\r\n  }\r\n\r\n  /**\r\n   * The week view title\r\n   */\r\n  public weekViewTitle({\r\n    date,\r\n    locale,\r\n    weekStartsOn,\r\n    excludeDays,\r\n    daysInWeek,\r\n  }: DateFormatterParams): string {\r\n    const { viewStart, viewEnd } = getWeekViewPeriod(\r\n      this.dateAdapter,\r\n      date,\r\n      weekStartsOn,\r\n      excludeDays,\r\n      daysInWeek\r\n    );\r\n\r\n    const format = (dateToFormat: Date, showYear: boolean) =>\r\n      new Intl.DateTimeFormat(locale, {\r\n        day: 'numeric',\r\n        month: 'short',\r\n        year: showYear ? 'numeric' : undefined,\r\n      }).format(dateToFormat);\r\n\r\n    return `${format(\r\n      viewStart,\r\n      viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()\r\n    )} - ${format(viewEnd, true)}`;\r\n  }\r\n\r\n  /**\r\n   * The time formatting down the left hand side of the week view\r\n   */\r\n  public weekViewHour({ date, locale }: DateFormatterParams): string {\r\n    return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);\r\n  }\r\n\r\n  /**\r\n   * The time formatting down the left hand side of the day view\r\n   */\r\n  public dayViewHour({ date, locale }: DateFormatterParams): string {\r\n    return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);\r\n  }\r\n\r\n  /**\r\n   * The day view title\r\n   */\r\n  public dayViewTitle({ date, locale }: DateFormatterParams): string {\r\n    return new Intl.DateTimeFormat(locale, {\r\n      day: 'numeric',\r\n      month: 'long',\r\n      year: 'numeric',\r\n      weekday: 'long',\r\n    }).format(date);\r\n  }\r\n}\r\n","import { CalendarEvent } from 'calendar-utils';\r\n\r\nexport enum CalendarEventTimesChangedEventType {\r\n  Drag = 'drag',\r\n  Drop = 'drop',\r\n  Resize = 'resize',\r\n}\r\n\r\n/**\r\n * The output `$event` type when an event is resized or dragged and dropped.\r\n */\r\nexport interface CalendarEventTimesChangedEvent<MetaType = any> {\r\n  type: CalendarEventTimesChangedEventType;\r\n  event: CalendarEvent<MetaType>;\r\n  newStart: Date;\r\n  newEnd?: Date;\r\n  allDay?: boolean;\r\n}\r\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { CommonModule, I18nPluralPipe } from '@angular/common';\nimport { CalendarEventActionsComponent } from './calendar-event-actions.component';\nimport { CalendarEventTitleComponent } from './calendar-event-title.component';\nimport {\n  CalendarTooltipDirective,\n  CalendarTooltipWindowComponent,\n} from './calendar-tooltip.directive';\nimport { CalendarPreviousViewDirective } from './calendar-previous-view.directive';\nimport { CalendarNextViewDirective } from './calendar-next-view.directive';\nimport { CalendarTodayDirective } from './calendar-today.directive';\nimport { CalendarDatePipe } from './calendar-date.pipe';\nimport { CalendarEventTitlePipe } from './calendar-event-title.pipe';\nimport { ClickDirective } from './click.directive';\nimport { KeydownEnterDirective } from './keydown-enter.directive';\nimport { CalendarEventTitleFormatter } from './calendar-event-title-formatter.provider';\nimport { CalendarDateFormatter } from './calendar-date-formatter.provider';\nimport { CalendarUtils } from './calendar-utils.provider';\nimport { CalendarA11y } from './calendar-a11y.provider';\nimport { CalendarA11yPipe } from './calendar-a11y.pipe';\nimport { CalendarToolbarComponent } from './calendar-toolbar/calendar-toolbar.component';\nimport { AngularMaterialModule } from './material.module';\n\nexport interface CalendarModuleConfig {\n  eventTitleFormatter?: Provider;\n  dateFormatter?: Provider;\n  utils?: Provider;\n  a11y?: Provider;\n}\n\nexport * from './calendar-toolbar/calendar-toolbar.component';\nexport * from './calendar-event-title-formatter.provider';\nexport * from './calendar-moment-date-formatter.provider';\nexport * from './calendar-native-date-formatter.provider';\nexport * from './calendar-angular-date-formatter.provider';\nexport * from './calendar-date-formatter.provider';\nexport * from './calendar-utils.provider';\nexport * from './calendar-a11y.provider';\nexport * from './calendar-a11y.interface';\nexport * from './calendar-date-formatter.interface';\nexport * from './calendar-event-times-changed-event.interface';\nexport * from '../../date-adapters/date-adapter';\nexport * from './calendar-view.enum';\n\n// needed for ivy, not part of the public api\nexport { CalendarEventActionsComponent as ɵCalendarEventActionsComponent } from './calendar-event-actions.component';\nexport { CalendarEventTitleComponent as ɵCalendarEventTitleComponent } from './calendar-event-title.component';\nexport {\n  CalendarTooltipDirective as ɵCalendarTooltipDirective,\n  CalendarTooltipWindowComponent as ɵCalendarTooltipWindowComponent,\n} from './calendar-tooltip.directive';\nexport { CalendarPreviousViewDirective as ɵCalendarPreviousViewDirective } from './calendar-previous-view.directive';\nexport { CalendarNextViewDirective as ɵCalendarNextViewDirective } from './calendar-next-view.directive';\nexport { CalendarTodayDirective as ɵCalendarTodayDirective } from './calendar-today.directive';\nexport { CalendarDatePipe as ɵCalendarDatePipe } from './calendar-date.pipe';\nexport { CalendarEventTitlePipe as ɵCalendarEventTitlePipe } from './calendar-event-title.pipe';\nexport { ClickDirective as ɵClickDirective } from './click.directive';\nexport { KeydownEnterDirective as ɵKeydownEnterDirective } from './keydown-enter.directive';\nexport { CalendarA11yPipe as ɵCalendarA11yPipe } from './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    CalendarToolbarComponent,\n  ],\n  imports: [CommonModule, AngularMaterialModule],\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    CalendarToolbarComponent,\n    AngularMaterialModule,\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';\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      let-addEventTrigger=\"addEventTrigger\"\n    >\n      <div class=\"main-class-month\">\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=\"custom-events-container\" *ngIf=\"!isExpanded\">\n          <ng-container\n            *ngFor=\"\n              let event of day.events;\n              let i = index;\n              trackBy: trackByEventId\n            \"\n          >\n            <div\n              class=\"custom-event-item\"\n              *ngIf=\"i < 3\"\n              [ngStyle]=\"{ backgroundColor: event.color?.primary }\"\n              [ngClass]=\"event?.cssClass\"\n              [class.selected]=\"event === selectedEvent\"\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)=\"\n                eventClicked.emit({ event: event, sourceEvent: $event })\n              \"\n              [attr.aria-hidden]=\"{} | calendarA11y: 'hideMonthCellEvents'\"\n            >\n              {{ event.title }}\n            </div>\n          </ng-container>\n        </div>\n        <div class=\"custom-events-container\" *ngIf=\"isExpanded\">\n          <div\n            class=\"custom-event-item\"\n            [class.selected]=\"event === selectedEvent\"\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)=\"\n              eventClicked.emit({ event: event, sourceEvent: $event })\n            \"\n            [attr.aria-hidden]=\"{} | calendarA11y: 'hideMonthCellEvents'\"\n          >\n            {{ event.title }}\n          </div>\n        </div>\n        <div class=\"expand-and-add-container\">\n          <div style=\"height:20px\"></div>\n          <mat-icon\n            class=\"expand-collapse-icon\"\n            matRipple\n            [mwlCalendarTooltip]=\"isExpanded ? 'collape' : 'show more'\"\n            matTooltipPosition=\"below\"\n            *ngIf=\"day.events.length > 3\"\n            (click)=\"$event.stopPropagation(); isExpanded = !isExpanded\"\n            >{{ isExpanded ? 'expand_less' : 'expand_more' }}</mat-icon\n          >\n          <div\n            *ngIf=\"showCreateEventButton\"\n            matRipple\n            class=\"add-event-button-month-view\"\n            (click)=\"$event.stopPropagation()\"\n          >\n            <span (click)=\"addEventTrigger.emit(true)\"\n              ><mat-icon>add</mat-icon>Add</span\n            >\n          </div>\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() isExpanded: boolean = false;\n\n  @Input() showCreateEventButton: boolean = false;\n\n  @Input() selectedEvent: CalendarEvent | null;\n\n  @Input() day: MonthViewDay;\n\n  @Input() openDay: MonthViewDay;\n\n  @Input() locale: string;\n\n  @Input() tooltipPlacement: PlacementArray;\n\n  @Input() tooltipAppendToBody: boolean;\n\n  @Input() customTemplate: TemplateRef<any>;\n\n  @Input() tooltipTemplate: TemplateRef<any>;\n\n  @Input() tooltipDelay: number | null;\n\n  @Output() highlightDay: EventEmitter<any> = new EventEmitter();\n\n  @Output() unhighlightDay: EventEmitter<any> = new EventEmitter();\n\n  @Output() eventClicked = new EventEmitter<{\n    event: CalendarEvent;\n    sourceEvent: MouseEvent;\n  }>();\n\n  trackByEventId = trackByEventId;\n\n  validateDrag = isWithinThreshold;\n}\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  TemplateRef,\n} from '@angular/core';\nimport {\n  trigger,\n  style,\n  state,\n  transition,\n  animate,\n  AnimationTriggerMetadata,\n} from '@angular/animations';\nimport { CalendarEvent } from 'calendar-utils';\nimport { isWithinThreshold, trackByEventId } from '../common/util';\n\nexport const collapseAnimation: AnimationTriggerMetadata = trigger('collapse', [\n  state(\n    'void',\n    style({\n      height: 0,\n      overflow: 'hidden',\n      'padding-top': 0,\n      'padding-bottom': 0,\n    })\n  ),\n  state(\n    '*',\n    style({\n      height: '*',\n      overflow: 'hidden',\n      'padding-top': '*',\n      'padding-bottom': '*',\n    })\n  ),\n  transition('* => void', animate('150ms ease-out')),\n  transition('void => *', animate('150ms ease-in')),\n]);\n\n@Component({\n  selector: 'mwl-calendar-open-day-events',\n  template: `\n    <ng-template\n      #defaultTemplate\n      let-events=\"events\"\n      let-eventClicked=\"eventClicked\"\n      let-isOpen=\"isOpen\"\n      let-trackByEventId=\"trackByEventId\"\n      let-validateDrag=\"validateDrag\"\n    >\n      <div\n        class=\"cal-open-day-events\"\n        [@collapse]\n        *ngIf=\"isOpen\"\n        role=\"application\"\n      >\n        <span\n          tabindex=\"-1\"\n          role=\"alert\"\n          [attr.aria-label]=\"\n            { date: date, locale: locale } | calendarA11y: 'openDayEventsAlert'\n          \"\n        ></span>\n        <span\n          tabindex=\"0\"\n          role=\"landmark\"\n          [attr.aria-label]=\"\n            { date: date, locale: locale }\n              | calendarA11y: 'openDayEventsLandmark'\n          \"\n        ></span>\n        <mat-icon\n          [matTooltip]=\"isOpenDayExpanded ? 'collape' : 'show more'\"\n          matTooltipPosition=\"below\"\n          *ngIf=\"events.length > 3\"\n          (click)=\"\n            $event.stopPropagation(); isOpenDayExpanded = !isOpenDayExpanded\n          \"\n          >{{ isOpenDayExpanded ? 'expand_less' : 'expand_more' }}</mat-icon\n        >\n\n        <ng-container\n          *ngFor=\"let event of events; let i = index; trackBy: trackByEventId\"\n        >\n          <div\n            *ngIf=\"i < 3 && !isOpenDayExpanded\"\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        </ng-container>\n        <ng-container *ngIf=\"isOpenDayExpanded\">\n          <div\n            *ngFor=\"let event of events; let i = index; 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        </ng-container>\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() isOpenDayExpanded: boolean = false;\n\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 {\r\n  Component,\r\n  Input,\r\n  TemplateRef,\r\n  EventEmitter,\r\n  Output,\r\n} from '@angular/core';\r\nimport { WeekDay } from 'calendar-utils';\r\nimport { trackByWeekDayHeaderDate } from '../common/util';\r\n\r\n@Component({\r\n  selector: 'mwl-calendar-month-view-header',\r\n  template: `\r\n    <ng-template\r\n      #defaultTemplate\r\n      let-days=\"days\"\r\n      let-locale=\"locale\"\r\n      let-trackByWeekDayHeaderDate=\"trackByWeekDayHeaderDate\"\r\n    >\r\n      <div class=\"cal-cell-row cal-header\" role=\"row\">\r\n        <div\r\n          class=\"cal-cell\"\r\n          *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\r\n          [class.cal-past]=\"day.isPast\"\r\n          [class.cal-today]=\"day.isToday\"\r\n          [class.cal-future]=\"day.isFuture\"\r\n          [class.cal-weekend]=\"day.isWeekend\"\r\n          (click)=\"\r\n            columnHeaderClicked.emit({\r\n              isoDayNumber: day.day,\r\n              sourceEvent: $event\r\n            })\r\n          \"\r\n          [ngClass]=\"day.cssClass\"\r\n          tabindex=\"0\"\r\n          role=\"columnheader\"\r\n        >\r\n          {{ day.date | calendarDate: 'monthViewColumnHeader':locale }}\r\n        </div>\r\n      </div>\r\n    </ng-template>\r\n    <ng-template\r\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\r\n      [ngTemplateOutletContext]=\"{\r\n        days: days,\r\n        locale: locale,\r\n        trackByWeekDayHeaderDate: trackByWeekDayHeaderDate\r\n      }\"\r\n    >\r\n    </ng-template>\r\n  `,\r\n})\r\nexport class CalendarMonthViewHeaderComponent {\r\n  @Input() days: WeekDay[];\r\n\r\n  @Input() locale: string;\r\n\r\n  @Input() customTemplate: TemplateRef<any>;\r\n\r\n  @Output() columnHeaderClicked = new EventEmitter<{\r\n    isoDayNumber: number;\r\n    sourceEvent: MouseEvent;\r\n  }>();\r\n\r\n  trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;\r\n}\r\n","import {\n  Component,\n  OnChanges,\n  Input,\n  Output,\n  EventEmitter,\n  ChangeDetectorRef,\n  OnInit,\n  OnDestroy,\n  LOCALE_ID,\n  Inject,\n  TemplateRef,\n} from '@angular/core';\nimport {\n  CalendarEvent,\n  WeekDay,\n  MonthView,\n  MonthViewDay,\n  ViewPeriod,\n} from 'calendar-utils';\nimport { Subject, Subscription } from 'rxjs';\nimport {\n  CalendarEventTimesChangedEvent,\n  CalendarEventTimesChangedEventType,\n} from '../common/calendar-event-times-changed-event.interface';\nimport { CalendarUtils } from '../common/calendar-utils.provider';\nimport { validateEvents } from '../common/util';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\nimport { PlacementArray } from 'positioning';\n\nexport interface CalendarMonthViewBeforeRenderEvent {\n  header: WeekDay[];\n  body: MonthViewDay[];\n  period: ViewPeriod;\n}\n\nexport interface CalendarMonthViewEventTimesChangedEvent<\n  EventMetaType = any,\n  DayMetaType = any\n> extends CalendarEventTimesChangedEvent<EventMetaType> {\n  day: MonthViewDay<DayMetaType>;\n}\n\n/**\n * Shows all events on a given month. Example usage:\n *\n * ```typescript\n * <mwl-calendar-month-view\n *  [viewDate]=\"viewDate\"\n *  [events]=\"events\">\n * </mwl-calendar-month-view>\n * ```\n */\n@Component({\n  selector: 'mwl-calendar-month-view',\n  template: `\n    <mwl-calendar-toolbar\n      *ngIf=\"showToolbar\"\n      [view]=\"'month'\"\n      (currentViewDate)=\"setNewDate($event)\"\n    ></mwl-calendar-toolbar>\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              [isExpanded]=\"isExpanded\"\n              [selectedEvent]=\"selectedEvent\"\n              [showCreateEventButton]=\"showCreateEventButton\"\n              (addEventTrigger)=\"addEventTrigger.emit(true)\"\n              [tooltipPlacement]=\"tooltipPlacement\"\n              [tooltipAppendToBody]=\"tooltipAppendToBody\"\n              [tooltipTemplate]=\"tooltipTemplate\"\n              [tooltipDelay]=\"tooltipDelay\"\n              [customTemplate]=\"cellTemplate\"\n              [ngStyle]=\"{ backgroundColor: day.backgroundColor }\"\n              (mwlClick)=\"\n                dayClicked.emit({ day: day, sourceEvent: $event });\n                selectedEvent = null\n              \"\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                selectedEvent = $event.event\n              \"\n              [attr.tabindex]=\"{} | calendarA11y: 'monthCellTabIndex'\"\n            >\n            </mwl-calendar-month-cell>\n          </div>\n          <mwl-calendar-open-day-events\n            [locale]=\"locale\"\n            [isOpenDayExpanded]=\"isOpenDayExpanded\"\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  selectedEvent: CalendarEvent = null;\n\n  @Input() isExpanded: boolean = false;\n\n  @Input() isOpenDayExpanded: boolean = false;\n\n  @Input() showCreateEventButton: boolean = false;\n\n  @Input() showToolbar: boolean = false;\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 = new EventEmitter<CalendarMonthViewEventTimesChangedEvent>();\n\n  @Output()\n  addEventTrigger = new EventEmitter<boolean>();\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  protected setNewDate(event: Date) {\n    this.viewDate = new Date(event);\n    this.refresh.next(true);\n  }\n}\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DragAndDropModule } from 'angular-draggable-droppable';\r\nimport { CalendarMonthViewComponent } from './calendar-month-view.component';\r\nimport { CalendarMonthViewHeaderComponent } from './calendar-month-view-header.component';\r\nimport { CalendarMonthCellComponent } from './calendar-month-cell.component';\r\nimport { CalendarOpenDayEventsComponent } from './calendar-open-day-events.component';\r\nimport { CalendarCommonModule } from '../common/calendar-common.module';\r\n\r\nexport {\r\n  CalendarMonthViewComponent,\r\n  CalendarMonthViewBeforeRenderEvent,\r\n  CalendarMonthViewEventTimesChangedEvent,\r\n} from './calendar-month-view.component';\r\nexport { MonthViewDay as CalendarMonthViewDay } from 'calendar-utils';\r\nexport { collapseAnimation } from './calendar-open-day-events.component';\r\n\r\n// needed for ivy, not part of the public api\r\nexport { CalendarMonthCellComponent as ɵCalendarMonthCellComponent } from './calendar-month-cell.component';\r\nexport { CalendarMonthViewHeaderComponent as ɵCalendarMonthViewHeaderComponent } from './calendar-month-view-header.component';\r\nexport { CalendarOpenDayEventsComponent as ɵCalendarOpenDayEventsComponent } from './calendar-open-day-events.component';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, DragAndDropModule, CalendarCommonModule],\r\n  declarations: [\r\n    CalendarMonthViewComponent,\r\n    CalendarMonthCellComponent,\r\n    CalendarOpenDayEventsComponent,\r\n    CalendarMonthViewHeaderComponent,\r\n  ],\r\n  exports: [\r\n    DragAndDropModule,\r\n    CalendarMonthViewComponent,\r\n    CalendarMonthCellComponent,\r\n    CalendarOpenDayEventsComponent,\r\n    CalendarMonthViewHeaderComponent,\r\n  ],\r\n})\r\nexport class CalendarMonthModule {}\r\n","import { isInsideLeftAndRight, isWithinThreshold } from './util';\r\nimport { ValidateDragParams } from 'angular-draggable-droppable';\r\n\r\nexport class CalendarDragHelper {\r\n  private readonly startPosition: ClientRect;\r\n\r\n  constructor(\r\n    private dragContainerElement: HTMLElement,\r\n    draggableElement: HTMLElement\r\n  ) {\r\n    this.startPosition = draggableElement.getBoundingClientRect();\r\n  }\r\n\r\n  validateDrag({\r\n    x,\r\n    y,\r\n    snapDraggedEvents,\r\n    dragAlreadyMoved,\r\n    transform,\r\n  }: {\r\n    x: number;\r\n    y: number;\r\n    snapDraggedEvents: boolean;\r\n    dragAlreadyMoved: boolean;\r\n    transform: ValidateDragParams['transform'];\r\n  }): boolean {\r\n    const isDraggedWithinThreshold =\r\n      isWithinThreshold({ x, y }) || dragAlreadyMoved;\r\n\r\n    if (snapDraggedEvents) {\r\n      const inner: ClientRect = Object.assign({}, this.startPosition, {\r\n        left: this.startPosition.left + transform.x,\r\n        right: this.startPosition.right + transform.x,\r\n        top: this.startPosition.top + transform.y,\r\n        bottom: this.startPosition.bottom + transform.y,\r\n      });\r\n\r\n      if (isDraggedWithinThreshold) {\r\n        const outer = this.dragContainerElement.getBoundingClientRect();\r\n\r\n        const isTopInside = outer.top < inner.top && inner.top < outer.bottom;\r\n\r\n        const isBottomInside =\r\n          outer.top < inner.bottom && inner.bottom < outer.bottom;\r\n\r\n        return (\r\n          isInsideLeftAndRight(outer, inner) && (isTopInside || isBottomInside)\r\n        );\r\n      }\r\n\r\n      /* istanbul ignore next */\r\n      return false;\r\n    } else {\r\n      return isDraggedWithinThreshold;\r\n    }\r\n  }\r\n}\r\n","import { isInside } from './util';\r\n\r\nexport class CalendarResizeHelper {\r\n  constructor(\r\n    private resizeContainerElement: HTMLElement,\r\n    private minWidth: number,\r\n    private rtl: boolean\r\n  ) {}\r\n\r\n  validateResize({ rectangle, edges }): boolean {\r\n    if (this.rtl) {\r\n      // TODO - find a way of testing this, for some reason the tests always fail but it does actually work\r\n      /* istanbul ignore next */\r\n      if (typeof edges.left !== 'undefined') {\r\n        rectangle.left -= edges.left;\r\n        rectangle.right += edges.left;\r\n      } else if (typeof edges.right !== 'undefined') {\r\n        rectangle.left += edges.right;\r\n        rectangle.right -= edges.right;\r\n      }\r\n      rectangle.width = rectangle.right - rectangle.left;\r\n    }\r\n\r\n    if (\r\n      this.minWidth &&\r\n      Math.ceil(rectangle.width) < Math.ceil(this.minWidth)\r\n    ) {\r\n      return false;\r\n    }\r\n\r\n    return isInside(\r\n      this.resizeContainerElement.getBoundingClientRect(),\r\n      rectangle\r\n    );\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  TemplateRef,\r\n} from '@angular/core';\r\nimport { CalendarEvent, WeekDay } from 'calendar-utils';\r\nimport { trackByWeekDayHeaderDate } from '../common/util';\r\n\r\n@Component({\r\n  selector: 'mwl-calendar-week-view-header',\r\n  template: `\r\n    <ng-template\r\n      #defaultTemplate\r\n      let-days=\"days\"\r\n      let-locale=\"locale\"\r\n      let-dayHeaderClicked=\"dayHeaderClicked\"\r\n      let-eventDropped=\"eventDropped\"\r\n      let-trackByWeekDayHeaderDate=\"trackByWeekDayHeaderDate\"\r\n      let-dragEnter=\"dragEnter\"\r\n    >\r\n      <div class=\"cal-day-headers\" role=\"row\">\r\n        <div\r\n          class=\"cal-header\"\r\n          *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\r\n          [class.cal-past]=\"day.isPast\"\r\n          [class.cal-today]=\"day.isToday\"\r\n          [class.cal-future]=\"day.isFuture\"\r\n          [class.cal-weekend]=\"day.isWeekend\"\r\n          [ngClass]=\"day.cssClass\"\r\n          (mwlClick)=\"dayHeaderClicked.emit({ day: day, sourceEvent: $event })\"\r\n          mwlDroppable\r\n          dragOverClass=\"cal-drag-over\"\r\n          (drop)=\"\r\n            eventDropped.emit({\r\n              event: $event.dropData.event,\r\n              newStart: day.date\r\n            })\r\n          \"\r\n          (dragEnter)=\"dragEnter.emit({ date: day.date })\"\r\n          tabindex=\"0\"\r\n          role=\"columnheader\"\r\n        >\r\n          <b>{{ day.date | calendarDate: 'weekViewColumnHeader':locale }}</b\r\n          ><br />\r\n          <span>{{\r\n            day.date | calendarDate: 'weekViewColumnSubHeader':locale\r\n          }}</span>\r\n        </div>\r\n      </div>\r\n    </ng-template>\r\n    <ng-template\r\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\r\n      [ngTemplateOutletContext]=\"{\r\n        days: days,\r\n        locale: locale,\r\n        dayHeaderClicked: dayHeaderClicked,\r\n        eventDropped: eventDropped,\r\n        dragEnter: dragEnter,\r\n        trackByWeekDayHeaderDate: trackByWeekDayHeaderDate\r\n      }\"\r\n    >\r\n    </ng-template>\r\n  `,\r\n})\r\nexport class CalendarWeekViewHeaderComponent {\r\n  @Input() days: WeekDay[];\r\n\r\n  @Input() locale: string;\r\n\r\n  @Input() customTemplate: TemplateRef<any>;\r\n\r\n  @Output() dayHeaderClicked = new EventEmitter<{\r\n    day: WeekDay;\r\n    sourceEvent: MouseEvent;\r\n  }>();\r\n\r\n  @Output() eventDropped = new EventEmitter<{\r\n    event: CalendarEvent;\r\n    newStart: Date;\r\n  }>();\r\n\r\n  @Output() dragEnter = new EventEmitter<{ date: Date }>();\r\n\r\n  trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;\r\n}\r\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  TemplateRef,\n} from '@angular/core';\nimport {\n  WeekViewAllDayEvent,\n  WeekViewTimeEvent,\n  WeekViewHourColumn,\n  CalendarEvent,\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        [class.selected]=\"selectedEvent === weekEvent.event\"\n        (mwlClick)=\"\n          eventClicked.emit({ event: weekEvent.event, sourceEvent: $event })\n        \"\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() selectedEvent: CalendarEvent | null;\n\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    event: CalendarEvent | null;\n  }>();\n}\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n} 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      let-hourSegmentClicked=\"hourSegmentClicked\"\n      let-addEventTrigger=\"addEventTrigger\"\n    >\n      <div\n        [attr.aria-hidden]=\"\n          {}\n            | calendarA11y\n              : (daysInWeek === 1\n                  ? 'hideDayHourSegment'\n                  : 'hideWeekHourSegment')\n        \"\n        class=\"cal-hour-segment\"\n        (mwlClick)=\"hourSegmentClicked.emit(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          *ngIf=\"showCreateEventButton\"\n          class=\"add-event-button-week-view\"\n          (click)=\"$event.stopPropagation()\"\n        >\n          <span matRipple (click)=\"addEventTrigger.emit(segment.displayDate)\">\n            <mat-icon class=\"btn-with-tooltip\" matTooltip=\"Add event\"\n              >add</mat-icon\n            >\n            <mat-icon class=\"btn-with-no-tooltip\">add</mat-icon>\n            <span>Add</span>\n          </span>\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        hourSegmentClicked: hourSegmentClicked,\n        addEventTrigger: addEventTrigger\n      }\"\n    >\n    </ng-template>\n  `,\n})\nexport class CalendarWeekViewHourSegmentComponent {\n  @Input() showCreateEventButton: boolean = false;\n\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  @Output() hourSegmentClicked: EventEmitter<any> = new EventEmitter();\n\n  @Output() addEventTrigger: EventEmitter<Date> = new EventEmitter();\n}\n","import {\r\n  Component,\r\n  Input,\r\n  NgZone,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, interval, Observable } from 'rxjs';\r\nimport { switchMapTo, startWith, map, switchMap } from 'rxjs/operators';\r\nimport { DateAdapter } from '../../date-adapters/date-adapter';\r\n\r\n@Component({\r\n  selector: 'mwl-calendar-week-view-current-time-marker',\r\n  template: `\r\n    <ng-template\r\n      #defaultTemplate\r\n      let-columnDate=\"columnDate\"\r\n      let-dayStartHour=\"dayStartHour\"\r\n      let-dayStartMinute=\"dayStartMinute\"\r\n      let-dayEndHour=\"dayEndHour\"\r\n      let-dayEndMinute=\"dayEndMinute\"\r\n      let-isVisible=\"isVisible\"\r\n      let-topPx=\"topPx\"\r\n    >\r\n      <div\r\n        class=\"cal-current-time-marker\"\r\n        *ngIf=\"isVisible\"\r\n        [style.top.px]=\"topPx\"\r\n      ></div>\r\n    </ng-template>\r\n    <ng-template\r\n      [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\r\n      [ngTemplateOutletContext]=\"{\r\n        columnDate: columnDate,\r\n        dayStartHour: dayStartHour,\r\n        dayStartMinute: dayStartMinute,\r\n        dayEndHour: dayEndHour,\r\n        dayEndMinute: dayEndMinute,\r\n        isVisible: (marker$ | async)?.isVisible,\r\n        topPx: (marker$ | async)?.top\r\n      }\"\r\n    >\r\n    </ng-template>\r\n  `,\r\n})\r\nexport class CalendarWeekViewCurrentTimeMarkerComponent implements OnChanges {\r\n  @Input() columnDate: Date;\r\n\r\n  @Input() dayStartHour: number;\r\n\r\n  @Input() dayStartMinute: number;\r\n\r\n  @Input() dayEndHour: number;\r\n\r\n  @Input() dayEndMinute: number;\r\n\r\n  @Input() hourSegments: number;\r\n\r\n  @Input() hourDuration: number;\r\n\r\n  @Input() hourSegmentHeight: number;\r\n\r\n  @Input() customTemplate: TemplateRef<any>;\r\n\r\n  columnDate$ = new BehaviorSubject<Date>(undefined);\r\n\r\n  marker$: Observable<{\r\n    isVisible: boolean;\r\n    top: number;\r\n  }> = this.zone.onStable.pipe(\r\n    switchMap(() => interval(60 * 1000)),\r\n    startWith(0),\r\n    switchMapTo(this.columnDate$),\r\n    map((columnDate) => {\r\n      const startOfDay = this.dateAdapter.setMinutes(\r\n        this.dateAdapter.setHours(columnDate, this.dayStartHour),\r\n        this.dayStartMinute\r\n      );\r\n      const endOfDay = this.dateAdapter.setMinutes(\r\n        this.dateAdapter.setHours(columnDate, this.dayEndHour),\r\n        this.dayEndMinute\r\n      );\r\n      const hourHeightModifier =\r\n        (this.hourSegments * this.hourSegmentHeight) /\r\n        (this.hourDuration || 60);\r\n      const now = new Date();\r\n      return {\r\n        isVisible:\r\n          this.dateAdapter.isSameDay(columnDate, now) &&\r\n          now >= startOfDay &&\r\n          now <= endOfDay,\r\n        top:\r\n          this.dateAdapter.differenceInMinutes(now, startOfDay) *\r\n          hourHeightModifier,\r\n      };\r\n    })\r\n  );\r\n\r\n  constructor(private dateAdapter: DateAdapter, private zone: NgZone) {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes.columnDate) {\r\n      this.columnDate$.next(changes.columnDate.currentValue);\r\n    }\r\n  }\r\n}\r\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 { CalendarDragHelper } from '../common/calendar-drag-helper.provider';\nimport { CalendarResizeHelper } from '../common/calendar-resize-helper.provider';\nimport {\n  CalendarEventTimesChangedEvent,\n  CalendarEventTimesChangedEventType,\n} from '../common/calendar-event-times-changed-event.interface';\nimport { CalendarUtils } from '../common/calendar-utils.provider';\nimport {\n  validateEvents,\n  roundToNearest,\n  trackByWeekDayHeaderDate,\n  trackByHourSegment,\n  trackByHour,\n  getMinutesMoved,\n  getDefaultEventEnd,\n  addDaysWithExclusions,\n  isDraggedWithinPeriod,\n  shouldFireDroppedEvent,\n  getWeekViewPeriod,\n  trackByWeekAllDayEvent,\n  trackByWeekTimeEvent,\n} from '../common/util';\nimport { DateAdapter } from '../../date-adapters/date-adapter';\nimport {\n  DragEndEvent,\n  DropEvent,\n  DragMoveEvent,\n  ValidateDrag,\n} from 'angular-draggable-droppable';\nimport { PlacementArray } from 'positioning';\n\nexport interface WeekViewAllDayEventResize {\n  originalOffset: number;\n  originalSpan: number;\n  edge: string;\n}\n\nexport interface CalendarWeekViewBeforeRenderEvent extends WeekView {\n  header: WeekDay[];\n}\n\n/**\n * Shows all events on a given week. Example usage:\n *\n * ```typescript\n * <mwl-calendar-week-view\n *  [viewDate]=\"viewDate\"\n *  [events]=\"events\">\n * </mwl-calendar-week-view>\n * ```\n */\n@Component({\n  selector: 'mwl-calendar-week-view',\n  template: `\n    <mwl-calendar-toolbar\n      *ngIf=\"showToolbar\"\n      [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n      [viewDate]=\"viewDate\"\n      (currentViewDate)=\"setNewDate($event)\"\n    ></mwl-calendar-toolbar>\n    <div class=\"cal-week-view\" role=\"grid\">\n      <mwl-calendar-week-view-header\n        [days]=\"days\"\n        [locale]=\"locale\"\n        [customTemplate]=\"headerTemplate\"\n        (dayHeaderClicked)=\"dayHeaderClicked.emit($event)\"\n        (eventDropped)=\"\n          eventDropped({ dropData: $event }, $event.newStart, true)\n        \"\n        (dragEnter)=\"dateDragEnter($event.date)\"\n      >\n      </mwl-calendar-week-view-header>\n      <div\n        class=\"cal-all-day-events\"\n        #allDayEventsContainer\n        *ngIf=\"view.allDayEventRows.length > 0\"\n        mwlDroppable\n        (dragEnter)=\"dragEnter('allDay')\"\n        (dragLeave)=\"dragLeave('allDay')\"\n      >\n        <div class=\"cal-day-columns\">\n          <div\n            class=\"cal-time-label-column\"\n            [ngTemplateOutlet]=\"allDayEventsLabelTemplate\"\n          ></div>\n          <div\n            class=\"cal-day-column\"\n            *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\n            mwlDroppable\n            dragOverClass=\"cal-drag-over\"\n            (drop)=\"eventDropped($event, day.date, true)\"\n            (dragEnter)=\"dateDragEnter(day.date)\"\n          ></div>\n        </div>\n        <div\n          *ngFor=\"let eventRow of view.allDayEventRows; trackBy: trackById\"\n          #eventRowContainer\n          class=\"cal-events-row\"\n        >\n          <div\n            *ngFor=\"\n              let allDayEvent of eventRow.row;\n              trackBy: trackByWeekAllDayEvent\n            \"\n            #event\n            class=\"cal-event-container\"\n            [class.cal-draggable]=\"\n              allDayEvent.event.draggable && allDayEventResizes.size === 0\n            \"\n            [class.cal-starts-within-week]=\"!allDayEvent.startsBeforeWeek\"\n            [class.cal-ends-within-week]=\"!allDayEvent.endsAfterWeek\"\n            [ngClass]=\"allDayEvent.event?.cssClass\"\n            [style.width.%]=\"(100 / days.length) * allDayEvent.span\"\n            [style.marginLeft.%]=\"\n              rtl ? null : (100 / days.length) * allDayEvent.offset\n            \"\n            [style.marginRight.%]=\"\n              rtl ? (100 / days.length) * allDayEvent.offset : null\n            \"\n            mwlResizable\n            [resizeSnapGrid]=\"{ left: dayColumnWidth, right: dayColumnWidth }\"\n            [validateResize]=\"validateResize\"\n            (resizeStart)=\"\n              allDayEventResizeStarted(eventRowContainer, allDayEvent, $event)\n            \"\n            (resizing)=\"\n              allDayEventResizing(allDayEvent, $event, dayColumnWidth)\n            \"\n            (resizeEnd)=\"allDayEventResizeEnded(allDayEvent)\"\n            mwlDraggable\n            dragActiveClass=\"cal-drag-active\"\n            [dropData]=\"{ event: allDayEvent.event, calendarId: calendarId }\"\n            [dragAxis]=\"{\n              x: allDayEvent.event.draggable && allDayEventResizes.size === 0,\n              y:\n                !snapDraggedEvents &&\n                allDayEvent.event.draggable &&\n                allDayEventResizes.size === 0\n            }\"\n            [dragSnapGrid]=\"snapDraggedEvents ? { x: dayColumnWidth } : {}\"\n            [validateDrag]=\"validateDrag\"\n            [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n            (dragStart)=\"\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              [selectedEvent]=\"selectedWeekEvent\"\n              (eventClicked)=\"\n                eventClicked.emit({\n                  event: allDayEvent.event,\n                  sourceEvent: $event.sourceEvent\n                });\n                selectedWeekEvent = $event.event\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                [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                    [selectedEvent]=\"selectedWeekEvent\"\n                    [daysInWeek]=\"daysInWeek\"\n                    (eventClicked)=\"\n                      eventClicked.emit({\n                        event: timeEvent.event,\n                        sourceEvent: $event.sourceEvent\n                      });\n                      selectedWeekEvent = $event.event\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                (hourSegmentClicked)=\"selectedWeekEvent = null\"\n                [showCreateEventButton]=\"showCreateEventButton\"\n                (addEventTrigger)=\"addEventTrigger.emit(segment.date)\"\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  selectedWeekEvent: CalendarEvent;\n\n  @Input() showCreateEventButton: boolean = false;\n\n  @Input() showToolbar: boolean = false;\n\n  @Output() addEventTrigger = new EventEmitter<Date>();\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   * 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  protected setNewDate(event: Date) {\n    this.viewDate = new Date(event);\n    this.refresh.next(false);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResizableModule } from 'angular-resizable-element';\nimport { DragAndDropModule } from 'angular-draggable-droppable';\nimport { CalendarWeekViewComponent } from './calendar-week-view.component';\nimport { CalendarWeekViewHeaderComponent } from './calendar-week-view-header.component';\nimport { CalendarWeekViewEventComponent } from './calendar-week-view-event.component';\nimport { CalendarCommonModule } from '../common/calendar-common.module';\nimport { CalendarWeekViewHourSegmentComponent } from './calendar-week-view-hour-segment.component';\nimport { CalendarWeekViewCurrentTimeMarkerComponent } from './calendar-week-view-current-time-marker.component';\n\nexport {\n  CalendarWeekViewComponent,\n  CalendarWeekViewBeforeRenderEvent,\n} from './calendar-week-view.component';\nexport {\n  WeekViewAllDayEvent as CalendarWeekViewAllDayEvent,\n  WeekViewAllDayEventRow as CalendarWeekViewAllDayEventRow,\n  GetWeekViewArgs as CalendarGetWeekViewArgs,\n} from 'calendar-utils';\nexport { getWeekViewPeriod } from '../common/util';\n\n// needed for ivy, not part of the public api\nexport { CalendarWeekViewHeaderComponent as ɵCalendarWeekViewHeaderComponent } from './calendar-week-view-header.component';\nexport { CalendarWeekViewEventComponent as ɵCalendarWeekViewEventComponent } from './calendar-week-view-event.component';\nexport { CalendarWeekViewHourSegmentComponent as ɵCalendarWeekViewHourSegmentComponent } from './calendar-week-view-hour-segment.component';\nexport { CalendarWeekViewCurrentTimeMarkerComponent as ɵCalendarWeekViewCurrentTimeMarkerComponent } from './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.interface';\nimport { PlacementArray } from 'positioning';\nimport { CalendarWeekViewBeforeRenderEvent } from '../week/calendar-week.module';\n\nexport type CalendarDayViewBeforeRenderEvent =\n  CalendarWeekViewBeforeRenderEvent;\n\n/**\n * Shows all events on a given day. Example usage:\n *\n * ```typescript\n * <mwl-calendar-day-view\n *  [viewDate]=\"viewDate\"\n *  [events]=\"events\">\n * </mwl-calendar-day-view>\n * ```\n */\n@Component({\n  selector: 'mwl-calendar-day-view',\n  template: `\n    <mwl-calendar-week-view\n      class=\"cal-day-view\"\n      [daysInWeek]=\"1\"\n      [viewDate]=\"viewDate\"\n      [events]=\"events\"\n      [hourSegments]=\"hourSegments\"\n      [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      [hourSegmentTemplate]=\"hourSegmentTemplate\"\n      [eventTemplate]=\"eventTemplate\"\n      [eventTitleTemplate]=\"eventTitleTemplate\"\n      [eventActionsTemplate]=\"eventActionsTemplate\"\n      [snapDraggedEvents]=\"snapDraggedEvents\"\n      [allDayEventsLabelTemplate]=\"allDayEventsLabelTemplate\"\n      [currentTimeMarkerTemplate]=\"currentTimeMarkerTemplate\"\n      [validateEventTimesChanged]=\"validateEventTimesChanged\"\n      [showCreateEventButton]=\"showCreateEventButton\"\n      [showToolbar]=\"showToolbar\"\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  @Input() showCreateEventButton: boolean = false;\n\n  @Input() showToolbar: boolean = false;\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   * 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   * 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';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CalendarDayViewComponent } from './calendar-day-view.component';\r\nimport { CalendarCommonModule } from '../common/calendar-common.module';\r\nimport { CalendarWeekModule } from '../week/calendar-week.module';\r\n\r\nexport {\r\n  CalendarDayViewComponent,\r\n  CalendarDayViewBeforeRenderEvent,\r\n} from './calendar-day-view.component';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, CalendarCommonModule, CalendarWeekModule],\r\n  declarations: [CalendarDayViewComponent],\r\n  exports: [CalendarDayViewComponent],\r\n})\r\nexport class CalendarDayModule {}\r\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport {\n  CalendarCommonModule,\n  CalendarModuleConfig,\n  CalendarEventTitleFormatter,\n  CalendarDateFormatter,\n  CalendarA11y,\n} from './common/calendar-common.module';\nimport { CalendarMonthModule } from './month/calendar-month.module';\nimport { CalendarWeekModule } from './week/calendar-week.module';\nimport { CalendarDayModule } from './day/calendar-day.module';\nimport { CalendarUtils } from './common/calendar-utils.provider';\n\nexport * from './common/calendar-common.module';\nexport * from './common/material.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","/*\r\n * Public API Surface of angular-calendar\r\n */\r\n\r\nexport * from './modules/calendar.module';\r\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","i1","i3.CalendarPreviousViewDirective","i4.CalendarNextViewDirective","i5.CalendarTodayDirective","i6.CalendarDatePipe","i2","i3.CalendarTooltipDirective","i4.ClickDirective","i5","i7.CalendarDatePipe","i8.CalendarEventTitlePipe","i9.CalendarA11yPipe","i3.CalendarEventActionsComponent","i4.CalendarEventTitleComponent","i5.ClickDirective","i6.KeydownEnterDirective","i7","i2.CalendarDatePipe","i2.DateAdapter","i3","i4","i7.CalendarToolbarComponent","i8.CalendarMonthCellComponent","i9.CalendarOpenDayEventsComponent","i10.CalendarMonthViewHeaderComponent","i11.CalendarA11yPipe","i3.ClickDirective","i4.CalendarDatePipe","i2.CalendarEventActionsComponent","i3.CalendarEventTitleComponent","i4.CalendarTooltipDirective","i7.CalendarEventTitlePipe","i8.CalendarA11yPipe","i7.CalendarA11yPipe","i6.ClickDirective","i8.CalendarWeekViewHeaderComponent","i9.CalendarWeekViewEventComponent","i10.CalendarWeekViewHourSegmentComponent","i11.CalendarWeekViewCurrentTimeMarkerComponent","i1.CalendarWeekViewComponent"],"mappings":"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"}