{"version":3,"sources":["../package/EventsCalendar.tsx","../package/components/event/Event.tsx","../package/components/event/utils/getClipPath.ts","../package/components/event/utils/getEventStyles.ts","../package/components/event/utils/isBeingDragged.ts","../package/components/event/utils/getOverflowArrows.ts","../package/utils/setTime.ts","../package/utils/constants.ts","../package/utils/isBetween.ts","../package/utils/isSameOrBefore.ts","../package/utils/hasOverlap.ts","../package/utils/updateEvent.ts","../package/utils/getTimeDiff.ts","../package/utils/getTimeLabel.ts","../package/utils/filterByWeek.ts","../package/utils/filterByDate.ts","../package/utils/filterByView.ts","../package/utils/parseRawEvents.ts","../package/utils/getVisibleEvents.ts","../package/utils/arrangeWeekEvents.ts","../package/utils/returnValidStartEnd.ts","../package/state/EMPTY_EVENT.tsx","../package/utils/getPlaceholderEvent.ts","../package/utils/arrangeWeekdayEvents.ts","../package/utils/createDayjsObjFromTime.ts","../package/utils/getBackgroundFromGroups.ts","../package/components/event/utils/getWeekOrDayEventStyles.ts","../package/components/event/AllDayEvent.tsx","../package/components/event/TimeEvent.tsx","../package/hooks/useMouseEvent.tsx","../package/hooks/useElementSize.tsx","../package/hooks/useCalendarEvent.tsx","../package/hooks/useEventsCalendar.tsx","../package/state/DEFAULT_STATE.tsx","../package/state/reducer.tsx","../package/hooks/useInitEventsCalendar.tsx","../package/components/popover/PopoverContent.tsx","../package/components/popover/useBindPopover.tsx","../package/components/popover/EventsCalendarPopover.tsx","../package/components/event-cell/CellHeader.tsx","../package/components/event-cell/ShowMoreText.tsx","../package/components/event-cell/CellContainer.tsx","../package/components/circular-loader/CircularLoader.tsx","../package/features/header/HeaderButton.tsx","../package/features/header/Controls.tsx","../package/features/header/Navigation.tsx","../package/features/icons/IconChevronLeft.tsx","../package/features/icons/IconChevronRight.tsx","../package/features/header/Header.tsx","../package/features/time-view/TimeView.tsx","../package/features/time-view/components/HoursColumn.tsx","../package/features/time-view/components/TimeIndicator.tsx","../package/features/time-view/components/TimeBackground.tsx","../package/features/time-view/components/TimeViewHeader.tsx","../package/features/time-view/hooks/useSetInitialScroll.tsx","../package/features/time-view/utils/getWeekDates.ts","../package/features/time-view/utils/getEventsByDayMap.ts","../package/features/year-view/components/MonthDate.tsx","../package/features/year-view/utils/generateYearDates.ts","../package/features/year-view/YearView.tsx","../package/features/month-view/MonthView.tsx","../package/features/month-view/components/MonthHeader.tsx","../package/features/month-view/utils/getMaxEvents.ts","../package/features/month-view/utils/getMonthDates.ts","../package/features/month-view/utils/getEventsByWeekMap.ts","../package/features/overflow-card/OverflowCard.tsx"],"sourcesContent":["'use client';\n\nimport { ReactNode, useMemo, useRef } from 'react';\n\nimport './EventsCalendar.css';\n\nimport { CircularLoader, EventsCalendarPopover } from './components';\nimport { Header, MonthView, OverflowCard, TimeView, YearView } from './features';\nimport { EventsCalendarObject, useInitEventsCalendar, useMouseEvent } from './hooks';\nimport {\n  CalendarView,\n  EventClickArgs,\n  EventEditProps,\n  EventsCalendarContextMenuProps,\n  EventsCalendarPopoverProps,\n  RawCalendarEvent,\n  RawCalendarEventBase,\n} from './types';\nimport { CALENDAR_VIEWS, filterByView, parseRawEvents } from './utils';\n\nexport interface EventsCalendarProps<T extends RawCalendarEventBase = RawCalendarEventBase> {\n  /**\n   * Shared calendar state and methods, returned by `useEventsCalendar`.\n   */\n  calendar?: EventsCalendarObject;\n\n  /**\n   * Renders a more compact layout, useful in constrained spaces.\n   * Affects padding, font size, and layout density.\n   */\n  compact?: boolean;\n\n  /**\n   * Enables drag-to-create behavior for new events.\n   */\n  enableDragCreation?: boolean;\n\n  /**\n   * Allows users to reschedule events by dragging.\n   */\n  enableRescheduling?: boolean;\n\n  /**\n   * Array of event objects to be rendered in the calendar.\n   */\n  events?: RawCalendarEvent<T>[];\n\n  /**\n   * Whether to show a loading spinner overlay on the calendar.\n   */\n  isFetching?: boolean;\n\n  /**\n   * If true, hides the built-in calendar header (navigation + view toggle).\n   */\n  noHeader?: boolean;\n\n  /**\n   * z-index used for the overflow popover that appears when clicking \"+N more\".\n   */\n  overflowPopoverZIndex?: number;\n\n  /**\n   * z-index used for the event popover component.\n   */\n  popoverZIndex?: number;\n\n  /**\n   * Calendar views available to the user (e.g. 'month', 'week', 'day', 'year').\n   * Defaults to all supported views.\n   */\n  views?: CalendarView[];\n\n  /**\n   * Fired when an existing event is clicked.\n   */\n  onEventClick?: (props: EventClickArgs<T>) => void;\n\n  /**\n   * Fired when a new event is created (e.g. via drag or click).\n   */\n  onEventCreate?: (props: EventEditProps) => void;\n\n  /**\n   * Fired when an event is rescheduled (e.g. via drag).\n   */\n  onEventReschedule?: (props: EventEditProps) => void;\n\n  /**\n   * Custom render function for the event popover.\n   */\n  renderPopover?: (props: EventsCalendarPopoverProps) => ReactNode;\n\n  /**\n   * Custom render function for a context menu (e.g. right-click on event).\n   */\n  renderContextMenu?: (props: EventsCalendarContextMenuProps) => ReactNode;\n}\n\nexport function EventsCalendar<T extends RawCalendarEvent = RawCalendarEventBase>({\n  calendar,\n  compact = false,\n  enableDragCreation = false,\n  enableRescheduling = false,\n  events = [],\n  overflowPopoverZIndex = 2,\n  popoverZIndex = 101,\n  isFetching = false,\n  noHeader = false,\n  onEventClick,\n  onEventCreate,\n  onEventReschedule,\n  renderPopover,\n  renderContextMenu,\n  views = [...CALENDAR_VIEWS],\n}: EventsCalendarProps<T>) {\n  // Initialise data calendar\n  const { activeDate, setActiveDate, view, setView, state, dispatch } =\n    useInitEventsCalendar(calendar);\n\n  // Parse raw events\n  const parsed = useMemo(() => parseRawEvents<T>(events), [events]);\n\n  // Events in current view\n  const calendarEvents = useMemo(\n    () => filterByView<T>(parsed, activeDate, view),\n    [parsed, activeDate, view]\n  );\n\n  // Overflow events (only all day events are needed in time views)\n  const isTimeView = view === 'week' || view === 'day';\n  const overflowEvents = isTimeView\n    ? calendarEvents.filter((event) => event.isAllDay)\n    : calendarEvents;\n\n  // Calendar state\n  const {\n    eventAnchor,\n    dragActive,\n    eventDragActive,\n    popoverIsOpen,\n    clickedEvent,\n    placeholderEvent,\n  } = state;\n\n  // Popover handlers\n  const onClose = () => dispatch({ type: 'reset_calendar' });\n  const handleStopDrag = () => {\n    if (dragActive || eventDragActive) dispatch({ type: 'event_create_stop' });\n  };\n\n  // Placeholder ref\n  const placeholderRef = useRef<HTMLDivElement>(null);\n\n  // Mouse event handler\n  const handleMouseEvent = useMouseEvent({ enableDragCreation, dispatch, state, onEventCreate });\n\n  // Shared props\n  const basicProps = {\n    activeDate,\n    dispatch,\n    state,\n    events: calendarEvents,\n  };\n  const sharedViewProps = {\n    ...basicProps,\n    compact,\n    onEventClick,\n    handleStopDrag,\n    placeholderRef,\n    handleMouseEvent,\n    onEventReschedule,\n    renderContextMenu,\n    enableRescheduling,\n  };\n\n  // Render function\n  const renderCurrentView = () => {\n    switch (view) {\n      case 'year':\n        return <YearView {...basicProps} />;\n      case 'month':\n        return <MonthView {...sharedViewProps} />;\n      case 'week':\n      case 'day':\n        return <TimeView {...sharedViewProps} view={view} />;\n      default:\n        return null;\n    }\n  };\n\n  return (\n    <div className=\"events-calendar-wrapper\">\n      {noHeader ? null : (\n        <Header\n          view={view}\n          setActiveDate={setActiveDate}\n          setView={setView}\n          activeDate={activeDate}\n          views={views}\n        />\n      )}\n      <div\n        className=\"events-calendar\"\n        data-withheader={!noHeader}\n        onClick={(e) => e.stopPropagation()}\n      >\n        <CircularLoader visible={isFetching} />\n        {renderCurrentView()}\n\n        {renderPopover && eventAnchor && (\n          <EventsCalendarPopover isOpen={popoverIsOpen} anchor={eventAnchor} zIndex={popoverZIndex}>\n            {renderPopover({ onClose, clickedEvent, newEvent: placeholderEvent })}\n          </EventsCalendarPopover>\n        )}\n\n        <OverflowCard\n          state={state}\n          compact={compact}\n          dispatch={dispatch}\n          events={overflowEvents}\n          onEventClick={onEventClick}\n          placeholderRef={placeholderRef}\n          renderContextMenu={renderContextMenu}\n          enableRescheduling={enableRescheduling}\n          zIndex={overflowPopoverZIndex}\n        />\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport { Dayjs } from 'dayjs';\nimport { Dispatch, ReactNode, RefObject, useRef } from 'react';\n\nimport './Event.css';\n\nimport { AllDayEvent } from './AllDayEvent';\nimport { TimeEvent } from './TimeEvent';\nimport { getEventStyles, getWeekOrDayEventStyles, isBeingDragged } from './utils';\nimport { useCalendarEvent } from '~/hooks';\nimport {\n  CalendarAction,\n  CalendarState,\n  CalendarView,\n  EventClickArgs,\n  EventsCalendarContextMenuProps,\n  MinMaxDatesInView,\n  OrderedCalendarEvent,\n} from '~/types';\nimport { getTimeDiff, getTimeLabel } from '~/utils';\n\ninterface EventProps<T> {\n  view: CalendarView;\n  enableRescheduling: boolean;\n  compact?: boolean;\n  date: Dayjs;\n  dispatch: Dispatch<CalendarAction>;\n  event: OrderedCalendarEvent<T>;\n  isInWeekHeader?: boolean;\n  isInOverflow?: boolean;\n  isInDayHeader?: boolean;\n  minMaxDatesInView?: MinMaxDatesInView;\n  placeholderRef: RefObject<HTMLDivElement | null>;\n  onEventClick?: (props: EventClickArgs<T>) => void;\n  renderContextMenu?: (props: EventsCalendarContextMenuProps) => ReactNode;\n  state: CalendarState;\n}\n\nexport function Event<T>({\n  view,\n  enableRescheduling,\n  compact = false,\n  date,\n  dispatch,\n  event,\n  isInWeekHeader = false,\n  isInOverflow = false,\n  isInDayHeader = false,\n  minMaxDatesInView,\n  onEventClick,\n  placeholderRef,\n  renderContextMenu,\n  state,\n}: EventProps<T>) {\n  const ref = useRef<HTMLDivElement>(null);\n  const hasContextMenu = !!renderContextMenu;\n  const isInteractive = !!onEventClick || enableRescheduling;\n  const isMonthView = view === 'month';\n  const isDayView = view === 'day';\n\n  // Popover handlers\n  const openPopover = () => dispatch({ type: 'open_popover' });\n  const closePopover = () => dispatch({ type: 'reset_calendar' });\n\n  // Context menu onClose\n  const onClose = () => dispatch({ type: 'reset_calendar' });\n\n  // Handle event left click (view popover)\n  const handleClick = (\n    e: React.MouseEvent<HTMLDivElement, MouseEvent>,\n    isPlaceholder: boolean,\n    eventRef: RefObject<HTMLDivElement | null>,\n    onEventClick?: (props: EventClickArgs<T>) => void\n  ) => {\n    e.stopPropagation();\n    if (isPlaceholder) return;\n\n    if (!eventRef.current) return;\n\n    // Check if popover is open and anchored to the clicked event, we want to\n    // move the popover if the event is clicked twice, but on different weeks)\n    const isDoubleClick =\n      isActive && state.eventAnchor?.dataset.anchorday === eventRef.current.dataset.anchorday;\n\n    // Overflow popover should close if clicked event was not inside the overflow popover\n    const overflowShouldClose = !isInOverflow && state.overflowIsOpen;\n\n    // Close popover (this is either a double-click on an open event or an event outside the popover)\n    if (overflowShouldClose) dispatch({ type: 'reset_calendar' });\n\n    // Open popover if there is currently no anchored popover\n    if (!isDoubleClick) {\n      dispatch({ type: 'set_clicked_event', event: event, anchor: eventRef.current });\n    }\n\n    // Toggle popover visibility handler\n    const togglePopover = () => (isDoubleClick ? closePopover() : openPopover());\n\n    onEventClick?.({\n      event,\n      isDoubleClick,\n      eventRef: eventRef.current,\n      openPopover,\n      closePopover,\n      togglePopover,\n    });\n  };\n\n  // Main event hook\n  const {\n    handleContextMenu,\n    isActive,\n    contextIsOpen,\n    refs,\n    floatingStyles,\n    getFloatingProps,\n    closeContextMenu,\n  } = useCalendarEvent({\n    dispatch,\n    event,\n    state,\n    hasContextMenu,\n    isInOverflow,\n  });\n\n  // Current event is placeholder event\n  const isPlaceholder = event.id === null;\n  const eventRef = isPlaceholder && event.start.isSame(date, 'd') ? placeholderRef : ref;\n  const timeDuration = Math.abs(getTimeDiff(event.start, event.end));\n  const isShort = timeDuration <= 30;\n  const overlapOffset = isDayView ? 120 : 20;\n  const dayIndex = isDayView ? 0 : date.day();\n\n  const onDragStart = () => {\n    dispatch({ type: 'reset_calendar' });\n    if (enableRescheduling && !isInOverflow) {\n      dispatch({\n        type: 'event_reschedule_start',\n        event: { ...event, dragId: event.id, order: isMonthView ? event.order : 1000 },\n      });\n    }\n  };\n\n  const styles = isMonthView\n    ? getEventStyles(isInOverflow, event, date, compact, isInWeekHeader, isInDayHeader)\n    : getWeekOrDayEventStyles(\n        event,\n        timeDuration,\n        dayIndex,\n        overlapOffset,\n        isInteractive && isActive\n      );\n\n  return (\n    <>\n      <div\n        className={\n          isMonthView\n            ? 'events-calendar-month-item-container'\n            : 'events-calendar-week-item-container'\n        }\n        data-interactive={isInteractive}\n        data-active={isInteractive && isActive}\n        data-anchorday={date.format('DD-MMM-YYYY')}\n        data-placeholder={isPlaceholder}\n        data-dragactive={state.dragActive || state.eventDragActive}\n        data-isdragging={isBeingDragged(state, event)}\n        data-sm={compact}\n        data-time={isMonthView && !event.isAllDay}\n        draggable=\"true\"\n        onClick={(e) => handleClick(e, isPlaceholder, eventRef, onEventClick)}\n        onContextMenu={(e) => handleContextMenu(e, eventRef)}\n        onDragStart={onDragStart}\n        ref={eventRef}\n        style={styles}\n      >\n        {isMonthView ? (\n          !event.isAllDay ? (\n            <TimeEvent event={event} isCompact={compact} />\n          ) : (\n            <AllDayEvent\n              date={date}\n              event={event}\n              isCompact={compact}\n              isInOverflow={isInOverflow}\n              minMaxDatesInView={minMaxDatesInView}\n            />\n          )\n        ) : (\n          <div className=\"events-calendar-item-label\" data-short={isShort}>\n            <span style={isShort ? undefined : { width: '100%' }}>{event.title}</span>\n            <span className=\"events-calendar-time-text\">{getTimeLabel(event, timeDuration)}</span>\n          </div>\n        )}\n      </div>\n      {contextIsOpen && (\n        <div\n          ref={refs.setFloating}\n          style={{ ...floatingStyles, zIndex: 2 }}\n          {...getFloatingProps()}\n        >\n          {renderContextMenu &&\n            renderContextMenu({ event, closeContextMenu, onClose, openPopover })}\n        </div>\n      )}\n    </>\n  );\n}\n","import { OverflowArrowType } from '~/types';\n\nexport const getClipPath = (overflowArrows: OverflowArrowType): string | undefined => {\n  switch (overflowArrows) {\n    case 'both':\n      return 'polygon(10px 0%, calc(100% - 10px) 0%, 100% 50%, calc(100% - 10px) 100%, 10px 100%, 0% 50%)';\n    case 'left':\n      return 'polygon(10px 0%, 100% 0%, 100% 100%, 10px 100%, 0% 50%)';\n    case 'right':\n      return 'polygon(0% 0%, calc(100% - 10px) 0%, 100% 50%, calc(100% - 10px) 100%, 0% 100%)';\n    case 'none':\n      return undefined;\n    default:\n      return undefined;\n  }\n};\n","import { Dayjs } from 'dayjs';\nimport { CSSProperties } from 'react';\nimport { OrderedCalendarEvent } from '~/types';\n\nexport const getEventStyles = (\n  isInOverflow: boolean,\n  event: OrderedCalendarEvent,\n  date: Dayjs,\n  isCompact: boolean,\n  isInWeekHeader: boolean,\n  isInDayHeader: boolean\n) => {\n  if (isInOverflow) return { width: '100%' };\n  const weekStart = event.start.isSame(date, 'w') ? event.start.day() : 0;\n  const weekEnd = event.end.isSame(date, 'w') ? event.end.day() : 6;\n  const styles: CSSProperties = {\n    position: 'absolute',\n    left: isInDayHeader ? '0.125rem' : `calc(${(weekStart * 100) / 7}% + 0.125rem)`,\n    top: `calc(${isInDayHeader ? 4 : isCompact ? 24 : 26}px + ${event.order * (isCompact ? 21 : 22)}px + ${\n      isInWeekHeader ? 6 : 0\n    }px)`,\n    width: isInDayHeader\n      ? 'calc(100% - 6px)'\n      : `calc(${(100 * (1 + (weekEnd - weekStart))) / 7}% - 0.25rem - 1px)`,\n  };\n  return styles;\n};\n","import { CalendarEvent, CalendarState } from '~/types';\n\nexport function isBeingDragged(state: CalendarState, event: CalendarEvent) {\n  return !event.isActive && event.id === state.placeholderEvent.dragId;\n}\n","import dayjs from 'dayjs';\nimport { MinMaxDatesInView, OverflowArrowType } from '~/types';\n\nexport const getOverflowArrows = (\n  isInOverflow: boolean,\n  date: dayjs.Dayjs,\n  start: dayjs.Dayjs,\n  end: dayjs.Dayjs,\n  minMaxDatesInView?: MinMaxDatesInView\n): OverflowArrowType => {\n  const showLeftArrow = isInOverflow\n    ? start.isBefore(date, 'day')\n    : !!minMaxDatesInView?.first && start.isBefore(minMaxDatesInView.first, 'day');\n\n  const showRightArrow = isInOverflow\n    ? end.isAfter(date, 'day')\n    : !!minMaxDatesInView?.last && end.isAfter(minMaxDatesInView.last, 'day');\n\n  return showLeftArrow && showRightArrow\n    ? 'both'\n    : showLeftArrow\n      ? 'left'\n      : showRightArrow\n        ? 'right'\n        : 'none';\n};\n","import { Dayjs } from 'dayjs';\n\n/*\n    Function that takes in a date object and a time\n    Returns date object with same date, but resets time to input\n*/\nexport function setTime(date: Dayjs, time: Dayjs) {\n  return date.hour(time.hour()).minute(time.minute());\n}\n","export const CALENDAR_VIEWS = ['year', 'month', 'week', 'day'] as const;\n\nexport const MONTHS = [\n  'January',\n  'February',\n  'March',\n  'April',\n  'May',\n  'June',\n  'July',\n  'August',\n  'September',\n  'October',\n  'November',\n  'December',\n] as const;\n\nexport const DAY_LABELS_SHORT = ['S', 'M', 'T', 'W', 'T', 'F', 'S'] as const;\n\nexport const DAYS_IN_FULL_MONTH = 42;\n\nexport const DEFAULT_COLOR = '#0ea5e9';\n\nexport const HOURS = [\n  '1 AM',\n  '2 AM',\n  '3 AM',\n  '4 AM',\n  '5 AM',\n  '6 AM',\n  '7 AM',\n  '8 AM',\n  '9 AM',\n  '10 AM',\n  '11 AM',\n  '12 PM',\n  '1 PM',\n  '2 PM',\n  '3 PM',\n  '4 PM',\n  '5 PM',\n  '6 PM',\n  '7 PM',\n  '8 PM',\n  '9 PM',\n  '10 PM',\n  '11 PM',\n] as const;\n","import { Dayjs } from 'dayjs';\n\n/**\n * Checks if a date is between two other dates, inclusive of the start date,\n * and optionally exclusive of the end date.\n *\n * @param date - The date to test.\n * @param testStart - The start date of the range.\n * @param testEnd - The end date of the range.\n * @param startOnly - If true, only consider the start date as inclusive (default: false).\n * @returns True if `date` is between `testStart` and `testEnd` (inclusive start, optional inclusive end).\n */\nexport function isBetween(\n  date: Dayjs,\n  testStart: Dayjs,\n  testEnd: Dayjs,\n  startOnly: boolean = false\n): boolean {\n  if (date.isSame(testStart, 'd')) return true;\n  if (!startOnly && date.isSame(testEnd, 'd')) return true;\n  return date.isAfter(testStart) && date.isBefore(testEnd);\n}\n","import { Dayjs } from 'dayjs';\n\n/**\n * Checks if a date is the same as or before another date, using day precision.\n *\n * @param a - The first Dayjs date\n * @param b - The second Dayjs date\n * @returns `true` if `a` is the same as or before `b`, otherwise `false`\n */\nexport function isSameOrBefore(a: Dayjs, b: Dayjs): boolean {\n  return a.isBefore(b, 'd') || a.isSame(b, 'd');\n}\n","import { Dayjs } from 'dayjs';\nimport { isSameOrBefore } from './isSameOrBefore';\n\n/**\n * Checks if two date ranges overlap.\n *\n * Returns true if any part of the first range (start1 to end1)\n * overlaps with the second range (start2 to end2).\n *\n * @param start1 - Start of the first date range\n * @param end1 - End of the first date range\n * @param start2 - Start of the second date range\n * @param end2 - End of the second date range\n * @returns `true` if the two date ranges overlap, otherwise `false`\n */\n\nexport function hasOverlap(start1: Dayjs, end1: Dayjs, start2: Dayjs, end2: Dayjs) {\n  // return (\n  // \tisBetween(start1, start2, end2) || // range 1 starts within range 2\n  // \tisBetween(start2, start1, end1) || // range 2 starts within range 1\n  // \tisBetween(end2, start1, end1) // range 2 ends within range 1\n  // );\n\n  return isSameOrBefore(start1, end2) && isSameOrBefore(start2, end1);\n}\n","import { Dayjs } from 'dayjs';\nimport { Dispatch } from 'react';\nimport { CalendarAction, CalendarState, CalendarView } from '~/types';\n\ninterface updateDragNDropPlaceholderProps {\n  state: CalendarState;\n  dispatch: Dispatch<CalendarAction>;\n  date: Dayjs;\n  view: CalendarView;\n}\n\nexport function updateEvent({ state, dispatch, date, view }: updateDragNDropPlaceholderProps) {\n  const timeScale = view === 'month' ? 'day' : 'minute';\n\n  // After placeholder event is created (for dragging), record where on the event we have clicked (e.g. 2 days/60mins in)\n  if (state.dragStartOffset === null) {\n    const dateDiff = date.diff(state.clickedEvent.start, timeScale);\n    dispatch({ type: 'update_event', dragStartOffset: dateDiff });\n    return;\n  }\n\n  // Extract existing values\n  const { start, end, startTime, endTime } = state.clickedEvent;\n\n  // On drag over grid, update the placeholder event\n  const newStart = date.subtract(state.dragStartOffset, timeScale);\n  const increment = end.diff(start, timeScale);\n  const newEnd = newStart.add(increment, timeScale);\n\n  if (view !== 'month' && !newStart.isSame(newEnd, 'day')) return;\n\n  dispatch({\n    type: 'update_event',\n    event: {\n      ...state.placeholderEvent,\n      start: view === 'month' ? newStart.hour(start.hour()).minute(start.minute()) : newStart,\n      end: view === 'month' ? newEnd.hour(end.hour()).minute(end.minute()) : newEnd,\n      startTime: view === 'month' ? startTime : newStart.format('h:mma'),\n      endTime: view === 'month' ? endTime : newEnd.format('h:mma'),\n    },\n  });\n}\n","import { Dayjs } from 'dayjs';\n\nexport function getTimeDiff(dt1: Dayjs, dt2: Dayjs) {\n  const mins1 = dt1.hour() * 60 + dt1.minute();\n  const mins2 = dt2.hour() * 60 + dt2.minute();\n  return mins2 - mins1;\n}\n","import { CalendarEvent } from '~/types';\n\nexport function getTimeLabel(event: CalendarEvent, timeDuration: number) {\n  if (!event.start || !event.end) return '';\n  const leadingComma = timeDuration <= 30 ? ', ' : '';\n  return event.start.isBefore(event.end)\n    ? `${leadingComma}${event.start.format('h:mma')} - ${event.end.format('h:mma')}`\n    : `${leadingComma}${event.end.format('h:mma')} - ${event.start.format('h:mma')}`;\n}\n","import { Dayjs } from 'dayjs';\nimport { hasOverlap } from './hasOverlap';\nimport { CalendarEvent } from '~/types';\n\n/*\n    Function that returns an array of events that overlap a week with given weekStartDate\n*/\nexport function filterByWeek<T extends CalendarEvent>(array: T[], weekStartDate: Dayjs) {\n  const weekEndDate = weekStartDate.add(6, 'd');\n  return array.filter(({ start, end }) => {\n    const eventEnd = end || start; // Take event start if end is null\n    return hasOverlap(weekStartDate, weekEndDate, start, eventEnd);\n  });\n}\n","import { Dayjs } from 'dayjs';\nimport { isBetween } from './isBetween';\nimport { CalendarEvent } from '~/types';\n\n/**\n * Filters a list of calendar events to include only those that occur on a given date.\n *\n * An event is included if the `date` is:\n * - strictly between the event's `start` and `end` dates,\n * - equal to the `start` date,\n * - or equal to the `end` date.\n *\n * @param data - The list of calendar events to filter.\n * @param date - The target date to match against event ranges.\n * @returns An array of events that occur on the specified date.\n */\nexport function filterByDate<T extends CalendarEvent>(data: T[], date: Dayjs): T[] {\n  return data.filter(({ start, end }) => isBetween(date, start, end));\n}\n","import { Dayjs } from 'dayjs';\nimport { hasOverlap } from './hasOverlap';\nimport { CalendarEvent, CalendarView } from '~/types';\n\n/**\n * Filters events that overlap with the visible range of a calendar view (month or year).\n *\n * @template T - Optional custom data attached to the calendar event.\n * @param {CalendarEvent<T>[]} events - List of calendar events.\n * @param {Dayjs} activeDate - The current date used to determine the visible time range.\n * @param {CalendarView} view - The current calendar view ('month' or 'year').\n * @returns {CalendarEvent<T>[]} An array of events that overlap the given view range.\n */\nexport function filterByView<T>(\n  events: CalendarEvent<T>[],\n  activeDate: Dayjs,\n  view: CalendarView\n): CalendarEvent<T>[] {\n  const unit = view === 'year' ? 'year' : 'month';\n\n  const filterStart = activeDate.startOf(unit).day(0); // Align to Sunday\n  const filterEnd = activeDate.endOf(unit).day(6); // Align to Saturday\n\n  return events.filter(({ start, end }) => hasOverlap(filterStart, filterEnd, start, end));\n}\n","import dayjs from 'dayjs';\nimport { CalendarEvent, RawCalendarEvent } from '~/types';\n\nconst getDayjs = (rawDate: dayjs.Dayjs, timeString: string) => {\n  const formatted = timeString.replace(/.{2}$/, ' $&').toUpperCase();\n  return dayjs(`${rawDate.format('DD-MMM-YYYY')} ${formatted}`);\n};\n\nexport function parseRawEvents<T>(events: RawCalendarEvent<T>[]): CalendarEvent<T>[] {\n  return events\n    .filter((event) => event.start || event.end)\n    .map((event, index) => {\n      // Event start\n      let dayjsStart = event.start ? dayjs(event.start) : dayjs(event.end);\n      if (event.startTime) {\n        dayjsStart = getDayjs(dayjsStart, event.startTime);\n      }\n\n      // Event end (default to event start)\n      let dayjsEnd = event.end ? dayjs(event.end) : dayjsStart;\n\n      // Add end time\n      if (event.startTime || event.endTime || event.isAllDay === false) {\n        if (!event.startTime && !event.endTime) {\n          dayjsEnd = dayjsStart.add(1, 'hour'); // Neither start nor end time\n        } else if (event.endTime) {\n          dayjsEnd = getDayjs(dayjsEnd, event.endTime); // Only end Time\n        } else {\n          dayjsEnd = getDayjs(dayjsEnd, event.startTime!).add(1, 'hour'); // Only start time\n        }\n      }\n\n      const parsedEvent = {\n        ...event,\n        id: event.id ?? index,\n        title: event.title ?? '',\n        start: dayjsStart,\n        end: dayjsEnd,\n        isAllDay: event.isAllDay !== false,\n      };\n\n      return parsedEvent;\n    });\n}\n","import { Dayjs } from 'dayjs';\nimport { OrderedCalendarEvent } from '~/types';\n\n/*\n    Returns the correct number of events for a cell without duplicates in a given week\n*/\nexport function getVisibleEvents<T extends OrderedCalendarEvent>(\n  data: T[],\n  date: Dayjs,\n  maxEvents: number,\n  isInDayHeader: boolean\n) {\n  return data.filter(\n    ({ order, start }) =>\n      order < maxEvents && (isInDayHeader || date.day() === 0 || date.isSame(start, 'day'))\n  );\n}\n","import { hasOverlap } from './hasOverlap';\nimport { CalendarEvent, OrderedCalendarEvent } from '~/types';\n\n/**\n * Sorts an array of calendar events with the following priority:\n *  1. Longer events appear first (descending by length in days).\n *  2. If lengths are equal, earlier start dates come first.\n *  3. If start dates are equal, all-day events come before timed events.\n *\n * @template T\n * @param {T[]} weekEventsArray - Array of calendar events to sort.\n * @returns {T[]} A new array sorted according to the above criteria.\n */\nfunction calendarSort<T extends CalendarEvent>(weekEventsArray: T[]) {\n  const clone = [...weekEventsArray];\n\n  return clone.sort((a, b) => {\n    // Calculate the length of each event in days, including both start and end days\n    const a_lengthInDays = a.end.diff(a.start, 'day') + 1;\n    const b_lengthInDays = b.end.diff(b.start, 'day') + 1;\n\n    // Sort order priority:\n    // 1. Longer events come first (descending by length)\n    if (a_lengthInDays > b_lengthInDays) return -1;\n    if (a_lengthInDays < b_lengthInDays) return 1;\n\n    // 2. If lengths are equal, earlier start date comes first\n    if (a.start.isBefore(b.start, 'day')) return -1;\n    if (b.start.isBefore(a.start, 'day')) return 1;\n\n    // 3. If same start date, place all-day events above timed events\n    if (a.isAllDay && !b.isAllDay) return -1;\n    if (!a.isAllDay && b.isAllDay) return 1;\n\n    // 4. If all criteria are equal, keep original order (stable sort)\n    return 0;\n  });\n}\n\n/**\n * Finds the lowest non-negative integer slot not present in the given set of occupied slots.\n *\n * @param {Set<number>} overlappingSlots - A set of slot numbers that are already taken.\n * @returns {number} The lowest slot number not in the set, starting from 0.\n */\nfunction findAvailableSlot(overlappingSlots: Set<number>): number {\n  let slot = 0;\n  while (overlappingSlots.has(slot)) slot++;\n  return slot;\n}\n\n/*\n    Function that takes an array of events for a single week and arranges them to create a dense fit\n*/\nexport function arrangeWeekEvents<T extends CalendarEvent>(\n  weekEventsArray: T[]\n): (OrderedCalendarEvent & T)[] {\n  if (weekEventsArray.length < 2)\n    return weekEventsArray.map((event) => ({ ...{ ...event, order: 0, indent: 0 } }));\n\n  // Sort events by length, then start date, then duration\n  const sortedWeekEvents = calendarSort(weekEventsArray);\n\n  // Extract first event from array and place as in first (top) slot/position\n  const [firstEvent, ...followingEvents] = sortedWeekEvents;\n  const orderedArray: OrderedCalendarEvent<T>[] = [{ ...firstEvent, order: 0, indent: 0 }];\n\n  // Now loop through all other events and add them to the ordered array\n  followingEvents.forEach((testEvent) => {\n    const testStart = testEvent.start;\n    const testEnd = testEvent.end || testStart; // fallback if no end\n\n    // Assign 'slots' for each day cell. Track slots that contain overlapping entries\n    const overlappingSlots = new Set<number>();\n\n    // Check for overlaps with already placed events\n    for (const placedEvent of orderedArray) {\n      const placedStart = placedEvent.start;\n      const placedEnd = placedEvent.end || placedStart; // fallback if no end\n\n      if (hasOverlap(testStart, testEnd, placedStart, placedEnd)) {\n        overlappingSlots.add(placedEvent.order);\n      }\n    }\n\n    // Find the lowest slot number not taken by overlapping events\n    const eventOrder = findAvailableSlot(overlappingSlots);\n\n    // Add this event to the ordered array, along with its allocated slot\n    orderedArray.push({ ...testEvent, order: eventOrder, indent: 0 });\n  });\n  return orderedArray;\n}\n","import { Dayjs } from 'dayjs';\n\nexport function returnValidStartEnd(start: Dayjs, end: Dayjs) {\n  return !end\n    ? [start, start]\n    : start.isSame(end) || start.isBefore(end)\n      ? [start, end]\n      : [end, start];\n}\n","import dayjs from 'dayjs';\nimport { OrderedCalendarEvent } from '../types';\n\nexport const EMPTY_EVENT: OrderedCalendarEvent = {\n  id: null,\n  dragId: null,\n  title: 'Untitled',\n  groups: [],\n  start: dayjs(),\n  end: dayjs(),\n  startTime: undefined,\n  endTime: undefined,\n  isActive: false,\n  isAllDay: true,\n  indent: 0,\n  order: 0,\n};\n","import { Dayjs } from 'dayjs';\nimport { returnValidStartEnd } from './returnValidStartEnd';\nimport { EMPTY_EVENT } from '~/state/EMPTY_EVENT';\nimport { OrderedCalendarEvent } from '~/types';\n\nexport const getPlaceholderEvent = (\n  start: Dayjs,\n  end: Dayjs,\n  isTimeEntry?: boolean,\n  isInitialisation?: boolean\n) => {\n  const [validStart, validEnd] = returnValidStartEnd(start, end);\n  const eventEnd = isInitialisation && isTimeEntry ? validStart.add(15, 'minute') : validEnd;\n\n  const updatedEvent: OrderedCalendarEvent = {\n    ...EMPTY_EVENT,\n    id: null,\n    start: validStart,\n    end: eventEnd,\n    isActive: true,\n    isAllDay: isTimeEntry ? false : true,\n    startTime: isTimeEntry ? validStart.format('h:mma') : undefined,\n    endTime: isTimeEntry ? eventEnd.format('h:mma') : undefined,\n    order: isTimeEntry ? 100 : 0,\n  };\n  return updatedEvent;\n};\n","import { Dayjs } from 'dayjs';\nimport { getTimeDiff } from './getTimeDiff';\nimport { setTime } from './setTime';\nimport { CalendarEvent, OrderedCalendarEvent } from '~/types';\n\n/*\n    Function that sorts events by start time, from earliest to latest.\n    Only sort arrays with at least 2 events.\n*/\nfunction sortByStart<T extends CalendarEvent>(array: T[]) {\n  if (array.length < 2) return array;\n\n  return array.sort((a, b) => {\n    const timeDiff = getTimeDiff(a.start, b.start);\n    return timeDiff > 0 ? -1 : timeDiff < 0 ? 1 : 0;\n  });\n}\n\n/*\n    Function that checks if the start of a test event overlaps with another event\n*/\nfunction overlapsStart(test_start: Dayjs, main_start: Dayjs, main_end: Dayjs) {\n  return (\n    test_start.isSame(main_start) ||\n    (test_start.isAfter(main_start) && test_start.isBefore(main_end))\n  );\n}\n\n/*\n    Function that takes an array of events for a single day and orders & indents them based on overlaps\n*/\nexport function arrangeWeekdayEvents<T extends CalendarEvent>(\n  dayEvents: T[],\n  date: Dayjs\n): (OrderedCalendarEvent & T)[] {\n  if (dayEvents.length < 2) return dayEvents.map((event) => ({ ...event, order: 0, indent: 0 }));\n\n  // Sort events by start time\n  const sortedEvents = sortByStart(dayEvents);\n\n  // if (date.day() === 4) {\n  // \tconsole.log(dayEvents);\n  // }\n\n  // Extract first event from array and place it first with no indent\n  const [firstEvent, ...followingEvents] = sortedEvents;\n  const orderedArray: OrderedCalendarEvent<T>[] = [{ ...firstEvent, order: 0, indent: 0 }];\n\n  // Now loop through all other events and add them to the ordered array\n  followingEvents.forEach((testEvent, index) => {\n    // Set the time for the next event to the correct day\n    const tempStart_test_event = setTime(date, testEvent.start);\n\n    // We loop through the current events already added to the ordered array and compare with the test event\n    // If the start of the test event overlaps with another event, we increment the indent by 1\n    let eventIndent = 0;\n    orderedArray.forEach((currEvent) => {\n      // Set the time for the comparison event to the correct day\n      const tempStart_curr_event = setTime(date, currEvent.start);\n      const tempEnd_curr_event = setTime(date, currEvent.end);\n\n      if (overlapsStart(tempStart_test_event, tempStart_curr_event, tempEnd_curr_event)) {\n        eventIndent += 1;\n      }\n    });\n\n    // Add this event to the ordered array, noting its order and indent\n    // (the array is already sorted so we use the index for ordering)\n    orderedArray.push({ ...testEvent, order: index + 1, indent: eventIndent });\n  });\n\n  return orderedArray;\n}\n","import dayjs from 'dayjs';\n\nexport const createDayjsObjFromTime = (\n  startTime: string | null,\n  endTime: string | null,\n  startString: string = '01-Jan-2000',\n  endString: string = '01-Jan-2000'\n) => {\n  const formattedStartTime = startTime?.replace(/.{2}$/, ' $&').toUpperCase() || '12:00 AM';\n  const formattedEndTime = endTime?.replace(/.{2}$/, ' $&').toUpperCase() || '12:00 AM';\n  const start = dayjs(`${startString} ${formattedStartTime}`);\n  const end = dayjs(`${endString} ${formattedEndTime}`);\n  return { start, end };\n};\n","import React from 'react';\nimport { CalendarGroup } from '~/types';\nimport { DEFAULT_COLOR } from '~/utils';\n\nexport function getBackgroundFromGroups(groups?: CalendarGroup[]): React.CSSProperties {\n  const colors = groups?.map((g) => g.color).filter(Boolean) ?? [];\n\n  if (!colors.length) return { backgroundColor: DEFAULT_COLOR };\n\n  if (colors.length === 1) return { backgroundColor: colors[0] };\n\n  const increment = 100 / colors.length;\n  const values = colors\n    .map((color, i) => `${color} ${increment * i}% ${increment * i + increment}%`)\n    .join(', ');\n  return { backgroundImage: `-webkit-linear-gradient(-30deg,${values})` };\n}\n","import { OrderedCalendarEvent } from '~/types';\nimport { getBackgroundFromGroups } from '~/utils';\n\nexport const getWeekOrDayEventStyles = (\n  event: OrderedCalendarEvent,\n  timeDuration: number,\n  dayIndex: number,\n  overlapOffset: number,\n  isActive: boolean\n) => {\n  const timeColumnOffset = dayIndex === 0 ? 6 : 0;\n\n  return {\n    gridColumnStart: dayIndex + 1,\n    gridRowStart: event.start && event.start.hour() * 4 + Math.round(event.start.minute() / 15) + 1,\n    gridRowEnd: event.end && event.end.hour() * 4 + Math.round(event.end.minute() / 15) + 1,\n    height: 12 * ((timeDuration || 60) / 15) - 2,\n    borderWidth: event.indent > 0 ? (timeDuration > 30 ? '1px' : '0.5px') : 0,\n    marginLeft: overlapOffset * event.indent + timeColumnOffset,\n    width: `calc(100% - ${overlapOffset * (event.indent + 1) + timeColumnOffset}px)`,\n    zIndex: isActive ? 100 : 1 + event.order,\n    ...getBackgroundFromGroups(event.groups),\n  };\n};\n","import dayjs from 'dayjs';\n\nimport './AllDayEvent.css';\n\nimport { getClipPath, getOverflowArrows } from './utils';\nimport { CalendarEvent, MinMaxDatesInView } from '~/types';\nimport { getBackgroundFromGroups } from '~/utils';\n\ninterface AllDayEventProps {\n  date: dayjs.Dayjs;\n  event: CalendarEvent;\n  minMaxDatesInView?: MinMaxDatesInView;\n  isCompact: boolean;\n  isInOverflow: boolean;\n}\n\nexport function AllDayEvent({\n  date,\n  event,\n  minMaxDatesInView,\n  isCompact,\n  isInOverflow,\n}: AllDayEventProps) {\n  // Calculate arrows for display in overflow popover\n  const overflowArrows = getOverflowArrows(\n    isInOverflow,\n    date,\n    event.start,\n    event.end,\n    minMaxDatesInView\n  );\n\n  // Event background color(s)\n  const clipPath = getClipPath(overflowArrows);\n  const colorstyles = getBackgroundFromGroups(event.groups);\n\n  return (\n    <div className=\"events-calendar-all-day-event\" style={{ ...colorstyles, clipPath }}>\n      <div className=\"events-calendar-all-day-event-content\" data-sm={isCompact}>\n        <span className=\"events-calendar-all-day-event-text\" data-arrows={overflowArrows}>\n          {event.title}\n        </span>\n      </div>\n    </div>\n  );\n}\n","import './TimeEvent.css';\n\nimport { CalendarEvent } from '~/types';\nimport { DEFAULT_COLOR, getBackgroundFromGroups } from '~/utils';\n\ninterface TimeEventProps {\n  event: CalendarEvent;\n  isCompact: boolean;\n}\n\nexport function TimeEvent({ event, isCompact }: TimeEventProps) {\n  // Destructure event\n  const { title, start, groups } = event;\n\n  // Event background color(s)\n  const colorStyles = getBackgroundFromGroups(groups);\n  const eventColors = groups?.map((g) => g.color).filter(Boolean) ?? [];\n  const borderStyle = { border: `1px solid ${eventColors[0] ?? DEFAULT_COLOR}` };\n\n  return (\n    <div className=\"events-calendar-time\" data-sm={isCompact} style={borderStyle}>\n      <div className=\"events-calendar-time-dot\" style={colorStyles}></div>\n      <div className=\"events-calendar-time-text\">{start.format('h:mma')}</div>\n      <span className=\"events-calendar-time-label\">{title}</span>\n    </div>\n  );\n}\n","import { Dayjs } from 'dayjs';\nimport { Dispatch } from 'react';\nimport { getPlaceholderEvent, getTimeDiff, returnValidStartEnd } from '../utils';\nimport { CalendarAction, CalendarState, EventEditProps, MouseEventHandler } from '~/types';\n\ninterface useMouseEventProps {\n  enableDragCreation: boolean;\n  dispatch: Dispatch<CalendarAction>;\n  state: CalendarState;\n  onEventCreate?: (props: EventEditProps) => void;\n}\n\nconst updatePlaceholder = ({\n  isTimeEvent,\n  firstClickDate,\n  start,\n  date,\n  dispatch,\n}: {\n  isTimeEvent: boolean;\n  firstClickDate: Dayjs;\n  start: Dayjs;\n  date: Dayjs;\n  dispatch: Dispatch<CalendarAction>;\n}) => {\n  if (isTimeEvent) {\n    const tempStart =\n      getTimeDiff(firstClickDate, date) < 0\n        ? returnValidStartEnd(start, firstClickDate.add(15, 'minute'))[1]\n        : firstClickDate;\n    const tempEnd = start.hour(date.hour()).minute(date.minute());\n    if (Math.abs(getTimeDiff(tempStart, date)) >= 15) {\n      const updatedEvent = getPlaceholderEvent(tempStart, tempEnd, true);\n      dispatch({ type: 'update_event', event: updatedEvent });\n    }\n  } else {\n    const updatedEvent = getPlaceholderEvent(firstClickDate, date);\n    dispatch({ type: 'update_event', event: updatedEvent });\n  }\n};\n\nexport const useMouseEvent = ({\n  enableDragCreation,\n  dispatch,\n  state,\n  onEventCreate,\n}: useMouseEventProps) => {\n  // If view only calendar, only close popovers on mousedown\n  if (!enableDragCreation) {\n    return (e: React.MouseEvent) => {\n      if (e.type === 'mousedown') dispatch({ type: 'reset_calendar' });\n    };\n  }\n\n  // Popover handler\n  const openPopover = () => dispatch({ type: 'open_popover' });\n  const reset = () => dispatch({ type: 'reset_calendar' });\n\n  const mouseEventHandler: MouseEventHandler = (e, date, isTimeEvent, placeholderRef) => {\n    const { dragActive, firstClickDate, placeholderEvent } = state;\n    const { start } = placeholderEvent;\n\n    // Reset drag event if anything other than left click triggered\n    if (e.button !== 0) {\n      if (dragActive) dispatch({ type: 'event_create_stop' });\n      return;\n    }\n\n    switch (e.type) {\n      case 'mousedown': {\n        if (state.eventAnchor || state.overflowIsOpen) {\n          dispatch({ type: 'reset_calendar' });\n          return;\n        }\n\n        const updatedEvent = getPlaceholderEvent(date, date, isTimeEvent, true);\n        dispatch({\n          type: 'event_create_start',\n          date,\n          event: updatedEvent,\n          anchor: placeholderRef.current,\n        });\n        break;\n      }\n      case 'mouseenter': {\n        if (e.buttons !== 1 || !dragActive || !firstClickDate) return;\n        updatePlaceholder({ isTimeEvent, firstClickDate, start, date, dispatch });\n        break;\n      }\n      case 'mouseup': {\n        if (!dragActive) return;\n\n        onEventCreate &&\n          onEventCreate({\n            clickedEvent: state.clickedEvent,\n            newEvent: state.placeholderEvent,\n            eventRef: placeholderRef.current!,\n            openPopover,\n            reset,\n          });\n\n        dispatch({ type: 'event_create_end', anchor: placeholderRef.current });\n      }\n    }\n  };\n  return mouseEventHandler;\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\ntype ObserverRect = Omit<DOMRectReadOnly, 'toJSON'>;\n\nconst defaultState: ObserverRect = {\n  x: 0,\n  y: 0,\n  width: 0,\n  height: 0,\n  top: 0,\n  left: 0,\n  bottom: 0,\n  right: 0,\n};\n\nexport function useResizeObserver<T extends HTMLDivElement = HTMLDivElement>(\n  options?: ResizeObserverOptions\n) {\n  const frameID = useRef(0);\n  const ref = useRef<T>(null);\n\n  const [rect, setRect] = useState<ObserverRect>(defaultState);\n\n  const observer = useMemo(\n    () =>\n      typeof window !== 'undefined'\n        ? new ResizeObserver((entries: ResizeObserverEntry[]) => {\n            const entry = entries[0];\n\n            if (entry) {\n              cancelAnimationFrame(frameID.current);\n\n              frameID.current = requestAnimationFrame(() => {\n                if (ref.current) {\n                  setRect(entry.contentRect);\n                }\n              });\n            }\n          })\n        : null,\n    []\n  );\n\n  useEffect(() => {\n    if (ref.current) {\n      observer?.observe(ref.current, options);\n    }\n\n    return () => {\n      observer?.disconnect();\n\n      if (frameID.current) {\n        cancelAnimationFrame(frameID.current);\n      }\n    };\n  }, [ref.current]);\n\n  return [ref!, rect] as const;\n}\n\nexport function useElementSize<T extends HTMLDivElement = HTMLDivElement>(\n  options?: ResizeObserverOptions\n) {\n  const [ref, { width, height }] = useResizeObserver<T>(options);\n  return { ref, width, height };\n}\n","'use client';\n\nimport { Dispatch, MouseEvent, RefObject, useState } from 'react';\nimport { flip, offset, shift, useDismiss, useFloating, useInteractions } from '@floating-ui/react';\nimport { CalendarAction, CalendarEvent, CalendarState } from '~/types';\n\ninterface useCalendarEventProps<T> {\n  dispatch: Dispatch<CalendarAction>;\n  event: CalendarEvent<T>;\n  isInOverflow: boolean;\n  hasContextMenu: boolean;\n  state: CalendarState;\n}\n\nexport function useCalendarEvent<T>({\n  dispatch,\n  event,\n  isInOverflow,\n  hasContextMenu,\n  state,\n}: useCalendarEventProps<T>) {\n  // Context menu state\n  const [contextIsOpen, setContextIsOpen] = useState(false);\n  const closeContextMenu = () => setContextIsOpen(false);\n\n  // Constants\n  const isActive = event.id !== null && state.clickedEvent?.id === event.id;\n\n  const { refs, floatingStyles, context } = useFloating({\n    open: contextIsOpen,\n    onOpenChange: setContextIsOpen,\n    middleware: [\n      offset({ mainAxis: 5, alignmentAxis: 4 }),\n      flip({\n        fallbackPlacements: ['left-start'],\n      }),\n      shift({ padding: 10 }),\n    ],\n    placement: 'right-start',\n    // strategy: 'fixed',\n    // whileElementsMounted: autoUpdate,\n  });\n\n  const dismiss = useDismiss(context);\n\n  const { getFloatingProps } = useInteractions([dismiss]);\n\n  // Handle event right click (context menu)\n  const handleContextMenu = (e: MouseEvent, eventRef: RefObject<HTMLDivElement | null>) => {\n    if (!hasContextMenu) return;\n    e.preventDefault();\n\n    if (state.popoverIsOpen || (state.overflowIsOpen && !isInOverflow)) return;\n\n    refs.setPositionReference({\n      getBoundingClientRect() {\n        return {\n          width: 0,\n          height: 0,\n          x: e.clientX,\n          y: e.clientY,\n          top: e.clientY,\n          right: e.clientX,\n          bottom: e.clientY,\n          left: e.clientX,\n        };\n      },\n    });\n\n    dispatch({ type: 'open_context_menu', event, anchor: eventRef.current });\n    setContextIsOpen(true);\n  };\n\n  return {\n    handleContextMenu,\n    isActive,\n    contextIsOpen,\n    refs,\n    floatingStyles,\n    getFloatingProps,\n    closeContextMenu,\n  };\n}\n","'use client';\n\nimport dayjs, { Dayjs } from 'dayjs';\nimport { Dispatch, SetStateAction, useEffect, useReducer, useState } from 'react';\nimport { CalendarAction, CalendarState, CalendarView } from '../types';\nimport { DEFAULT_STATE, reducer } from '~/state';\n\nexport type EventsCalendarObject = {\n  activeDate: Dayjs;\n  setActiveDate: Dispatch<SetStateAction<Dayjs>>;\n  view: CalendarView;\n  setView: Dispatch<SetStateAction<CalendarView>>;\n  state: CalendarState;\n  dispatch: Dispatch<CalendarAction>;\n};\n\nexport type useEventsCalendarProps = {\n  isInitialised?: boolean;\n  initialDate?: string | number | Date | Dayjs;\n  initialView?: CalendarView;\n  closeOnClickOutside?: boolean;\n};\n\nexport function useEventsCalendar({\n  isInitialised = false,\n  initialDate = dayjs(),\n  initialView = 'month',\n  closeOnClickOutside = true,\n}: Partial<useEventsCalendarProps> = {}): EventsCalendarObject {\n  const [activeDate, setActiveDate] = useState(dayjs(initialDate));\n  const [view, setView] = useState<CalendarView>(initialView);\n\n  const [state, dispatch] = useReducer(reducer, DEFAULT_STATE);\n\n  // Reset calendar on click outside of the react component\n  useEffect(() => {\n    if (!closeOnClickOutside || isInitialised) return;\n    const handleClose = () => dispatch({ type: 'reset_calendar' });\n\n    window.addEventListener('click', handleClose);\n    return () => {\n      window.removeEventListener('click', handleClose);\n    };\n  }, [dispatch, isInitialised, closeOnClickOutside]);\n\n  return {\n    activeDate,\n    setActiveDate,\n    view,\n    setView,\n    state,\n    dispatch,\n  };\n}\n","import { CalendarState } from '../types';\nimport { EMPTY_EVENT } from './EMPTY_EVENT';\n\nexport const DEFAULT_STATE: CalendarState = {\n  // View/edit event\n  clickedEvent: EMPTY_EVENT,\n  popoverIsOpen: false,\n  eventAnchor: null,\n\n  // Drag creation\n  dragActive: false,\n  firstClickDate: null,\n  placeholderEvent: EMPTY_EVENT,\n\n  // Event Drag & drop\n  dragStartOffset: null,\n  eventDragActive: false,\n\n  // Overflow Popover\n  overflowAnchor: null,\n  overflowIsOpen: false,\n};\n","import { DEFAULT_STATE } from './DEFAULT_STATE';\nimport { EMPTY_EVENT } from './EMPTY_EVENT';\nimport { CalendarAction, CalendarState } from '~/types';\n\nexport function reducer(state: CalendarState, action: CalendarAction): CalendarState {\n  switch (action.type) {\n    // Reset to deafult state\n    case 'reset_calendar': {\n      return DEFAULT_STATE;\n    }\n\n    // Overflow\n    case 'open_overflow': {\n      return {\n        ...state,\n        ...DEFAULT_STATE,\n\n        overflowIsOpen: true,\n        overflowAnchor: action.anchor || state.overflowAnchor,\n      };\n    }\n\n    // Popover\n    case 'open_popover': {\n      return {\n        ...state,\n        popoverIsOpen: true,\n      };\n    }\n\n    // Context menu\n    case 'open_context_menu': {\n      return {\n        ...state,\n        clickedEvent: action.event || state.clickedEvent,\n        eventAnchor: action.anchor || state.eventAnchor,\n      };\n    }\n\n    // Calendar event interaction\n    case 'set_clicked_event': {\n      return {\n        ...state,\n        clickedEvent: action.event || state.clickedEvent,\n        eventAnchor: action.anchor || state.eventAnchor,\n        placeholderEvent: EMPTY_EVENT,\n      };\n    }\n\n    // Update event\n    case 'update_event': {\n      return {\n        ...state,\n        dragStartOffset: action.dragStartOffset ?? state.dragStartOffset,\n        placeholderEvent: { ...state.placeholderEvent, ...action.event, id: null },\n      };\n    }\n\n    // Drag creation\n    case 'event_create_start': {\n      return {\n        ...state,\n        dragActive: true,\n        firstClickDate: action.date || state.firstClickDate,\n        placeholderEvent: { ...state.placeholderEvent, ...action.event, isActive: true },\n        eventAnchor: action.anchor || state.eventAnchor,\n      };\n    }\n    case 'event_create_end': {\n      return {\n        ...state,\n        dragActive: false,\n        firstClickDate: null,\n        placeholderEvent: { ...state.placeholderEvent, isActive: true },\n        eventAnchor: action.anchor || state.eventAnchor,\n      };\n    }\n    case 'event_create_stop': {\n      return {\n        ...state,\n        dragActive: false,\n        firstClickDate: null,\n        clickedEvent: EMPTY_EVENT,\n        placeholderEvent: EMPTY_EVENT,\n        eventDragActive: false,\n      };\n    }\n\n    // Event drag & drop rescheduling\n    case 'event_reschedule_start': {\n      return {\n        ...state,\n        eventDragActive: true,\n        clickedEvent: action.event || state.clickedEvent,\n        placeholderEvent: {\n          ...state.placeholderEvent,\n          order: 0,\n          ...action.event,\n          id: null,\n          isActive: true,\n        },\n      };\n    }\n    case 'event_reschedule_end': {\n      return {\n        ...state,\n        eventDragActive: false,\n        dragStartOffset: null,\n        eventAnchor: action.anchor || state.eventAnchor,\n      };\n    }\n\n    default:\n      console.log(`Invalid action type ${action.type} passed to calendar reducer`);\n      return state;\n  }\n}\n","import { EventsCalendarObject, useEventsCalendar } from './useEventsCalendar';\n\nexport function useInitEventsCalendar(calendar?: EventsCalendarObject): EventsCalendarObject {\n  const isInitialised = !!calendar;\n  const defaultCalendar = useEventsCalendar({ isInitialised });\n\n  return calendar || defaultCalendar;\n}\n","'use client';\n\nimport { ReactNode, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useBindPopover } from './useBindPopover';\n\ninterface PopoverContentProps {\n  anchor: Element;\n  zIndex: number;\n  children: ReactNode;\n}\n\nexport function PopoverContent({ anchor, zIndex, children }: PopoverContentProps) {\n  const styles = useRef({});\n  const { refs, floatingStyles } = useBindPopover({ anchor });\n\n  // Only apply repositioning styles after element is mounted\n  useEffect(() => {\n    setTimeout(() => {\n      styles.current = { transitionDuration: '250ms', transitionProperty: 'all' };\n    }, 100);\n  }, []);\n\n  return createPortal(\n    <div ref={refs.setFloating} style={{ ...floatingStyles, ...styles.current, zIndex }}>\n      <div onClick={(e) => e.stopPropagation()}>{children}</div>\n    </div>,\n    document.body\n  );\n}\n","'use client';\n\nimport { Platform } from '@floating-ui/core';\nimport {\n  autoPlacement,\n  autoUpdate,\n  detectOverflow,\n  ElementRects,\n  Elements,\n  hide,\n  MiddlewareData,\n  offset,\n  Placement,\n  Strategy,\n  useFloating,\n} from '@floating-ui/react-dom';\n\n// Constants\nconst padding = 32;\nconst padding_x = 32;\nconst padding_y = 16;\n\ninterface useBindPopoverProps {\n  anchor: Element | null;\n}\n\nexport function useBindPopover({ anchor }: useBindPopoverProps) {\n  const preventViewportOverflow = {\n    name: 'preventViewportOverflow',\n    async fn(state: {\n      platform: Platform;\n      placement: Placement;\n      strategy: Strategy;\n      x: number;\n      y: number;\n      initialPlacement: Placement;\n      middlewareData: MiddlewareData;\n      rects: ElementRects;\n      elements: Elements;\n    }) {\n      const overflow = await detectOverflow(state);\n\n      // If overflows > 0 (there is an overflow), recalculate position\n      let xPosition = state.x;\n      if (overflow.left > 0) xPosition = state.x + overflow.left + padding_x;\n      if (overflow.right > 0) xPosition = state.x - overflow.right - padding_x;\n\n      let yPosition = state.y;\n      if (overflow.top > 0) yPosition = state.y + overflow.top + padding_y;\n      if (overflow.bottom > 0) yPosition = state.y - overflow.bottom - padding_y;\n\n      // If reference el hidden (due to scrolling), only reassign x position\n      if (state.middlewareData.hide?.referenceHidden) return { ...state, x: xPosition };\n\n      return { ...state, x: xPosition, y: yPosition };\n    },\n  };\n\n  const { refs, floatingStyles } = useFloating({\n    elements: {\n      reference: anchor,\n    },\n    placement: 'bottom',\n    strategy: 'fixed',\n    whileElementsMounted: autoUpdate,\n    middleware: [\n      hide(),\n      offset(8),\n      autoPlacement({\n        crossAxis: true,\n        padding: padding,\n      }),\n      preventViewportOverflow,\n    ],\n  });\n\n  return { refs, floatingStyles };\n}\n","'use client';\n\nimport { PopoverContent } from './PopoverContent';\n\ninterface PopoverProps {\n  anchor: HTMLDivElement;\n  isOpen: boolean;\n  zIndex?: number;\n  children: React.ReactNode;\n}\n\nexport function EventsCalendarPopover({ anchor, isOpen, zIndex = 1, children }: PopoverProps) {\n  if (!isOpen || !anchor) return null;\n  return (\n    <PopoverContent anchor={anchor} zIndex={zIndex}>\n      {children}\n    </PopoverContent>\n  );\n}\n","'use client';\n\nimport dayjs from 'dayjs';\nimport { Dispatch } from 'react';\n\nimport './CellHeader.css';\n\nimport { ShowMoreText } from './ShowMoreText';\nimport { CalendarAction, CalendarState, DateRecord } from '~/types';\n\ninterface CellHeaderProps {\n  dayRecord: DateRecord;\n  dispatch: Dispatch<CalendarAction>;\n  isCompact: boolean;\n  numOverflowEvents: number;\n  state: CalendarState;\n}\n\nexport function CellHeader({\n  dayRecord,\n  dispatch,\n  isCompact,\n  numOverflowEvents,\n  state,\n}: CellHeaderProps) {\n  const { date, isCurrentMonth } = dayRecord;\n\n  const isToday = date.isSame(dayjs(), 'day');\n  const textColour = isToday ? 'white' : isCurrentMonth ? 'dark' : 'dim';\n\n  return (\n    <div className=\"events-calendar-month-cell-header\">\n      <div className=\"events-calendar-month-cell-date-container\" data-today={isToday}>\n        <span\n          className=\"events-calendar-month-cell-date-label\"\n          data-color={textColour}\n          data-sm={isCompact}\n        >\n          {date.date()}\n        </span>\n      </div>\n      <ShowMoreText\n        date={date}\n        dispatch={dispatch}\n        isCompact={isCompact}\n        numOverflowEvents={numOverflowEvents}\n        state={state}\n      />\n    </div>\n  );\n}\n","'use client';\n\nimport { Dayjs } from 'dayjs';\nimport { Dispatch, MouseEvent, useRef } from 'react';\n\nimport './ShowMoreText.css';\n\nimport { CalendarAction, CalendarState } from '~/types';\n\ninterface ShowMoreTextProps {\n  date: Dayjs;\n  dispatch: Dispatch<CalendarAction>;\n  isCompact: boolean;\n  numOverflowEvents: number;\n  state: CalendarState;\n}\n\nexport function ShowMoreText({\n  date,\n  dispatch,\n  isCompact,\n  numOverflowEvents,\n  state,\n}: ShowMoreTextProps) {\n  const ref = useRef<HTMLDivElement>(null);\n\n  const handleClick = (e: MouseEvent) => {\n    if (state.overflowIsOpen && e.target === state.overflowAnchor) {\n      dispatch({ type: 'reset_calendar' });\n    } else {\n      dispatch({ type: 'open_overflow', date, anchor: ref.current });\n    }\n  };\n\n  if (!numOverflowEvents) return;\n\n  return (\n    <div\n      className=\"events-calendar-show-more-text-container\"\n      data-sm={isCompact}\n      data-date={date.format('DD-MMM-YYYY')}\n      onClick={handleClick}\n      onMouseDown={(e) => e.stopPropagation()}\n      ref={ref}\n    >\n      <span className=\"events-calendar-show-more-text-label events-calendar-sm-only\">{`+${numOverflowEvents}`}</span>\n      <span className=\"events-calendar-show-more-text-label events-calendar-lg-only\">\n        {numOverflowEvents} more\n      </span>\n    </div>\n  );\n}\n","import { Dayjs } from 'dayjs';\nimport React, { Dispatch, ReactNode, RefObject } from 'react';\n\nimport './EventCell.css';\n\nimport { CellHeader } from './CellHeader';\nimport { ShowMoreText } from './ShowMoreText';\nimport { Event } from '~/components';\nimport {\n  CalendarAction,\n  CalendarEvent,\n  CalendarState,\n  DateRecord,\n  EventClickArgs,\n  EventEditProps,\n  EventsCalendarContextMenuProps,\n  MinMaxDatesInView,\n  MouseEventHandler,\n  OrderedCalendarEvent,\n} from '~/types';\nimport { filterByDate, getVisibleEvents, isBetween, updateEvent } from '~/utils';\n\ninterface CellContainerProps<T> {\n  EVENT_LIMIT: number;\n  enableRescheduling: boolean;\n  compact: boolean;\n  dayRecord: DateRecord;\n  dispatch: Dispatch<CalendarAction>;\n  handleMouseEvent: MouseEventHandler;\n  headerHeight?: number | string;\n  isInWeekHeader?: boolean;\n  isInDayHeader?: boolean;\n  minMaxDatesInView: MinMaxDatesInView;\n  onEventClick?: (props: EventClickArgs<T>) => void;\n  onEventReschedule?: (props: EventEditProps) => void;\n  orderedEvents: OrderedCalendarEvent<T>[];\n  placeholderRef: RefObject<HTMLDivElement | null>;\n  renderContextMenu?: (props: EventsCalendarContextMenuProps) => ReactNode;\n  state: CalendarState;\n}\n\nconst getPlaceholderActiveState = (\n  placeholderEvent: CalendarEvent,\n  date: Dayjs,\n  isInHeader: boolean = false\n) => {\n  const { isActive, isAllDay, start, end } = placeholderEvent;\n  return (\n    isActive &&\n    (!isInHeader || isAllDay) &&\n    isBetween(date, start, end) &&\n    (date.day() === 0 || date.isSame(start, 'day'))\n  );\n};\n\nexport function CellContainer<T>({\n  EVENT_LIMIT,\n  enableRescheduling,\n  compact,\n  dayRecord,\n  dispatch,\n  handleMouseEvent,\n  headerHeight = '100%', // Explicit cell height for week header\n  isInWeekHeader = false,\n  isInDayHeader = false,\n  minMaxDatesInView,\n  onEventClick,\n  onEventReschedule,\n  orderedEvents,\n  placeholderRef,\n  renderContextMenu,\n  state,\n}: CellContainerProps<T>) {\n  const { date } = dayRecord;\n\n  // Calculate visible events within this cell\n  const eventsByDate = filterByDate(orderedEvents, date);\n  const visibleEvents = getVisibleEvents(eventsByDate, date, EVENT_LIMIT, isInDayHeader);\n\n  // Add button to show events that do not fit in cell, if required\n  const numOverflowEvents = eventsByDate.reduce((a, c) => a + (c.order >= EVENT_LIMIT ? 1 : 0), 0);\n  const showOverflowButton = (isInDayHeader || isInWeekHeader) && numOverflowEvents > 0;\n\n  // Add placeholder event to events when required\n  const showPlaceholder = getPlaceholderActiveState(\n    state.placeholderEvent,\n    date,\n    isInWeekHeader || isInDayHeader\n  );\n  if (showPlaceholder) visibleEvents.push(state.placeholderEvent as OrderedCalendarEvent<T>);\n\n  // Popover handler\n  const openPopover = () => dispatch({ type: 'open_popover' });\n  const reset = () => dispatch({ type: 'reset_calendar' });\n\n  // Cell handlers\n  const handleMouseDown = (e: React.MouseEvent) => {\n    handleMouseEvent(e, date, false, placeholderRef);\n  };\n  const handleMouseEnter = (e: React.MouseEvent) => {\n    if (state.eventDragActive) updateEvent({ state, dispatch, date, view: 'month' });\n    handleMouseEvent(e, date, false, placeholderRef);\n  };\n  const handleMouseUp = (e: React.MouseEvent) => {\n    if (state.eventDragActive) {\n      dispatch({ type: 'event_reschedule_end', anchor: placeholderRef.current });\n      onEventReschedule?.({\n        clickedEvent: state.clickedEvent,\n        newEvent: state.placeholderEvent,\n        eventRef: placeholderRef.current!,\n        openPopover,\n        reset,\n      });\n    }\n    handleMouseEvent(e, date, false, placeholderRef);\n  };\n\n  return (\n    <>\n      <div\n        className=\"events-calendar-month-cell\"\n        data-border={!isInDayHeader && date.day() !== 6}\n        onMouseDown={handleMouseDown}\n        onMouseEnter={handleMouseEnter}\n        onMouseUp={handleMouseUp}\n        style={{ height: headerHeight, cursor: state.eventDragActive ? 'grabbing' : 'auto' }}\n      >\n        {/*  If month view, list cell header and overflow text */}\n        {!isInWeekHeader && !isInDayHeader && (\n          <CellHeader\n            state={state}\n            dispatch={dispatch}\n            isCompact={compact}\n            dayRecord={dayRecord}\n            numOverflowEvents={numOverflowEvents}\n          />\n        )}\n        <div\n          className=\"events-calendar-month-cell-content\"\n          data-week={isInWeekHeader || isInDayHeader}\n        >\n          {showOverflowButton && (\n            <ShowMoreText\n              date={date}\n              state={state}\n              dispatch={dispatch}\n              isCompact={compact}\n              numOverflowEvents={numOverflowEvents}\n            />\n          )}\n        </div>\n      </div>\n      {/* Render events (which may span multiple cells) */}\n      {visibleEvents.map((event) => (\n        <Event\n          key={event.id}\n          date={date}\n          view=\"month\"\n          state={state}\n          event={event}\n          compact={compact}\n          dispatch={dispatch}\n          onEventClick={onEventClick}\n          isInDayHeader={isInDayHeader}\n          isInWeekHeader={isInWeekHeader}\n          placeholderRef={placeholderRef}\n          renderContextMenu={renderContextMenu}\n          minMaxDatesInView={minMaxDatesInView}\n          enableRescheduling={enableRescheduling}\n        />\n      ))}\n    </>\n  );\n}\n","import './CircularLoader.css';\n\nexport function CircularLoader({ visible }: { visible: boolean }) {\n  if (!visible) return;\n  return (\n    <div className=\"events-calendar-loader-wrapper\">\n      <span className=\"events-calendar-loader\"></span>\n    </div>\n  );\n}\n","import './HeaderButton.css';\n\ninterface HeaderButtonProps {\n  isGroupButton?: boolean;\n  active?: boolean;\n  onClick?: () => void;\n  variant?: 'outline' | 'subtle';\n  children: React.ReactNode;\n}\n\nexport function HeaderButton({\n  isGroupButton,\n  active = false,\n  onClick = () => null,\n  variant,\n  children,\n}: HeaderButtonProps) {\n  return (\n    <button\n      type=\"button\"\n      onClick={onClick}\n      data-group={isGroupButton}\n      data-active={active}\n      data-variant={variant}\n      className=\"events-calendar-header-button\"\n    >\n      {children}\n    </button>\n  );\n}\n","'use client';\n\nimport { Dispatch, ReactNode, SetStateAction } from 'react';\n\nimport './Header.css';\n\nimport { HeaderButton } from './HeaderButton';\nimport { CalendarView } from '~/types';\nimport { CALENDAR_VIEWS } from '~/utils';\n\ninterface ControlsProps {\n  hideViewToggle?: boolean;\n  views: CalendarView[];\n  view: CalendarView;\n  setView: Dispatch<SetStateAction<CalendarView>>;\n  children: ReactNode;\n}\n\nexport function Controls({ hideViewToggle, views, setView, view, children }: ControlsProps) {\n  if (views.length < 1 && !children) return;\n\n  const viewsToDisplay = CALENDAR_VIEWS.filter((validView) => views.includes(validView));\n\n  return (\n    <div className=\"events-calendar-header-controls\">\n      {!hideViewToggle && viewsToDisplay.length > 1 && (\n        <div className=\"events-calendar-button-group\">\n          {viewsToDisplay.map((viewLabel) => (\n            <HeaderButton\n              key={viewLabel}\n              isGroupButton\n              active={view === viewLabel}\n              onClick={() => setView(viewLabel)}\n            >\n              {viewLabel}\n            </HeaderButton>\n          ))}\n        </div>\n      )}\n      {children}\n    </div>\n  );\n}\n","'use client';\n\nimport dayjs from 'dayjs';\nimport { Dispatch, SetStateAction } from 'react';\n\nimport './Header.css';\n\nimport { IconChevronLeft, IconChevronRight } from '../icons';\nimport { HeaderButton } from './HeaderButton';\nimport { CalendarView } from '~/types';\n\nconst getHeaderTitle = (currDate: dayjs.Dayjs, view: CalendarView) => {\n  const weekStart = currDate.startOf('week');\n  const weekEnd = currDate.endOf('week');\n  return view === 'year'\n    ? currDate.format('YYYY')\n    : view === 'month'\n      ? currDate.format('MMMM YYYY')\n      : view === 'week'\n        ? `${weekStart.format('MMM DD')} - ${weekEnd.format('MMM DD, YYYY')}`\n        : currDate.format('D MMMM, YYYY');\n};\n\ninterface NavigationProps {\n  activeDate: dayjs.Dayjs;\n  setActiveDate: Dispatch<SetStateAction<dayjs.Dayjs>>;\n  view: CalendarView;\n}\n\nexport function Navigation({ activeDate, setActiveDate, view }: NavigationProps) {\n  // Navigation handlers\n  const handleToday = () => setActiveDate(dayjs());\n  const handleNext = (increment: CalendarView) =>\n    setActiveDate((currDate) => currDate.add(1, increment));\n  const handlePrev = (increment: CalendarView) =>\n    setActiveDate((currDate) => currDate.subtract(1, increment));\n\n  return (\n    <div className=\"events-calendar-nav\">\n      <HeaderButton variant=\"outline\" onClick={handleToday}>\n        Today\n      </HeaderButton>\n      <div className=\"events-calendar-nav-actions\">\n        <HeaderButton variant=\"subtle\" onClick={() => handlePrev(view)}>\n          <IconChevronLeft size=\"1.5rem\" />\n        </HeaderButton>\n        <HeaderButton variant=\"subtle\" onClick={() => handleNext(view)}>\n          <IconChevronRight size=\"1.5rem\" />\n        </HeaderButton>\n      </div>\n      <span className=\"events-calendar-title\">{getHeaderTitle(activeDate, view)}</span>\n    </div>\n  );\n}\n","interface Props {\n  size?: string | number;\n  stroke?: string | number;\n}\n\nexport function IconChevronLeft({ size = '24', stroke = '2' }: Props) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={stroke}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      className=\"icon icon-tabler icons-tabler-outline icon-tabler-chevron-left\"\n    >\n      <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n      <path d=\"M15 6l-6 6l6 6\" />\n    </svg>\n  );\n}\n","interface Props {\n  size?: string | number;\n  stroke?: string | number;\n}\n\nexport function IconChevronRight({ size = '24', stroke = '2' }: Props) {\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      stroke=\"currentColor\"\n      strokeWidth={stroke}\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      className=\"icon icon-tabler icons-tabler-outline icon-tabler-chevron-right\"\n    >\n      <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n      <path d=\"M9 6l6 6l-6 6\" />\n    </svg>\n  );\n}\n","'use client';\n\nimport dayjs from 'dayjs';\nimport { Dispatch, ReactNode, SetStateAction } from 'react';\n\nimport './Header.css';\n\nimport { Controls } from './Controls';\nimport { Navigation } from './Navigation';\nimport { CalendarView } from '~/types';\nimport { CALENDAR_VIEWS } from '~/utils';\n\ninterface HeaderProps {\n  activeDate: dayjs.Dayjs;\n  view?: CalendarView;\n  hideViewToggle?: boolean;\n  maxDate?: dayjs.Dayjs | null;\n  minDate?: dayjs.Dayjs | null;\n  onClick?: () => void;\n  setActiveDate: Dispatch<SetStateAction<dayjs.Dayjs>>;\n  setView?: Dispatch<SetStateAction<CalendarView>>;\n  views?: CalendarView[];\n  customControls?: ReactNode;\n}\nexport function Header({\n  activeDate,\n  onClick = () => null,\n  hideViewToggle,\n  setActiveDate,\n  setView = () => null,\n  views = [...CALENDAR_VIEWS],\n  view = 'month',\n  customControls,\n}: HeaderProps) {\n  return (\n    <div className=\"events-calendar-header\" onClick={onClick}>\n      <Navigation activeDate={activeDate} setActiveDate={setActiveDate} view={view} />\n      <Controls hideViewToggle={hideViewToggle} views={views} setView={setView} view={view}>\n        {customControls}\n      </Controls>\n    </div>\n  );\n}\n","'use client';\n\nimport { Dayjs } from 'dayjs';\nimport { Dispatch, ReactNode, RefObject, useMemo } from 'react';\n\nimport './TimeView.css';\n\nimport { HoursColumn, TimeBackground, TimeIndicator, TimeViewHeader } from './components';\nimport { useSetInitialScroll } from './hooks';\nimport { getEventsByDayMap, getWeekDates } from './utils';\nimport { Event } from '~/components';\nimport {\n  CalendarAction,\n  CalendarEvent,\n  CalendarState,\n  EventClickArgs,\n  EventEditProps,\n  EventsCalendarContextMenuProps,\n  MouseEventHandler,\n  OrderedCalendarEvent,\n} from '~/types';\nimport { isBetween } from '~/utils';\n\ninterface TimeViewProps<T> {\n  view: 'day' | 'week';\n  enableRescheduling: boolean;\n  compact: boolean;\n  activeDate: Dayjs;\n  dispatch: Dispatch<CalendarAction>;\n  events: CalendarEvent<T>[];\n  handleMouseEvent: MouseEventHandler;\n  handleStopDrag: () => void;\n  placeholderRef: RefObject<HTMLDivElement | null>;\n  onEventClick?: (props: EventClickArgs<T>) => void;\n  onEventReschedule?: (props: EventEditProps) => void;\n  renderContextMenu?: (props: EventsCalendarContextMenuProps) => ReactNode;\n  state: CalendarState;\n}\n\nexport function TimeView<T>({\n  view,\n  activeDate,\n  compact,\n  dispatch,\n  enableRescheduling,\n  events,\n  handleMouseEvent,\n  handleStopDrag,\n  onEventClick,\n  onEventReschedule,\n  placeholderRef,\n  renderContextMenu,\n  state,\n}: TimeViewProps<T>) {\n  // Constants\n  const isDayView = view === 'day';\n  const isWeekView = view === 'week';\n\n  // Split events into all day / timed\n  const allDayEvents = events.filter((event) => event.isAllDay);\n  const timeEvents = events.filter((event) => !event.isAllDay);\n\n  // Scroll viewport to current time\n  const viewportRef = useSetInitialScroll();\n\n  // Get week days\n  const weekDatesArray = useMemo(() => getWeekDates(activeDate, view), [activeDate, view]);\n  const minMaxDatesInView = {\n    first: isDayView ? activeDate : weekDatesArray[0].date,\n    last: isDayView ? activeDate : weekDatesArray[6].date,\n  };\n\n  // Create a map of events by day\n  const dayMap = useMemo(\n    () => getEventsByDayMap<T>(weekDatesArray, timeEvents),\n    [timeEvents, weekDatesArray]\n  );\n\n  return (\n    <div className=\"events-calendar-time-view\">\n      <TimeViewHeader\n        allDayEvents={allDayEvents}\n        compact={compact}\n        dispatch={dispatch}\n        enableRescheduling={enableRescheduling}\n        handleMouseEvent={handleMouseEvent}\n        handleStopDrag={handleStopDrag}\n        minMaxDatesInView={minMaxDatesInView}\n        onEventClick={onEventClick}\n        onEventReschedule={onEventReschedule}\n        placeholderRef={placeholderRef}\n        renderContextMenu={renderContextMenu}\n        state={state}\n        view={view}\n        weekDatesArray={weekDatesArray}\n      />\n      <div ref={viewportRef} className=\"events-calendar-time-view-scroll-wrapper\">\n        <div className=\"events-calendar-time-view-grid-wrapper\">\n          <HoursColumn />\n\n          <div\n            className=\"events-calendar-time-view-grid\"\n            data-isweekview={isWeekView}\n            onMouseEnter={handleStopDrag}\n            onMouseLeave={handleStopDrag}\n          >\n            <TimeBackground\n              activeDate={activeDate}\n              dispatch={dispatch}\n              handleMouseEvent={handleMouseEvent}\n              onEventReschedule={onEventReschedule}\n              placeholderRef={placeholderRef}\n              state={state}\n              view={view}\n            />\n\n            <TimeIndicator activeDate={activeDate} isDayView={isDayView} />\n\n            {/* Render events */}\n            {weekDatesArray.map(({ date }, dayIndex) => {\n              const orderedEvents = dayMap[dayIndex];\n\n              // Add placeholder event to events when required\n              const { isActive, isAllDay, start, end } = state.placeholderEvent;\n              const showPlaceholder = isActive && !isAllDay && isBetween(date, start, end);\n              if (showPlaceholder)\n                orderedEvents.push(state.placeholderEvent as OrderedCalendarEvent<T>);\n\n              return orderedEvents.map((event) => (\n                <Event\n                  date={date}\n                  dispatch={dispatch}\n                  enableRescheduling={enableRescheduling}\n                  event={event}\n                  key={event.id}\n                  onEventClick={onEventClick}\n                  placeholderRef={placeholderRef}\n                  renderContextMenu={renderContextMenu}\n                  state={state}\n                  view={view}\n                />\n              ));\n            })}\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n","import { HOURS } from '~/utils';\n\nimport './HoursColumn.css';\n\nexport function HoursColumn() {\n  return (\n    <div className=\"events-calendar-hours-column\">\n      {HOURS.map((hour) => (\n        <div className=\"events-calendar-hour\" key={hour}>\n          <span className=\"events-calendar-hour-label\">{hour}</span>\n        </div>\n      ))}\n    </div>\n  );\n}\n","import dayjs from 'dayjs';\n\nimport './TimeIndicator.css';\n\nconst NOW = dayjs();\n\nexport function TimeIndicator({\n  activeDate,\n  isDayView,\n}: {\n  activeDate: dayjs.Dayjs;\n  isDayView?: boolean;\n}) {\n  if (!activeDate.isSame(NOW, 'day')) return;\n\n  const gridColumn = isDayView ? 1 : NOW.day() + 1;\n  const gridRow = NOW.hour() * 4 + Math.round(NOW.minute() / 15) + 1;\n\n  return (\n    <div className=\"events-calendar-time-indicator\" style={{ gridColumn, gridRow }}>\n      <div className=\"events-calendar-time-indicator-dot\"></div>\n      <div className=\"events-calendar-time-indicator-line\"></div>\n    </div>\n  );\n}\n","'use client';\n\nimport { Dayjs } from 'dayjs';\nimport { Dispatch, RefObject } from 'react';\n\nimport './TimeBackground.css';\n\nimport {\n  CalendarAction,\n  CalendarState,\n  CalendarView,\n  EventEditProps,\n  MouseEventHandler,\n} from '~/types';\nimport { updateEvent } from '~/utils';\n\n// Functions\nconst buildIndexArr = (l: number) => {\n  return Array(l)\n    .fill(0)\n    .map((_, i) => i);\n};\nconst getActiveDateTime = (\n  activeDate: Dayjs,\n  day: number,\n  hour: number,\n  timeBlock: number,\n  view: CalendarView\n) => {\n  const startDate = view === 'day' ? activeDate : activeDate.startOf('week').add(day, 'd');\n  return startDate.hour(hour).minute(timeBlock * 15);\n};\n\ninterface TimeBackgroundProps {\n  view: 'day' | 'week';\n  activeDate: Dayjs;\n  handleMouseEvent: MouseEventHandler;\n  placeholderRef: RefObject<HTMLDivElement | null>;\n  state: CalendarState;\n  dispatch: Dispatch<CalendarAction>;\n  onEventReschedule?: (props: EventEditProps) => void;\n}\n\nexport function TimeBackground({\n  view,\n  activeDate,\n  handleMouseEvent,\n  placeholderRef,\n  state,\n  dispatch,\n  onEventReschedule,\n}: TimeBackgroundProps) {\n  // Build grid arrays\n  const daysArray = view === 'day' ? [0] : buildIndexArr(7);\n  const hoursArray = buildIndexArr(24);\n  const timeBlocksArray = buildIndexArr(4);\n\n  // Popover handler\n  const openPopover = () => dispatch({ type: 'open_popover' });\n  const reset = () => dispatch({ type: 'reset_calendar' });\n\n  return (\n    <>\n      {daysArray.map((day) =>\n        hoursArray.map((hour) =>\n          timeBlocksArray.map((timeBlock) => {\n            const date = getActiveDateTime(activeDate, day, hour, timeBlock, view);\n            return (\n              <div\n                className=\"events-calendar-time-background-cell\"\n                data-isweekview={view === 'week'}\n                key={`${day}${hour}${timeBlock}`}\n                onMouseDown={(e) => handleMouseEvent(e, date, true, placeholderRef)}\n                onMouseEnter={(e) => {\n                  if (state.eventDragActive) updateEvent({ state, dispatch, date, view });\n                  handleMouseEvent(e, date, true, placeholderRef);\n                }}\n                onMouseUp={(e) => {\n                  if (state.eventDragActive) {\n                    dispatch({ type: 'event_reschedule_end', anchor: placeholderRef.current });\n\n                    onEventReschedule?.({\n                      clickedEvent: state.clickedEvent,\n                      newEvent: state.placeholderEvent,\n                      eventRef: placeholderRef.current!,\n                      openPopover,\n                      reset,\n                    });\n                  }\n                  handleMouseEvent(e, date, true, placeholderRef);\n                }}\n                style={{\n                  gridColumnStart: day + 1,\n                  gridRow: `${hour * 4 + timeBlock + 1} / ${hour * 4 + timeBlock + 2}`,\n                  cursor: state.eventDragActive ? 'grabbing' : 'auto',\n                }}\n              ></div>\n            );\n          })\n        )\n      )}\n    </>\n  );\n}\n","'use client';\n\nimport { Dispatch, ReactNode, RefObject } from 'react';\n\nimport './TimeViewHeader.css';\n\nimport dayjs from 'dayjs';\nimport { CellContainer } from '~/components';\nimport {\n  CalendarAction,\n  CalendarEvent,\n  CalendarState,\n  DateRecord,\n  EventClickArgs,\n  EventEditProps,\n  EventsCalendarContextMenuProps,\n  MinMaxDatesInView,\n  MouseEventHandler,\n  OrderedCalendarEvent,\n} from '~/types';\nimport { arrangeWeekEvents, filterByDate, filterByWeek } from '~/utils';\n\n// Only show a max of two events in header\nconst EVENT_LIMIT = 2;\n\ninterface TimeViewHeaderProps<T> {\n  view: 'day' | 'week';\n  enableRescheduling: boolean;\n  compact: boolean;\n  allDayEvents: CalendarEvent<T>[];\n  dispatch: Dispatch<CalendarAction>;\n  handleMouseEvent: MouseEventHandler;\n  handleStopDrag: () => void;\n  minMaxDatesInView: MinMaxDatesInView;\n  placeholderRef: RefObject<HTMLDivElement | null>;\n  onEventClick?: (props: EventClickArgs<T>) => void;\n  onEventReschedule?: (props: EventEditProps) => void;\n  renderContextMenu?: (props: EventsCalendarContextMenuProps) => ReactNode;\n  state: CalendarState;\n  weekDatesArray: DateRecord[];\n}\n\nexport function TimeViewHeader<T>({\n  view,\n  enableRescheduling,\n  compact,\n  allDayEvents,\n  dispatch,\n  handleMouseEvent,\n  handleStopDrag,\n  minMaxDatesInView,\n  onEventClick,\n  onEventReschedule,\n  placeholderRef,\n  renderContextMenu,\n  state,\n  weekDatesArray,\n}: TimeViewHeaderProps<T>) {\n  const filteredEvents =\n    view === 'day'\n      ? filterByDate(allDayEvents, weekDatesArray[0].date)\n      : filterByWeek(allDayEvents, weekDatesArray[0].date);\n  const orderedEvents = arrangeWeekEvents(filteredEvents);\n  const totalEventsOnThisDate =\n    orderedEvents.length > 0\n      ? Math.max(...orderedEvents.map((x: OrderedCalendarEvent) => x.order + 1))\n      : 0;\n\n  // Calculate header height\n  const numEventsToShow = Math.min(totalEventsOnThisDate, EVENT_LIMIT + 1); // Include space for show more text\n  const heightOfEvent = compact ? 20 : 23;\n  const bottomPadding = numEventsToShow > 0 ? 8 : 0;\n  const headerHeight = heightOfEvent * numEventsToShow + bottomPadding;\n\n  return (\n    <div\n      className=\"events-calendar-time-view-header\"\n      data-isweekview={view === 'week'}\n      onMouseLeave={handleStopDrag}\n    >\n      {weekDatesArray.map((dayRecord, dayIndex) => {\n        const { date } = dayRecord;\n        const withHeaderBorder = view === 'week' || filteredEvents.length > 0;\n        return (\n          <div\n            className=\"events-calendar-time-view-header-cell\"\n            data-border={withHeaderBorder}\n            key={dayIndex}\n          >\n            {view === 'week' && (\n              <div\n                className=\"events-calendar-time-view-header-label\"\n                data-today={date.isSame(dayjs(), 'day')}\n                onMouseEnter={handleStopDrag}\n              >\n                {`${date.format('ddd')} ${date.format('DD')}`}\n              </div>\n            )}\n            <CellContainer\n              isInDayHeader={view === 'day'}\n              isInWeekHeader={view === 'week'}\n              EVENT_LIMIT={EVENT_LIMIT}\n              enableRescheduling={enableRescheduling}\n              compact={compact}\n              dayRecord={dayRecord}\n              dispatch={dispatch}\n              handleMouseEvent={handleMouseEvent}\n              headerHeight={headerHeight}\n              minMaxDatesInView={minMaxDatesInView}\n              onEventClick={onEventClick}\n              onEventReschedule={onEventReschedule}\n              orderedEvents={orderedEvents}\n              placeholderRef={placeholderRef}\n              renderContextMenu={renderContextMenu}\n              state={state}\n            />\n          </div>\n        );\n      })}\n    </div>\n  );\n}\n","import dayjs from 'dayjs';\nimport { useEffect, useRef } from 'react';\n\n// Constants\nconst PIXELS_PER_HOUR = 48;\nconst MINUTES_PER_HOUR = 60;\nconst NOW_IN_MINUTES = dayjs().diff(dayjs().startOf('day'), 'm');\nconst pixelsPerMinute = PIXELS_PER_HOUR / MINUTES_PER_HOUR;\n\ninterface Props {\n  minutesToScroll?: number;\n  offset?: number;\n}\n\nexport function useSetInitialScroll({\n  minutesToScroll = NOW_IN_MINUTES,\n  offset = 140,\n}: Partial<Props> = {}) {\n  const viewportRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (!viewportRef.current) return;\n\n    const offset8am = pixelsPerMinute * minutesToScroll - offset;\n    viewportRef.current.scrollTo({ top: offset8am });\n  }, [minutesToScroll, offset]);\n\n  return viewportRef;\n}\n","import { Dayjs } from 'dayjs';\nimport { DateRecord } from '~/types';\n\nexport const getWeekDates = (activeDate: Dayjs, view: 'day' | 'week') => {\n  if (view === 'day') return [{ date: activeDate }];\n\n  const startOfWeek = activeDate.startOf('week');\n  const startOfCalendarWeek = startOfWeek.subtract(startOfWeek.day(), 'd');\n  let tempDate = startOfCalendarWeek;\n  const datesArray: DateRecord[] = [];\n  for (let index = 0; index < 7; index++) {\n    datesArray.push({ date: tempDate, isCurrentMonth: tempDate.month() === activeDate.month() });\n    tempDate = tempDate.add(1, 'day');\n  }\n  return datesArray;\n};\n","import { CalendarEvent, DateRecord, OrderedCalendarEvent } from '~/types';\nimport { arrangeWeekdayEvents, filterByDate } from '~/utils';\n\nexport function getEventsByDayMap<T>(\n  weekDays: DateRecord[],\n  events: CalendarEvent[]\n): Record<number, OrderedCalendarEvent<T>[]> {\n  return weekDays.reduce(\n    (a, c, i) => ({ ...a, [i]: arrangeWeekdayEvents(filterByDate(events, c.date), c.date) }),\n    {}\n  );\n}\n","'use client';\n\nimport dayjs from 'dayjs';\nimport { useRef } from 'react';\n\nimport './MonthDate.css';\n\ninterface MonthDateProps {\n  date: dayjs.Dayjs;\n  handleClick: (\n    e: React.MouseEvent,\n    date: dayjs.Dayjs,\n    ref: React.MutableRefObject<HTMLDivElement | null>\n  ) => void;\n  isToday: boolean;\n  isDimmed: boolean;\n  isActive: boolean;\n}\n\nexport function MonthDate({ date, handleClick, isToday, isDimmed, isActive }: MonthDateProps) {\n  const ref = useRef<HTMLDivElement | null>(null);\n  return (\n    <div\n      ref={ref}\n      data-date={date.format('DD-MMM-YYYY')}\n      className=\"events-calendar-year-view-month-date\"\n      data-today={isToday}\n      data-dimmed={isDimmed}\n      data-active={isActive}\n      onMouseDown={(e) => e.stopPropagation()}\n      onClick={(e) => handleClick(e, date, ref)}\n    >\n      {date.format('D')}\n    </div>\n  );\n}\n","import dayjs from 'dayjs';\nimport { CalendarEvent, Month } from '~/types';\nimport { DAYS_IN_FULL_MONTH, MONTHS } from '~/utils';\n\nexport type MonthDate = {\n  date: dayjs.Dayjs;\n  isToday: boolean;\n  isCurrentMonth: boolean;\n  isActive: boolean;\n};\nexport type YearDateRecord = Record<Month, MonthDate[]>;\n\n/*\n    Function to create a object containing the months and dates within each month\n*/\nexport function generateYearDates<T extends object>(\n  activeDate: dayjs.Dayjs,\n  events: CalendarEvent<T>[]\n) {\n  const result = {} as YearDateRecord;\n\n  // Create a set of all active dates from the events\n  const activeDates = new Set<string>();\n  events.forEach(({ start, end }) => {\n    let current = start.clone().startOf('day');\n    const endOfDay = end.clone().startOf('day');\n    while (current.isBefore(endOfDay, 'day') || current.isSame(endOfDay, 'day')) {\n      activeDates.add(current.format('YYYY-MM-DD'));\n      current = current.add(1, 'day');\n    }\n  });\n\n  // Build the result object\n  let currentDate = activeDate.startOf('year');\n  MONTHS.forEach((month, i) => {\n    const startOfMonth = currentDate.clone().day(0);\n    const dateArray = Array.from({ length: DAYS_IN_FULL_MONTH }, (_, i) => {\n      const date = startOfMonth.clone().add(i, 'day');\n      const isToday = date.isSame(dayjs(), 'day');\n      const isCurrentMonth = currentDate.isSame(date, 'month');\n      const isActive = isCurrentMonth && activeDates.has(date.format('YYYY-MM-DD'));\n      return { date, isToday, isActive, isCurrentMonth };\n    });\n\n    result[month] = dateArray;\n    currentDate = currentDate.month(i + 1);\n  });\n\n  return result;\n}\n","'use client';\n\nimport dayjs from 'dayjs';\nimport { Dispatch } from 'react';\n\nimport './YearView.css';\n\nimport { MonthDate } from './components';\nimport { generateYearDates } from './utils';\nimport { CalendarAction, CalendarEvent, CalendarState } from '~/types';\nimport { DAY_LABELS_SHORT, MONTHS } from '~/utils';\n\ninterface YearViewProps<T> {\n  activeDate: dayjs.Dayjs;\n  dispatch: Dispatch<CalendarAction>;\n  events: CalendarEvent<T>[];\n  state: CalendarState;\n}\n\nexport function YearView<T extends object>({\n  activeDate,\n  dispatch,\n  events,\n  state,\n}: YearViewProps<T>) {\n  const yearDates = generateYearDates<T>(activeDate, events);\n\n  // Handlers\n  const handleMouseDown = () => dispatch({ type: 'reset_calendar' });\n  const handleClick = (\n    e: React.MouseEvent,\n    date: dayjs.Dayjs,\n    ref: React.MutableRefObject<HTMLDivElement | null>\n  ) => {\n    if (state.overflowIsOpen && e.target === state.overflowAnchor) {\n      dispatch({ type: 'reset_calendar' });\n    } else {\n      dispatch({ type: 'open_overflow', date, anchor: ref.current });\n    }\n  };\n\n  return (\n    <div className=\"events-calendar-year-view-scroll-wrapper\">\n      <div className=\"events-calendar-year-view\" onMouseDown={handleMouseDown}>\n        {MONTHS.map((month) => {\n          return (\n            <div key={month} className=\"events-calendar-year-view-month\">\n              <div className=\"events-calendar-year-view-month-label\">{month}</div>\n              <div className=\"events-calendar-year-view-month-dates\">\n                {DAY_LABELS_SHORT.map((day, i) => (\n                  <div key={`${month}-${i}`} className=\"events-calendar-year-view-month-header\">\n                    {day}\n                  </div>\n                ))}\n\n                {yearDates[month].map(({ date, isToday, isCurrentMonth, isActive }, i) => (\n                  <MonthDate\n                    key={i}\n                    date={date}\n                    handleClick={handleClick}\n                    isToday={isToday}\n                    isActive={isActive}\n                    isDimmed={!isCurrentMonth}\n                  />\n                ))}\n              </div>\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport { Dayjs } from 'dayjs';\nimport { Dispatch, ReactNode, RefObject, useMemo } from 'react';\n\nimport './MonthView.css';\n\nimport { MonthHeader } from './components';\nimport { getEventsByWeekMap, getMaxEvents, getMonthDates } from './utils';\nimport { CellContainer } from '~/components';\nimport { useElementSize } from '~/hooks';\nimport {\n  CalendarAction,\n  CalendarEvent,\n  CalendarState,\n  EventClickArgs,\n  EventEditProps,\n  EventsCalendarContextMenuProps,\n  MouseEventHandler,\n} from '~/types';\n\nconst isTestEnv = process.env.NODE_ENV === 'test';\n\ninterface MonthViewProps<T = object> {\n  enableRescheduling: boolean;\n  compact: boolean;\n  activeDate: Dayjs;\n  dispatch: Dispatch<CalendarAction>;\n  events: CalendarEvent<T>[];\n  handleMouseEvent: MouseEventHandler;\n  handleStopDrag: () => void;\n  onEventClick?: (props: EventClickArgs<T>) => void;\n  onEventReschedule?: (props: EventEditProps) => void;\n  renderContextMenu?: (props: EventsCalendarContextMenuProps) => ReactNode;\n  placeholderRef: RefObject<HTMLDivElement | null>;\n  state: CalendarState;\n}\n\nexport function MonthView<T = object>({\n  enableRescheduling,\n  compact,\n  activeDate,\n  dispatch,\n  events,\n  handleMouseEvent,\n  handleStopDrag,\n  onEventClick,\n  onEventReschedule,\n  placeholderRef,\n  renderContextMenu,\n  state,\n}: MonthViewProps<T>) {\n  // Calculate dates within current view\n  const monthDates = useMemo(() => getMonthDates(activeDate), [activeDate]);\n  const minMaxDatesInView = { first: monthDates.first, last: monthDates.last };\n\n  // Calculate the max number of events that fit within a cell\n  const { ref: gridRef, height: gridHeight } = useElementSize();\n  const ROW_HEIGHT = isTestEnv ? 100 : gridHeight / monthDates.weeks.length;\n  const EVENT_LIMIT = getMaxEvents(ROW_HEIGHT, compact);\n\n  // Create a map of events by week\n  const weekMap = useMemo(\n    () => getEventsByWeekMap<T>(monthDates.weeks, events),\n    [events, monthDates.weeks]\n  );\n\n  return (\n    <div className=\"events-calendar-month-view\">\n      <MonthHeader isCompact={compact} />\n      <div className=\"events-calendar-month-view-grid\" onMouseLeave={handleStopDrag} ref={gridRef}>\n        {monthDates.weeks.map((week, weekIndex) => {\n          // Get this week's events (if in test environment or calendar has height)\n          const orderedEvents = isTestEnv || gridHeight > 0 ? weekMap[weekIndex] : [];\n\n          return (\n            <div key={weekIndex} className=\"events-calendar-month-view-row\">\n              {week.map((dayRecord, dayIndex) => (\n                <CellContainer\n                  key={dayIndex}\n                  EVENT_LIMIT={EVENT_LIMIT}\n                  enableRescheduling={enableRescheduling}\n                  compact={compact}\n                  dayRecord={dayRecord}\n                  dispatch={dispatch}\n                  handleMouseEvent={handleMouseEvent}\n                  isInWeekHeader={false}\n                  minMaxDatesInView={minMaxDatesInView}\n                  onEventClick={onEventClick}\n                  onEventReschedule={onEventReschedule}\n                  orderedEvents={orderedEvents}\n                  placeholderRef={placeholderRef}\n                  renderContextMenu={renderContextMenu}\n                  state={state}\n                />\n              ))}\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n","import './MonthHeader.css';\n\nconst DAYS = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\ninterface MonthHeaderProps {\n  isCompact: boolean;\n}\n\nexport function MonthHeader({ isCompact }: MonthHeaderProps) {\n  return (\n    <div className=\"events-calendar-month-header\" data-sm={isCompact}>\n      {DAYS.map((day, i) => (\n        <div className=\"events-calendar-month-header-cell\" key={i}>\n          {day}\n        </div>\n      ))}\n    </div>\n  );\n}\n","/* \n    Returns number of events that can fit within a cell (dependent on screen size)\n*/\nexport const getMaxEvents = (ROW_HEIGHT: number, isCompact: boolean) => {\n  if (ROW_HEIGHT === 0) return 0;\n\n  // Constants\n  const PADDING = 2;\n  const CELL_BOTTOM = 8;\n  const CELL_HEADER = 26;\n  const ENTRY_HEIGHT = isCompact ? 18 : 20;\n\n  return Math.max(\n    Math.floor((ROW_HEIGHT - CELL_HEADER - CELL_BOTTOM) / (ENTRY_HEIGHT + PADDING)),\n    0\n  );\n};\n","import { Dayjs } from 'dayjs';\nimport { DateRecord, MonthDates } from '~/types';\n\n/* \n    Creates array of dates centred on the current month\n*/\nexport const getMonthDates = (activeDate: Dayjs): MonthDates => {\n  const startOfMonth = activeDate.startOf('month').day(0);\n  let tempDate = startOfMonth;\n  const nextMonth = activeDate.add(1, 'month').month();\n  let weekDates: DateRecord[] = [];\n  const allDates: DateRecord[][] = [];\n  let dayOfWeekIndex = 1;\n  while (tempDate.subtract(tempDate.day(), 'd').month() !== nextMonth) {\n    weekDates.push({ date: tempDate, isCurrentMonth: tempDate.month() === activeDate.month() });\n    if (dayOfWeekIndex === 7) {\n      allDates.push(weekDates);\n      weekDates = [];\n      dayOfWeekIndex = 0;\n    }\n    dayOfWeekIndex++;\n    tempDate = tempDate.add(1, 'day');\n  }\n  return { weeks: allDates, first: startOfMonth, last: tempDate };\n};\n","import { CalendarEvent, DateRecord, OrderedCalendarEvent } from '~/types';\nimport { arrangeWeekEvents, filterByWeek } from '~/utils';\n\nexport function getEventsByWeekMap<T>(\n  weeks: DateRecord[][],\n  events: CalendarEvent[]\n): Record<number, OrderedCalendarEvent<T>[]> {\n  return weeks.reduce(\n    (a, c, i) => ({ ...a, [i]: arrangeWeekEvents(filterByWeek(events, c[0].date)) }),\n    {}\n  );\n}\n","'use client';\n\nimport dayjs from 'dayjs';\nimport { Dispatch, ReactNode, RefObject } from 'react';\n\nimport './OverflowCard.css';\n\nimport { Event, EventsCalendarPopover } from '~/components';\nimport {\n  CalendarAction,\n  CalendarEvent,\n  CalendarState,\n  EventClickArgs,\n  EventsCalendarContextMenuProps,\n} from '~/types';\nimport { arrangeWeekEvents, filterByDate } from '~/utils';\n\ninterface OverflowCardProps<T> {\n  compact: boolean;\n  dispatch: Dispatch<CalendarAction>;\n  events: CalendarEvent<T>[];\n  onEventClick?: ({ event, isDoubleClick }: EventClickArgs<T>) => void;\n  placeholderRef: RefObject<HTMLDivElement | null>;\n  renderContextMenu?: (props: EventsCalendarContextMenuProps) => ReactNode;\n  state: CalendarState;\n  enableRescheduling: boolean;\n  zIndex?: number;\n}\n\n/* \n    Create dayjs date object if string is defined\n*/\nconst tryDate = (dateString?: string) => (dateString ? dayjs(dateString) : undefined);\n\nexport function OverflowCard<T>({\n  compact,\n  dispatch,\n  events,\n  onEventClick,\n  placeholderRef,\n  renderContextMenu,\n  state,\n  enableRescheduling,\n  zIndex,\n}: OverflowCardProps<T>) {\n  const date = tryDate(state.overflowAnchor?.dataset.date);\n\n  if (!date || !state.overflowAnchor) return <></>;\n\n  const orderedEvents = arrangeWeekEvents(filterByDate(events, date));\n\n  return (\n    <EventsCalendarPopover zIndex={zIndex} anchor={state.overflowAnchor} isOpen={state.overflowIsOpen}>\n      <div className=\"events-calendar-overflow-card\">\n        <span className=\"events-calendar-overflow-card-label\">{date.format('dddd, MMMM D')}</span>\n        {!orderedEvents.length && (\n          <div className=\"events-calendar-overflow-card-text\">\n            No events scheduled for this date\n          </div>\n        )}\n        <div className=\"events-calendar-overflow-card-content\">\n          {orderedEvents.map((event) => (\n            <Event\n              view=\"month\"\n              isInOverflow\n              key={event.id}\n              enableRescheduling={enableRescheduling}\n              compact={compact}\n              date={date}\n              dispatch={dispatch}\n              event={event}\n              onEventClick={onEventClick}\n              placeholderRef={placeholderRef}\n              renderContextMenu={renderContextMenu}\n              state={state}\n            />\n          ))}\n        </div>\n      </div>\n    </EventsCalendarPopover>\n  );\n}\n"],"mappings":"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","names":["useMemo","useRef","useRef","getClipPath","overflowArrows","getEventStyles","isInOverflow","event","date","isCompact","isInWeekHeader","isInDayHeader","weekStart","weekEnd","isBeingDragged","state","event","getOverflowArrows","isInOverflow","date","start","end","minMaxDatesInView","showLeftArrow","showRightArrow","setTime","date","time","CALENDAR_VIEWS","MONTHS","DAY_LABELS_SHORT","DAYS_IN_FULL_MONTH","DEFAULT_COLOR","HOURS","isBetween","date","testStart","testEnd","startOnly","isSameOrBefore","a","b","hasOverlap","start1","end1","start2","end2","isSameOrBefore","updateEvent","state","dispatch","date","view","timeScale","dateDiff","start","end","startTime","endTime","newStart","increment","newEnd","getTimeDiff","dt1","dt2","mins1","getTimeLabel","event","timeDuration","leadingComma","filterByWeek","array","weekStartDate","weekEndDate","start","end","hasOverlap","filterByDate","data","date","start","end","isBetween","filterByView","events","activeDate","view","unit","filterStart","filterEnd","start","end","hasOverlap","dayjs","getDayjs","rawDate","timeString","formatted","parseRawEvents","events","event","index","dayjsStart","dayjsEnd","getVisibleEvents","data","date","maxEvents","isInDayHeader","order","start","calendarSort","weekEventsArray","a","b","a_lengthInDays","b_lengthInDays","findAvailableSlot","overlappingSlots","slot","arrangeWeekEvents","event","sortedWeekEvents","firstEvent","followingEvents","orderedArray","testEvent","testStart","testEnd","placedEvent","placedStart","placedEnd","hasOverlap","eventOrder","returnValidStartEnd","start","end","dayjs","EMPTY_EVENT","getPlaceholderEvent","start","end","isTimeEntry","isInitialisation","validStart","validEnd","returnValidStartEnd","eventEnd","EMPTY_EVENT","sortByStart","array","a","b","timeDiff","getTimeDiff","overlapsStart","test_start","main_start","main_end","arrangeWeekdayEvents","dayEvents","date","event","sortedEvents","firstEvent","followingEvents","orderedArray","testEvent","index","tempStart_test_event","setTime","eventIndent","currEvent","tempStart_curr_event","tempEnd_curr_event","dayjs","createDayjsObjFromTime","startTime","endTime","startString","endString","formattedStartTime","formattedEndTime","start","end","getBackgroundFromGroups","groups","colors","g","DEFAULT_COLOR","increment","color","i","getWeekOrDayEventStyles","event","timeDuration","dayIndex","overlapOffset","isActive","timeColumnOffset","getBackgroundFromGroups","jsx","AllDayEvent","date","event","minMaxDatesInView","isCompact","isInOverflow","overflowArrows","getOverflowArrows","clipPath","getClipPath","colorstyles","getBackgroundFromGroups","jsx","jsxs","TimeEvent","event","isCompact","title","start","groups","colorStyles","getBackgroundFromGroups","borderStyle","g","DEFAULT_COLOR","updatePlaceholder","isTimeEvent","firstClickDate","start","date","dispatch","tempStart","getTimeDiff","returnValidStartEnd","tempEnd","updatedEvent","getPlaceholderEvent","useMouseEvent","enableDragCreation","state","onEventCreate","e","openPopover","reset","placeholderRef","dragActive","placeholderEvent","useEffect","useMemo","useRef","useState","defaultState","useResizeObserver","options","frameID","ref","rect","setRect","observer","entries","entry","useElementSize","width","height","useState","flip","offset","shift","useDismiss","useFloating","useInteractions","useCalendarEvent","dispatch","event","isInOverflow","hasContextMenu","state","contextIsOpen","setContextIsOpen","closeContextMenu","isActive","refs","floatingStyles","context","dismiss","getFloatingProps","e","eventRef","dayjs","useEffect","useReducer","useState","DEFAULT_STATE","EMPTY_EVENT","reducer","state","action","DEFAULT_STATE","EMPTY_EVENT","useEventsCalendar","isInitialised","initialDate","dayjs","initialView","closeOnClickOutside","activeDate","setActiveDate","useState","view","setView","state","dispatch","useReducer","reducer","DEFAULT_STATE","useEffect","handleClose","useInitEventsCalendar","calendar","defaultCalendar","useEventsCalendar","Fragment","jsx","jsxs","Event","view","enableRescheduling","compact","date","dispatch","event","isInWeekHeader","isInOverflow","isInDayHeader","minMaxDatesInView","onEventClick","placeholderRef","renderContextMenu","state","ref","useRef","hasContextMenu","isInteractive","isMonthView","isDayView","openPopover","closePopover","onClose","handleClick","e","isPlaceholder","eventRef","isDoubleClick","isActive","togglePopover","handleContextMenu","contextIsOpen","refs","floatingStyles","getFloatingProps","closeContextMenu","useCalendarEvent","timeDuration","getTimeDiff","isShort","overlapOffset","dayIndex","onDragStart","styles","getEventStyles","getWeekOrDayEventStyles","isBeingDragged","AllDayEvent","TimeEvent","getTimeLabel","useEffect","useRef","createPortal","autoPlacement","autoUpdate","detectOverflow","hide","offset","useFloating","padding","padding_x","padding_y","useBindPopover","anchor","preventViewportOverflow","state","overflow","xPosition","yPosition","refs","floatingStyles","jsx","PopoverContent","anchor","zIndex","children","styles","useRef","refs","floatingStyles","useBindPopover","useEffect","createPortal","e","jsx","EventsCalendarPopover","anchor","isOpen","zIndex","children","PopoverContent","dayjs","useRef","jsx","jsxs","ShowMoreText","date","dispatch","isCompact","numOverflowEvents","state","ref","useRef","handleClick","e","jsx","jsxs","CellHeader","dayRecord","dispatch","isCompact","numOverflowEvents","state","date","isCurrentMonth","isToday","dayjs","ShowMoreText","Fragment","jsx","jsxs","getPlaceholderActiveState","placeholderEvent","date","isInHeader","isActive","isAllDay","start","end","isBetween","CellContainer","EVENT_LIMIT","enableRescheduling","compact","dayRecord","dispatch","handleMouseEvent","headerHeight","isInWeekHeader","isInDayHeader","minMaxDatesInView","onEventClick","onEventReschedule","orderedEvents","placeholderRef","renderContextMenu","state","eventsByDate","filterByDate","visibleEvents","getVisibleEvents","numOverflowEvents","a","c","showOverflowButton","openPopover","reset","handleMouseDown","e","handleMouseEnter","updateEvent","handleMouseUp","CellHeader","ShowMoreText","event","Event","jsx","CircularLoader","visible","jsx","HeaderButton","isGroupButton","active","onClick","variant","children","jsx","jsxs","Controls","hideViewToggle","views","setView","view","children","viewsToDisplay","CALENDAR_VIEWS","validView","viewLabel","HeaderButton","dayjs","jsx","jsxs","IconChevronLeft","size","stroke","jsx","jsxs","IconChevronRight","size","stroke","jsx","jsxs","getHeaderTitle","currDate","view","weekStart","weekEnd","Navigation","activeDate","setActiveDate","handleToday","dayjs","handleNext","increment","handlePrev","HeaderButton","IconChevronLeft","IconChevronRight","jsx","jsxs","Header","activeDate","onClick","hideViewToggle","setActiveDate","setView","views","CALENDAR_VIEWS","view","customControls","Navigation","Controls","useMemo","jsx","HoursColumn","HOURS","hour","dayjs","jsx","jsxs","NOW","dayjs","TimeIndicator","activeDate","isDayView","gridColumn","gridRow","Fragment","jsx","buildIndexArr","l","_","i","getActiveDateTime","activeDate","day","hour","timeBlock","view","TimeBackground","handleMouseEvent","placeholderRef","state","dispatch","onEventReschedule","daysArray","hoursArray","timeBlocksArray","openPopover","reset","date","e","updateEvent","dayjs","jsx","jsxs","EVENT_LIMIT","TimeViewHeader","view","enableRescheduling","compact","allDayEvents","dispatch","handleMouseEvent","handleStopDrag","minMaxDatesInView","onEventClick","onEventReschedule","placeholderRef","renderContextMenu","state","weekDatesArray","filteredEvents","filterByDate","filterByWeek","orderedEvents","arrangeWeekEvents","totalEventsOnThisDate","x","numEventsToShow","heightOfEvent","bottomPadding","headerHeight","dayRecord","dayIndex","date","withHeaderBorder","dayjs","CellContainer","dayjs","useEffect","useRef","PIXELS_PER_HOUR","MINUTES_PER_HOUR","NOW_IN_MINUTES","pixelsPerMinute","useSetInitialScroll","minutesToScroll","offset","viewportRef","offset8am","getWeekDates","activeDate","view","startOfWeek","tempDate","datesArray","index","getEventsByDayMap","weekDays","events","a","c","i","arrangeWeekdayEvents","filterByDate","jsx","jsxs","TimeView","view","activeDate","compact","dispatch","enableRescheduling","events","handleMouseEvent","handleStopDrag","onEventClick","onEventReschedule","placeholderRef","renderContextMenu","state","isDayView","isWeekView","allDayEvents","event","timeEvents","viewportRef","useSetInitialScroll","weekDatesArray","useMemo","getWeekDates","minMaxDatesInView","dayMap","getEventsByDayMap","TimeViewHeader","HoursColumn","TimeBackground","TimeIndicator","date","dayIndex","orderedEvents","isActive","isAllDay","start","end","isBetween","Event","useRef","jsx","MonthDate","date","handleClick","isToday","isDimmed","isActive","ref","useRef","e","dayjs","generateYearDates","activeDate","events","result","activeDates","start","end","current","endOfDay","currentDate","MONTHS","month","startOfMonth","dateArray","_","i","date","isToday","dayjs","isCurrentMonth","isActive","jsx","jsxs","YearView","activeDate","dispatch","events","state","yearDates","generateYearDates","handleMouseDown","handleClick","e","date","ref","MONTHS","month","DAY_LABELS_SHORT","day","i","isToday","isCurrentMonth","isActive","MonthDate","useMemo","jsx","DAYS","MonthHeader","isCompact","day","i","getMaxEvents","ROW_HEIGHT","isCompact","PADDING","CELL_BOTTOM","CELL_HEADER","ENTRY_HEIGHT","getMonthDates","activeDate","startOfMonth","tempDate","nextMonth","weekDates","allDates","dayOfWeekIndex","getEventsByWeekMap","weeks","events","a","c","i","arrangeWeekEvents","filterByWeek","jsx","jsxs","isTestEnv","MonthView","enableRescheduling","compact","activeDate","dispatch","events","handleMouseEvent","handleStopDrag","onEventClick","onEventReschedule","placeholderRef","renderContextMenu","state","monthDates","useMemo","getMonthDates","minMaxDatesInView","gridRef","gridHeight","useElementSize","ROW_HEIGHT","EVENT_LIMIT","getMaxEvents","weekMap","getEventsByWeekMap","MonthHeader","week","weekIndex","orderedEvents","dayRecord","dayIndex","CellContainer","dayjs","Fragment","jsx","jsxs","tryDate","dateString","dayjs","OverflowCard","compact","dispatch","events","onEventClick","placeholderRef","renderContextMenu","state","enableRescheduling","zIndex","date","orderedEvents","arrangeWeekEvents","filterByDate","EventsCalendarPopover","event","Event","jsx","jsxs","EventsCalendar","calendar","compact","enableDragCreation","enableRescheduling","events","overflowPopoverZIndex","popoverZIndex","isFetching","noHeader","onEventClick","onEventCreate","onEventReschedule","renderPopover","renderContextMenu","views","CALENDAR_VIEWS","activeDate","setActiveDate","view","setView","state","dispatch","useInitEventsCalendar","parsed","useMemo","parseRawEvents","calendarEvents","filterByView","overflowEvents","event","eventAnchor","dragActive","eventDragActive","popoverIsOpen","clickedEvent","placeholderEvent","onClose","handleStopDrag","placeholderRef","useRef","handleMouseEvent","useMouseEvent","basicProps","sharedViewProps","Header","e","CircularLoader","YearView","MonthView","TimeView","EventsCalendarPopover","OverflowCard"]}