@mantine/schedule 9.7.1 → 9.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/cjs/components/DayView/DayView.cjs +45 -29
  2. package/cjs/components/DayView/DayView.cjs.map +1 -1
  3. package/cjs/components/DayView/DayView.module.cjs.map +1 -1
  4. package/cjs/components/MobileMonthView/MobileMonthView.cjs +60 -23
  5. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  6. package/cjs/components/MobileMonthView/MobileMonthView.module.cjs.map +1 -1
  7. package/cjs/components/MobileMonthView/get-mobile-month-view-weeks.cjs +32 -0
  8. package/cjs/components/MobileMonthView/get-mobile-month-view-weeks.cjs.map +1 -0
  9. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +15 -7
  10. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
  11. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
  12. package/cjs/components/ResourcesDayView/ResourcesDayViewColumn.cjs +11 -6
  13. package/cjs/components/ResourcesDayView/ResourcesDayViewColumn.cjs.map +1 -1
  14. package/cjs/components/ResourcesMonthView/ResourcesMonthView.module.cjs.map +1 -1
  15. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +15 -7
  16. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
  17. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
  18. package/cjs/components/ResourcesWeekView/ResourcesWeekViewRow.cjs +11 -6
  19. package/cjs/components/ResourcesWeekView/ResourcesWeekViewRow.cjs.map +1 -1
  20. package/cjs/components/Schedule/Schedule.cjs +2 -0
  21. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  22. package/cjs/components/WeekView/WeekView.cjs +29 -19
  23. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  24. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  25. package/cjs/components/WeekView/WeekViewDay.cjs +13 -7
  26. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
  27. package/cjs/components/YearView/YearView.cjs +1 -1
  28. package/cjs/components/YearView/YearView.cjs.map +1 -1
  29. package/cjs/components/YearView/YearViewMonth.cjs +1 -1
  30. package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
  31. package/cjs/index.cjs +10 -0
  32. package/cjs/utils/add-minutes-to-time/add-minutes-to-time.cjs +17 -0
  33. package/cjs/utils/add-minutes-to-time/add-minutes-to-time.cjs.map +1 -0
  34. package/cjs/utils/clamp-slot-label-interval/clamp-slot-label-interval.cjs +22 -0
  35. package/cjs/utils/clamp-slot-label-interval/clamp-slot-label-interval.cjs.map +1 -0
  36. package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs +74 -17
  37. package/cjs/utils/get-business-hours-mod/get-business-hours-mod.cjs.map +1 -1
  38. package/cjs/utils/get-day-time-intervals/get-day-time-intervals.cjs +7 -2
  39. package/cjs/utils/get-day-time-intervals/get-day-time-intervals.cjs.map +1 -1
  40. package/cjs/utils/get-slot-label-groups/get-slot-label-groups.cjs +26 -0
  41. package/cjs/utils/get-slot-label-groups/get-slot-label-groups.cjs.map +1 -0
  42. package/cjs/{components/YearView → utils/get-visible-week-days}/get-visible-week-days.cjs +1 -1
  43. package/cjs/utils/get-visible-week-days/get-visible-week-days.cjs.map +1 -0
  44. package/esm/components/DayView/DayView.mjs +46 -30
  45. package/esm/components/DayView/DayView.mjs.map +1 -1
  46. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  47. package/esm/components/MobileMonthView/MobileMonthView.mjs +60 -23
  48. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  49. package/esm/components/MobileMonthView/MobileMonthView.module.mjs.map +1 -1
  50. package/esm/components/MobileMonthView/get-mobile-month-view-weeks.mjs +30 -0
  51. package/esm/components/MobileMonthView/get-mobile-month-view-weeks.mjs.map +1 -0
  52. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +16 -8
  53. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
  54. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
  55. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs +12 -7
  56. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs.map +1 -1
  57. package/esm/components/ResourcesMonthView/ResourcesMonthView.module.mjs.map +1 -1
  58. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +16 -8
  59. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
  60. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
  61. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs +12 -7
  62. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs.map +1 -1
  63. package/esm/components/Schedule/Schedule.mjs +2 -0
  64. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  65. package/esm/components/WeekView/WeekView.mjs +30 -20
  66. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  67. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  68. package/esm/components/WeekView/WeekViewDay.mjs +14 -8
  69. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  70. package/esm/components/YearView/YearView.mjs +1 -1
  71. package/esm/components/YearView/YearView.mjs.map +1 -1
  72. package/esm/components/YearView/YearViewMonth.mjs +1 -1
  73. package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
  74. package/esm/index.mjs +6 -2
  75. package/esm/utils/add-minutes-to-time/add-minutes-to-time.mjs +17 -0
  76. package/esm/utils/add-minutes-to-time/add-minutes-to-time.mjs.map +1 -0
  77. package/esm/utils/clamp-slot-label-interval/clamp-slot-label-interval.mjs +22 -0
  78. package/esm/utils/clamp-slot-label-interval/clamp-slot-label-interval.mjs.map +1 -0
  79. package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs +74 -18
  80. package/esm/utils/get-business-hours-mod/get-business-hours-mod.mjs.map +1 -1
  81. package/esm/utils/get-day-time-intervals/get-day-time-intervals.mjs +7 -2
  82. package/esm/utils/get-day-time-intervals/get-day-time-intervals.mjs.map +1 -1
  83. package/esm/utils/get-slot-label-groups/get-slot-label-groups.mjs +26 -0
  84. package/esm/utils/get-slot-label-groups/get-slot-label-groups.mjs.map +1 -0
  85. package/esm/{components/YearView → utils/get-visible-week-days}/get-visible-week-days.mjs +1 -1
  86. package/esm/utils/get-visible-week-days/get-visible-week-days.mjs.map +1 -0
  87. package/lib/components/DayView/DayView.d.ts +3 -1
  88. package/lib/components/MobileMonthView/MobileMonthView.d.ts +2 -0
  89. package/lib/components/MobileMonthView/get-mobile-month-view-weeks.d.ts +11 -0
  90. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +1 -1
  91. package/lib/components/ResourcesDayView/ResourcesDayViewColumn.d.ts +2 -1
  92. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +1 -1
  93. package/lib/components/ResourcesWeekView/ResourcesWeekViewRow.d.ts +2 -1
  94. package/lib/components/Schedule/Schedule.d.ts +1 -1
  95. package/lib/components/WeekView/WeekView.d.ts +3 -1
  96. package/lib/utils/add-minutes-to-time/add-minutes-to-time.d.ts +1 -0
  97. package/lib/utils/clamp-slot-label-interval/clamp-slot-label-interval.d.ts +9 -0
  98. package/lib/utils/get-business-hours-mod/get-business-hours-mod.d.ts +24 -5
  99. package/lib/utils/get-day-time-intervals/get-day-time-intervals.d.ts +5 -1
  100. package/lib/utils/get-slot-label-groups/get-slot-label-groups.d.ts +15 -0
  101. package/lib/utils/index.d.ts +7 -2
  102. package/package.json +4 -4
  103. package/styles.css +178 -9
  104. package/styles.layer.css +178 -9
  105. package/cjs/components/YearView/get-visible-week-days.cjs.map +0 -1
  106. package/esm/components/YearView/get-visible-week-days.mjs.map +0 -1
  107. /package/lib/{components/YearView → utils/get-visible-week-days}/get-visible-week-days.d.ts +0 -0
@@ -5,6 +5,7 @@ const require_format_date = require("../../utils/format-date/format-date.cjs");
5
5
  const require_clamp_interval_minutes = require("../../utils/clamp-interval-minutes/clamp-interval-minutes.cjs");
6
6
  const require_get_day_time_intervals = require("../../utils/get-day-time-intervals/get-day-time-intervals.cjs");
7
7
  const require_to_date_string = require("../../utils/to-date-string/to-date-string.cjs");
8
+ const require_get_slot_label_groups = require("../../utils/get-slot-label-groups/get-slot-label-groups.cjs");
8
9
  const require_is_all_day_event = require("../../utils/is-all-day-event/is-all-day-event.cjs");
9
10
  const require_get_visible_events = require("../../utils/get-visible-events/get-visible-events.cjs");
10
11
  const require_get_day_position = require("../../utils/get-day-position/get-day-position.cjs");
@@ -12,6 +13,7 @@ const require_get_time_axis_event_style = require("../../utils/get-time-axis-eve
12
13
  const require_calculate_drop_time = require("../../utils/calculate-drop-time/calculate-drop-time.cjs");
13
14
  const require_get_business_hours_mod = require("../../utils/get-business-hours-mod/get-business-hours-mod.cjs");
14
15
  const require_expand_recurring_events = require("../../utils/expand-recurring-events/expand-recurring-events.cjs");
16
+ const require_add_minutes_to_time = require("../../utils/add-minutes-to-time/add-minutes-to-time.cjs");
15
17
  const require_use_auto_scroll_on_drag = require("../../hooks/use-auto-scroll-on-drag.cjs");
16
18
  const require_use_drag_drop_handlers = require("../../hooks/use-drag-drop-handlers.cjs");
17
19
  const require_use_event_resize = require("../../hooks/use-event-resize.cjs");
@@ -41,6 +43,7 @@ const defaultProps = {
41
43
  withSubHourGridLines: true,
42
44
  withAllDaySlot: true,
43
45
  slotLabelFormat: "HH:mm",
46
+ slotLabelInterval: 60,
44
47
  headerFormat: "MMMM D, YYYY",
45
48
  withCurrentTimeBubble: true,
46
49
  withHeader: true,
@@ -57,11 +60,13 @@ const defaultProps = {
57
60
  const varsResolver = (0, _mantine_core.createVarsResolver)((_theme, { radius, slotHeight, allDaySlotHeight }) => ({ dayView: {
58
61
  "--day-view-radius": radius !== void 0 ? (0, _mantine_core.getRadius)(radius) : void 0,
59
62
  "--day-view-slot-height": (0, _mantine_core.rem)(slotHeight),
60
- "--day-view-all-day-slot-height": (0, _mantine_core.rem)(allDaySlotHeight)
63
+ "--day-view-all-day-slot-height": (0, _mantine_core.rem)(allDaySlotHeight),
64
+ "--day-view-business-hours-bg": void 0,
65
+ "--day-view-non-business-hours-bg": void 0
61
66
  } }));
62
67
  const DayView = (0, _mantine_core.factory)((_props) => {
63
68
  const props = (0, _mantine_core.useProps)("DayView", defaultProps, _props);
64
- const { classNames, className, style, styles, unstyled, attributes, vars, __staticSelector, startTime, endTime, intervalMinutes, withSubHourGridLines, eventOverlapMode, eventOverlapRaiseDelay, withAllDaySlot, date, locale, slotLabelFormat, headerFormat, getCurrentTime, withCurrentTimeIndicator, withCurrentTimeBubble, withHeader, radius, onDateChange, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, slotHeight, allDaySlotHeight, scrollAreaProps, events, moreEventsProps, renderEventBody, renderEvent, labels, highlightBusinessHours, businessHours, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, canDropEvent, canDropExternalEvent, canResizeEventTo, preventEventOverlap, onEventPlacementRejected, eventResizeInterval, recurrenceExpansionLimit, getTimeSlotProps, withAgenda, ...others } = props;
69
+ const { classNames, className, style, styles, unstyled, attributes, vars, __staticSelector, startTime, endTime, intervalMinutes, withSubHourGridLines, eventOverlapMode, eventOverlapRaiseDelay, withAllDaySlot, date, locale, slotLabelFormat, slotLabelInterval, headerFormat, getCurrentTime, withCurrentTimeIndicator, withCurrentTimeBubble, withHeader, radius, onDateChange, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, slotHeight, allDaySlotHeight, scrollAreaProps, events, moreEventsProps, renderEventBody, renderEvent, labels, highlightBusinessHours, businessHours, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, canDropEvent, canDropExternalEvent, canResizeEventTo, preventEventOverlap, onEventPlacementRejected, eventResizeInterval, recurrenceExpansionLimit, getTimeSlotProps, withAgenda, ...others } = props;
65
70
  const [agendaOpen, setAgendaOpen] = (0, react.useState)(false);
66
71
  const getStyles = (0, _mantine_core.useStyles)({
67
72
  name: __staticSelector,
@@ -95,7 +100,8 @@ const DayView = (0, _mantine_core.factory)((_props) => {
95
100
  const slots = require_get_day_time_intervals.getDayTimeIntervals({
96
101
  startTime,
97
102
  endTime,
98
- intervalMinutes
103
+ intervalMinutes,
104
+ labelIntervalMinutes: slotLabelInterval
99
105
  });
100
106
  const slotsRef = (0, react.useRef)([]);
101
107
  const viewportRef = (0, react.useRef)(null);
@@ -362,6 +368,12 @@ const DayView = (0, _mantine_core.factory)((_props) => {
362
368
  });
363
369
  externalOnClick?.(event);
364
370
  };
371
+ const businessHoursState = require_get_business_hours_mod.getBusinessHoursState({
372
+ time: slot.startTime,
373
+ endTime: require_add_minutes_to_time.addMinutesToTime(slot.startTime, require_clamp_interval_minutes.clampIntervalMinutes(intervalMinutes)),
374
+ businessHours,
375
+ highlightBusinessHours
376
+ });
365
377
  return /* @__PURE__ */ (0, react.createElement)(_mantine_core.UnstyledButton, {
366
378
  ...getStyles("dayViewSlot"),
367
379
  key: slot.startTime,
@@ -371,16 +383,15 @@ const DayView = (0, _mantine_core.factory)((_props) => {
371
383
  mod: {
372
384
  first: index === 0,
373
385
  "hour-start": slot.isHourStart,
374
- ...require_get_business_hours_mod.getBusinessHoursMod({
375
- time: slot.startTime,
376
- businessHours,
377
- highlightBusinessHours
378
- }),
386
+ ...businessHoursState.mod,
379
387
  "drop-target": isDropTarget,
380
388
  "drag-selected": isDragSelected,
381
389
  static: mode === "static"
382
390
  },
383
- __vars: { "--slot-size": `${require_clamp_interval_minutes.clampIntervalMinutes(intervalMinutes) / 60}` },
391
+ __vars: {
392
+ "--slot-size": `${require_clamp_interval_minutes.clampIntervalMinutes(intervalMinutes) / 60}`,
393
+ ...businessHoursState.vars
394
+ },
384
395
  "aria-label": `${require_labels.getLabel("timeSlot", labels)} ${slot.startTime} - ${slot.endTime}`,
385
396
  tabIndex: mode === "static" ? -1 : index === 0 ? 0 : -1,
386
397
  "data-drag-slot-index": withDragSlotSelect && mode !== "static" ? index : void 0,
@@ -392,26 +403,31 @@ const DayView = (0, _mantine_core.factory)((_props) => {
392
403
  ...externalSlotProps
393
404
  });
394
405
  });
395
- const slotsLabels = slots.reduce((acc, slot) => {
396
- if (slot.isHourStart) {
397
- const slotTime = (0, dayjs.default)(`${(0, dayjs.default)(date).format("YYYY-MM-DD")} ${slot.startTime}`);
398
- const label = require_format_date.formatDate({
399
- locale: ctx.getLocale(locale),
400
- date: slotTime,
401
- format: slotLabelFormat
402
- });
403
- acc.push(/* @__PURE__ */ (0, react.createElement)(_mantine_core.Box, {
404
- ...getStyles("dayViewSlotLabel"),
405
- key: slot.startTime,
406
- mod: require_get_business_hours_mod.getBusinessHoursMod({
407
- time: slot.startTime,
408
- businessHours,
409
- highlightBusinessHours
410
- })
411
- }, label));
412
- }
413
- return acc;
414
- }, []);
406
+ const slotsLabels = require_get_slot_label_groups.getSlotLabelGroups(slots).map((group) => {
407
+ const label = group.isLabelStart ? require_format_date.formatDate({
408
+ locale: ctx.getLocale(locale),
409
+ date: (0, dayjs.default)(`${(0, dayjs.default)(date).format("YYYY-MM-DD")} ${group.startTime}`),
410
+ format: slotLabelFormat
411
+ }) : null;
412
+ const labelBusinessHours = require_get_business_hours_mod.getBusinessHoursState({
413
+ time: group.startTime,
414
+ endTime: group.endTime,
415
+ businessHours,
416
+ highlightBusinessHours
417
+ });
418
+ return /* @__PURE__ */ (0, react.createElement)(_mantine_core.Box, {
419
+ ...getStyles("dayViewSlotLabel"),
420
+ key: group.startTime,
421
+ mod: {
422
+ "sub-hour": !group.isHourStart,
423
+ ...labelBusinessHours.mod
424
+ },
425
+ __vars: {
426
+ ...labelBusinessHours.vars,
427
+ "--slot-label-size": `${group.slotsCount * require_clamp_interval_minutes.clampIntervalMinutes(intervalMinutes) / 60}`
428
+ }
429
+ }, label);
430
+ });
415
431
  const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== "static";
416
432
  const backgroundAllDayEventNodes = eventsData.backgroundAllDayEvents.map((event) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ScheduleBackgroundEvent.ScheduleBackgroundEvent, {
417
433
  event,
@@ -1 +1 @@
1
- {"version":3,"file":"DayView.cjs","names":["createVarsResolver","getRadius","rem","factory","useProps","useState","useStyles","useResolvedStylesApi","useDatesContext","getDayTimeIntervals","useRef","useMergedRef","useCallback","useSlotDragSelect","expandRecurringEvents","getDayViewEvents","calculateDropTime","useDragDropHandlers","useEventResize","isAllDayEvent","ScheduleEvent","getVisibleEvents","UnstyledButton","getBusinessHoursMod","clampIntervalMinutes","getLabel","formatDate","Box","ScheduleBackgroundEvent","getTimeAxisEventStyle","ScheduleHeaderBase","toDateString","AgendaView","ScrollArea","MoreEvents","getDayPosition","CurrentTimeIndicator","DragContext","classes"],"sources":["../../../src/components/DayView/DayView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef, useState } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n rem,\n ScrollArea,\n ScrollAreaAutosizeProps,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useIsomorphicEffect, useMergedRef } from '@mantine/hooks';\nimport { useAutoScrollOnDrag } from '../../hooks/use-auto-scroll-on-drag';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useEventResize } from '../../hooks/use-event-resize';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n AnyDateValue,\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n PreventEventOverlap,\n ScheduleCanDropEventData,\n ScheduleCanDropExternalEventData,\n ScheduleCanResizeEventToData,\n ScheduleEventData,\n ScheduleEventOverlapMode,\n ScheduleEventPlacementRejectedData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n clampIntervalMinutes,\n expandRecurringEvents,\n formatDate,\n getBusinessHoursMod,\n getDayPosition,\n getDayTimeIntervals,\n getTimeAxisEventStyle,\n getVisibleEvents,\n isAllDayEvent,\n toDateString,\n} from '../../utils';\nimport { AgendaView, AgendaViewStylesNames } from '../AgendaView/AgendaView';\nimport {\n CurrentTimeIndicator,\n CurrentTimeIndicatorStylesNames,\n} from '../CurrentTimeIndicator/CurrentTimeIndicator';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { ScheduleBackgroundEvent } from '../ScheduleBackgroundEvent';\nimport {\n RenderEvent,\n RenderEventBody,\n ScheduleEvent,\n ScheduleEventStylesNames,\n} from '../ScheduleEvent/ScheduleEvent';\nimport { MonthYearSelectStylesNames } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getDayViewEvents } from './get-day-view-events/get-day-view-events';\nimport classes from './DayView.module.css';\n\nexport type DayViewStylesNames =\n | 'dayView'\n | 'dayViewInner'\n | 'dayViewScrollArea'\n | 'dayViewAllDay'\n | 'dayViewAllDayEvents'\n | 'dayViewSlot'\n | 'dayViewSlots'\n | 'dayViewTimeSlots'\n | 'dayViewSlotLabel'\n | 'dayViewSlotLabels'\n | 'dayViewBackgroundEvent'\n | 'dayViewBackgroundEventResizeHandle'\n | 'dayViewDragPreview'\n | MoreEventsStylesNames\n | ScheduleEventStylesNames\n | Exclude<CombinedScheduleHeaderStylesNames, MonthYearSelectStylesNames>\n | CurrentTimeIndicatorStylesNames\n | AgendaViewStylesNames;\n\nexport type DayViewCssVariables = {\n dayView: '--day-view-radius' | '--day-view-slot-height' | '--day-view-all-day-slot-height';\n};\n\nexport interface DayViewProps\n extends BoxProps, StylesApiProps<DayViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Day to display, Date object or date string in `YYYY-MM-DD` format */\n date: Date | DateStringValue;\n\n /** Called when date is changed */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Events to display, must be a stable reference */\n events?: ScheduleEventData[];\n\n /** Time slots start time, in `HH:mm:ss` format @default 00:00:00 */\n startTime?: string;\n\n /** Time slots end time in `HH:mm:ss` format @default 23:59:59 */\n endTime?: string;\n\n /** Number of minutes for each time slot. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours (e.g. `120`, `240`) @default 15 */\n intervalMinutes?: number;\n\n /** If set, grid lines are displayed for intervals smaller than one hour, for example 15 and 30 minutes intervals @default true */\n withSubHourGridLines?: boolean;\n\n /** Determines how events that overlap in time are laid out: `columns` splits the available width between them, `cascade` indents each event and stacks it over the previous one @default 'columns' */\n eventOverlapMode?: ScheduleEventOverlapMode;\n\n /** Time in ms the pointer must rest on an event before it is raised above the events covering it, only used with `eventOverlapMode=\"cascade\"` @default 600 */\n eventOverlapRaiseDelay?: number;\n\n /** If set, the all-day slot is displayed below the header @default true */\n withAllDaySlot?: boolean;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Dayjs format for slot labels or a callback function that returns formatted value @default HH:mm */\n slotLabelFormat?: DateLabelFormat;\n\n /** Date format in the header @default MMMM D, YYYY */\n headerFormat?: DateLabelFormat;\n\n /** If set, displays a line indicating the current time. By default, displayed only for the current day. */\n withCurrentTimeIndicator?: boolean;\n\n /** If set, the time indicator displays the current time in the bubble @default true */\n withCurrentTimeBubble?: boolean;\n\n /** A function to get the current time, called on every tick. Can be used to display the current time indicator in a different timezone. @default () => dayjs() */\n getCurrentTime?: () => AnyDateValue;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous month control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next month control */\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to today control */\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to view level select */\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n /** Height of 1hr slot @default 64px */\n slotHeight?: React.CSSProperties['height'];\n\n /** Height of all-day slot @default 44px */\n allDaySlotHeight?: React.CSSProperties['height'];\n\n /** Props passed down to the `ScrollArea.Autosize` component */\n scrollAreaProps?: ScrollAreaAutosizeProps & DataAttributes;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Function to customize event body, `event` object is passed as first argument */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */\n renderEvent?: RenderEvent;\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n\n /** If set to true, highlights business hours with white background @default false */\n highlightBusinessHours?: boolean;\n\n /** Business hours range in `HH:mm:ss` format @default ['09:00:00', '17:00:00'] */\n businessHours?: [string, string];\n\n /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped at new time */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Snap step for moving events by drag and drop, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */\n eventDragInterval?: number;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when time slot is clicked */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n }) => void;\n\n /** Called when all-day slot is clicked */\n onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** If set, enables drag-to-select time slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a time slot range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** Time to scroll to on initial render, in `HH:mm:ss` format */\n startScrollTime?: string;\n\n /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */\n onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void;\n\n /** If true, events can be resized by dragging their edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */\n canDropEvent?: (data: ScheduleCanDropEventData) => boolean;\n\n /** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */\n canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;\n\n /** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */\n canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;\n\n /** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Called when a drop or resize is rejected */\n onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;\n\n /** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */\n eventResizeInterval?: number;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Function to get additional props for each time slot. Receives slot start and end datetime strings. Returned props are spread onto the slot element. Event handlers returned by this function are composed with internal handlers (e.g. onClick) rather than overriding them. */\n getTimeSlotProps?: (data: {\n start: DateTimeStringValue;\n end: DateTimeStringValue;\n }) => Record<string, any> | undefined;\n\n /** If set, displays an Agenda button in the header that opens an agenda list view @default false */\n withAgenda?: boolean;\n}\n\nexport type DayViewFactory = Factory<{\n props: DayViewProps;\n ref: HTMLDivElement;\n stylesNames: DayViewStylesNames;\n vars: DayViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'DayView',\n startTime: '00:00:00',\n endTime: '23:59:59',\n intervalMinutes: 15,\n withSubHourGridLines: true,\n withAllDaySlot: true,\n slotLabelFormat: 'HH:mm',\n headerFormat: 'MMMM D, YYYY',\n withCurrentTimeBubble: true,\n withHeader: true,\n highlightBusinessHours: false,\n businessHours: ['09:00:00', '17:00:00'],\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n withInteractiveBackgroundEvents: false,\n eventOverlapMode: 'columns',\n eventOverlapRaiseDelay: 600,\n} satisfies Partial<DayViewProps>;\n\nconst varsResolver = createVarsResolver<DayViewFactory>(\n (_theme, { radius, slotHeight, allDaySlotHeight }) => ({\n dayView: {\n '--day-view-radius': radius !== undefined ? getRadius(radius) : undefined,\n '--day-view-slot-height': rem(slotHeight),\n '--day-view-all-day-slot-height': rem(allDaySlotHeight),\n },\n })\n);\n\nexport const DayView = factory<DayViewFactory>((_props) => {\n const props = useProps('DayView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n __staticSelector,\n startTime,\n endTime,\n intervalMinutes,\n withSubHourGridLines,\n eventOverlapMode,\n eventOverlapRaiseDelay,\n withAllDaySlot,\n date,\n locale,\n slotLabelFormat,\n headerFormat,\n getCurrentTime,\n withCurrentTimeIndicator,\n withCurrentTimeBubble,\n withHeader,\n radius,\n onDateChange,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n slotHeight,\n allDaySlotHeight,\n scrollAreaProps,\n events,\n moreEventsProps,\n renderEventBody,\n renderEvent,\n labels,\n highlightBusinessHours,\n businessHours,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n eventDragInterval,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onEventClick,\n withInteractiveBackgroundEvents,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n startScrollTime,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n eventResizeInterval,\n recurrenceExpansionLimit,\n getTimeSlotProps,\n withAgenda,\n ...others\n } = props;\n\n const [agendaOpen, setAgendaOpen] = useState(false);\n\n const getStyles = useStyles<DayViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'dayView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<DayViewFactory>({\n classNames,\n styles,\n props,\n });\n\n const stylesApiProps = {\n classNames: resolvedClassNames,\n styles: resolvedStyles,\n attributes,\n __staticSelector,\n radius,\n };\n\n const ctx = useDatesContext();\n const resolveNow = () => (getCurrentTime ? dayjs(getCurrentTime()) : dayjs());\n const showCurrentTimeIndicator =\n withCurrentTimeIndicator ?? dayjs(date).isSame(resolveNow(), 'day');\n const slots = getDayTimeIntervals({ startTime, endTime, intervalMinutes });\n const slotsRef = useRef<HTMLButtonElement[]>([]);\n const viewportRef = useRef<HTMLDivElement>(null);\n const timeSlotsContainerRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n\n useAutoScrollOnDrag({\n viewportRef,\n enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static',\n });\n\n useIsomorphicEffect(() => {\n if (!startScrollTime || !viewportRef.current || slotsRef.current.length === 0) {\n return;\n }\n\n const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);\n if (targetIndex < 0) {\n return;\n }\n\n const targetSlot = slotsRef.current[targetIndex];\n if (!targetSlot) {\n return;\n }\n\n const slotRect = targetSlot.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n viewportRef.current.scrollTo({\n left: 0,\n top: slotRect.top - viewportRect.top + viewportRef.current.scrollTop,\n });\n }, []);\n\n const dragOffsetRef = useRef<{ offset: number; size: number }>({ offset: 0, size: 0 });\n\n const getSlotIndexFromDragPoint = useCallback((event: React.DragEvent) => {\n const slotIndex = slotsRef.current.findIndex((slotNode) => {\n if (!slotNode) {\n return false;\n }\n\n const rect = slotNode.getBoundingClientRect();\n return event.clientY >= rect.top && event.clientY <= rect.bottom;\n });\n\n if (slotIndex >= 0) {\n const rect = slotsRef.current[slotIndex]!.getBoundingClientRect();\n dragOffsetRef.current = { offset: event.clientY - rect.top, size: rect.height };\n return slotIndex;\n }\n\n const firstSlot = slotsRef.current[0];\n const lastSlot = slotsRef.current[slotsRef.current.length - 1];\n\n if (!firstSlot || !lastSlot) {\n return null;\n }\n\n const firstRect = firstSlot.getBoundingClientRect();\n const lastRect = lastSlot.getBoundingClientRect();\n\n if (event.clientY < firstRect.top) {\n dragOffsetRef.current = { offset: 0, size: firstRect.height };\n return 0;\n }\n\n if (event.clientY > lastRect.bottom) {\n dragOffsetRef.current = { offset: lastRect.height, size: lastRect.height };\n return slotsRef.current.length - 1;\n }\n\n return null;\n }, []);\n\n const handleSlotKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>, slotIndex: number) => {\n const direction = event.key;\n if (direction === 'ArrowDown' && slotIndex < slots.length - 1) {\n event.preventDefault();\n slotsRef.current[slotIndex + 1]?.focus();\n } else if (direction === 'ArrowUp' && slotIndex > 0) {\n event.preventDefault();\n slotsRef.current[slotIndex - 1]?.focus();\n }\n };\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex) => {\n if (!onSlotDragEnd) {\n return;\n }\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n onSlotDragEnd(\n `${slotDate} ${slots[startIndex].startTime}`,\n `${slotDate} ${slots[endIndex].endTime}`\n );\n },\n });\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('day').toDate(),\n rangeEnd: dayjs(date).endOf('day').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const eventsData = getDayViewEvents({\n events: expandedEvents,\n date,\n startTime,\n endTime,\n intervalMinutes,\n eventOverlapMode,\n });\n\n const getExternalDropDateTime = useCallback(\n (slotIndex: number) => {\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n const slotTime = slots[slotIndex].startTime;\n const slotStart = `${slotDate} ${slotTime}`;\n\n if (eventDragInterval == null) {\n return slotStart;\n }\n\n const { start } = calculateDropTime({\n draggedEvent: { start: slotStart, end: slotStart } as ScheduleEventData,\n targetDate: date,\n targetSlotTime: slotTime,\n intervalMinutes,\n dragIntervalMinutes: eventDragInterval,\n slotOffset: dragOffsetRef.current.offset,\n slotSize: dragOffsetRef.current.size,\n startTime,\n endTime,\n });\n\n return dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n },\n [date, slots, eventDragInterval, intervalMinutes, startTime, endTime]\n );\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, slotIndex: number) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop(e.dataTransfer, getExternalDropDateTime(slotIndex));\n },\n [onExternalEventDrop, getExternalDropDateTime]\n );\n\n const getDropTimeForSlot = (slotIndex: number, draggedEvent: ScheduleEventData) => {\n const slotTime = slots[slotIndex].startTime;\n return calculateDropTime({\n draggedEvent,\n targetDate: date,\n targetSlotTime: slotTime,\n intervalMinutes,\n dragIntervalMinutes: eventDragInterval,\n slotOffset: eventDragInterval == null ? undefined : dragOffsetRef.current.offset,\n slotSize: eventDragInterval == null ? undefined : dragOffsetRef.current.size,\n startTime,\n endTime,\n });\n };\n\n const dragDrop = useDragDropHandlers({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: getDropTimeForSlot,\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n events: expandedEvents,\n preventEventOverlap,\n canDropEvent,\n canDropExternalEvent,\n onEventPlacementRejected,\n getExternalDropDateTime,\n });\n\n const updateDragPreview = (slotIndex: number) => {\n const draggedEvent = dragDrop.dragContextValue.draggedEvent;\n if (eventDragInterval == null || !draggedEvent) {\n return;\n }\n const { start, end } = getDropTimeForSlot(slotIndex, draggedEvent);\n const newStart = dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n if (dragDrop.dragPreview?.start !== newStart) {\n dragDrop.setDragPreview({\n start: newStart,\n end: dayjs(end).format('YYYY-MM-DD HH:mm:ss'),\n target: slotIndex,\n });\n }\n };\n\n const eventResize = useEventResize({\n enabled: withEventResize,\n mode,\n startTime,\n endTime,\n intervalMinutes,\n resizeIntervalMinutes: eventResizeInterval,\n onEventResize,\n canResizeEvent,\n events: expandedEvents,\n preventEventOverlap,\n canResizeEventTo,\n onEventPlacementRejected,\n withBackgroundEvents: withInteractiveBackgroundEvents,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const eventsNodes = eventsData.regularEvents.map((event) => {\n const eventIsAllDay = isAllDayEvent({ event, date });\n const isDraggable = !eventIsAllDay && dragDrop.isDraggableEvent(event);\n const isResizable = !eventIsAllDay && eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n const eventTop = resizePosition ? resizePosition.top : event.position.top;\n const eventHeight = resizePosition ? resizePosition.height : event.position.height;\n\n return (\n <ScheduleEvent\n event={event}\n key={event.id}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n autoSize\n draggable={isDraggable}\n withResize={isResizable}\n isResizing={resizePosition !== null}\n onResizeStart={\n isResizable\n ? (edge, e) => {\n if (timeSlotsContainerRef.current) {\n eventResize.handleResizeStart({\n event,\n edge,\n container: timeSlotsContainerRef.current,\n originalTop: event.position.top,\n originalHeight: event.position.height,\n eventDate: dayjs(date).format('YYYY-MM-DD'),\n pointerEvent: e,\n });\n }\n }\n : undefined\n }\n mode={mode}\n onClick={\n onEventClick\n ? (e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(event, e);\n }\n }\n : undefined\n }\n {...stylesApiProps}\n mod={{\n cascade: eventOverlapMode === 'cascade',\n invalid: resizePosition !== null && !eventResize.resizeValid,\n }}\n style={{\n ...stylesApiProps.styles?.event,\n top: `${eventTop}%`,\n height: `${eventHeight}%`,\n insetInlineStart: `${event.position.offset}%`,\n width: `${event.position.width}%`,\n position: 'absolute',\n '--event-z-index': event.position.column + 3,\n '--event-z-index-raised': event.position.overlaps + 3,\n }}\n />\n );\n });\n\n const allDayEventsCount = getVisibleEvents({\n maxEvents: 2,\n totalEvents: eventsData.allDayEvents.length,\n });\n\n const allDayEventsNodes = eventsData.allDayEvents\n .slice(0, allDayEventsCount.visibleEventsCount)\n .map((event) => (\n <ScheduleEvent\n key={event.id}\n event={event}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n style={{ maxHeight: '50%' }}\n nowrap\n autoSize\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n {...stylesApiProps}\n />\n ));\n\n const dayGroup = dayjs(date).format('YYYY-MM-DD');\n\n const suppressDropHighlight = eventDragInterval != null && dragDrop.dragContextValue.isDragging;\n\n const items = slots.map((slot, index) => {\n const isDropTarget = !suppressDropHighlight && dragDrop.isDropTarget(index);\n const isDragSelected = slotDragSelect.isSlotSelected(index, dayGroup);\n const slotStart = `${dayGroup} ${slot.startTime}` as DateTimeStringValue;\n const slotEnd = `${dayGroup} ${slot.endTime}` as DateTimeStringValue;\n const { onClick: externalOnClick, ...externalSlotProps } =\n getTimeSlotProps?.({ start: slotStart, end: slotEnd }) || {};\n\n const handleClick =\n mode === 'static'\n ? undefined\n : (event: React.MouseEvent<HTMLButtonElement>) => {\n onTimeSlotClick?.({\n slotStart,\n slotEnd,\n nativeEvent: event,\n });\n externalOnClick?.(event);\n };\n\n return (\n <UnstyledButton\n {...getStyles('dayViewSlot')}\n key={slot.startTime}\n ref={(node) => {\n slotsRef.current[index] = node!;\n }}\n mod={{\n first: index === 0,\n 'hour-start': slot.isHourStart,\n ...getBusinessHoursMod({\n time: slot.startTime,\n businessHours,\n highlightBusinessHours,\n }),\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n }}\n __vars={{ '--slot-size': `${clampIntervalMinutes(intervalMinutes) / 60}` }}\n aria-label={`${getLabel('timeSlot', labels)} ${slot.startTime} - ${slot.endTime}`}\n tabIndex={mode === 'static' ? -1 : index === 0 ? 0 : -1}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? index : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? dayGroup : undefined}\n onKeyDown={mode === 'static' ? undefined : (e) => handleSlotKeyDown(e, index)}\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) => slotDragSelect.handleSlotPointerDown(e, index, dayGroup)\n : undefined\n }\n onClick={handleClick}\n onDragOver={withDragHandlers ? (event) => event.preventDefault() : undefined}\n {...externalSlotProps}\n />\n );\n });\n\n const slotsLabels = slots.reduce<React.ReactNode[]>((acc, slot) => {\n if (slot.isHourStart) {\n const slotTime = dayjs(`${dayjs(date).format('YYYY-MM-DD')} ${slot.startTime}`);\n const label = formatDate({\n locale: ctx.getLocale(locale),\n date: slotTime,\n format: slotLabelFormat,\n });\n\n acc.push(\n <Box\n {...getStyles('dayViewSlotLabel')}\n key={slot.startTime}\n mod={getBusinessHoursMod({\n time: slot.startTime,\n businessHours,\n highlightBusinessHours,\n })}\n >\n {label}\n </Box>\n );\n }\n return acc;\n }, []);\n\n const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== 'static';\n\n const backgroundAllDayEventNodes = eventsData.backgroundAllDayEvents.map((event) => (\n <ScheduleBackgroundEvent\n key={`bg-allday-${event.id}`}\n event={event}\n renderEvent={renderEvent}\n renderEventBody={renderEventBody}\n interactive={interactiveBackgroundEvents}\n onEventClick={onEventClick}\n {...getStyles('dayViewBackgroundEvent', {\n style: { top: 0, height: '100%', width: '100%' },\n })}\n />\n ));\n\n const backgroundTimedEventNodes = eventsData.backgroundTimedEvents.map((event) => {\n const isResizable = eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n\n return (\n <ScheduleBackgroundEvent<'top' | 'bottom'>\n key={event.id}\n event={event}\n renderEvent={renderEvent}\n renderEventBody={renderEventBody}\n interactive={interactiveBackgroundEvents}\n onEventClick={\n onEventClick\n ? (clickedEvent, e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(clickedEvent, e);\n }\n }\n : undefined\n }\n withResize={isResizable}\n isResizing={resizePosition !== null}\n resizeHandleProps={getStyles('dayViewBackgroundEventResizeHandle')}\n onResizeStart={\n isResizable\n ? (edge, e) => {\n if (timeSlotsContainerRef.current) {\n eventResize.handleResizeStart({\n event,\n edge,\n container: timeSlotsContainerRef.current,\n originalTop: event.position.top,\n originalHeight: event.position.height,\n eventDate: dayjs(date).format('YYYY-MM-DD'),\n pointerEvent: e,\n });\n }\n }\n : undefined\n }\n {...getStyles('dayViewBackgroundEvent', {\n style: {\n ...getTimeAxisEventStyle({\n start: resizePosition ? resizePosition.top : event.position.top,\n span: resizePosition ? resizePosition.height : event.position.height,\n axis: 'vertical',\n }),\n width: '100%',\n },\n })}\n />\n );\n });\n\n const content = (\n <Box\n {...getStyles('dayView')}\n __vars={{ '--event-raise-delay': `${eventOverlapRaiseDelay}ms` }}\n mod={{\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n 'hide-sub-hour-grid-lines': !withSubHourGridLines,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n }}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"day\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'day')),\n next: () => toDateString(dayjs(date).add(1, 'day')),\n today: () => toDateString(resolveNow()),\n }}\n control={{\n title: formatDate({ locale: ctx.getLocale(locale), date, format: headerFormat }),\n miw: 140,\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={viewSelectProps}\n stylesApiProps={stylesApiProps}\n onAgendaClick={withAgenda ? () => setAgendaOpen((v) => !v) : undefined}\n agendaActive={agendaOpen}\n />\n )}\n\n {agendaOpen && (\n <AgendaView\n rangeStart={dayjs(date).startOf('day').format('YYYY-MM-DD')}\n rangeEnd={dayjs(date).endOf('day').format('YYYY-MM-DD')}\n events={events}\n locale={locale}\n labels={labels}\n mode={mode}\n onEventClick={onEventClick}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n {...stylesApiProps}\n />\n )}\n\n {!agendaOpen && (\n <ScrollArea.Autosize\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('dayViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n viewportRef={mergedViewportRef}\n >\n <Box {...getStyles('dayViewInner')}>\n <div {...getStyles('dayViewSlotLabels')}>\n {withAllDaySlot && (\n <Box {...getStyles('dayViewSlotLabel')} mod={{ 'all-day': true }}>\n {getLabel('allDay', labels)}\n </Box>\n )}\n {slotsLabels}\n </div>\n\n <div {...getStyles('dayViewSlots')}>\n {withAllDaySlot && (\n <div {...getStyles('dayViewAllDay')}>\n {backgroundAllDayEventNodes}\n <div {...getStyles('dayViewAllDayEvents')}>\n {allDayEventsNodes}\n {allDayEventsCount.hiddenEventsCount > 0 && (\n <MoreEvents\n events={eventsData.allDayEvents}\n moreEventsCount={allDayEventsCount.hiddenEventsCount}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n mode={mode}\n labels={labels}\n onEventClick={onEventClick}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n )}\n </div>\n <UnstyledButton\n {...getStyles('dayViewSlot')}\n mod={{ 'all-day': true, static: mode === 'static' }}\n aria-label={`${getLabel('timeSlot', labels)} ${getLabel('allDay', labels)}`}\n onClick={\n mode === 'static' || !onAllDaySlotClick\n ? undefined\n : (e) => {\n onAllDaySlotClick(dayjs(date).format('YYYY-MM-DD'), e);\n }\n }\n />\n </div>\n )}\n\n <div\n ref={timeSlotsContainerRef}\n {...getStyles('dayViewTimeSlots')}\n onDragOver={\n withDragHandlers\n ? (event) => {\n const slotIndex = getSlotIndexFromDragPoint(event);\n if (slotIndex !== null) {\n dragDrop.handleDragOver(event, slotIndex);\n updateDragPreview(slotIndex);\n }\n }\n : undefined\n }\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={\n withDragHandlers\n ? (event) => {\n const slotIndex = getSlotIndexFromDragPoint(event);\n if (slotIndex !== null) {\n dragDrop.handleDrop(event, slotIndex);\n }\n }\n : undefined\n }\n >\n {backgroundTimedEventNodes}\n\n {eventsNodes}\n\n {dragDrop.dragPreview && dragDrop.dragContextValue.draggedEvent && (\n <Box\n mod={{ invalid: !dragDrop.dropValid }}\n {...getStyles('dayViewDragPreview', {\n style: (() => {\n const { top, height } = getDayPosition({\n event: {\n ...dragDrop.dragContextValue.draggedEvent,\n start: dragDrop.dragPreview.start,\n end: dragDrop.dragPreview.end,\n },\n startTime,\n endTime,\n intervalMinutes,\n });\n return {\n position: 'absolute',\n insetInlineStart: 0,\n insetInlineEnd: 0,\n top: `${top}%`,\n height: `${height}%`,\n };\n })(),\n })}\n />\n )}\n\n {showCurrentTimeIndicator && (\n <CurrentTimeIndicator\n startOffset=\"calc(var(--day-view-slot-labels-width) * -1)\"\n endOffset=\"0rem\"\n topOffset=\"0rem\"\n timeBubbleStartOffset=\"calc(var(--day-view-slot-labels-width) * -1 + 30px)\"\n currentTimeFormat={slotLabelFormat}\n withTimeBubble={withCurrentTimeBubble}\n withThumb={!withCurrentTimeBubble}\n locale={locale}\n startTime={startTime}\n endTime={endTime}\n intervalMinutes={intervalMinutes}\n getCurrentTime={getCurrentTime}\n {...stylesApiProps}\n />\n )}\n {items}\n </div>\n </div>\n </Box>\n </ScrollArea.Autosize>\n )}\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nDayView.displayName = '@mantine/schedule/DayView';\nDayView.classes = classes;\nDayView.varsResolver = varsResolver;\n\nexport namespace DayView {\n export type Props = DayViewProps;\n export type Factory = DayViewFactory;\n export type StylesNames = DayViewStylesNames;\n export type CssVariables = DayViewCssVariables;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmTA,MAAM,eAAe;CACnB,kBAAkB;CAClB,WAAW;CACX,SAAS;CACT,iBAAiB;CACjB,sBAAsB;CACtB,gBAAgB;CAChB,iBAAiB;CACjB,cAAc;CACd,uBAAuB;CACvB,YAAY;CACZ,wBAAwB;CACxB,eAAe,CAAC,YAAY,UAAU;CACtC,uBAAuB;CACvB,oBAAoB;CACpB,iBAAiB;CACjB,MAAM;CACN,iCAAiC;CACjC,kBAAkB;CAClB,wBAAwB;AAC1B;AAEA,MAAM,gBAAA,GAAeA,cAAAA,mBAAAA,EAClB,QAAQ,EAAE,QAAQ,YAAY,wBAAwB,EACrD,SAAS;CACP,qBAAqB,WAAW,KAAA,KAAA,GAAYC,cAAAA,UAAAA,CAAU,MAAM,IAAI,KAAA;CAChE,2BAAA,GAA0BC,cAAAA,IAAAA,CAAI,UAAU;CACxC,mCAAA,GAAkCA,cAAAA,IAAAA,CAAI,gBAAgB;AACxD,EACF,EACF;AAEA,MAAa,WAAA,GAAUC,cAAAA,QAAAA,EAAyB,WAAW;CACzD,MAAM,SAAA,GAAQC,cAAAA,SAAAA,CAAS,WAAW,cAAc,MAAM;CACtD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,YACA,MACA,kBACA,WACA,SACA,iBACA,sBACA,kBACA,wBACA,gBACA,MACA,QACA,iBACA,cACA,gBACA,0BACA,uBACA,YACA,QACA,cACA,cACA,sBACA,kBACA,mBACA,iBACA,YACA,kBACA,iBACA,QACA,iBACA,iBACA,aACA,QACA,wBACA,eACA,uBACA,aACA,cACA,mBACA,kBACA,gBACA,iBACA,mBACA,cACA,iCACA,oBACA,eACA,MACA,iBACA,qBACA,iBACA,eACA,gBACA,cACA,sBACA,kBACA,qBACA,0BACA,qBACA,0BACA,kBACA,YACA,GAAG,WACD;CAEJ,MAAM,CAAC,YAAY,kBAAA,GAAiBC,MAAAA,SAAAA,CAAS,KAAK;CAElD,MAAM,aAAA,GAAYC,cAAAA,UAAAA,CAA0B;EAC1C,MAAM;EACN,SAAA,uBAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,EAAE,oBAAoB,oBAAA,GAAmBC,cAAAA,qBAAAA,CAAqC;EAClF;EACA;EACA;CACF,CAAC;CAED,MAAM,iBAAiB;EACrB,YAAY;EACZ,QAAQ;EACR;EACA;EACA;CACF;CAEA,MAAM,OAAA,GAAMC,eAAAA,gBAAAA,CAAgB;CAC5B,MAAM,mBAAoB,kBAAA,GAAiB,MAAA,QAAA,CAAM,eAAe,CAAC,KAAA,GAAI,MAAA,QAAA,CAAM;CAC3E,MAAM,2BACJ,6BAAA,GAA4B,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,OAAO,WAAW,GAAG,KAAK;CACpE,MAAM,QAAQC,+BAAAA,oBAAoB;EAAE;EAAW;EAAS;CAAgB,CAAC;CACzE,MAAM,YAAA,GAAWC,MAAAA,OAAAA,CAA4B,CAAC,CAAC;CAC/C,MAAM,eAAA,GAAcA,MAAAA,OAAAA,CAAuB,IAAI;CAC/C,MAAM,yBAAA,GAAwBA,MAAAA,OAAAA,CAAuB,IAAI;CACzD,MAAM,qBAAA,GAAoBC,eAAAA,aAAAA,CAAa,aAAa,iBAAiB,WAAW;CAEhF,gCAAA,oBAAoB;EAClB;EACA,UAAU,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;CACxE,CAAC;CAED,CAAA,GAAA,eAAA,oBAAA,OAA0B;EACxB,IAAI,CAAC,mBAAmB,CAAC,YAAY,WAAW,SAAS,QAAQ,WAAW,GAC1E;EAGF,MAAM,cAAc,MAAM,WAAW,MAAM,EAAE,aAAa,eAAe;EACzE,IAAI,cAAc,GAChB;EAGF,MAAM,aAAa,SAAS,QAAQ;EACpC,IAAI,CAAC,YACH;EAGF,MAAM,WAAW,WAAW,sBAAsB;EAClD,MAAM,eAAe,YAAY,QAAQ,sBAAsB;EAC/D,YAAY,QAAQ,SAAS;GAC3B,MAAM;GACN,KAAK,SAAS,MAAM,aAAa,MAAM,YAAY,QAAQ;EAC7D,CAAC;CACH,GAAG,CAAC,CAAC;CAEL,MAAM,iBAAA,GAAgBD,MAAAA,OAAAA,CAAyC;EAAE,QAAQ;EAAG,MAAM;CAAE,CAAC;CAErF,MAAM,6BAAA,GAA4BE,MAAAA,YAAAA,EAAa,UAA2B;EACxE,MAAM,YAAY,SAAS,QAAQ,WAAW,aAAa;GACzD,IAAI,CAAC,UACH,OAAO;GAGT,MAAM,OAAO,SAAS,sBAAsB;GAC5C,OAAO,MAAM,WAAW,KAAK,OAAO,MAAM,WAAW,KAAK;EAC5D,CAAC;EAED,IAAI,aAAa,GAAG;GAClB,MAAM,OAAO,SAAS,QAAQ,UAAU,CAAE,sBAAsB;GAChE,cAAc,UAAU;IAAE,QAAQ,MAAM,UAAU,KAAK;IAAK,MAAM,KAAK;GAAO;GAC9E,OAAO;EACT;EAEA,MAAM,YAAY,SAAS,QAAQ;EACnC,MAAM,WAAW,SAAS,QAAQ,SAAS,QAAQ,SAAS;EAE5D,IAAI,CAAC,aAAa,CAAC,UACjB,OAAO;EAGT,MAAM,YAAY,UAAU,sBAAsB;EAClD,MAAM,WAAW,SAAS,sBAAsB;EAEhD,IAAI,MAAM,UAAU,UAAU,KAAK;GACjC,cAAc,UAAU;IAAE,QAAQ;IAAG,MAAM,UAAU;GAAO;GAC5D,OAAO;EACT;EAEA,IAAI,MAAM,UAAU,SAAS,QAAQ;GACnC,cAAc,UAAU;IAAE,QAAQ,SAAS;IAAQ,MAAM,SAAS;GAAO;GACzE,OAAO,SAAS,QAAQ,SAAS;EACnC;EAEA,OAAO;CACT,GAAG,CAAC,CAAC;CAEL,MAAM,qBAAqB,OAA+C,cAAsB;EAC9F,MAAM,YAAY,MAAM;EACxB,IAAI,cAAc,eAAe,YAAY,MAAM,SAAS,GAAG;GAC7D,MAAM,eAAe;GACrB,SAAS,QAAQ,YAAY,EAAE,EAAE,MAAM;EACzC,OAAO,IAAI,cAAc,aAAa,YAAY,GAAG;GACnD,MAAM,eAAe;GACrB,SAAS,QAAQ,YAAY,EAAE,EAAE,MAAM;EACzC;CACF;CAEA,MAAM,iBAAiBC,6BAAAA,kBAAkB;EACvC,SAAS,sBAAsB,SAAS;EACxC,YAAY,YAAY,aAAa;GACnC,IAAI,CAAC,eACH;GAEF,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,OAAO,YAAY;GAChD,cACE,GAAG,SAAS,GAAG,MAAM,WAAW,CAAC,aACjC,GAAG,SAAS,GAAG,MAAM,SAAS,CAAC,SACjC;EACF;CACF,CAAC;CAED,MAAM,iBAAiBC,gCAAAA,sBAAsB;EAC3C;EACA,aAAA,GAAY,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO;EAC9C,WAAA,GAAU,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO;EAC1C,gBAAgB;CAClB,CAAC;CAED,MAAM,aAAaC,4BAAAA,iBAAiB;EAClC,QAAQ;EACR;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,2BAAA,GAA0BH,MAAAA,YAAAA,EAC7B,cAAsB;EACrB,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,OAAO,YAAY;EAChD,MAAM,WAAW,MAAM,UAAU,CAAC;EAClC,MAAM,YAAY,GAAG,SAAS,GAAG;EAEjC,IAAI,qBAAqB,MACvB,OAAO;EAGT,MAAM,EAAE,UAAUI,4BAAAA,kBAAkB;GAClC,cAAc;IAAE,OAAO;IAAW,KAAK;GAAU;GACjD,YAAY;GACZ,gBAAgB;GAChB;GACA,qBAAqB;GACrB,YAAY,cAAc,QAAQ;GAClC,UAAU,cAAc,QAAQ;GAChC;GACA;EACF,CAAC;EAED,QAAA,GAAO,MAAA,QAAA,CAAM,KAAK,CAAC,CAAC,OAAO,qBAAqB;CAClD,GACA;EAAC;EAAM;EAAO;EAAmB;EAAiB;EAAW;CAAO,CACtE;CAEA,MAAM,sBAAA,GAAqBJ,MAAAA,YAAAA,EACxB,GAAoB,cAAsB;EACzC,IAAI,CAAC,qBACH;EAEF,oBAAoB,EAAE,cAAc,wBAAwB,SAAS,CAAC;CACxE,GACA,CAAC,qBAAqB,uBAAuB,CAC/C;CAEA,MAAM,sBAAsB,WAAmB,iBAAoC;EACjF,MAAM,WAAW,MAAM,UAAU,CAAC;EAClC,OAAOI,4BAAAA,kBAAkB;GACvB;GACA,YAAY;GACZ,gBAAgB;GAChB;GACA,qBAAqB;GACrB,YAAY,qBAAqB,OAAO,KAAA,IAAY,cAAc,QAAQ;GAC1E,UAAU,qBAAqB,OAAO,KAAA,IAAY,cAAc,QAAQ;GACxE;GACA;EACF,CAAC;CACH;CAEA,MAAM,WAAWC,+BAAAA,oBAAoB;EACnC,SAAS;EACT;EACA;EACA;EACA;EACA;EACA,qBAAqB;EACrB,gBAAgB,sBAAsB,qBAAqB,KAAA;EAC3D,QAAQ;EACR;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,qBAAqB,cAAsB;EAC/C,MAAM,eAAe,SAAS,iBAAiB;EAC/C,IAAI,qBAAqB,QAAQ,CAAC,cAChC;EAEF,MAAM,EAAE,OAAO,QAAQ,mBAAmB,WAAW,YAAY;EACjE,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,KAAK,CAAC,CAAC,OAAO,qBAAqB;EAC1D,IAAI,SAAS,aAAa,UAAU,UAClC,SAAS,eAAe;GACtB,OAAO;GACP,MAAA,GAAK,MAAA,QAAA,CAAM,GAAG,CAAC,CAAC,OAAO,qBAAqB;GAC5C,QAAQ;EACV,CAAC;CAEL;CAEA,MAAM,cAAcC,yBAAAA,eAAe;EACjC,SAAS;EACT;EACA;EACA;EACA;EACA,uBAAuB;EACvB;EACA;EACA,QAAQ;EACR;EACA;EACA;EACA,sBAAsB;CACxB,CAAC;CAED,MAAM,oBAAoB,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;CAEtF,MAAM,cAAc,WAAW,cAAc,KAAK,UAAU;EAC1D,MAAM,gBAAgBC,yBAAAA,cAAc;GAAE;GAAO;EAAK,CAAC;EACnD,MAAM,cAAc,CAAC,iBAAiB,SAAS,iBAAiB,KAAK;EACrE,MAAM,cAAc,CAAC,iBAAiB,YAAY,iBAAiB,KAAK;EACxE,MAAM,iBAAiB,YAAY,kBAAkB,MAAM,EAAE;EAC7D,MAAM,WAAW,iBAAiB,eAAe,MAAM,MAAM,SAAS;EACtE,MAAM,cAAc,iBAAiB,eAAe,SAAS,MAAM,SAAS;EAE5E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,eAAD;GACS;GAEU;GACJ;GACb,UAAA;GACA,WAAW;GACX,YAAY;GACZ,YAAY,mBAAmB;GAC/B,eACE,eACK,MAAM,MAAM;IACX,IAAI,sBAAsB,SACxB,YAAY,kBAAkB;KAC5B;KACA;KACA,WAAW,sBAAsB;KACjC,aAAa,MAAM,SAAS;KAC5B,gBAAgB,MAAM,SAAS;KAC/B,YAAA,GAAW,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,OAAO,YAAY;KAC1C,cAAc;IAChB,CAAC;GAEL,IACA,KAAA;GAEA;GACN,SACE,gBACK,MAAM;IACL,IAAI,CAAC,YAAY,YAAY,GAC3B,aAAa,OAAO,CAAC;GAEzB,IACA,KAAA;GAEN,GAAI;GACJ,KAAK;IACH,SAAS,qBAAqB;IAC9B,SAAS,mBAAmB,QAAQ,CAAC,YAAY;GACnD;GACA,OAAO;IACL,GAAG,eAAe,QAAQ;IAC1B,KAAK,GAAG,SAAS;IACjB,QAAQ,GAAG,YAAY;IACvB,kBAAkB,GAAG,MAAM,SAAS,OAAO;IAC3C,OAAO,GAAG,MAAM,SAAS,MAAM;IAC/B,UAAU;IACV,mBAAmB,MAAM,SAAS,SAAS;IAC3C,0BAA0B,MAAM,SAAS,WAAW;GACtD;EACD,GAjDM,MAAM,EAiDZ;CAEL,CAAC;CAED,MAAM,oBAAoBC,2BAAAA,iBAAiB;EACzC,WAAW;EACX,aAAa,WAAW,aAAa;CACvC,CAAC;CAED,MAAM,oBAAoB,WAAW,aAClC,MAAM,GAAG,kBAAkB,kBAAkB,CAAC,CAC9C,KAAK,UACJ,iBAAA,GAAA,kBAAA,IAAA,CAACD,sBAAAA,eAAD;EAES;EACU;EACJ;EACb,OAAO,EAAE,WAAW,MAAM;EAC1B,QAAA;EACA,UAAA;EACM;EACN,SAAS,gBAAgB,MAAM,aAAa,OAAO,CAAC,IAAI,KAAA;EACxD,GAAI;CACL,GAVM,MAAM,EAUZ,CACF;CAEH,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,OAAO,YAAY;CAEhD,MAAM,wBAAwB,qBAAqB,QAAQ,SAAS,iBAAiB;CAErF,MAAM,QAAQ,MAAM,KAAK,MAAM,UAAU;EACvC,MAAM,eAAe,CAAC,yBAAyB,SAAS,aAAa,KAAK;EAC1E,MAAM,iBAAiB,eAAe,eAAe,OAAO,QAAQ;EACpE,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK;EACtC,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK;EACpC,MAAM,EAAE,SAAS,iBAAiB,GAAG,sBACnC,mBAAmB;GAAE,OAAO;GAAW,KAAK;EAAQ,CAAC,KAAK,CAAC;EAE7D,MAAM,cACJ,SAAS,WACL,KAAA,KACC,UAA+C;GAC9C,kBAAkB;IAChB;IACA;IACA,aAAa;GACf,CAAC;GACD,kBAAkB,KAAK;EACzB;EAEN,OACE,iBAAA,GAAA,MAAA,cAAA,CAACE,cAAAA,gBAAD;GACE,GAAI,UAAU,aAAa;GAC3B,KAAK,KAAK;GACV,MAAM,SAAS;IACb,SAAS,QAAQ,SAAS;GAC5B;GACA,KAAK;IACH,OAAO,UAAU;IACjB,cAAc,KAAK;IACnB,GAAGC,+BAAAA,oBAAoB;KACrB,MAAM,KAAK;KACX;KACA;IACF,CAAC;IACD,eAAe;IACf,iBAAiB;IACjB,QAAQ,SAAS;GACnB;GACA,QAAQ,EAAE,eAAe,GAAGC,+BAAAA,qBAAqB,eAAe,IAAI,KAAK;GACzE,cAAY,GAAGC,eAAAA,SAAS,YAAY,MAAM,EAAE,GAAG,KAAK,UAAU,KAAK,KAAK;GACxE,UAAU,SAAS,WAAW,KAAK,UAAU,IAAI,IAAI;GACrD,wBAAsB,sBAAsB,SAAS,WAAW,QAAQ,KAAA;GACxE,wBAAsB,sBAAsB,SAAS,WAAW,WAAW,KAAA;GAC3E,WAAW,SAAS,WAAW,KAAA,KAAa,MAAM,kBAAkB,GAAG,KAAK;GAC5E,eACE,sBAAsB,SAAS,YAC1B,MAAM,eAAe,sBAAsB,GAAG,OAAO,QAAQ,IAC9D,KAAA;GAEN,SAAS;GACT,YAAY,oBAAoB,UAAU,MAAM,eAAe,IAAI,KAAA;GACnE,GAAI;EACL,CAAA;CAEL,CAAC;CAED,MAAM,cAAc,MAAM,QAA2B,KAAK,SAAS;EACjE,IAAI,KAAK,aAAa;GACpB,MAAM,YAAA,GAAW,MAAA,QAAA,CAAM,IAAA,GAAG,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,OAAO,YAAY,EAAE,GAAG,KAAK,WAAW;GAC9E,MAAM,QAAQC,oBAAAA,WAAW;IACvB,QAAQ,IAAI,UAAU,MAAM;IAC5B,MAAM;IACN,QAAQ;GACV,CAAC;GAED,IAAI,KACF,iBAAA,GAAA,MAAA,cAAA,CAACC,cAAAA,KAAD;IACE,GAAI,UAAU,kBAAkB;IAChC,KAAK,KAAK;IACV,KAAKJ,+BAAAA,oBAAoB;KACvB,MAAM,KAAK;KACX;KACA;IACF,CAAC;GAGE,GADF,KACE,CACP;EACF;EACA,OAAO;CACT,GAAG,CAAC,CAAC;CAEL,MAAM,8BAA8B,mCAAmC,SAAS;CAEhF,MAAM,6BAA6B,WAAW,uBAAuB,KAAK,UACxE,iBAAA,GAAA,kBAAA,IAAA,CAACK,gCAAAA,yBAAD;EAES;EACM;EACI;EACjB,aAAa;EACC;EACd,GAAI,UAAU,0BAA0B,EACtC,OAAO;GAAE,KAAK;GAAG,QAAQ;GAAQ,OAAO;EAAO,EACjD,CAAC;CACF,GATM,aAAa,MAAM,IASzB,CACF;CAED,MAAM,4BAA4B,WAAW,sBAAsB,KAAK,UAAU;EAChF,MAAM,cAAc,YAAY,iBAAiB,KAAK;EACtD,MAAM,iBAAiB,YAAY,kBAAkB,MAAM,EAAE;EAE7D,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,gCAAAA,yBAAD;GAES;GACM;GACI;GACjB,aAAa;GACb,cACE,gBACK,cAAc,MAAM;IACnB,IAAI,CAAC,YAAY,YAAY,GAC3B,aAAa,cAAc,CAAC;GAEhC,IACA,KAAA;GAEN,YAAY;GACZ,YAAY,mBAAmB;GAC/B,mBAAmB,UAAU,oCAAoC;GACjE,eACE,eACK,MAAM,MAAM;IACX,IAAI,sBAAsB,SACxB,YAAY,kBAAkB;KAC5B;KACA;KACA,WAAW,sBAAsB;KACjC,aAAa,MAAM,SAAS;KAC5B,gBAAgB,MAAM,SAAS;KAC/B,YAAA,GAAW,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,OAAO,YAAY;KAC1C,cAAc;IAChB,CAAC;GAEL,IACA,KAAA;GAEN,GAAI,UAAU,0BAA0B,EACtC,OAAO;IACL,GAAGC,kCAAAA,sBAAsB;KACvB,OAAO,iBAAiB,eAAe,MAAM,MAAM,SAAS;KAC5D,MAAM,iBAAiB,eAAe,SAAS,MAAM,SAAS;KAC9D,MAAM;IACR,CAAC;IACD,OAAO;GACT,EACF,CAAC;EACF,GA5CM,MAAM,EA4CZ;CAEL,CAAC;CAED,MAAM,UACJ,iBAAA,GAAA,kBAAA,KAAA,CAACF,cAAAA,KAAD;EACE,GAAI,UAAU,SAAS;EACvB,QAAQ,EAAE,uBAAuB,GAAG,uBAAuB,IAAI;EAC/D,KAAK;GACH,QAAQ,SAAS;GACjB,iBAAiB,eAAe;GAChC,4BAA4B,CAAC;GAC7B,qBAAqB,YAAY,cAAc,SAAS,iBAAiB;EAC3E;EACA,GAAI;EATN,UAAA;GAWG,cACC,iBAAA,GAAA,kBAAA,IAAA,CAACG,2BAAAA,oBAAD;IACE,MAAK;IACL,oBAAoB;KAClB,gBAAgBC,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;KAC3D,YAAYA,uBAAAA,cAAAA,GAAa,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;KAClD,aAAaA,uBAAAA,aAAa,WAAW,CAAC;IACxC;IACA,SAAS;KACP,OAAOL,oBAAAA,WAAW;MAAE,QAAQ,IAAI,UAAU,MAAM;MAAG;MAAM,QAAQ;KAAa,CAAC;KAC/E,KAAK;IACP;IACQ;IACM;IACA;IACQ;IACJ;IACC;IACF;IACD;IAChB,eAAe,mBAAmB,eAAe,MAAM,CAAC,CAAC,IAAI,KAAA;IAC7D,cAAc;GACf,CAAA;GAGF,cACC,iBAAA,GAAA,kBAAA,IAAA,CAACM,mBAAAA,YAAD;IACE,aAAA,GAAY,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,YAAY;IAC1D,WAAA,GAAU,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,YAAY;IAC9C;IACA;IACA;IACF;IACQ;IACY;IAC1B,GAAI;GACL,CAAA;GAGF,CAAC,cACA,iBAAA,GAAA,kBAAA,IAAA,CAACC,cAAAA,WAAW,UAAZ;IACE,eAAe;IACf,GAAI;IACJ,GAAI,UAAU,qBAAqB;KACjC,WAAW,iBAAiB;KAC5B,OAAO,iBAAiB;IAC1B,CAAC;IACD,aAAa;IAEb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAACN,cAAAA,KAAD;KAAK,GAAI,UAAU,cAAc;KAAjC,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,GAAI,UAAU,mBAAmB;MAAtC,UAAA,CACG,kBACC,iBAAA,GAAA,kBAAA,IAAA,CAACA,cAAAA,KAAD;OAAK,GAAI,UAAU,kBAAkB;OAAG,KAAK,EAAE,WAAW,KAAK;OAC5DF,UAAAA,eAAAA,SAAS,UAAU,MAAM;MACvB,CAAA,GAEN,WACE;KAEL,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,GAAI,UAAU,cAAc;MAAjC,UAAA,CACG,kBACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,GAAI,UAAU,eAAe;OAAlC,UAAA;QACG;QACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;SAAK,GAAI,UAAU,qBAAqB;SAAxC,UAAA,CACG,mBACA,kBAAkB,oBAAoB,KACrC,iBAAA,GAAA,kBAAA,IAAA,CAACS,mBAAAA,YAAD;UACE,QAAQ,WAAW;UACnB,iBAAiB,kBAAkB;UAClB;UACJ;UACP;UACE;UACM;UACd,GAAI;UACJ,GAAI;SACL,CAAA,CAEA;;QACL,iBAAA,GAAA,kBAAA,IAAA,CAACZ,cAAAA,gBAAD;SACE,GAAI,UAAU,aAAa;SAC3B,KAAK;UAAE,WAAW;UAAM,QAAQ,SAAS;SAAS;SAClD,cAAY,GAAGG,eAAAA,SAAS,YAAY,MAAM,EAAE,GAAGA,eAAAA,SAAS,UAAU,MAAM;SACxE,SACE,SAAS,YAAY,CAAC,oBAClB,KAAA,KACC,MAAM;UACL,mBAAA,GAAkB,MAAA,QAAA,CAAM,IAAI,CAAC,CAAC,OAAO,YAAY,GAAG,CAAC;SACvD;QAEP,CAAA;OACE;MAGP,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OACE,KAAK;OACL,GAAI,UAAU,kBAAkB;OAChC,YACE,oBACK,UAAU;QACT,MAAM,YAAY,0BAA0B,KAAK;QACjD,IAAI,cAAc,MAAM;SACtB,SAAS,eAAe,OAAO,SAAS;SACxC,kBAAkB,SAAS;QAC7B;OACF,IACA,KAAA;OAEN,aAAa,mBAAmB,SAAS,kBAAkB,KAAA;OAC3D,QACE,oBACK,UAAU;QACT,MAAM,YAAY,0BAA0B,KAAK;QACjD,IAAI,cAAc,MAChB,SAAS,WAAW,OAAO,SAAS;OAExC,IACA,KAAA;OAvBR,UAAA;QA0BG;QAEA;QAEA,SAAS,eAAe,SAAS,iBAAiB,gBACjD,iBAAA,GAAA,kBAAA,IAAA,CAACE,cAAAA,KAAD;SACE,KAAK,EAAE,SAAS,CAAC,SAAS,UAAU;SACpC,GAAI,UAAU,sBAAsB,EAClC,cAAc;UACZ,MAAM,EAAE,KAAK,WAAWQ,yBAAAA,eAAe;WACrC,OAAO;YACL,GAAG,SAAS,iBAAiB;YAC7B,OAAO,SAAS,YAAY;YAC5B,KAAK,SAAS,YAAY;WAC5B;WACA;WACA;WACA;UACF,CAAC;UACD,OAAO;WACL,UAAU;WACV,kBAAkB;WAClB,gBAAgB;WAChB,KAAK,GAAG,IAAI;WACZ,QAAQ,GAAG,OAAO;UACpB;SACF,EAAA,CAAG,EACL,CAAC;QACF,CAAA;QAGF,4BACC,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,sBAAD;SACE,aAAY;SACZ,WAAU;SACV,WAAU;SACV,uBAAsB;SACtB,mBAAmB;SACnB,gBAAgB;SAChB,WAAW,CAAC;SACJ;SACG;SACF;SACQ;SACD;SAChB,GAAI;QACL,CAAA;QAEF;OACE;MACF,CAAA,CAAA;KACF,CAAA,CAAA;;GACc,CAAA;EAEpB;;CAGP,IAAI,uBACF,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,YAAY,UAAb;EAAsB,OAAO,SAAS;EAAmB,UAAA;CAA8B,CAAA;CAGhG,OAAO;AACT,CAAC;AAED,QAAQ,cAAc;AACtB,QAAQ,UAAUC,uBAAAA;AAClB,QAAQ,eAAe"}
1
+ {"version":3,"file":"DayView.cjs","names":["createVarsResolver","getRadius","rem","factory","useProps","useState","useStyles","useResolvedStylesApi","useDatesContext","getDayTimeIntervals","useRef","useMergedRef","useCallback","useSlotDragSelect","expandRecurringEvents","getDayViewEvents","calculateDropTime","useDragDropHandlers","useEventResize","isAllDayEvent","ScheduleEvent","getVisibleEvents","getBusinessHoursState","addMinutesToTime","clampIntervalMinutes","UnstyledButton","getLabel","getSlotLabelGroups","formatDate","Box","ScheduleBackgroundEvent","getTimeAxisEventStyle","ScheduleHeaderBase","toDateString","AgendaView","ScrollArea","MoreEvents","getDayPosition","CurrentTimeIndicator","DragContext","classes"],"sources":["../../../src/components/DayView/DayView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef, useState } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n DataAttributes,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n rem,\n ScrollArea,\n ScrollAreaAutosizeProps,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useIsomorphicEffect, useMergedRef } from '@mantine/hooks';\nimport { useAutoScrollOnDrag } from '../../hooks/use-auto-scroll-on-drag';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useEventResize } from '../../hooks/use-event-resize';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n AnyDateValue,\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n PreventEventOverlap,\n ScheduleCanDropEventData,\n ScheduleCanDropExternalEventData,\n ScheduleCanResizeEventToData,\n ScheduleEventData,\n ScheduleEventOverlapMode,\n ScheduleEventPlacementRejectedData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n clampIntervalMinutes,\n expandRecurringEvents,\n formatDate,\n addMinutesToTime,\n getBusinessHoursState,\n getDayPosition,\n getDayTimeIntervals,\n getSlotLabelGroups,\n getTimeAxisEventStyle,\n getVisibleEvents,\n isAllDayEvent,\n toDateString,\n} from '../../utils';\nimport { AgendaView, AgendaViewStylesNames } from '../AgendaView/AgendaView';\nimport {\n CurrentTimeIndicator,\n CurrentTimeIndicatorStylesNames,\n} from '../CurrentTimeIndicator/CurrentTimeIndicator';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { ScheduleBackgroundEvent } from '../ScheduleBackgroundEvent';\nimport {\n RenderEvent,\n RenderEventBody,\n ScheduleEvent,\n ScheduleEventStylesNames,\n} from '../ScheduleEvent/ScheduleEvent';\nimport { MonthYearSelectStylesNames } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getDayViewEvents } from './get-day-view-events/get-day-view-events';\nimport classes from './DayView.module.css';\n\nexport type DayViewStylesNames =\n | 'dayView'\n | 'dayViewInner'\n | 'dayViewScrollArea'\n | 'dayViewAllDay'\n | 'dayViewAllDayEvents'\n | 'dayViewSlot'\n | 'dayViewSlots'\n | 'dayViewTimeSlots'\n | 'dayViewSlotLabel'\n | 'dayViewSlotLabels'\n | 'dayViewBackgroundEvent'\n | 'dayViewBackgroundEventResizeHandle'\n | 'dayViewDragPreview'\n | MoreEventsStylesNames\n | ScheduleEventStylesNames\n | Exclude<CombinedScheduleHeaderStylesNames, MonthYearSelectStylesNames>\n | CurrentTimeIndicatorStylesNames\n | AgendaViewStylesNames;\n\nexport type DayViewCssVariables = {\n dayView:\n | '--day-view-radius'\n | '--day-view-slot-height'\n | '--day-view-all-day-slot-height'\n | '--day-view-business-hours-bg'\n | '--day-view-non-business-hours-bg';\n};\n\nexport interface DayViewProps\n extends BoxProps, StylesApiProps<DayViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Day to display, Date object or date string in `YYYY-MM-DD` format */\n date: Date | DateStringValue;\n\n /** Called when date is changed */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Events to display, must be a stable reference */\n events?: ScheduleEventData[];\n\n /** Time slots start time, in `HH:mm:ss` format @default 00:00:00 */\n startTime?: string;\n\n /** Time slots end time in `HH:mm:ss` format @default 23:59:59 */\n endTime?: string;\n\n /** Number of minutes for each time slot. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours (e.g. `120`, `240`) @default 15 */\n intervalMinutes?: number;\n\n /** If set, grid lines are displayed for intervals smaller than one hour, for example 15 and 30 minutes intervals @default true */\n withSubHourGridLines?: boolean;\n\n /** Determines how events that overlap in time are laid out: `columns` splits the available width between them, `cascade` indents each event and stacks it over the previous one @default 'columns' */\n eventOverlapMode?: ScheduleEventOverlapMode;\n\n /** Time in ms the pointer must rest on an event before it is raised above the events covering it, only used with `eventOverlapMode=\"cascade\"` @default 600 */\n eventOverlapRaiseDelay?: number;\n\n /** If set, the all-day slot is displayed below the header @default true */\n withAllDaySlot?: boolean;\n\n /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */\n locale?: string;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Dayjs format for slot labels or a callback function that returns formatted value @default HH:mm */\n slotLabelFormat?: DateLabelFormat;\n\n /** Interval between time labels in minutes. Must be a multiple of `intervalMinutes` that divides evenly into an hour (e.g. `15`, `30`) or is a whole number of hours. Values that do not satisfy these rules are rounded up to the nearest valid value, `60` is used for invalid values. @default 60 */\n slotLabelInterval?: number;\n\n /** Date format in the header @default MMMM D, YYYY */\n headerFormat?: DateLabelFormat;\n\n /** If set, displays a line indicating the current time. By default, displayed only for the current day. */\n withCurrentTimeIndicator?: boolean;\n\n /** If set, the time indicator displays the current time in the bubble @default true */\n withCurrentTimeBubble?: boolean;\n\n /** A function to get the current time, called on every tick. Can be used to display the current time indicator in a different timezone. @default () => dayjs() */\n getCurrentTime?: () => AnyDateValue;\n\n /** If set, the header is displayed @default true */\n withHeader?: boolean;\n\n /** Called when view level select button is clicked */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous month control */\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to next month control */\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to today control */\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n\n /** Props passed to view level select */\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n\n /** Height of 1hr slot @default 64px */\n slotHeight?: React.CSSProperties['height'];\n\n /** Height of all-day slot @default 44px */\n allDaySlotHeight?: React.CSSProperties['height'];\n\n /** Props passed down to the `ScrollArea.Autosize` component */\n scrollAreaProps?: ScrollAreaAutosizeProps & DataAttributes;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n /** Function to customize event body, `event` object is passed as first argument */\n renderEventBody?: RenderEventBody;\n\n /** Function to fully customize event rendering, receives all props that would be passed to the root element including children */\n renderEvent?: RenderEvent;\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n\n /** If set to true, highlights business hours with white background @default false */\n highlightBusinessHours?: boolean;\n\n /** Business hours range in `HH:mm:ss` format @default ['09:00:00', '17:00:00'] */\n businessHours?: [string, string];\n\n /** If true, events can be dragged and dropped @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped at new time */\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be dragged */\n canDragEvent?: (event: ScheduleEventData) => boolean;\n\n /** Snap step for moving events by drag and drop, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */\n eventDragInterval?: number;\n\n /** Called when any event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when any event drag ends */\n onEventDragEnd?: () => void;\n\n /** Called when time slot is clicked */\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n }) => void;\n\n /** Called when all-day slot is clicked */\n onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called when event is clicked */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */\n withInteractiveBackgroundEvents?: boolean;\n\n /** If set, enables drag-to-select time slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a time slot range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** Time to scroll to on initial render, in `HH:mm:ss` format */\n startScrollTime?: string;\n\n /** Called when an external item is dropped onto the schedule. Receives the `DataTransfer` object and the drop target datetime. */\n onExternalEventDrop?: (dataTransfer: DataTransfer, dropDateTime: DateTimeStringValue) => void;\n\n /** If true, events can be resized by dragging their edges @default false */\n withEventResize?: boolean;\n\n /** Called when event is resized */\n onEventResize?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => void;\n\n /** Function to determine if event can be resized */\n canResizeEvent?: (event: ScheduleEventData) => boolean;\n\n /** Called while an event is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. */\n canDropEvent?: (data: ScheduleCanDropEventData) => boolean;\n\n /** Called while an external item is dragged over a target to compute live feedback and again before the drop is committed, return `false` to reject the drop. Must be pure and cheap. Only `dataTransfer.types` can be read while the drag is in progress. */\n canDropExternalEvent?: (data: ScheduleCanDropExternalEventData) => boolean;\n\n /** Called on every pointer move while an event is resized to compute live feedback and again before the resize is committed, return `false` to reject the new size. Must be pure and cheap. */\n canResizeEventTo?: (data: ScheduleCanResizeEventToData) => boolean;\n\n /** If set, drops and resizes that would make the event overlap another event are rejected. Pass a function to decide per pair of events: return `true` to forbid the overlap. The function runs while dragging and resizing to compute live feedback, it must be pure and cheap. @default false */\n preventEventOverlap?: PreventEventOverlap;\n\n /** Called when a drop or resize is rejected */\n onEventPlacementRejected?: (data: ScheduleEventPlacementRejectedData) => void;\n\n /** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */\n eventResizeInterval?: number;\n\n /** Max number of generated recurring instances per recurring series @default 2000 */\n recurrenceExpansionLimit?: number;\n\n /** Function to get additional props for each time slot. Receives slot start and end datetime strings. Returned props are spread onto the slot element. Event handlers returned by this function are composed with internal handlers (e.g. onClick) rather than overriding them. */\n getTimeSlotProps?: (data: {\n start: DateTimeStringValue;\n end: DateTimeStringValue;\n }) => Record<string, any> | undefined;\n\n /** If set, displays an Agenda button in the header that opens an agenda list view @default false */\n withAgenda?: boolean;\n}\n\nexport type DayViewFactory = Factory<{\n props: DayViewProps;\n ref: HTMLDivElement;\n stylesNames: DayViewStylesNames;\n vars: DayViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'DayView',\n startTime: '00:00:00',\n endTime: '23:59:59',\n intervalMinutes: 15,\n withSubHourGridLines: true,\n withAllDaySlot: true,\n slotLabelFormat: 'HH:mm',\n slotLabelInterval: 60,\n headerFormat: 'MMMM D, YYYY',\n withCurrentTimeBubble: true,\n withHeader: true,\n highlightBusinessHours: false,\n businessHours: ['09:00:00', '17:00:00'],\n withEventsDragAndDrop: false,\n withDragSlotSelect: false,\n withEventResize: false,\n mode: 'default',\n withInteractiveBackgroundEvents: false,\n eventOverlapMode: 'columns',\n eventOverlapRaiseDelay: 600,\n} satisfies Partial<DayViewProps>;\n\nconst varsResolver = createVarsResolver<DayViewFactory>(\n (_theme, { radius, slotHeight, allDaySlotHeight }) => ({\n dayView: {\n '--day-view-radius': radius !== undefined ? getRadius(radius) : undefined,\n '--day-view-slot-height': rem(slotHeight),\n '--day-view-all-day-slot-height': rem(allDaySlotHeight),\n '--day-view-business-hours-bg': undefined,\n '--day-view-non-business-hours-bg': undefined,\n },\n })\n);\n\nexport const DayView = factory<DayViewFactory>((_props) => {\n const props = useProps('DayView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n __staticSelector,\n startTime,\n endTime,\n intervalMinutes,\n withSubHourGridLines,\n eventOverlapMode,\n eventOverlapRaiseDelay,\n withAllDaySlot,\n date,\n locale,\n slotLabelFormat,\n slotLabelInterval,\n headerFormat,\n getCurrentTime,\n withCurrentTimeIndicator,\n withCurrentTimeBubble,\n withHeader,\n radius,\n onDateChange,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n slotHeight,\n allDaySlotHeight,\n scrollAreaProps,\n events,\n moreEventsProps,\n renderEventBody,\n renderEvent,\n labels,\n highlightBusinessHours,\n businessHours,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n eventDragInterval,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onEventClick,\n withInteractiveBackgroundEvents,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n startScrollTime,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n canDropEvent,\n canDropExternalEvent,\n canResizeEventTo,\n preventEventOverlap,\n onEventPlacementRejected,\n eventResizeInterval,\n recurrenceExpansionLimit,\n getTimeSlotProps,\n withAgenda,\n ...others\n } = props;\n\n const [agendaOpen, setAgendaOpen] = useState(false);\n\n const getStyles = useStyles<DayViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n varsResolver,\n rootSelector: 'dayView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<DayViewFactory>({\n classNames,\n styles,\n props,\n });\n\n const stylesApiProps = {\n classNames: resolvedClassNames,\n styles: resolvedStyles,\n attributes,\n __staticSelector,\n radius,\n };\n\n const ctx = useDatesContext();\n const resolveNow = () => (getCurrentTime ? dayjs(getCurrentTime()) : dayjs());\n const showCurrentTimeIndicator =\n withCurrentTimeIndicator ?? dayjs(date).isSame(resolveNow(), 'day');\n const slots = getDayTimeIntervals({\n startTime,\n endTime,\n intervalMinutes,\n labelIntervalMinutes: slotLabelInterval,\n });\n const slotsRef = useRef<HTMLButtonElement[]>([]);\n const viewportRef = useRef<HTMLDivElement>(null);\n const timeSlotsContainerRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n\n useAutoScrollOnDrag({\n viewportRef,\n enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static',\n });\n\n useIsomorphicEffect(() => {\n if (!startScrollTime || !viewportRef.current || slotsRef.current.length === 0) {\n return;\n }\n\n const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);\n if (targetIndex < 0) {\n return;\n }\n\n const targetSlot = slotsRef.current[targetIndex];\n if (!targetSlot) {\n return;\n }\n\n const slotRect = targetSlot.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n viewportRef.current.scrollTo({\n left: 0,\n top: slotRect.top - viewportRect.top + viewportRef.current.scrollTop,\n });\n }, []);\n\n const dragOffsetRef = useRef<{ offset: number; size: number }>({ offset: 0, size: 0 });\n\n const getSlotIndexFromDragPoint = useCallback((event: React.DragEvent) => {\n const slotIndex = slotsRef.current.findIndex((slotNode) => {\n if (!slotNode) {\n return false;\n }\n\n const rect = slotNode.getBoundingClientRect();\n return event.clientY >= rect.top && event.clientY <= rect.bottom;\n });\n\n if (slotIndex >= 0) {\n const rect = slotsRef.current[slotIndex]!.getBoundingClientRect();\n dragOffsetRef.current = { offset: event.clientY - rect.top, size: rect.height };\n return slotIndex;\n }\n\n const firstSlot = slotsRef.current[0];\n const lastSlot = slotsRef.current[slotsRef.current.length - 1];\n\n if (!firstSlot || !lastSlot) {\n return null;\n }\n\n const firstRect = firstSlot.getBoundingClientRect();\n const lastRect = lastSlot.getBoundingClientRect();\n\n if (event.clientY < firstRect.top) {\n dragOffsetRef.current = { offset: 0, size: firstRect.height };\n return 0;\n }\n\n if (event.clientY > lastRect.bottom) {\n dragOffsetRef.current = { offset: lastRect.height, size: lastRect.height };\n return slotsRef.current.length - 1;\n }\n\n return null;\n }, []);\n\n const handleSlotKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>, slotIndex: number) => {\n const direction = event.key;\n if (direction === 'ArrowDown' && slotIndex < slots.length - 1) {\n event.preventDefault();\n slotsRef.current[slotIndex + 1]?.focus();\n } else if (direction === 'ArrowUp' && slotIndex > 0) {\n event.preventDefault();\n slotsRef.current[slotIndex - 1]?.focus();\n }\n };\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex) => {\n if (!onSlotDragEnd) {\n return;\n }\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n onSlotDragEnd(\n `${slotDate} ${slots[startIndex].startTime}`,\n `${slotDate} ${slots[endIndex].endTime}`\n );\n },\n });\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart: dayjs(date).startOf('day').toDate(),\n rangeEnd: dayjs(date).endOf('day').toDate(),\n expansionLimit: recurrenceExpansionLimit,\n });\n\n const eventsData = getDayViewEvents({\n events: expandedEvents,\n date,\n startTime,\n endTime,\n intervalMinutes,\n eventOverlapMode,\n });\n\n const getExternalDropDateTime = useCallback(\n (slotIndex: number) => {\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n const slotTime = slots[slotIndex].startTime;\n const slotStart = `${slotDate} ${slotTime}`;\n\n if (eventDragInterval == null) {\n return slotStart;\n }\n\n const { start } = calculateDropTime({\n draggedEvent: { start: slotStart, end: slotStart } as ScheduleEventData,\n targetDate: date,\n targetSlotTime: slotTime,\n intervalMinutes,\n dragIntervalMinutes: eventDragInterval,\n slotOffset: dragOffsetRef.current.offset,\n slotSize: dragOffsetRef.current.size,\n startTime,\n endTime,\n });\n\n return dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n },\n [date, slots, eventDragInterval, intervalMinutes, startTime, endTime]\n );\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, slotIndex: number) => {\n if (!onExternalEventDrop) {\n return;\n }\n onExternalEventDrop(e.dataTransfer, getExternalDropDateTime(slotIndex));\n },\n [onExternalEventDrop, getExternalDropDateTime]\n );\n\n const getDropTimeForSlot = (slotIndex: number, draggedEvent: ScheduleEventData) => {\n const slotTime = slots[slotIndex].startTime;\n return calculateDropTime({\n draggedEvent,\n targetDate: date,\n targetSlotTime: slotTime,\n intervalMinutes,\n dragIntervalMinutes: eventDragInterval,\n slotOffset: eventDragInterval == null ? undefined : dragOffsetRef.current.offset,\n slotSize: eventDragInterval == null ? undefined : dragOffsetRef.current.size,\n startTime,\n endTime,\n });\n };\n\n const dragDrop = useDragDropHandlers({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: getDropTimeForSlot,\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n events: expandedEvents,\n preventEventOverlap,\n canDropEvent,\n canDropExternalEvent,\n onEventPlacementRejected,\n getExternalDropDateTime,\n });\n\n const updateDragPreview = (slotIndex: number) => {\n const draggedEvent = dragDrop.dragContextValue.draggedEvent;\n if (eventDragInterval == null || !draggedEvent) {\n return;\n }\n const { start, end } = getDropTimeForSlot(slotIndex, draggedEvent);\n const newStart = dayjs(start).format('YYYY-MM-DD HH:mm:ss');\n if (dragDrop.dragPreview?.start !== newStart) {\n dragDrop.setDragPreview({\n start: newStart,\n end: dayjs(end).format('YYYY-MM-DD HH:mm:ss'),\n target: slotIndex,\n });\n }\n };\n\n const eventResize = useEventResize({\n enabled: withEventResize,\n mode,\n startTime,\n endTime,\n intervalMinutes,\n resizeIntervalMinutes: eventResizeInterval,\n onEventResize,\n canResizeEvent,\n events: expandedEvents,\n preventEventOverlap,\n canResizeEventTo,\n onEventPlacementRejected,\n withBackgroundEvents: withInteractiveBackgroundEvents,\n });\n\n const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== 'static';\n\n const eventsNodes = eventsData.regularEvents.map((event) => {\n const eventIsAllDay = isAllDayEvent({ event, date });\n const isDraggable = !eventIsAllDay && dragDrop.isDraggableEvent(event);\n const isResizable = !eventIsAllDay && eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n const eventTop = resizePosition ? resizePosition.top : event.position.top;\n const eventHeight = resizePosition ? resizePosition.height : event.position.height;\n\n return (\n <ScheduleEvent\n event={event}\n key={event.id}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n autoSize\n draggable={isDraggable}\n withResize={isResizable}\n isResizing={resizePosition !== null}\n onResizeStart={\n isResizable\n ? (edge, e) => {\n if (timeSlotsContainerRef.current) {\n eventResize.handleResizeStart({\n event,\n edge,\n container: timeSlotsContainerRef.current,\n originalTop: event.position.top,\n originalHeight: event.position.height,\n eventDate: dayjs(date).format('YYYY-MM-DD'),\n pointerEvent: e,\n });\n }\n }\n : undefined\n }\n mode={mode}\n onClick={\n onEventClick\n ? (e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(event, e);\n }\n }\n : undefined\n }\n {...stylesApiProps}\n mod={{\n cascade: eventOverlapMode === 'cascade',\n invalid: resizePosition !== null && !eventResize.resizeValid,\n }}\n style={{\n ...stylesApiProps.styles?.event,\n top: `${eventTop}%`,\n height: `${eventHeight}%`,\n insetInlineStart: `${event.position.offset}%`,\n width: `${event.position.width}%`,\n position: 'absolute',\n '--event-z-index': event.position.column + 3,\n '--event-z-index-raised': event.position.overlaps + 3,\n }}\n />\n );\n });\n\n const allDayEventsCount = getVisibleEvents({\n maxEvents: 2,\n totalEvents: eventsData.allDayEvents.length,\n });\n\n const allDayEventsNodes = eventsData.allDayEvents\n .slice(0, allDayEventsCount.visibleEventsCount)\n .map((event) => (\n <ScheduleEvent\n key={event.id}\n event={event}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n style={{ maxHeight: '50%' }}\n nowrap\n autoSize\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(event, e) : undefined}\n {...stylesApiProps}\n />\n ));\n\n const dayGroup = dayjs(date).format('YYYY-MM-DD');\n\n const suppressDropHighlight = eventDragInterval != null && dragDrop.dragContextValue.isDragging;\n\n const items = slots.map((slot, index) => {\n const isDropTarget = !suppressDropHighlight && dragDrop.isDropTarget(index);\n const isDragSelected = slotDragSelect.isSlotSelected(index, dayGroup);\n const slotStart = `${dayGroup} ${slot.startTime}` as DateTimeStringValue;\n const slotEnd = `${dayGroup} ${slot.endTime}` as DateTimeStringValue;\n const { onClick: externalOnClick, ...externalSlotProps } =\n getTimeSlotProps?.({ start: slotStart, end: slotEnd }) || {};\n\n const handleClick =\n mode === 'static'\n ? undefined\n : (event: React.MouseEvent<HTMLButtonElement>) => {\n onTimeSlotClick?.({\n slotStart,\n slotEnd,\n nativeEvent: event,\n });\n externalOnClick?.(event);\n };\n\n const businessHoursState = getBusinessHoursState({\n time: slot.startTime,\n endTime: addMinutesToTime(slot.startTime, clampIntervalMinutes(intervalMinutes)),\n businessHours,\n highlightBusinessHours,\n });\n\n return (\n <UnstyledButton\n {...getStyles('dayViewSlot')}\n key={slot.startTime}\n ref={(node) => {\n slotsRef.current[index] = node!;\n }}\n mod={{\n first: index === 0,\n 'hour-start': slot.isHourStart,\n ...businessHoursState.mod,\n 'drop-target': isDropTarget,\n 'drag-selected': isDragSelected,\n static: mode === 'static',\n }}\n __vars={{\n '--slot-size': `${clampIntervalMinutes(intervalMinutes) / 60}`,\n ...businessHoursState.vars,\n }}\n aria-label={`${getLabel('timeSlot', labels)} ${slot.startTime} - ${slot.endTime}`}\n tabIndex={mode === 'static' ? -1 : index === 0 ? 0 : -1}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? index : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? dayGroup : undefined}\n onKeyDown={mode === 'static' ? undefined : (e) => handleSlotKeyDown(e, index)}\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) => slotDragSelect.handleSlotPointerDown(e, index, dayGroup)\n : undefined\n }\n onClick={handleClick}\n onDragOver={withDragHandlers ? (event) => event.preventDefault() : undefined}\n {...externalSlotProps}\n />\n );\n });\n\n const slotsLabels = getSlotLabelGroups(slots).map((group) => {\n const label = group.isLabelStart\n ? formatDate({\n locale: ctx.getLocale(locale),\n date: dayjs(`${dayjs(date).format('YYYY-MM-DD')} ${group.startTime}`),\n format: slotLabelFormat,\n })\n : null;\n\n const labelBusinessHours = getBusinessHoursState({\n time: group.startTime,\n endTime: group.endTime,\n businessHours,\n highlightBusinessHours,\n });\n\n return (\n <Box\n {...getStyles('dayViewSlotLabel')}\n key={group.startTime}\n mod={{ 'sub-hour': !group.isHourStart, ...labelBusinessHours.mod }}\n __vars={{\n ...labelBusinessHours.vars,\n '--slot-label-size': `${(group.slotsCount * clampIntervalMinutes(intervalMinutes)) / 60}`,\n }}\n >\n {label}\n </Box>\n );\n });\n\n const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== 'static';\n\n const backgroundAllDayEventNodes = eventsData.backgroundAllDayEvents.map((event) => (\n <ScheduleBackgroundEvent\n key={`bg-allday-${event.id}`}\n event={event}\n renderEvent={renderEvent}\n renderEventBody={renderEventBody}\n interactive={interactiveBackgroundEvents}\n onEventClick={onEventClick}\n {...getStyles('dayViewBackgroundEvent', {\n style: { top: 0, height: '100%', width: '100%' },\n })}\n />\n ));\n\n const backgroundTimedEventNodes = eventsData.backgroundTimedEvents.map((event) => {\n const isResizable = eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n\n return (\n <ScheduleBackgroundEvent<'top' | 'bottom'>\n key={event.id}\n event={event}\n renderEvent={renderEvent}\n renderEventBody={renderEventBody}\n interactive={interactiveBackgroundEvents}\n onEventClick={\n onEventClick\n ? (clickedEvent, e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(clickedEvent, e);\n }\n }\n : undefined\n }\n withResize={isResizable}\n isResizing={resizePosition !== null}\n resizeHandleProps={getStyles('dayViewBackgroundEventResizeHandle')}\n onResizeStart={\n isResizable\n ? (edge, e) => {\n if (timeSlotsContainerRef.current) {\n eventResize.handleResizeStart({\n event,\n edge,\n container: timeSlotsContainerRef.current,\n originalTop: event.position.top,\n originalHeight: event.position.height,\n eventDate: dayjs(date).format('YYYY-MM-DD'),\n pointerEvent: e,\n });\n }\n }\n : undefined\n }\n {...getStyles('dayViewBackgroundEvent', {\n style: {\n ...getTimeAxisEventStyle({\n start: resizePosition ? resizePosition.top : event.position.top,\n span: resizePosition ? resizePosition.height : event.position.height,\n axis: 'vertical',\n }),\n width: '100%',\n },\n })}\n />\n );\n });\n\n const content = (\n <Box\n {...getStyles('dayView')}\n __vars={{ '--event-raise-delay': `${eventOverlapRaiseDelay}ms` }}\n mod={{\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n 'hide-sub-hour-grid-lines': !withSubHourGridLines,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n }}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"day\"\n navigationHandlers={{\n previous: () => toDateString(dayjs(date).subtract(1, 'day')),\n next: () => toDateString(dayjs(date).add(1, 'day')),\n today: () => toDateString(resolveNow()),\n }}\n control={{\n title: formatDate({ locale: ctx.getLocale(locale), date, format: headerFormat }),\n miw: 140,\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={viewSelectProps}\n stylesApiProps={stylesApiProps}\n onAgendaClick={withAgenda ? () => setAgendaOpen((v) => !v) : undefined}\n agendaActive={agendaOpen}\n />\n )}\n\n {agendaOpen && (\n <AgendaView\n rangeStart={dayjs(date).startOf('day').format('YYYY-MM-DD')}\n rangeEnd={dayjs(date).endOf('day').format('YYYY-MM-DD')}\n events={events}\n locale={locale}\n labels={labels}\n mode={mode}\n onEventClick={onEventClick}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n {...stylesApiProps}\n />\n )}\n\n {!agendaOpen && (\n <ScrollArea.Autosize\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('dayViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n viewportRef={mergedViewportRef}\n >\n <Box {...getStyles('dayViewInner')}>\n <div {...getStyles('dayViewSlotLabels')}>\n {withAllDaySlot && (\n <Box {...getStyles('dayViewSlotLabel')} mod={{ 'all-day': true }}>\n {getLabel('allDay', labels)}\n </Box>\n )}\n {slotsLabels}\n </div>\n\n <div {...getStyles('dayViewSlots')}>\n {withAllDaySlot && (\n <div {...getStyles('dayViewAllDay')}>\n {backgroundAllDayEventNodes}\n <div {...getStyles('dayViewAllDayEvents')}>\n {allDayEventsNodes}\n {allDayEventsCount.hiddenEventsCount > 0 && (\n <MoreEvents\n events={eventsData.allDayEvents}\n moreEventsCount={allDayEventsCount.hiddenEventsCount}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n mode={mode}\n labels={labels}\n onEventClick={onEventClick}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n )}\n </div>\n <UnstyledButton\n {...getStyles('dayViewSlot')}\n mod={{ 'all-day': true, static: mode === 'static' }}\n aria-label={`${getLabel('timeSlot', labels)} ${getLabel('allDay', labels)}`}\n onClick={\n mode === 'static' || !onAllDaySlotClick\n ? undefined\n : (e) => {\n onAllDaySlotClick(dayjs(date).format('YYYY-MM-DD'), e);\n }\n }\n />\n </div>\n )}\n\n <div\n ref={timeSlotsContainerRef}\n {...getStyles('dayViewTimeSlots')}\n onDragOver={\n withDragHandlers\n ? (event) => {\n const slotIndex = getSlotIndexFromDragPoint(event);\n if (slotIndex !== null) {\n dragDrop.handleDragOver(event, slotIndex);\n updateDragPreview(slotIndex);\n }\n }\n : undefined\n }\n onDragLeave={withDragHandlers ? dragDrop.handleDragLeave : undefined}\n onDrop={\n withDragHandlers\n ? (event) => {\n const slotIndex = getSlotIndexFromDragPoint(event);\n if (slotIndex !== null) {\n dragDrop.handleDrop(event, slotIndex);\n }\n }\n : undefined\n }\n >\n {backgroundTimedEventNodes}\n\n {eventsNodes}\n\n {dragDrop.dragPreview && dragDrop.dragContextValue.draggedEvent && (\n <Box\n mod={{ invalid: !dragDrop.dropValid }}\n {...getStyles('dayViewDragPreview', {\n style: (() => {\n const { top, height } = getDayPosition({\n event: {\n ...dragDrop.dragContextValue.draggedEvent,\n start: dragDrop.dragPreview.start,\n end: dragDrop.dragPreview.end,\n },\n startTime,\n endTime,\n intervalMinutes,\n });\n return {\n position: 'absolute',\n insetInlineStart: 0,\n insetInlineEnd: 0,\n top: `${top}%`,\n height: `${height}%`,\n };\n })(),\n })}\n />\n )}\n\n {showCurrentTimeIndicator && (\n <CurrentTimeIndicator\n startOffset=\"calc(var(--day-view-slot-labels-width) * -1)\"\n endOffset=\"0rem\"\n topOffset=\"0rem\"\n timeBubbleStartOffset=\"calc(var(--day-view-slot-labels-width) * -1 + 30px)\"\n currentTimeFormat={slotLabelFormat}\n withTimeBubble={withCurrentTimeBubble}\n withThumb={!withCurrentTimeBubble}\n locale={locale}\n startTime={startTime}\n endTime={endTime}\n intervalMinutes={intervalMinutes}\n getCurrentTime={getCurrentTime}\n {...stylesApiProps}\n />\n )}\n {items}\n </div>\n </div>\n </Box>\n </ScrollArea.Autosize>\n )}\n </Box>\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragDrop.dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nDayView.displayName = '@mantine/schedule/DayView';\nDayView.classes = classes;\nDayView.varsResolver = varsResolver;\n\nexport namespace DayView {\n export type Props = DayViewProps;\n export type Factory = DayViewFactory;\n export type StylesNames = DayViewStylesNames;\n export type CssVariables = DayViewCssVariables;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DayView.module.cjs","names":[],"sources":["../../../src/components/DayView/DayView.module.css"],"sourcesContent":[".dayView {\n --slot-height: var(--day-view-slot-height, 64px); /* total height of 1 hour slot */\n --all-day-slot-height: var(--day-view-all-day-slot-height, 44px); /* height of all day slot */\n --day-view-slot-labels-width: 80px;\n --day-view-radius: var(--schedule-radius, var(--mantine-radius-default));\n border-radius: var(--day-view-radius);\n overflow: hidden;\n\n @mixin where-light {\n --day-view-border-color: var(--mantine-color-gray-3);\n --day-view-business-hours-bg: var(--mantine-color-white);\n --day-view-non-business-hours-bg: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n --day-view-border-color: var(--mantine-color-dark-4);\n --day-view-business-hours-bg: var(--mantine-color-dark-7);\n --day-view-non-business-hours-bg: var(--mantine-color-dark-6);\n }\n}\n\n.dayViewHeader {\n text-transform: capitalize;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--mantine-font-size-sm);\n font-weight: var(--mantine-font-weight-medium);\n}\n\n.dayViewScrollArea {\n border: 1px solid var(--day-view-border-color);\n border-radius: var(--day-view-radius);\n overflow: hidden;\n\n :where(:global(.mantine-ScrollArea-scrollbar)) {\n z-index: 4;\n }\n}\n\n.dayViewInner {\n display: flex;\n}\n\n.dayViewTimeSlots {\n position: relative;\n\n /* Cascade events stack with an unbounded z-index, keep them out of the sticky header's layer */\n &:where(:has([data-cascade])) {\n isolation: isolate;\n\n /* Drag and resize feedback must stay above every cascade column */\n --event-cascade-interaction-z-index: 999;\n\n .dayViewDragPreview {\n z-index: var(--event-cascade-interaction-z-index);\n }\n }\n\n &:where(:first-of-type) .dayViewSlot:where([data-first]) {\n border-top-color: transparent;\n }\n}\n\n.dayViewSlotLabels {\n width: var(--day-view-slot-labels-width);\n}\n\n.dayViewSlotLabel {\n height: var(--slot-height);\n border-top: 1px solid var(--day-view-border-color);\n font-size: var(--mantine-font-size-sm);\n text-align: right;\n padding: 4px 8px;\n font-variant-numeric: tabular-nums;\n\n &:where([data-all-day]) {\n height: var(--all-day-slot-height);\n border-top: 0;\n }\n\n &:where(:first-of-type) {\n border-top: 0;\n }\n\n &:where([data-business-hours]) {\n background-color: var(--day-view-business-hours-bg);\n }\n\n &:where([data-non-business-hours]) {\n background-color: var(--day-view-non-business-hours-bg);\n }\n}\n\n.dayViewSlots {\n flex: 1;\n}\n\n.dayViewSlot {\n display: block;\n width: 100%;\n border-top: 1px dotted var(--day-view-border-color);\n height: calc(var(--slot-height) * var(--slot-size));\n position: relative;\n\n &:where(:focus) {\n z-index: 1;\n }\n\n &:where([data-hour-start]) {\n border-top: 1px solid var(--day-view-border-color);\n }\n\n @mixin hover {\n @mixin where-light {\n background-color: var(--mantine-color-gray-1);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-5);\n }\n }\n\n &:where([data-all-day]) {\n height: var(--all-day-slot-height);\n border-top: 0;\n }\n\n &:where([data-business-hours]) {\n background-color: var(--day-view-business-hours-bg);\n }\n\n &:where([data-non-business-hours]) {\n background-color: var(--day-view-non-business-hours-bg);\n }\n\n &:where([data-drop-target]) {\n @mixin where-light {\n background-color: var(--mantine-color-blue-1);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-5);\n }\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 2;\n border: 1px solid;\n border-radius: 2px;\n\n @mixin where-light {\n border-color: var(--mantine-color-blue-4);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-blue-6);\n }\n }\n }\n\n &:where([data-drag-selected]) {\n &,\n &:hover {\n background-color: var(--mantine-primary-color-light);\n }\n\n &::before {\n content: '';\n position: absolute;\n inset: -1px;\n pointer-events: none;\n z-index: 2;\n border: 1px solid;\n\n @mixin where-light {\n border-color: var(--mantine-primary-color-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-primary-color-9);\n }\n }\n }\n\n &:where([data-drag-slot-index]) {\n touch-action: none;\n }\n\n &:where([data-static]) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n.dayView:where([data-hide-sub-hour-grid-lines]) .dayViewSlot:not([data-hour-start]) {\n border-top-color: transparent;\n}\n\n.dayView:where([data-event-interaction]) .dayViewSlot:not([data-all-day]) {\n pointer-events: none;\n}\n\n.dayViewBackgroundEvent {\n position: absolute;\n border-radius: 0;\n pointer-events: none;\n z-index: 2;\n background-color: var(--bg-event-bg);\n overflow: hidden;\n font-size: 12px;\n font-weight: var(--mantine-font-weight-medium);\n padding: 3px 4px;\n color: var(--bg-event-color);\n\n &:where([data-interactive]) {\n pointer-events: auto;\n cursor: pointer;\n user-select: none;\n\n @mixin hover {\n background-color: var(--bg-event-hover);\n }\n }\n\n /* The resized edge repeatedly crosses the pointer, so hover feedback would flicker */\n &:where([data-resizing]) {\n @mixin hover {\n background-color: var(--bg-event-bg);\n }\n }\n}\n\n.dayViewBackgroundEventResizeHandle {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n width: 40%;\n max-width: 40px;\n height: 4px;\n border-radius: 2px;\n cursor: ns-resize;\n pointer-events: all;\n z-index: 4;\n touch-action: none;\n background-color: var(--bg-event-color);\n opacity: 0;\n transition: opacity 100ms ease;\n\n &::before {\n content: '';\n position: absolute;\n inset: -4px -6px;\n }\n\n &:where([data-edge='top']) {\n top: 0;\n }\n\n &:where([data-edge='bottom']) {\n bottom: 0;\n }\n\n .dayViewBackgroundEvent:where(:hover, [data-resizing]) & {\n opacity: 0.5;\n }\n\n @mixin hover {\n opacity: 0.8;\n }\n}\n\n/* The resizing background event is the one that set `data-event-interaction`, so it must\n keep capturing pointer events. */\n.dayView:where([data-event-interaction], [data-slot-dragging])\n .dayViewBackgroundEvent:not([data-resizing]) {\n pointer-events: none;\n\n & .dayViewBackgroundEventResizeHandle {\n pointer-events: none;\n opacity: 0;\n }\n}\n\n.dayViewAllDay {\n position: relative;\n height: var(--all-day-slot-height);\n}\n\n.dayViewAllDayEvents {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n pointer-events: none;\n z-index: 3;\n}\n\n.dayViewDragPreview {\n pointer-events: none;\n z-index: 3;\n border-radius: var(--day-view-radius);\n border: 1px dashed var(--mantine-color-blue-filled);\n background-color: var(--mantine-color-blue-light);\n opacity: 0.6;\n\n &:where([data-invalid]) {\n border-color: var(--mantine-color-error);\n background-color: transparent;\n opacity: 0.4;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"DayView.module.cjs","names":[],"sources":["../../../src/components/DayView/DayView.module.css"],"sourcesContent":[".dayView {\n --slot-height: var(--day-view-slot-height, 64px); /* total height of 1 hour slot */\n --all-day-slot-height: var(--day-view-all-day-slot-height, 44px); /* height of all day slot */\n --day-view-slot-labels-width: 80px;\n --day-view-radius: var(--schedule-radius, var(--mantine-radius-default));\n border-radius: var(--day-view-radius);\n overflow: hidden;\n\n @mixin where-light {\n --day-view-border-color: var(--mantine-color-gray-3);\n --day-view-business-hours-bg: var(--mantine-color-white);\n --day-view-non-business-hours-bg: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n --day-view-border-color: var(--mantine-color-dark-4);\n --day-view-business-hours-bg: var(--mantine-color-dark-7);\n --day-view-non-business-hours-bg: var(--mantine-color-dark-6);\n }\n}\n\n.dayViewHeader {\n text-transform: capitalize;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--mantine-font-size-sm);\n font-weight: var(--mantine-font-weight-medium);\n}\n\n.dayViewScrollArea {\n border: 1px solid var(--day-view-border-color);\n border-radius: var(--day-view-radius);\n overflow: hidden;\n\n :where(:global(.mantine-ScrollArea-scrollbar)) {\n z-index: 4;\n }\n}\n\n.dayViewInner {\n display: flex;\n}\n\n.dayViewTimeSlots {\n position: relative;\n\n /* Cascade events stack with an unbounded z-index, keep them out of the sticky header's layer */\n &:where(:has([data-cascade])) {\n isolation: isolate;\n\n /* Drag and resize feedback must stay above every cascade column */\n --event-cascade-interaction-z-index: 999;\n\n .dayViewDragPreview {\n z-index: var(--event-cascade-interaction-z-index);\n }\n }\n\n &:where(:first-of-type) .dayViewSlot:where([data-first]) {\n border-top-color: transparent;\n }\n}\n\n.dayViewSlotLabels {\n width: var(--day-view-slot-labels-width);\n}\n\n.dayViewSlotLabel {\n height: calc(var(--slot-height) * var(--slot-label-size, 1));\n border-top: 1px solid var(--day-view-border-color);\n font-size: var(--mantine-font-size-sm);\n text-align: right;\n padding: 4px 8px;\n font-variant-numeric: tabular-nums;\n\n &:where([data-all-day]) {\n height: var(--all-day-slot-height);\n border-top: 0;\n }\n\n &:where(:first-of-type) {\n border-top: 0;\n }\n\n &:where([data-sub-hour]) {\n border-top-style: dotted;\n }\n\n &:where([data-business-hours]) {\n background-color: var(--day-view-business-hours-bg);\n }\n\n &:where([data-non-business-hours]) {\n background-color: var(--day-view-non-business-hours-bg);\n }\n\n &:where([data-partial-business-hours]) {\n background-image: linear-gradient(\n to bottom,\n var(--day-view-non-business-hours-bg) var(--business-hours-from),\n var(--day-view-business-hours-bg) var(--business-hours-from),\n var(--day-view-business-hours-bg) var(--business-hours-to),\n var(--day-view-non-business-hours-bg) var(--business-hours-to)\n );\n }\n}\n\n.dayViewSlots {\n flex: 1;\n}\n\n.dayViewSlot {\n display: block;\n width: 100%;\n border-top: 1px dotted var(--day-view-border-color);\n height: calc(var(--slot-height) * var(--slot-size));\n position: relative;\n\n &:where(:focus) {\n z-index: 1;\n }\n\n &:where([data-hour-start]) {\n border-top: 1px solid var(--day-view-border-color);\n }\n\n @mixin hover {\n background-image: none;\n\n @mixin where-light {\n background-color: var(--mantine-color-gray-1);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-5);\n }\n }\n\n &:where([data-all-day]) {\n height: var(--all-day-slot-height);\n border-top: 0;\n }\n\n &:where([data-business-hours]) {\n background-color: var(--day-view-business-hours-bg);\n }\n\n &:where([data-non-business-hours]) {\n background-color: var(--day-view-non-business-hours-bg);\n }\n\n &:where([data-partial-business-hours]) {\n background-image: linear-gradient(\n to bottom,\n var(--day-view-non-business-hours-bg) var(--business-hours-from),\n var(--day-view-business-hours-bg) var(--business-hours-from),\n var(--day-view-business-hours-bg) var(--business-hours-to),\n var(--day-view-non-business-hours-bg) var(--business-hours-to)\n );\n }\n\n &:where([data-drop-target]) {\n background-image: none;\n\n @mixin where-light {\n background-color: var(--mantine-color-blue-1);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-5);\n }\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n pointer-events: none;\n z-index: 2;\n border: 1px solid;\n border-radius: 2px;\n\n @mixin where-light {\n border-color: var(--mantine-color-blue-4);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-color-blue-6);\n }\n }\n }\n\n &:where([data-drag-selected]) {\n &,\n &:hover {\n background-image: none;\n background-color: var(--mantine-primary-color-light);\n }\n\n &::before {\n content: '';\n position: absolute;\n inset: -1px;\n pointer-events: none;\n z-index: 2;\n border: 1px solid;\n\n @mixin where-light {\n border-color: var(--mantine-primary-color-2);\n }\n\n @mixin where-dark {\n border-color: var(--mantine-primary-color-9);\n }\n }\n }\n\n &:where([data-drag-slot-index]) {\n touch-action: none;\n }\n\n &:where([data-static]) {\n cursor: default;\n pointer-events: none;\n }\n}\n\n.dayView:where([data-hide-sub-hour-grid-lines]) .dayViewSlot:not([data-hour-start]),\n.dayView:where([data-hide-sub-hour-grid-lines]) .dayViewSlotLabel:where([data-sub-hour]) {\n border-top-color: transparent;\n}\n\n.dayView:where([data-event-interaction]) .dayViewSlot:not([data-all-day]) {\n pointer-events: none;\n}\n\n.dayViewBackgroundEvent {\n position: absolute;\n border-radius: 0;\n pointer-events: none;\n z-index: 2;\n background-color: var(--bg-event-bg);\n overflow: hidden;\n font-size: 12px;\n font-weight: var(--mantine-font-weight-medium);\n padding: 3px 4px;\n color: var(--bg-event-color);\n\n &:where([data-interactive]) {\n pointer-events: auto;\n cursor: pointer;\n user-select: none;\n\n @mixin hover {\n background-color: var(--bg-event-hover);\n }\n }\n\n /* The resized edge repeatedly crosses the pointer, so hover feedback would flicker */\n &:where([data-resizing]) {\n @mixin hover {\n background-color: var(--bg-event-bg);\n }\n }\n}\n\n.dayViewBackgroundEventResizeHandle {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n width: 40%;\n max-width: 40px;\n height: 4px;\n border-radius: 2px;\n cursor: ns-resize;\n pointer-events: all;\n z-index: 4;\n touch-action: none;\n background-color: var(--bg-event-color);\n opacity: 0;\n transition: opacity 100ms ease;\n\n &::before {\n content: '';\n position: absolute;\n inset: -4px -6px;\n }\n\n &:where([data-edge='top']) {\n top: 0;\n }\n\n &:where([data-edge='bottom']) {\n bottom: 0;\n }\n\n .dayViewBackgroundEvent:where(:hover, [data-resizing]) & {\n opacity: 0.5;\n }\n\n @mixin hover {\n opacity: 0.8;\n }\n}\n\n/* The resizing background event is the one that set `data-event-interaction`, so it must\n keep capturing pointer events. */\n.dayView:where([data-event-interaction], [data-slot-dragging])\n .dayViewBackgroundEvent:not([data-resizing]) {\n pointer-events: none;\n\n & .dayViewBackgroundEventResizeHandle {\n pointer-events: none;\n opacity: 0;\n }\n}\n\n.dayViewAllDay {\n position: relative;\n height: var(--all-day-slot-height);\n}\n\n.dayViewAllDayEvents {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n pointer-events: none;\n z-index: 3;\n}\n\n.dayViewDragPreview {\n pointer-events: none;\n z-index: 3;\n border-radius: var(--day-view-radius);\n border: 1px dashed var(--mantine-color-blue-filled);\n background-color: var(--mantine-color-blue-light);\n opacity: 0.6;\n\n &:where([data-invalid]) {\n border-color: var(--mantine-color-error);\n background-color: transparent;\n opacity: 0.4;\n }\n}\n"],"mappings":""}
@@ -4,13 +4,16 @@ const require_labels = require("../../labels.cjs");
4
4
  const require_format_date = require("../../utils/format-date/format-date.cjs");
5
5
  const require_get_weekdays_names = require("../../utils/get-weekdays-names/get-weekdays-names.cjs");
6
6
  const require_get_week_number = require("../../utils/get-week-number/get-week-number.cjs");
7
- const require_get_month_days = require("../../utils/get-month-days/get-month-days.cjs");
8
7
  const require_is_same_month = require("../../utils/is-same-month/is-same-month.cjs");
9
8
  const require_to_date_string = require("../../utils/to-date-string/to-date-string.cjs");
9
+ const require_is_all_day_event = require("../../utils/is-all-day-event/is-all-day-event.cjs");
10
10
  const require_sort_events = require("../../utils/sort-events/sort-events.cjs");
11
+ const require_is_multiday_event = require("../../utils/is-multiday-event/is-multiday-event.cjs");
11
12
  const require_expand_recurring_events = require("../../utils/expand-recurring-events/expand-recurring-events.cjs");
13
+ const require_get_visible_week_days = require("../../utils/get-visible-week-days/get-visible-week-days.cjs");
12
14
  const require_handle_month_view_key_down = require("../MonthView/handle-month-view-key-down.cjs");
13
15
  const require_get_mobile_month_view_events = require("./get-mobile-month-view-events.cjs");
16
+ const require_get_mobile_month_view_weeks = require("./get-mobile-month-view-weeks.cjs");
14
17
  const require_MobileMonthView_module = require("./MobileMonthView.module.cjs");
15
18
  let dayjs = require("dayjs");
16
19
  dayjs = require_runtime.__toESM(dayjs);
@@ -24,6 +27,7 @@ let react_jsx_runtime = require("react/jsx-runtime");
24
27
  const defaultProps = {
25
28
  __staticSelector: "MobileMonthView",
26
29
  withWeekDays: true,
30
+ withWeekendDays: true,
27
31
  consistentWeeks: true,
28
32
  highlightToday: true,
29
33
  mode: "default",
@@ -32,7 +36,7 @@ const defaultProps = {
32
36
  const varsResolver = (0, _mantine_core.createVarsResolver)((_theme, { radius }) => ({ mobileMonthView: { "--mobile-month-view-radius": (0, _mantine_core.getRadius)(radius) } }));
33
37
  const MobileMonthView = (0, _mantine_core.factory)((_props) => {
34
38
  const props = (0, _mantine_core.useProps)("MobileMonthView", defaultProps, _props);
35
- const { classNames, className, style, styles, unstyled, vars, attributes, __staticSelector, date, onDateChange, selectedDate, defaultSelectedDate, onSelectedDateChange, withWeekNumbers, withWeekDays, locale, firstDayOfWeek, weekdayFormat, weekendDays, getWeekNumberProps, getDayProps, onDayClick, onWeekNumberClick, consistentWeeks, highlightToday, radius, withOutsideDays, events, labels, mode, renderEvent, eventsHeaderFormat, onYearClick, onEventClick, renderHeader, recurrenceExpansionLimit, ...others } = props;
39
+ const { classNames, className, style, styles, unstyled, vars, attributes, __staticSelector, date, onDateChange, selectedDate, defaultSelectedDate, onSelectedDateChange, withWeekNumbers, withWeekDays, locale, firstDayOfWeek, weekdayFormat, weekendDays, withWeekendDays, getWeekNumberProps, getDayProps, onDayClick, onWeekNumberClick, consistentWeeks, highlightToday, radius, withOutsideDays, events, labels, mode, renderEvent, eventsHeaderFormat, onYearClick, onEventClick, renderHeader, recurrenceExpansionLimit, ...others } = props;
36
40
  const ctx = (0, _mantine_dates.useDatesContext)();
37
41
  const theme = (0, _mantine_core.useMantineTheme)();
38
42
  const today = (0, dayjs.default)();
@@ -56,7 +60,14 @@ const MobileMonthView = (0, _mantine_core.factory)((_props) => {
56
60
  rootSelector: "mobileMonthView"
57
61
  });
58
62
  const daysRef = (0, react.useRef)([]);
59
- const firstDayPosition = (0, react.useRef)(null);
63
+ const resolvedFirstDayOfWeek = ctx.getFirstDayOfWeek(firstDayOfWeek);
64
+ const resolvedWeekendDays = ctx.getWeekendDays(weekendDays);
65
+ const hiddenColumns = new Set(require_get_visible_week_days.getHiddenWeekendColumns({
66
+ weekendDays: resolvedWeekendDays,
67
+ firstDayOfWeek: resolvedFirstDayOfWeek,
68
+ withWeekendDays
69
+ }));
70
+ const columnsCount = 7 - hiddenColumns.size;
60
71
  const expandedEvents = require_expand_recurring_events.expandRecurringEvents({
61
72
  events,
62
73
  rangeStart: (0, dayjs.default)(date).startOf("month").toDate(),
@@ -70,30 +81,52 @@ const MobileMonthView = (0, _mantine_core.factory)((_props) => {
70
81
  const weekdays = withWeekDays ? require_get_weekdays_names.getWeekdaysNames({
71
82
  locale: ctx.getLocale(locale),
72
83
  format: weekdayFormat,
73
- firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
74
- }).map((day, index) => /* @__PURE__ */ (0, react.createElement)("div", {
84
+ firstDayOfWeek: resolvedFirstDayOfWeek
85
+ }).map((day, index) => ({
86
+ day,
87
+ index
88
+ })).filter(({ index }) => !hiddenColumns.has(index)).map(({ day, index }) => /* @__PURE__ */ (0, react.createElement)("div", {
75
89
  ...getStyles("mobileMonthViewWeekday"),
76
90
  key: index
77
91
  }, day)) : null;
78
- const weeks = require_get_month_days.getMonthDays({
79
- month: (0, dayjs.default)(date).format("YYYY-MM-DD"),
80
- firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),
81
- consistentWeeks
82
- }).map((week, weekIndex) => {
83
- const days = week.map((dayDate, dayIndex) => {
92
+ const monthWeeks = require_get_mobile_month_view_weeks.getMobileMonthViewWeeks({
93
+ month: date,
94
+ firstDayOfWeek: resolvedFirstDayOfWeek,
95
+ consistentWeeks,
96
+ withOutsideDays,
97
+ weekendDays: resolvedWeekendDays,
98
+ withWeekendDays
99
+ }).map((week) => ({
100
+ week,
101
+ visibleDays: require_get_visible_week_days.getVisibleWeekDays({
102
+ week,
103
+ weekendDays: resolvedWeekendDays,
104
+ withWeekendDays
105
+ })
106
+ }));
107
+ const firstDayPosition = (() => {
108
+ for (let weekIndex = 0; weekIndex < monthWeeks.length; weekIndex++) {
109
+ const { visibleDays } = monthWeeks[weekIndex];
110
+ for (let dayIndex = 0; dayIndex < visibleDays.length; dayIndex++) if (withOutsideDays || require_is_same_month.isSameMonth(visibleDays[dayIndex], date)) return {
111
+ weekIndex,
112
+ dayIndex
113
+ };
114
+ }
115
+ return null;
116
+ })();
117
+ daysRef.current.length = monthWeeks.length;
118
+ const weeks = monthWeeks.map(({ week, visibleDays }, weekIndex) => {
119
+ daysRef.current[weekIndex] = [];
120
+ const days = visibleDays.map((dayDate, dayIndex) => {
84
121
  const outside = !require_is_same_month.isSameMonth(dayDate, date);
85
- const weekend = ctx.getWeekendDays(weekendDays).includes((0, dayjs.default)(dayDate).day());
122
+ const weekend = resolvedWeekendDays.includes((0, dayjs.default)(dayDate).day());
86
123
  const ariaLabel = (0, dayjs.default)(dayDate).locale(locale || ctx.locale).format("MMMM D, YYYY");
87
124
  const dayProps = getDayProps?.((0, dayjs.default)(dayDate).format("YYYY-MM-DD")) || {};
88
125
  const isToday = (0, dayjs.default)(dayDate).isSame(today, "day") && highlightToday;
89
126
  const isSelected = _selectedDate && (0, dayjs.default)(dayDate).isSame((0, dayjs.default)(_selectedDate), "day");
90
127
  const dayEvents = groupedEvents[(0, dayjs.default)(dayDate).format("YYYY-MM-DD")] || [];
91
128
  const shouldRender = withOutsideDays || !outside;
92
- if (shouldRender && firstDayPosition.current === null) firstDayPosition.current = {
93
- weekIndex,
94
- dayIndex
95
- };
96
- const isFirstDay = firstDayPosition.current?.weekIndex === weekIndex && firstDayPosition.current?.dayIndex === dayIndex;
129
+ const isFirstDay = firstDayPosition?.weekIndex === weekIndex && firstDayPosition?.dayIndex === dayIndex;
97
130
  const indicators = dayEvents.slice(0, 3).map((event) => /* @__PURE__ */ (0, react.createElement)("div", {
98
131
  ...getStyles("mobileMonthViewDayIndicator", { style: { backgroundColor: (0, _mantine_core.getThemeColor)(event.color, theme) } }),
99
132
  key: event.id
@@ -122,10 +155,7 @@ const MobileMonthView = (0, _mantine_core.factory)((_props) => {
122
155
  }),
123
156
  key: dayDate,
124
157
  ref: (node) => {
125
- if (node) {
126
- if (!daysRef.current[weekIndex]) daysRef.current[weekIndex] = [];
127
- daysRef.current[weekIndex][dayIndex] = node;
128
- }
158
+ if (node) daysRef.current[weekIndex][dayIndex] = node;
129
159
  },
130
160
  mod: [{
131
161
  outside,
@@ -167,7 +197,10 @@ const MobileMonthView = (0, _mantine_core.factory)((_props) => {
167
197
  const eventsList = (_selectedDate ? require_sort_events.sortEvents(groupedEvents[(0, dayjs.default)(_selectedDate).format("YYYY-MM-DD")] || []) : []).map((event) => {
168
198
  const startTime = (0, dayjs.default)(event.start).format("HH:mm");
169
199
  const endTime = (0, dayjs.default)(event.end).format("HH:mm");
170
- const isAllDay = startTime === "00:00" && endTime === "00:00";
200
+ const isAllDay = require_is_multiday_event.isMultidayEvent(event) || require_is_all_day_event.isAllDayEvent({
201
+ event,
202
+ date: _selectedDate
203
+ });
171
204
  const eventChildren = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mantine_core.Box, {
172
205
  ...getStyles("mobileMonthViewEventBody"),
173
206
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { ...getStyles("mobileMonthViewEventColor", { style: { backgroundColor: (0, _mantine_core.getThemeColor)(event.color, theme) } }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Text, {
@@ -218,7 +251,11 @@ const MobileMonthView = (0, _mantine_core.factory)((_props) => {
218
251
  })] });
219
252
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mantine_core.Box, {
220
253
  ...getStyles("mobileMonthView"),
221
- mod: { "with-week-numbers": withWeekNumbers },
254
+ mod: {
255
+ "with-week-numbers": withWeekNumbers,
256
+ "without-weekend-days": hiddenColumns.size > 0
257
+ },
258
+ __vars: hiddenColumns.size > 0 ? { "--mobile-month-view-columns": `${columnsCount}` } : void 0,
222
259
  ...others,
223
260
  children: [
224
261
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {