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