{"version":3,"file":"dereekb-dbx-web-calendar.mjs","sources":["../../../../packages/dbx-web/calendar/src/lib/calendar.store.ts","../../../../packages/dbx-web/calendar/src/lib/calendar.ts","../../../../packages/dbx-web/calendar/src/lib/calendar.base.component.ts","../../../../packages/dbx-web/calendar/src/lib/calendar.base.component.html","../../../../packages/dbx-web/calendar/src/lib/calendar.component.ts","../../../../packages/dbx-web/calendar/src/lib/calendar.component.html","../../../../packages/dbx-web/calendar/src/lib/calendar.provider.ts","../../../../packages/dbx-web/calendar/src/dereekb-dbx-web-calendar.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { clampDateToDateRange, type DateRange, dateRangeOverlapsDateRangeFunction, isDateInDateRange, isFullDateRange, isSameDateDay, isSameDateRange } from '@dereekb/date';\nimport { invertDecision, type Maybe, reduceBooleansWithAndFn } from '@dereekb/util';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { type CalendarEvent } from 'angular-calendar';\nimport { differenceInDays, addDays, endOfDay, endOfMonth, endOfWeek, isSameDay, startOfDay, startOfMonth, startOfWeek, isBefore, isAfter } from 'date-fns';\nimport { type Observable, distinctUntilChanged, first, map, shareReplay, switchMap, tap, combineLatest } from 'rxjs';\n\nexport enum CalendarDisplayType {\n  MONTH = 'month',\n  WEEK = 'week',\n  DAY = 'day'\n}\n\nexport interface CalendarViewDateRange {\n  readonly type: CalendarDisplayType;\n  readonly start: Date;\n  readonly end: Date;\n  readonly distance: number;\n  /**\n   * Whether or not the min navigation date is currently visible. This implies that we're at the minimum date.\n   */\n  readonly isMinDateVisible: boolean;\n  /**\n   * Whether or not the maximum navigation date is visible. This implies that we're at the maximum date.\n   */\n  readonly isMaxDateVisible: boolean;\n}\n\n/**\n * Compares two {@link CalendarViewDateRange} values for equality by checking type, start/end dates, distance, and min/max visibility flags.\n *\n * @param a - First calendar view date range to compare.\n * @param b - Second calendar view date range to compare.\n * @returns Whether the two date ranges are considered equal.\n */\nexport function isCalendarViewDateRangeEqual(a: CalendarViewDateRange, b: CalendarViewDateRange): boolean {\n  return a.type === b.type && isSameDay(a.start, b.start) && isSameDay(a.end, b.end) && a.distance === b.distance && a.isMinDateVisible === b.isMinDateVisible && a.isMaxDateVisible === b.isMaxDateVisible;\n}\n\nexport interface CalendarState<T = any> {\n  /**\n   * Calendar display mode\n   */\n  readonly type: CalendarDisplayType;\n  /**\n   * Whether or not to show the today button. Defaults to true.\n   */\n  readonly showTodayButton?: boolean;\n  /**\n   * Date that is selected.\n   */\n  readonly date: Date;\n  /**\n   * Whether or not the day was tapped/set twice.\n   */\n  readonly dateTappedTwice: boolean;\n  /**\n   * Set of calendar events.\n   */\n  readonly events: CalendarEvent<T>[];\n  /**\n   * Optional navigation range limitation that limits which dates can be navigated to.\n   */\n  readonly navigationRangeLimit?: Maybe<Partial<DateRange>>;\n  /**\n   * Whether or not to display the page buttons when applicable. Can only be displayed when a navigationRangeLimit is set.\n   */\n  readonly showPageButtons?: boolean;\n}\n\n/**\n * Computes the visible date range for the given calendar state based on display type (month, week, or day)\n * and the optional navigation range limit.\n *\n * @param calendarState - The current calendar state containing display type, date, and navigation limits.\n * @returns The computed visible date range including start, end, distance, and min/max visibility flags.\n */\nexport function visibleDateRangeForCalendarState(calendarState: CalendarState): CalendarViewDateRange {\n  const { navigationRangeLimit, type, date } = calendarState;\n\n  let start: Date;\n  let end: Date;\n  let distance: number;\n\n  switch (type) {\n    case CalendarDisplayType.MONTH:\n      start = startOfDay(startOfWeek(startOfMonth(date), { weekStartsOn: 0 }));\n      end = endOfWeek(endOfMonth(date));\n      distance = differenceInDays(end, start) + 1;\n      break;\n    case CalendarDisplayType.WEEK:\n      start = startOfWeek(date);\n      end = endOfWeek(start);\n      distance = 7; // 7 days in a week.\n      break;\n    case CalendarDisplayType.DAY:\n      start = startOfDay(date);\n      end = endOfDay(date);\n      distance = 1;\n      break;\n  }\n\n  const isMinDateVisible: boolean = navigationRangeLimit?.start != null && !isAfter(start, navigationRangeLimit.start);\n  const isMaxDateVisible: boolean = navigationRangeLimit?.end != null && !isBefore(end, navigationRangeLimit.end);\n\n  // TODO: Consider changing min/max date visible logical utility to be fully within the current month or not,\n  // not just visible, since it can change to a locked out calendar and doesn't feel as UI friendly.\n\n  return {\n    type,\n    start,\n    end,\n    distance,\n    isMinDateVisible,\n    isMaxDateVisible\n  };\n}\n\nconst distinctUntilDateOrTypeOrEventsChanged = distinctUntilChanged<CalendarState>((a, b) => a?.date === b?.date && a?.type === b?.type && a?.events === b?.events);\n\n@Injectable()\nexport class DbxCalendarStore<T = any> extends ComponentStore<CalendarState<T>> {\n  constructor() {\n    super({\n      type: CalendarDisplayType.MONTH,\n      showTodayButton: true,\n      date: new Date(),\n      dateTappedTwice: false,\n      events: []\n    });\n  }\n\n  // MARK: Effects\n  readonly tapFirstPage = this.effect((input: Observable<void>) => {\n    return input.pipe(\n      switchMap(() =>\n        this.minNavigationDate$.pipe(\n          first(),\n          tap((x) => {\n            if (x) {\n              this.tapDay(x);\n            }\n          })\n        )\n      )\n    );\n  });\n\n  readonly tapNext = this.effect((input: Observable<void>) => {\n    return input.pipe(\n      switchMap(() =>\n        this.visibleDateRange$.pipe(\n          first(),\n          tap(({ end, isMaxDateVisible }) => {\n            if (!isMaxDateVisible) {\n              this.tapDay(addDays(end, 1));\n            }\n          })\n        )\n      )\n    );\n  });\n\n  readonly tapPrevious = this.effect((input: Observable<void>) => {\n    return input.pipe(\n      switchMap(() =>\n        this.visibleDateRange$.pipe(\n          first(),\n          tap(({ start, isMinDateVisible }) => {\n            if (!isMinDateVisible) {\n              this.tapDay(addDays(start, -1));\n            }\n          })\n        )\n      )\n    );\n  });\n\n  readonly tapLastPage = this.effect((input: Observable<void>) => {\n    return input.pipe(\n      switchMap(() =>\n        this.maxNavigationDate$.pipe(\n          first(),\n          tap((x) => {\n            if (x) {\n              this.tapDay(x);\n            }\n          })\n        )\n      )\n    );\n  });\n\n  // MARK: Accessors\n\n  readonly showTodayButton$ = this.state$.pipe(\n    map((x) => x.showTodayButton),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  readonly date$ = this.state$.pipe(map((x) => x.date));\n  readonly dateTappedTwice$ = this.state$.pipe(map((x) => x.dateTappedTwice));\n\n  readonly events$ = this.state$.pipe(\n    map((x) => x.events),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  /**\n   * Returns the events that match the tapped date range state.\n   */\n  readonly eventsForDateState$ = this.state$.pipe(\n    distinctUntilDateOrTypeOrEventsChanged,\n    map((state) => ({\n      date: state.date,\n      events: state.events.filter((x) => isSameDay(x.start, state.date) || (x.end && isBefore(x.start, state.date) && isAfter(x.end, state.date))),\n      dateTappedTwice: state.dateTappedTwice\n    })),\n    shareReplay(1)\n  );\n\n  readonly eventsForDate$ = this.eventsForDateState$.pipe(map((state) => state.events));\n\n  readonly visibleDateRange$: Observable<CalendarViewDateRange> = this.state$.pipe(map(visibleDateRangeForCalendarState), distinctUntilChanged(isCalendarViewDateRangeEqual), shareReplay(1));\n\n  readonly visibleEvents$ = combineLatest([this.events$, this.visibleDateRange$]).pipe(\n    map(([events, dateRange]) => {\n      const isEventInDateRange = dateRangeOverlapsDateRangeFunction(dateRange);\n      return events.filter((x) => isEventInDateRange(x));\n    }),\n    shareReplay(1)\n  );\n\n  readonly isLookingAtToday$ = this.visibleDateRange$.pipe(\n    map((x) => isDateInDateRange(new Date(), x)),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  readonly isLookingAtMinimumDate$ = this.visibleDateRange$.pipe(\n    map((x) => x.isMinDateVisible),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  readonly isLookingAtMaximumDate$ = this.visibleDateRange$.pipe(\n    map((x) => x.isMaxDateVisible),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  readonly hasMultiplePages$ = combineLatest([this.isLookingAtMinimumDate$, this.isLookingAtMaximumDate$]).pipe(map(invertDecision(reduceBooleansWithAndFn(true))), distinctUntilChanged(), shareReplay(1));\n\n  readonly displayType$ = this.state$.pipe(\n    map((x) => x.type),\n    distinctUntilChanged((a, b) => a === b),\n    shareReplay(1)\n  );\n\n  readonly navigationRangeLimit$ = this.state$.pipe(\n    map((x) => x.navigationRangeLimit),\n    distinctUntilChanged(isSameDateRange),\n    shareReplay(1)\n  );\n\n  readonly minNavigationDate$: Observable<Maybe<Date>> = this.navigationRangeLimit$.pipe(\n    map((x) => x?.start),\n    distinctUntilChanged(isSameDateDay),\n    shareReplay(1)\n  );\n\n  readonly maxNavigationDate$: Observable<Maybe<Date>> = this.navigationRangeLimit$.pipe(\n    map((x) => x?.end),\n    distinctUntilChanged(isSameDateDay),\n    shareReplay(1)\n  );\n\n  readonly isTodayInNavigationRangeLimit$ = this.navigationRangeLimit$.pipe(\n    map((x) => isDateInDateRange(new Date(), x ?? {})),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  readonly canJumpToToday$ = combineLatest([this.isLookingAtToday$, this.isTodayInNavigationRangeLimit$]).pipe(\n    map(([isLookingAtToday, isTodayInNavigationRangeLimit]) => !isLookingAtToday && isTodayInNavigationRangeLimit),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  readonly canShowPageButtons$ = this.state$.pipe(\n    map((x) => x.showPageButtons && x.navigationRangeLimit && isFullDateRange(x.navigationRangeLimit)),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  readonly showPageButtons$ = combineLatest([this.canShowPageButtons$, this.isLookingAtMinimumDate$, this.isLookingAtMaximumDate$]).pipe(\n    map(([canShowPageButtons, isLookingAtMinimumDate, isLookingAtMaximumDate]) => {\n      return canShowPageButtons && !(isLookingAtMinimumDate && isLookingAtMaximumDate);\n    }),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  // MARK: State Changes\n  /**\n   * Tap a day.\n   *\n   * - If the same day is presented, dateTappedTwice is flipped.\n   */\n  readonly tapDay = this.updater((state, date: Date) => updateCalendarStateWithTappedDate(state, date));\n\n  /**\n   * Set all events on the calendar.\n   */\n  readonly setEvents = this.updater((state, events: CalendarEvent<T>[]) => ({ ...state, events }));\n\n  /**\n   * Set all events on the calendar.\n   */\n  readonly setDisplayType = this.updater((state, type: CalendarDisplayType) => ({ ...state, type }));\n\n  /**\n   * Sets the navigation limit.\n   */\n  readonly setNavigationRangeLimit = this.updater((state, navigationRangeLimit: Maybe<Partial<DateRange>>) => updateCalendarStateWithNavigationRangeLimit(state, navigationRangeLimit));\n\n  readonly setShowTodayButton = this.updater((state, showTodayButton: Maybe<boolean>) => ({ ...state, showTodayButton: showTodayButton ?? true }));\n  readonly setShowPageButtons = this.updater((state, showPageButtons: Maybe<boolean>) => ({ ...state, showPageButtons: showPageButtons ?? false }));\n}\n\n/**\n * Returns an updated calendar state after tapping a date. Only updates if the date differs from the current one\n * and falls within the navigation range limit. Toggles `dateTappedTwice` when the same day is tapped again.\n *\n * @param state - The current calendar state.\n * @param date - The date that was tapped.\n * @returns The updated calendar state reflecting the tapped date.\n */\nexport function updateCalendarStateWithTappedDate(state: CalendarState, date: Date) {\n  // only update the date if it is different\n  if (\n    !isSameDateDay(state.date, date) && // Only update the date if it is within the date range\n    (!state.navigationRangeLimit || isDateInDateRange(date, state.navigationRangeLimit))\n  ) {\n    state = { ...state, date, dateTappedTwice: isSameDay(date, state.date) ? !state.dateTappedTwice : false };\n  }\n\n  return state;\n}\n\n/**\n * Returns an updated calendar state with a new navigation range limit. If the current date falls outside\n * the new range, it is clamped to fit within the limit.\n *\n * @param state - The current calendar state.\n * @param navigationRangeLimit - The new navigation date range limit, or undefined/null to remove the limit.\n * @returns The updated calendar state with the applied navigation range limit.\n */\nexport function updateCalendarStateWithNavigationRangeLimit(state: CalendarState, navigationRangeLimit: Maybe<Partial<DateRange>>) {\n  const { date } = state;\n  let result: CalendarState;\n\n  // cap the date if it doesn't fall within the range.\n  if (navigationRangeLimit && !isDateInDateRange(date, navigationRangeLimit)) {\n    const clampedDate = clampDateToDateRange(date, navigationRangeLimit);\n    result = { ...state, date: clampedDate, navigationRangeLimit };\n  } else {\n    result = { ...state, navigationRangeLimit };\n  }\n\n  return result;\n}\n","import { formatToTimeAndDurationString, sortDateRangeStartAscendingCompareFunction } from '@dereekb/date';\nimport { type CalendarEvent } from 'angular-calendar';\n\nexport interface DbxCalendarEvent<T> {\n  event: CalendarEvent<T>;\n  action?: string;\n}\n\nfunction timeSubtitleForEvent(event: CalendarEvent): string {\n  let subtitle;\n\n  if (event.allDay) {\n    subtitle = `(All Day)`;\n  } else {\n    subtitle = formatToTimeAndDurationString(event.start, event.end ?? new Date());\n  }\n\n  return subtitle;\n}\n\n/**\n * Appends time/duration subtitles to each calendar event's title and sorts the events by start date in ascending order.\n *\n * @param events - The calendar events to prepare and sort.\n * @returns A new array of calendar events with updated titles, sorted by start date.\n */\nexport function prepareAndSortCalendarEvents(events: CalendarEvent[]): CalendarEvent[] {\n  return events\n    .map((event: CalendarEvent) => {\n      const subtitle = timeSubtitleForEvent(event);\n      let title;\n\n      if (event.allDay) {\n        title = event.title + ' ' + subtitle;\n      } else {\n        title = `${event.title} - ${subtitle}`;\n      }\n\n      return {\n        ...event,\n        title\n      };\n    })\n    .sort(sortDateRangeStartAscendingCompareFunction);\n}\n","import { Component, inject } from '@angular/core';\nimport { isSameMonth } from 'date-fns';\nimport { DbxCalendarStore } from './calendar.store';\nimport { map, withLatestFrom } from 'rxjs';\nimport { type MatButtonToggleChange, MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\nimport { MatButtonModule } from '@angular/material/button';\nimport { DbxButtonSpacerDirective } from '@dereekb/dbx-web';\nimport { MatIconModule } from '@angular/material/icon';\nimport { CalendarDatePipe } from 'angular-calendar';\n\n@Component({\n  selector: 'dbx-calendar-base',\n  imports: [MatButtonModule, MatButtonToggleModule, DbxButtonSpacerDirective, MatIconModule, CalendarDatePipe, FlexLayoutModule],\n  templateUrl: './calendar.base.component.html'\n})\nexport class DbxCalendarBaseComponent<T> {\n  readonly calendarStore = inject(DbxCalendarStore<T>);\n\n  readonly viewDate$ = this.calendarStore.date$;\n\n  readonly showTodayButton$ = this.calendarStore.showTodayButton$;\n  readonly canJumpToToday$ = this.calendarStore.canJumpToToday$;\n\n  readonly isLookingAtMinimumDate$ = this.calendarStore.isLookingAtMinimumDate$;\n  readonly isLookingAtMaximumDate$ = this.calendarStore.isLookingAtMaximumDate$;\n  readonly hasMultiplePages$ = this.calendarStore.hasMultiplePages$;\n\n  readonly showPageButtons$ = this.calendarStore.showPageButtons$;\n\n  readonly activeDayIsOpen$ = this.calendarStore.eventsForDateState$.pipe(\n    withLatestFrom(this.calendarStore.date$),\n    map(([x, date]) => {\n      return x.events.length && isSameMonth(x.date, date) ? !x.dateTappedTwice : false;\n    })\n  );\n\n  readonly displayType$ = this.calendarStore.displayType$;\n\n  readonly viewDateSignal = toSignal(this.viewDate$, { initialValue: new Date() });\n  readonly showTodayButtonSignal = toSignal(this.showTodayButton$);\n  readonly canJumpToTodaySignal = toSignal(this.canJumpToToday$);\n  readonly isLookingAtMinimumDateSignal = toSignal(this.isLookingAtMinimumDate$, { initialValue: false });\n  readonly isLookingAtMaximumDateSignal = toSignal(this.isLookingAtMaximumDate$, { initialValue: false });\n  readonly hasMultiplePagesSignal = toSignal(this.hasMultiplePages$, { initialValue: false });\n  readonly showPageButtonsSignal = toSignal(this.showPageButtons$);\n  readonly activeDayIsOpenSignal = toSignal(this.activeDayIsOpen$);\n  readonly displayTypeSignal = toSignal(this.displayType$);\n\n  todayClicked(): void {\n    this.calendarStore.tapDay(new Date());\n  }\n\n  firstPageButtonClicked(): void {\n    this.calendarStore.tapFirstPage();\n  }\n\n  nextButtonClicked(): void {\n    this.calendarStore.tapNext();\n  }\n\n  previousButtonClicked(): void {\n    this.calendarStore.tapPrevious();\n  }\n\n  lastPageButtonClicked(): void {\n    this.calendarStore.tapLastPage();\n  }\n\n  typeToggleChanged(event: MatButtonToggleChange): void {\n    this.calendarStore.setDisplayType(event.value);\n  }\n}\n","<div class=\"dbx-calendar\">\n  <h3 class=\"dbx-calendar-title\">{{ viewDateSignal() | calendarDate: displayTypeSignal() + 'ViewTitle' : 'en' }}</h3>\n  <div class=\"dbx-calendar-header\">\n    <div class=\"dbx-calendar-controls\" fxLayout=\"row\" fxLayout.xs=\"column\" ngClass.xs=\"dbx-calendar-controls-compact\">\n      <span class=\"dbx-calendar-controls-left dbx-flex\" fxFlex=\"nogrow\">\n        @if (showTodayButtonSignal()) {\n          <button mat-stroked-button [disabled]=\"!canJumpToTodaySignal()\" (click)=\"todayClicked()\">Today</button>\n        }\n        <dbx-button-spacer></dbx-button-spacer>\n        @if (hasMultiplePagesSignal()) {\n          <div class=\"d-iblock\">\n            @if (showPageButtonsSignal()) {\n              <button mat-icon-button [disabled]=\"isLookingAtMinimumDateSignal()\" aria-label=\"first page button\" (click)=\"firstPageButtonClicked()\">\n                <mat-icon>first_page</mat-icon>\n              </button>\n            }\n            <button mat-icon-button [disabled]=\"isLookingAtMinimumDateSignal()\" [attr.aria-label]=\"'Previous ' + displayTypeSignal() + ' button'\" (click)=\"previousButtonClicked()\">\n              <mat-icon>navigate_before</mat-icon>\n            </button>\n            <button mat-icon-button [disabled]=\"isLookingAtMaximumDateSignal()\" [attr.aria-label]=\"'Next ' + displayTypeSignal() + ' button'\" (click)=\"nextButtonClicked()\">\n              <mat-icon>navigate_next</mat-icon>\n            </button>\n            @if (showPageButtonsSignal()) {\n              <button mat-icon-button [disabled]=\"isLookingAtMaximumDateSignal()\" aria-label=\"last page button\" (click)=\"lastPageButtonClicked()\">\n                <mat-icon>last_page</mat-icon>\n              </button>\n            }\n          </div>\n        }\n      </span>\n      <span class=\"spacer\"></span>\n      <span class=\"dbx-calendar-controls-right\" fxFlex=\"nogrow\">\n        <ng-content select=\"[controls]\"></ng-content>\n      </span>\n    </div>\n  </div>\n  <ng-content></ng-content>\n</div>\n","import { Component, inject, output, computed } from '@angular/core';\nimport { isSameMonth } from 'date-fns';\nimport { type CalendarEvent, CalendarMonthViewComponent, CalendarDayViewComponent, CalendarWeekViewComponent } from 'angular-calendar';\nimport { DbxCalendarStore } from './calendar.store';\nimport { distinctUntilChanged, map, shareReplay, withLatestFrom } from 'rxjs';\nimport { type MatButtonToggleChange, MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { type DbxCalendarEvent, prepareAndSortCalendarEvents } from './calendar';\nimport { DbxCalendarBaseComponent } from './calendar.base.component';\nimport { NgClass } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Component({\n  selector: 'dbx-calendar',\n  templateUrl: './calendar.component.html',\n  imports: [DbxCalendarBaseComponent, CalendarMonthViewComponent, CalendarDayViewComponent, CalendarWeekViewComponent, MatButtonToggleModule, NgClass]\n})\nexport class DbxCalendarComponent<T> {\n  readonly calendarStore = inject(DbxCalendarStore<T>);\n\n  readonly clickEvent = output<DbxCalendarEvent<T>>();\n\n  readonly viewDate$ = this.calendarStore.date$;\n\n  readonly events$ = this.calendarStore.visibleEvents$.pipe(map(prepareAndSortCalendarEvents), shareReplay(1));\n\n  readonly activeDayIsOpen$ = this.calendarStore.eventsForDateState$.pipe(\n    withLatestFrom(this.calendarStore.date$),\n    map(([x, date]) => {\n      return x.events.length && isSameMonth(x.date, date) ? !x.dateTappedTwice : false;\n    }),\n    distinctUntilChanged(),\n    shareReplay(1)\n  );\n\n  readonly displayType$ = this.calendarStore.displayType$;\n\n  readonly viewDateSignal = toSignal(this.viewDate$, { initialValue: new Date() });\n  readonly eventsSignal = toSignal(this.events$, { initialValue: [] });\n  readonly activeDayIsOpenSignal = toSignal(this.activeDayIsOpen$, { initialValue: true });\n  readonly displayTypeSignal = toSignal(this.displayType$);\n  readonly displayTypeClassSignal = computed(() => `dbx-calendar-content-${this.displayTypeSignal()}`);\n\n  todayClicked(): void {\n    this.dayClicked({ date: new Date() });\n  }\n\n  nextButtonClicked(): void {\n    this.calendarStore.tapNext();\n  }\n\n  previousButtonClicked(): void {\n    this.calendarStore.tapPrevious();\n  }\n\n  dayClicked({ date }: { date: Date }): void {\n    this.calendarStore.tapDay(date);\n  }\n\n  eventClicked(action: string, event: CalendarEvent<T>): void {\n    this.clickEvent.emit({ action, event });\n  }\n\n  typeToggleChanged(event: MatButtonToggleChange): void {\n    this.calendarStore.setDisplayType(event.value);\n  }\n}\n","<dbx-calendar-base>\n  <ng-container controls>\n    <mat-button-toggle-group name=\"calendarDisplayStyle\" [value]=\"displayTypeSignal()\" (change)=\"typeToggleChanged($event)\" aria-label=\"Display Style\">\n      <mat-button-toggle value=\"month\">Month</mat-button-toggle>\n      <mat-button-toggle value=\"week\">Week</mat-button-toggle>\n      <mat-button-toggle value=\"day\">Day</mat-button-toggle>\n    </mat-button-toggle-group>\n  </ng-container>\n  <div class=\"dbx-calendar-content\" [ngClass]=\"displayTypeClassSignal()\">\n    @switch (displayTypeSignal()) {\n      @case ('month') {\n        <mwl-calendar-month-view [viewDate]=\"viewDateSignal()\" [events]=\"eventsSignal()\" [activeDayIsOpen]=\"activeDayIsOpenSignal()\" (dayClicked)=\"dayClicked($event.day)\" (eventClicked)=\"eventClicked('Clicked', $event.event)\"></mwl-calendar-month-view>\n      }\n      @case ('week') {\n        <mwl-calendar-week-view [viewDate]=\"viewDateSignal()\" [events]=\"eventsSignal()\" (eventClicked)=\"eventClicked('Clicked', $event.event)\"></mwl-calendar-week-view>\n      }\n      @case ('day') {\n        <mwl-calendar-day-view [viewDate]=\"viewDateSignal()\" [events]=\"eventsSignal()\" (eventClicked)=\"eventClicked('Clicked', $event.event)\"></mwl-calendar-day-view>\n      }\n    }\n  </div>\n</dbx-calendar-base>\n","import { type Provider } from '@angular/core';\nimport { DateAdapter, provideCalendar } from 'angular-calendar';\nimport { adapterFactory as dateAdapterFactory } from 'angular-calendar/date-adapters/date-fns';\n\n/**\n * Provides default configuration for the DbxCalendarModule.\n *\n * @returns Providers that register the calendar with a date-fns date adapter.\n */\nexport function provideDbxCalendar(): Provider[] {\n  return provideCalendar({ provide: DateAdapter, useFactory: dateAdapterFactory });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["dateAdapterFactory"],"mappings":"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"}