@mantine/schedule 9.3.1 → 9.4.0

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 (296) hide show
  1. package/cjs/components/AgendaView/AgendaView.cjs +133 -0
  2. package/cjs/components/AgendaView/AgendaView.cjs.map +1 -0
  3. package/cjs/components/AgendaView/AgendaView.module.cjs +19 -0
  4. package/cjs/components/AgendaView/AgendaView.module.cjs.map +1 -0
  5. package/cjs/components/AgendaView/get-agenda-view-events.cjs +48 -0
  6. package/cjs/components/AgendaView/get-agenda-view-events.cjs.map +1 -0
  7. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs.map +1 -1
  8. package/cjs/components/DayView/DayView.cjs +128 -106
  9. package/cjs/components/DayView/DayView.cjs.map +1 -1
  10. package/cjs/components/DayView/DayView.module.cjs.map +1 -1
  11. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs.map +1 -1
  12. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -1
  13. package/cjs/components/DragContext/DragContext.cjs.map +1 -1
  14. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  15. package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs.map +1 -1
  16. package/cjs/components/MonthView/MonthView.cjs +114 -64
  17. package/cjs/components/MonthView/MonthView.cjs.map +1 -1
  18. package/cjs/components/MonthView/MonthView.module.cjs.map +1 -1
  19. package/cjs/components/MonthView/get-month-view-events/add-event-to-day-groups.cjs.map +1 -1
  20. package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +1 -1
  21. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
  22. package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs.map +1 -1
  23. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs.map +1 -1
  24. package/cjs/components/MonthView/get-renderable-month-event-segments.cjs +17 -15
  25. package/cjs/components/MonthView/get-renderable-month-event-segments.cjs.map +1 -1
  26. package/cjs/components/MonthView/get-visible-columns.cjs +54 -0
  27. package/cjs/components/MonthView/get-visible-columns.cjs.map +1 -0
  28. package/cjs/components/MonthView/handle-month-view-key-down.cjs.map +1 -1
  29. package/cjs/components/MoreEvents/MoreEvents.cjs.map +1 -1
  30. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +578 -0
  31. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -0
  32. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs +29 -0
  33. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -0
  34. package/cjs/components/ResourcesDayView/ResourcesDayViewColumn.cjs +89 -0
  35. package/cjs/components/ResourcesDayView/ResourcesDayViewColumn.cjs.map +1 -0
  36. package/cjs/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.cjs +26 -0
  37. package/cjs/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.cjs.map +1 -0
  38. package/cjs/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.cjs +115 -0
  39. package/cjs/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.cjs.map +1 -0
  40. package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs +602 -0
  41. package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs.map +1 -0
  42. package/cjs/components/ResourcesMonthView/ResourcesMonthView.module.cjs +23 -0
  43. package/cjs/components/ResourcesMonthView/ResourcesMonthView.module.cjs.map +1 -0
  44. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs +102 -0
  45. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs.map +1 -0
  46. package/cjs/components/ResourcesSchedule/ResourcesSchedule.module.cjs +7 -0
  47. package/cjs/components/ResourcesSchedule/ResourcesSchedule.module.cjs.map +1 -0
  48. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +610 -0
  49. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -0
  50. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs +33 -0
  51. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -0
  52. package/cjs/components/ResourcesWeekView/ResourcesWeekViewRow.cjs +90 -0
  53. package/cjs/components/ResourcesWeekView/ResourcesWeekViewRow.cjs.map +1 -0
  54. package/cjs/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.cjs +97 -0
  55. package/cjs/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.cjs.map +1 -0
  56. package/cjs/components/Schedule/Schedule.cjs +3 -2
  57. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  58. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs +1 -1
  59. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs.map +1 -1
  60. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs.map +1 -1
  61. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs.map +1 -1
  62. package/cjs/components/ScheduleHeader/ScheduleHeader.cjs.map +1 -1
  63. package/cjs/components/ScheduleHeader/ScheduleHeader.module.cjs +2 -0
  64. package/cjs/components/ScheduleHeader/ScheduleHeader.module.cjs.map +1 -1
  65. package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs +29 -11
  66. package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs.map +1 -1
  67. package/cjs/components/ScheduleHeader/ScheduleHeaderContext.cjs.map +1 -1
  68. package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.cjs.map +1 -1
  69. package/cjs/components/WeekView/WeekView.cjs +128 -102
  70. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  71. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  72. package/cjs/components/WeekView/WeekViewDay.cjs +3 -1
  73. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
  74. package/cjs/components/WeekView/get-week-label/get-week-label.cjs.map +1 -1
  75. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-offset.cjs.map +1 -1
  76. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-width.cjs.map +1 -1
  77. package/cjs/components/WeekView/get-week-view-events/calculate-event-days.cjs.map +1 -1
  78. package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs.map +1 -1
  79. package/cjs/components/WeekView/get-week-view-events/get-event-end-date.cjs.map +1 -1
  80. package/cjs/components/WeekView/get-week-view-events/get-hanging-status.cjs.map +1 -1
  81. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -1
  82. package/cjs/components/WeekView/handle-week-view-key-down.cjs.map +1 -1
  83. package/cjs/components/YearView/YearView.cjs.map +1 -1
  84. package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
  85. package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs.map +1 -1
  86. package/cjs/components/YearView/handle-year-view-key-down.cjs.map +1 -1
  87. package/cjs/hooks/use-auto-scroll-on-drag.cjs.map +1 -1
  88. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
  89. package/cjs/hooks/use-drag-state.cjs.map +1 -1
  90. package/cjs/hooks/use-event-resize.cjs.map +1 -1
  91. package/cjs/hooks/use-horizontal-event-resize.cjs +153 -0
  92. package/cjs/hooks/use-horizontal-event-resize.cjs.map +1 -0
  93. package/cjs/hooks/use-slot-drag-select.cjs.map +1 -1
  94. package/cjs/index.cjs +18 -0
  95. package/cjs/labels.cjs +5 -1
  96. package/cjs/labels.cjs.map +1 -1
  97. package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs.map +1 -1
  98. package/cjs/utils/calculate-month-drop-date/calculate-month-drop-date.cjs.map +1 -1
  99. package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs.map +1 -1
  100. package/cjs/utils/format-date/format-date.cjs.map +1 -1
  101. package/cjs/utils/get-current-time-position/get-current-time-position.cjs.map +1 -1
  102. package/cjs/utils/get-day-position/get-day-position.cjs.map +1 -1
  103. package/cjs/utils/get-end-of-week/get-end-of-week.cjs.map +1 -1
  104. package/cjs/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.cjs +12 -0
  105. package/cjs/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.cjs.map +1 -0
  106. package/cjs/utils/get-index-from-drag-point/get-index-from-drag-point.cjs +27 -0
  107. package/cjs/utils/get-index-from-drag-point/get-index-from-drag-point.cjs.map +1 -0
  108. package/cjs/utils/get-month-days/get-month-days.cjs.map +1 -1
  109. package/cjs/utils/get-month-range/get-month-range.cjs.map +1 -1
  110. package/cjs/utils/get-months-by-quarter/get-months-by-quarter.cjs.map +1 -1
  111. package/cjs/utils/get-months-list/get-months-list.cjs.map +1 -1
  112. package/cjs/utils/get-ordered-resources/get-ordered-resources.cjs +54 -0
  113. package/cjs/utils/get-ordered-resources/get-ordered-resources.cjs.map +1 -0
  114. package/cjs/utils/get-start-of-week/get-start-of-week.cjs.map +1 -1
  115. package/cjs/utils/get-week-days/get-week-days.cjs.map +1 -1
  116. package/cjs/utils/get-week-number/get-week-number.cjs.map +1 -1
  117. package/cjs/utils/get-weekdays-names/get-weekdays-names.cjs.map +1 -1
  118. package/cjs/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.cjs +88 -0
  119. package/cjs/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.cjs.map +1 -0
  120. package/cjs/utils/is-after-min-date/is-after-min-date.cjs.map +1 -1
  121. package/cjs/utils/is-all-day-event/is-all-day-event.cjs.map +1 -1
  122. package/cjs/utils/is-before-max-date/is-before-max-date.cjs.map +1 -1
  123. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs.map +1 -1
  124. package/cjs/utils/is-events-overlap/is-events-overlap.cjs.map +1 -1
  125. package/cjs/utils/is-in-time-range/is-in-time-range.cjs.map +1 -1
  126. package/cjs/utils/is-multiday-event/is-multiday-event.cjs.map +1 -1
  127. package/cjs/utils/is-same-month/is-same-month.cjs.map +1 -1
  128. package/cjs/utils/is-within-week/is-within-week.cjs.map +1 -1
  129. package/cjs/utils/next-week/next-week.cjs.map +1 -1
  130. package/cjs/utils/parse-time-string/parse-time-string.cjs.map +1 -1
  131. package/cjs/utils/previous-week/previous-week.cjs.map +1 -1
  132. package/cjs/utils/sort-events/sort-events.cjs.map +1 -1
  133. package/cjs/utils/to-date-string/to-date-string.cjs.map +1 -1
  134. package/cjs/utils/to-time-string/to-time-string.cjs.map +1 -1
  135. package/cjs/utils/validate-event/validate-event.cjs.map +1 -1
  136. package/esm/components/AgendaView/AgendaView.mjs +130 -0
  137. package/esm/components/AgendaView/AgendaView.mjs.map +1 -0
  138. package/esm/components/AgendaView/AgendaView.module.mjs +19 -0
  139. package/esm/components/AgendaView/AgendaView.module.mjs.map +1 -0
  140. package/esm/components/AgendaView/get-agenda-view-events.mjs +46 -0
  141. package/esm/components/AgendaView/get-agenda-view-events.mjs.map +1 -0
  142. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -1
  143. package/esm/components/DayView/DayView.mjs +129 -107
  144. package/esm/components/DayView/DayView.mjs.map +1 -1
  145. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  146. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -1
  147. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -1
  148. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  149. package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs.map +1 -1
  150. package/esm/components/MonthView/MonthView.mjs +115 -65
  151. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  152. package/esm/components/MonthView/MonthView.module.mjs.map +1 -1
  153. package/esm/components/MonthView/get-month-view-events/add-event-to-day-groups.mjs.map +1 -1
  154. package/esm/components/MonthView/get-month-view-events/find-available-row.mjs.map +1 -1
  155. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
  156. package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs.map +1 -1
  157. package/esm/components/MonthView/get-renderable-month-event-segments.mjs +17 -15
  158. package/esm/components/MonthView/get-renderable-month-event-segments.mjs.map +1 -1
  159. package/esm/components/MonthView/get-visible-columns.mjs +53 -0
  160. package/esm/components/MonthView/get-visible-columns.mjs.map +1 -0
  161. package/esm/components/MonthView/handle-month-view-key-down.mjs.map +1 -1
  162. package/esm/components/MoreEvents/MoreEvents.mjs.map +1 -1
  163. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +576 -0
  164. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -0
  165. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs +29 -0
  166. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -0
  167. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs +89 -0
  168. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs.map +1 -0
  169. package/esm/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.mjs +26 -0
  170. package/esm/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.mjs.map +1 -0
  171. package/esm/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.mjs +113 -0
  172. package/esm/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.mjs.map +1 -0
  173. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs +600 -0
  174. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs.map +1 -0
  175. package/esm/components/ResourcesMonthView/ResourcesMonthView.module.mjs +23 -0
  176. package/esm/components/ResourcesMonthView/ResourcesMonthView.module.mjs.map +1 -0
  177. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs +102 -0
  178. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -0
  179. package/esm/components/ResourcesSchedule/ResourcesSchedule.module.mjs +7 -0
  180. package/esm/components/ResourcesSchedule/ResourcesSchedule.module.mjs.map +1 -0
  181. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +608 -0
  182. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -0
  183. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs +33 -0
  184. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -0
  185. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs +90 -0
  186. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs.map +1 -0
  187. package/esm/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.mjs +95 -0
  188. package/esm/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.mjs.map +1 -0
  189. package/esm/components/Schedule/Schedule.mjs +3 -2
  190. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  191. package/esm/components/ScheduleEvent/ScheduleEvent.mjs +1 -1
  192. package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -1
  193. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -1
  194. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -1
  195. package/esm/components/ScheduleHeader/ScheduleHeader.module.mjs +2 -0
  196. package/esm/components/ScheduleHeader/ScheduleHeader.module.mjs.map +1 -1
  197. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs +29 -11
  198. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -1
  199. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.mjs.map +1 -1
  200. package/esm/components/WeekView/WeekView.mjs +128 -102
  201. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  202. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  203. package/esm/components/WeekView/WeekViewDay.mjs +3 -1
  204. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  205. package/esm/components/WeekView/get-week-label/get-week-label.mjs.map +1 -1
  206. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-offset.mjs.map +1 -1
  207. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-width.mjs.map +1 -1
  208. package/esm/components/WeekView/get-week-view-events/calculate-event-days.mjs.map +1 -1
  209. package/esm/components/WeekView/get-week-view-events/find-available-column.mjs.map +1 -1
  210. package/esm/components/WeekView/get-week-view-events/get-event-end-date.mjs.map +1 -1
  211. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -1
  212. package/esm/components/WeekView/handle-week-view-key-down.mjs.map +1 -1
  213. package/esm/components/YearView/YearView.mjs.map +1 -1
  214. package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
  215. package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs.map +1 -1
  216. package/esm/components/YearView/handle-year-view-key-down.mjs.map +1 -1
  217. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  218. package/esm/hooks/use-event-resize.mjs.map +1 -1
  219. package/esm/hooks/use-horizontal-event-resize.mjs +151 -0
  220. package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -0
  221. package/esm/index.mjs +10 -1
  222. package/esm/labels.mjs +5 -1
  223. package/esm/labels.mjs.map +1 -1
  224. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs.map +1 -1
  225. package/esm/utils/calculate-month-drop-date/calculate-month-drop-date.mjs.map +1 -1
  226. package/esm/utils/expand-recurring-events/expand-recurring-events.mjs.map +1 -1
  227. package/esm/utils/format-date/format-date.mjs.map +1 -1
  228. package/esm/utils/get-current-time-position/get-current-time-position.mjs.map +1 -1
  229. package/esm/utils/get-day-position/get-day-position.mjs.map +1 -1
  230. package/esm/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.mjs +12 -0
  231. package/esm/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.mjs.map +1 -0
  232. package/esm/utils/get-index-from-drag-point/get-index-from-drag-point.mjs +27 -0
  233. package/esm/utils/get-index-from-drag-point/get-index-from-drag-point.mjs.map +1 -0
  234. package/esm/utils/get-month-days/get-month-days.mjs.map +1 -1
  235. package/esm/utils/get-month-range/get-month-range.mjs.map +1 -1
  236. package/esm/utils/get-months-by-quarter/get-months-by-quarter.mjs.map +1 -1
  237. package/esm/utils/get-months-list/get-months-list.mjs.map +1 -1
  238. package/esm/utils/get-ordered-resources/get-ordered-resources.mjs +54 -0
  239. package/esm/utils/get-ordered-resources/get-ordered-resources.mjs.map +1 -0
  240. package/esm/utils/get-week-number/get-week-number.mjs.map +1 -1
  241. package/esm/utils/get-weekdays-names/get-weekdays-names.mjs.map +1 -1
  242. package/esm/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.mjs +88 -0
  243. package/esm/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.mjs.map +1 -0
  244. package/esm/utils/is-after-min-date/is-after-min-date.mjs.map +1 -1
  245. package/esm/utils/is-all-day-event/is-all-day-event.mjs.map +1 -1
  246. package/esm/utils/is-before-max-date/is-before-max-date.mjs.map +1 -1
  247. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs.map +1 -1
  248. package/esm/utils/is-events-overlap/is-events-overlap.mjs.map +1 -1
  249. package/esm/utils/is-in-time-range/is-in-time-range.mjs.map +1 -1
  250. package/esm/utils/is-multiday-event/is-multiday-event.mjs.map +1 -1
  251. package/esm/utils/is-same-month/is-same-month.mjs.map +1 -1
  252. package/esm/utils/is-within-week/is-within-week.mjs.map +1 -1
  253. package/esm/utils/next-week/next-week.mjs.map +1 -1
  254. package/esm/utils/parse-time-string/parse-time-string.mjs.map +1 -1
  255. package/esm/utils/previous-week/previous-week.mjs.map +1 -1
  256. package/esm/utils/sort-events/sort-events.mjs.map +1 -1
  257. package/esm/utils/to-date-string/to-date-string.mjs.map +1 -1
  258. package/esm/utils/to-time-string/to-time-string.mjs.map +1 -1
  259. package/esm/utils/validate-event/validate-event.mjs.map +1 -1
  260. package/lib/components/AgendaView/AgendaView.d.ts +54 -0
  261. package/lib/components/AgendaView/get-agenda-view-events.d.ts +9 -0
  262. package/lib/components/AgendaView/index.d.ts +2 -0
  263. package/lib/components/DayView/DayView.d.ts +6 -1
  264. package/lib/components/MonthView/MonthView.d.ts +6 -1
  265. package/lib/components/MonthView/get-renderable-month-event-segments.d.ts +5 -1
  266. package/lib/components/MonthView/get-visible-columns.d.ts +19 -0
  267. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +148 -0
  268. package/lib/components/ResourcesDayView/ResourcesDayViewColumn.d.ts +39 -0
  269. package/lib/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.d.ts +2 -0
  270. package/lib/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.d.ts +16 -0
  271. package/lib/components/ResourcesDayView/index.d.ts +9 -0
  272. package/lib/components/ResourcesMonthView/ResourcesMonthView.d.ts +129 -0
  273. package/lib/components/ResourcesMonthView/index.d.ts +9 -0
  274. package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +123 -0
  275. package/lib/components/ResourcesSchedule/index.d.ts +3 -0
  276. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +106 -0
  277. package/lib/components/ResourcesWeekView/ResourcesWeekViewRow.d.ts +39 -0
  278. package/lib/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.d.ts +29 -0
  279. package/lib/components/ResourcesWeekView/index.d.ts +3 -0
  280. package/lib/components/Schedule/Schedule.d.ts +3 -1
  281. package/lib/components/ScheduleHeader/ScheduleHeaderBase.d.ts +5 -1
  282. package/lib/components/WeekView/WeekView.d.ts +6 -1
  283. package/lib/components/WeekView/WeekViewDay.d.ts +3 -1
  284. package/lib/hooks/use-horizontal-event-resize.d.ts +37 -0
  285. package/lib/index.d.mts +5 -0
  286. package/lib/index.d.ts +5 -0
  287. package/lib/labels.d.ts +4 -0
  288. package/lib/types.d.ts +20 -0
  289. package/lib/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.d.ts +3 -0
  290. package/lib/utils/get-index-from-drag-point/get-index-from-drag-point.d.ts +6 -0
  291. package/lib/utils/get-ordered-resources/get-ordered-resources.d.ts +17 -0
  292. package/lib/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.d.ts +10 -0
  293. package/lib/utils/index.d.ts +6 -0
  294. package/package.json +4 -4
  295. package/styles.css +1363 -10
  296. package/styles.layer.css +1364 -11
@@ -13,6 +13,7 @@ import { useAutoScrollOnDrag } from "../../hooks/use-auto-scroll-on-drag.mjs";
13
13
  import { useDragDropHandlers } from "../../hooks/use-drag-drop-handlers.mjs";
14
14
  import { useEventResize } from "../../hooks/use-event-resize.mjs";
15
15
  import { useSlotDragSelect } from "../../hooks/use-slot-drag-select.mjs";
16
+ import { AgendaView } from "../AgendaView/AgendaView.mjs";
16
17
  import { CurrentTimeIndicator } from "../CurrentTimeIndicator/CurrentTimeIndicator.mjs";
17
18
  import { DragContext } from "../DragContext/DragContext.mjs";
18
19
  import { ScheduleEvent } from "../ScheduleEvent/ScheduleEvent.mjs";
@@ -23,7 +24,7 @@ import DayView_module_default from "./DayView.module.mjs";
23
24
  import dayjs from "dayjs";
24
25
  import { Box, ScrollArea, UnstyledButton, createVarsResolver, factory, getRadius, rem, useMantineTheme, useProps, useResolvedStylesApi, useStyles } from "@mantine/core";
25
26
  import { useIsomorphicEffect, useMergedRef } from "@mantine/hooks";
26
- import { createElement, useCallback, useRef } from "react";
27
+ import { createElement, useCallback, useRef, useState } from "react";
27
28
  import { useDatesContext } from "@mantine/dates";
28
29
  import { jsx, jsxs } from "react/jsx-runtime";
29
30
  //#region packages/@mantine/schedule/src/components/DayView/DayView.tsx
@@ -32,6 +33,7 @@ const defaultProps = {
32
33
  startTime: "00:00:00",
33
34
  endTime: "23:59:59",
34
35
  intervalMinutes: 15,
36
+ withSubHourGridLines: true,
35
37
  withAllDaySlot: true,
36
38
  slotLabelFormat: "HH:mm",
37
39
  headerFormat: "MMMM D, YYYY",
@@ -51,7 +53,8 @@ const varsResolver = createVarsResolver((_theme, { radius, slotHeight, allDaySlo
51
53
  } }));
52
54
  const DayView = factory((_props) => {
53
55
  const props = useProps("DayView", defaultProps, _props);
54
- const { classNames, className, style, styles, unstyled, attributes, vars, __staticSelector, startTime, endTime, intervalMinutes, 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, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, recurrenceExpansionLimit, getTimeSlotProps, ...others } = props;
56
+ const { classNames, className, style, styles, unstyled, attributes, vars, __staticSelector, startTime, endTime, intervalMinutes, withSubHourGridLines, 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, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, recurrenceExpansionLimit, getTimeSlotProps, withAgenda, ...others } = props;
57
+ const [agendaOpen, setAgendaOpen] = useState(false);
55
58
  const getStyles = useStyles({
56
59
  name: __staticSelector,
57
60
  classes: DayView_module_default,
@@ -275,6 +278,7 @@ const DayView = factory((_props) => {
275
278
  slotsRef.current[index] = node;
276
279
  },
277
280
  mod: {
281
+ first: index === 0,
278
282
  "hour-start": slot.isHourStart,
279
283
  ...getBusinessHoursMod({
280
284
  time: slot.startTime,
@@ -371,117 +375,135 @@ const DayView = factory((_props) => {
371
375
  ...getStyles("dayView"),
372
376
  mod: {
373
377
  static: mode === "static",
374
- "slot-dragging": slotDragSelect.isDragging
378
+ "slot-dragging": slotDragSelect.isDragging,
379
+ "hide-sub-hour-grid-lines": !withSubHourGridLines,
380
+ "event-interaction": eventResize.isResizing || dragDrop.dragContextValue.isDragging
375
381
  },
376
382
  ...others,
377
- children: [withHeader && /* @__PURE__ */ jsx(ScheduleHeaderBase, {
378
- view: "day",
379
- navigationHandlers: {
380
- previous: () => toDateString(dayjs(date).subtract(1, "day")),
381
- next: () => toDateString(dayjs(date).add(1, "day")),
382
- today: () => toDateString(resolveNow())
383
- },
384
- control: {
385
- title: formatDate({
386
- locale: ctx.getLocale(locale),
387
- date,
388
- format: headerFormat
389
- }),
390
- miw: 140
391
- },
392
- labels,
393
- onDateChange,
394
- onViewChange,
395
- previousControlProps,
396
- nextControlProps,
397
- todayControlProps,
398
- viewSelectProps,
399
- stylesApiProps
400
- }), /* @__PURE__ */ jsx(ScrollArea.Autosize, {
401
- scrollbarSize: 4,
402
- ...scrollAreaProps,
403
- ...getStyles("dayViewScrollArea", {
404
- className: scrollAreaProps?.className,
405
- style: scrollAreaProps?.style
383
+ children: [
384
+ withHeader && /* @__PURE__ */ jsx(ScheduleHeaderBase, {
385
+ view: "day",
386
+ navigationHandlers: {
387
+ previous: () => toDateString(dayjs(date).subtract(1, "day")),
388
+ next: () => toDateString(dayjs(date).add(1, "day")),
389
+ today: () => toDateString(resolveNow())
390
+ },
391
+ control: {
392
+ title: formatDate({
393
+ locale: ctx.getLocale(locale),
394
+ date,
395
+ format: headerFormat
396
+ }),
397
+ miw: 140
398
+ },
399
+ labels,
400
+ onDateChange,
401
+ onViewChange,
402
+ previousControlProps,
403
+ nextControlProps,
404
+ todayControlProps,
405
+ viewSelectProps,
406
+ stylesApiProps,
407
+ onAgendaClick: withAgenda ? () => setAgendaOpen((v) => !v) : void 0,
408
+ agendaActive: agendaOpen
406
409
  }),
407
- viewportRef: mergedViewportRef,
408
- children: /* @__PURE__ */ jsxs(Box, {
409
- ...getStyles("dayViewInner"),
410
- children: [/* @__PURE__ */ jsxs("div", {
411
- ...getStyles("dayViewSlotLabels"),
412
- children: [withAllDaySlot && /* @__PURE__ */ jsx(Box, {
413
- ...getStyles("dayViewSlotLabel"),
414
- mod: { "all-day": true },
415
- children: getLabel("allDay", labels)
416
- }), slotsLabels]
417
- }), /* @__PURE__ */ jsxs("div", {
418
- ...getStyles("dayViewSlots"),
419
- children: [withAllDaySlot && /* @__PURE__ */ jsxs("div", {
420
- ...getStyles("dayViewAllDay"),
421
- children: [
422
- backgroundAllDayEventNodes,
423
- /* @__PURE__ */ jsxs("div", {
424
- ...getStyles("dayViewAllDayEvents"),
425
- children: [allDayEventsNodes, allDayEventsCount.hiddenEventsCount > 0 && /* @__PURE__ */ jsx(MoreEvents, {
426
- events: eventsData.allDayEvents,
427
- moreEventsCount: allDayEventsCount.hiddenEventsCount,
428
- renderEventBody,
429
- renderEvent,
430
- mode,
431
- labels,
432
- onEventClick,
433
- ...stylesApiProps,
434
- ...moreEventsProps
435
- })]
436
- }),
437
- /* @__PURE__ */ jsx(UnstyledButton, {
438
- ...getStyles("dayViewSlot"),
439
- mod: {
440
- "all-day": true,
441
- static: mode === "static"
442
- },
443
- "aria-label": `${getLabel("timeSlot", labels)} ${getLabel("allDay", labels)}`,
444
- onClick: mode === "static" || !onAllDaySlotClick ? void 0 : (e) => {
445
- onAllDaySlotClick(dayjs(date).format("YYYY-MM-DD"), e);
446
- }
447
- })
448
- ]
410
+ agendaOpen && /* @__PURE__ */ jsx(AgendaView, {
411
+ rangeStart: dayjs(date).startOf("day").format("YYYY-MM-DD"),
412
+ rangeEnd: dayjs(date).endOf("day").format("YYYY-MM-DD"),
413
+ events,
414
+ locale,
415
+ labels,
416
+ mode,
417
+ onEventClick,
418
+ recurrenceExpansionLimit,
419
+ ...stylesApiProps
420
+ }),
421
+ !agendaOpen && /* @__PURE__ */ jsx(ScrollArea.Autosize, {
422
+ scrollbarSize: 4,
423
+ ...scrollAreaProps,
424
+ ...getStyles("dayViewScrollArea", {
425
+ className: scrollAreaProps?.className,
426
+ style: scrollAreaProps?.style
427
+ }),
428
+ viewportRef: mergedViewportRef,
429
+ children: /* @__PURE__ */ jsxs(Box, {
430
+ ...getStyles("dayViewInner"),
431
+ children: [/* @__PURE__ */ jsxs("div", {
432
+ ...getStyles("dayViewSlotLabels"),
433
+ children: [withAllDaySlot && /* @__PURE__ */ jsx(Box, {
434
+ ...getStyles("dayViewSlotLabel"),
435
+ mod: { "all-day": true },
436
+ children: getLabel("allDay", labels)
437
+ }), slotsLabels]
449
438
  }), /* @__PURE__ */ jsxs("div", {
450
- ref: timeSlotsContainerRef,
451
- ...getStyles("dayViewTimeSlots"),
452
- onDragOver: withDragHandlers ? (event) => {
453
- const slotIndex = getSlotIndexFromDragPoint(event);
454
- if (slotIndex !== null) dragDrop.handleDragOver(event, slotIndex);
455
- } : void 0,
456
- onDragLeave: withDragHandlers ? dragDrop.handleDragLeave : void 0,
457
- onDrop: withDragHandlers ? (event) => {
458
- const slotIndex = getSlotIndexFromDragPoint(event);
459
- if (slotIndex !== null) dragDrop.handleDrop(event, slotIndex);
460
- } : void 0,
461
- children: [
462
- backgroundTimedEventNodes,
463
- eventsNodes,
464
- showCurrentTimeIndicator && /* @__PURE__ */ jsx(CurrentTimeIndicator, {
465
- startOffset: "calc(var(--day-view-slot-labels-width) * -1)",
466
- endOffset: "0rem",
467
- topOffset: "0rem",
468
- timeBubbleStartOffset: "calc(var(--day-view-slot-labels-width) * -1 + 30px)",
469
- currentTimeFormat: slotLabelFormat,
470
- withTimeBubble: withCurrentTimeBubble,
471
- withThumb: !withCurrentTimeBubble,
472
- locale,
473
- startTime,
474
- endTime,
475
- intervalMinutes,
476
- getCurrentTime,
477
- ...stylesApiProps
478
- }),
479
- items
480
- ]
439
+ ...getStyles("dayViewSlots"),
440
+ children: [withAllDaySlot && /* @__PURE__ */ jsxs("div", {
441
+ ...getStyles("dayViewAllDay"),
442
+ children: [
443
+ backgroundAllDayEventNodes,
444
+ /* @__PURE__ */ jsxs("div", {
445
+ ...getStyles("dayViewAllDayEvents"),
446
+ children: [allDayEventsNodes, allDayEventsCount.hiddenEventsCount > 0 && /* @__PURE__ */ jsx(MoreEvents, {
447
+ events: eventsData.allDayEvents,
448
+ moreEventsCount: allDayEventsCount.hiddenEventsCount,
449
+ renderEventBody,
450
+ renderEvent,
451
+ mode,
452
+ labels,
453
+ onEventClick,
454
+ ...stylesApiProps,
455
+ ...moreEventsProps
456
+ })]
457
+ }),
458
+ /* @__PURE__ */ jsx(UnstyledButton, {
459
+ ...getStyles("dayViewSlot"),
460
+ mod: {
461
+ "all-day": true,
462
+ static: mode === "static"
463
+ },
464
+ "aria-label": `${getLabel("timeSlot", labels)} ${getLabel("allDay", labels)}`,
465
+ onClick: mode === "static" || !onAllDaySlotClick ? void 0 : (e) => {
466
+ onAllDaySlotClick(dayjs(date).format("YYYY-MM-DD"), e);
467
+ }
468
+ })
469
+ ]
470
+ }), /* @__PURE__ */ jsxs("div", {
471
+ ref: timeSlotsContainerRef,
472
+ ...getStyles("dayViewTimeSlots"),
473
+ onDragOver: withDragHandlers ? (event) => {
474
+ const slotIndex = getSlotIndexFromDragPoint(event);
475
+ if (slotIndex !== null) dragDrop.handleDragOver(event, slotIndex);
476
+ } : void 0,
477
+ onDragLeave: withDragHandlers ? dragDrop.handleDragLeave : void 0,
478
+ onDrop: withDragHandlers ? (event) => {
479
+ const slotIndex = getSlotIndexFromDragPoint(event);
480
+ if (slotIndex !== null) dragDrop.handleDrop(event, slotIndex);
481
+ } : void 0,
482
+ children: [
483
+ backgroundTimedEventNodes,
484
+ eventsNodes,
485
+ showCurrentTimeIndicator && /* @__PURE__ */ jsx(CurrentTimeIndicator, {
486
+ startOffset: "calc(var(--day-view-slot-labels-width) * -1)",
487
+ endOffset: "0rem",
488
+ topOffset: "0rem",
489
+ timeBubbleStartOffset: "calc(var(--day-view-slot-labels-width) * -1 + 30px)",
490
+ currentTimeFormat: slotLabelFormat,
491
+ withTimeBubble: withCurrentTimeBubble,
492
+ withThumb: !withCurrentTimeBubble,
493
+ locale,
494
+ startTime,
495
+ endTime,
496
+ intervalMinutes,
497
+ getCurrentTime,
498
+ ...stylesApiProps
499
+ }),
500
+ items
501
+ ]
502
+ })]
481
503
  })]
482
- })]
504
+ })
483
505
  })
484
- })]
506
+ ]
485
507
  });
486
508
  if (withEventsDragAndDrop) return /* @__PURE__ */ jsx(DragContext.Provider, {
487
509
  value: dragDrop.dragContextValue,
@@ -1 +1 @@
1
- {"version":3,"file":"DayView.mjs","names":["classes"],"sources":["../../../src/components/DayView/DayView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useRef } 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 useMantineTheme,\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 ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n clampIntervalMinutes,\n expandRecurringEvents,\n formatDate,\n getBusinessHoursMod,\n getDayTimeIntervals,\n getVisibleEvents,\n isAllDayEvent,\n toDateString,\n} from '../../utils';\nimport {\n CurrentTimeIndicator,\n CurrentTimeIndicatorStylesNames,\n} from '../CurrentTimeIndicator/CurrentTimeIndicator';\nimport { DragContext } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\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 | MoreEventsStylesNames\n | ScheduleEventStylesNames\n | Exclude<CombinedScheduleHeaderStylesNames, MonthYearSelectStylesNames>\n | CurrentTimeIndicatorStylesNames;\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 @default 15 */\n intervalMinutes?: 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 /** 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, 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 /** 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\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 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} 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 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 onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n startScrollTime,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n getTimeSlotProps,\n ...others\n } = props;\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 theme = useMantineTheme();\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({ left: 0, top: slotRect.top - viewportRect.top });\n }, []);\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 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 return 0;\n }\n\n if (event.clientY > lastRect.bottom) {\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 });\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, slotIndex: number) => {\n if (!onExternalEventDrop) {\n return;\n }\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[slotIndex].startTime}`);\n },\n [onExternalEventDrop, date, slots]\n );\n\n const dragDrop = useDragDropHandlers({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (slotIndex: number, draggedEvent: ScheduleEventData) => {\n const slotTime = slots[slotIndex].startTime;\n return calculateDropTime({\n draggedEvent,\n targetDate: date,\n targetSlotTime: slotTime,\n intervalMinutes,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const eventResize = useEventResize({\n enabled: withEventResize,\n mode,\n startTime,\n endTime,\n intervalMinutes,\n onEventResize,\n canResizeEvent,\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 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 }}\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 items = slots.map((slot, index) => {\n const isDropTarget = 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 '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 backgroundAllDayEventNodes = eventsData.backgroundAllDayEvents.map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-allday-${event.id}`,\n ...getStyles('dayViewBackgroundEvent', {\n style: { top: 0, height: '100%', width: '100%' },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n const { key: bgEventKey, ...restBgEventProps } = bgEventProps;\n return <Box key={bgEventKey} {...restBgEventProps} />;\n });\n\n const backgroundTimedEventNodes = eventsData.backgroundTimedEvents.map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: event.id,\n ...getStyles('dayViewBackgroundEvent', {\n style: {\n top: `calc(${event.position.top}% + 1px)`,\n height: `calc(${event.position.height}% - 2px)`,\n width: '100%',\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n const { key: bgEventKey, ...restBgEventProps } = bgEventProps;\n return <Box key={bgEventKey} {...restBgEventProps} />;\n });\n\n const content = (\n <Box\n {...getStyles('dayView')}\n mod={{ static: mode === 'static', 'slot-dragging': slotDragSelect.isDragging }}\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 />\n )}\n\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 }\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 {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 </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
+ {"version":3,"file":"DayView.mjs","names":["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 useMantineTheme,\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 ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n clampIntervalMinutes,\n expandRecurringEvents,\n formatDate,\n getBusinessHoursMod,\n getDayTimeIntervals,\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 {\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 | 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 @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 /** 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 /** 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, 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 /** 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} 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 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 onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n startScrollTime,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\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 theme = useMantineTheme();\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({ left: 0, top: slotRect.top - viewportRect.top });\n }, []);\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 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 return 0;\n }\n\n if (event.clientY > lastRect.bottom) {\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 });\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, slotIndex: number) => {\n if (!onExternalEventDrop) {\n return;\n }\n const slotDate = dayjs(date).format('YYYY-MM-DD');\n onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[slotIndex].startTime}`);\n },\n [onExternalEventDrop, date, slots]\n );\n\n const dragDrop = useDragDropHandlers({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (slotIndex: number, draggedEvent: ScheduleEventData) => {\n const slotTime = slots[slotIndex].startTime;\n return calculateDropTime({\n draggedEvent,\n targetDate: date,\n targetSlotTime: slotTime,\n intervalMinutes,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const eventResize = useEventResize({\n enabled: withEventResize,\n mode,\n startTime,\n endTime,\n intervalMinutes,\n onEventResize,\n canResizeEvent,\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 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 }}\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 items = slots.map((slot, index) => {\n const isDropTarget = 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 backgroundAllDayEventNodes = eventsData.backgroundAllDayEvents.map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: `bg-allday-${event.id}`,\n ...getStyles('dayViewBackgroundEvent', {\n style: { top: 0, height: '100%', width: '100%' },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n const { key: bgEventKey, ...restBgEventProps } = bgEventProps;\n return <Box key={bgEventKey} {...restBgEventProps} />;\n });\n\n const backgroundTimedEventNodes = eventsData.backgroundTimedEvents.map((event) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: 'light',\n autoContrast: true,\n });\n\n const bgEventBody =\n typeof renderEventBody === 'function' ? renderEventBody(event) : event.title;\n\n const bgEventProps = {\n key: event.id,\n ...getStyles('dayViewBackgroundEvent', {\n style: {\n top: `calc(${event.position.top}% + 1px)`,\n height: `calc(${event.position.height}% - 2px)`,\n width: '100%',\n },\n }),\n __vars: {\n '--bg-event-bg': colors.background,\n '--bg-event-color': colors.color,\n },\n children: bgEventBody,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, bgEventProps as any);\n }\n\n const { key: bgEventKey, ...restBgEventProps } = bgEventProps;\n return <Box key={bgEventKey} {...restBgEventProps} />;\n });\n\n const content = (\n <Box\n {...getStyles('dayView')}\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 }\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 {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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2QA,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;AACR;AAEA,MAAM,eAAe,oBAClB,QAAQ,EAAE,QAAQ,YAAY,wBAAwB,EACrD,SAAS;CACP,qBAAqB,WAAW,KAAA,IAAY,UAAU,MAAM,IAAI,KAAA;CAChE,0BAA0B,IAAI,UAAU;CACxC,kCAAkC,IAAI,gBAAgB;AACxD,EACF,EACF;AAEA,MAAa,UAAU,SAAyB,WAAW;CACzD,MAAM,QAAQ,SAAS,WAAW,cAAc,MAAM;CACtD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,YACA,MACA,kBACA,WACA,SACA,iBACA,sBACA,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,kBACA,gBACA,iBACA,mBACA,cACA,oBACA,eACA,MACA,iBACA,qBACA,iBACA,eACA,gBACA,0BACA,kBACA,YACA,GAAG,WACD;CAEJ,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAElD,MAAM,YAAY,UAA0B;EAC1C,MAAM;EACN,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,EAAE,oBAAoB,mBAAmB,qBAAqC;EAClF;EACA;EACA;CACF,CAAC;CAED,MAAM,iBAAiB;EACrB,YAAY;EACZ,QAAQ;EACR;EACA;EACA;CACF;CAEA,MAAM,QAAQ,gBAAgB;CAC9B,MAAM,MAAM,gBAAgB;CAC5B,MAAM,mBAAoB,iBAAiB,MAAM,eAAe,CAAC,IAAI,MAAM;CAC3E,MAAM,2BACJ,4BAA4B,MAAM,IAAI,CAAC,CAAC,OAAO,WAAW,GAAG,KAAK;CACpE,MAAM,QAAQ,oBAAoB;EAAE;EAAW;EAAS;CAAgB,CAAC;CACzE,MAAM,WAAW,OAA4B,CAAC,CAAC;CAC/C,MAAM,cAAc,OAAuB,IAAI;CAC/C,MAAM,wBAAwB,OAAuB,IAAI;CACzD,MAAM,oBAAoB,aAAa,aAAa,iBAAiB,WAAW;CAEhF,oBAAoB;EAClB;EACA,UAAU,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;CACxE,CAAC;CAED,0BAA0B;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;GAAE,MAAM;GAAG,KAAK,SAAS,MAAM,aAAa;EAAI,CAAC;CAChF,GAAG,CAAC,CAAC;CAEL,MAAM,4BAA4B,aAAa,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,GACf,OAAO;EAGT,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,KAC5B,OAAO;EAGT,IAAI,MAAM,UAAU,SAAS,QAC3B,OAAO,SAAS,QAAQ,SAAS;EAGnC,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,iBAAiB,kBAAkB;EACvC,SAAS,sBAAsB,SAAS;EACxC,YAAY,YAAY,aAAa;GACnC,IAAI,CAAC,eACH;GAEF,MAAM,WAAW,MAAM,IAAI,CAAC,CAAC,OAAO,YAAY;GAChD,cACE,GAAG,SAAS,GAAG,MAAM,WAAW,CAAC,aACjC,GAAG,SAAS,GAAG,MAAM,SAAS,CAAC,SACjC;EACF;CACF,CAAC;CASD,MAAM,aAAa,iBAAiB;EAClC,QARqB,sBAAsB;GAC3C;GACA,YAAY,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO;GAC9C,UAAU,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO;GAC1C,gBAAgB;EAClB,CAGuB;EACrB;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,qBAAqB,aACxB,GAAoB,cAAsB;EACzC,IAAI,CAAC,qBACH;EAEF,MAAM,WAAW,MAAM,IAAI,CAAC,CAAC,OAAO,YAAY;EAChD,oBAAoB,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,UAAU,CAAC,WAAW;CACjF,GACA;EAAC;EAAqB;EAAM;CAAK,CACnC;CAEA,MAAM,WAAW,oBAAoB;EACnC,SAAS;EACT;EACA;EACA;EACA;EACA;EACA,sBAAsB,WAAmB,iBAAoC;GAC3E,MAAM,WAAW,MAAM,UAAU,CAAC;GAClC,OAAO,kBAAkB;IACvB;IACA,YAAY;IACZ,gBAAgB;IAChB;GACF,CAAC;EACH;EACA,gBAAgB,sBAAsB,qBAAqB,KAAA;CAC7D,CAAC;CAED,MAAM,cAAc,eAAe;EACjC,SAAS;EACT;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,oBAAoB,yBAAyB,CAAC,CAAC,wBAAwB,SAAS;CAEtF,MAAM,cAAc,WAAW,cAAc,KAAK,UAAU;EAC1D,MAAM,gBAAgB,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,oBAAC,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,WAAW,MAAM,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,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;GACZ;EACD,GA3CM,MAAM,EA2CZ;CAEL,CAAC;CAED,MAAM,oBAAoB,iBAAiB;EACzC,WAAW;EACX,aAAa,WAAW,aAAa;CACvC,CAAC;CAED,MAAM,oBAAoB,WAAW,aAClC,MAAM,GAAG,kBAAkB,kBAAkB,CAAC,CAC9C,KAAK,UACJ,oBAAC,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,WAAW,MAAM,IAAI,CAAC,CAAC,OAAO,YAAY;CAEhD,MAAM,QAAQ,MAAM,KAAK,MAAM,UAAU;EACvC,MAAM,eAAe,SAAS,aAAa,KAAK;EAChD,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,8BAAC,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,GAAG,oBAAoB;KACrB,MAAM,KAAK;KACX;KACA;IACF,CAAC;IACD,eAAe;IACf,iBAAiB;IACjB,QAAQ,SAAS;GACnB;GACA,QAAQ,EAAE,eAAe,GAAG,qBAAqB,eAAe,IAAI,KAAK;GACzE,cAAY,GAAG,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,WAAW,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,OAAO,YAAY,EAAE,GAAG,KAAK,WAAW;GAC9E,MAAM,QAAQ,WAAW;IACvB,QAAQ,IAAI,UAAU,MAAM;IAC5B,MAAM;IACN,QAAQ;GACV,CAAC;GAED,IAAI,KACF,8BAAC,KAAD;IACE,GAAI,UAAU,kBAAkB;IAChC,KAAK,KAAK;IACV,KAAK,oBAAoB;KACvB,MAAM,KAAK;KACX;KACA;IACF,CAAC;GAGE,GADF,KACE,CACP;EACF;EACA,OAAO;CACT,GAAG,CAAC,CAAC;CAEL,MAAM,6BAA6B,WAAW,uBAAuB,KAAK,UAAU;EAClF,MAAM,SAAS,MAAM,qBAAqB;GACxC,OAAO,MAAM,SAAS,MAAM;GAC5B;GACA,SAAS;GACT,cAAc;EAChB,CAAC;EAED,MAAM,cACJ,OAAO,oBAAoB,aAAa,gBAAgB,KAAK,IAAI,MAAM;EAEzE,MAAM,eAAe;GACnB,KAAK,aAAa,MAAM;GACxB,GAAG,UAAU,0BAA0B,EACrC,OAAO;IAAE,KAAK;IAAG,QAAQ;IAAQ,OAAO;GAAO,EACjD,CAAC;GACD,QAAQ;IACN,iBAAiB,OAAO;IACxB,oBAAoB,OAAO;GAC7B;GACA,UAAU;EACZ;EAEA,IAAI,OAAO,gBAAgB,YACzB,OAAO,YAAY,OAAO,YAAmB;EAG/C,MAAM,EAAE,KAAK,YAAY,GAAG,qBAAqB;EACjD,OAAO,oBAAC,KAAD,EAAsB,GAAI,iBAAmB,GAAnC,UAAmC;CACtD,CAAC;CAED,MAAM,4BAA4B,WAAW,sBAAsB,KAAK,UAAU;EAChF,MAAM,SAAS,MAAM,qBAAqB;GACxC,OAAO,MAAM,SAAS,MAAM;GAC5B;GACA,SAAS;GACT,cAAc;EAChB,CAAC;EAED,MAAM,cACJ,OAAO,oBAAoB,aAAa,gBAAgB,KAAK,IAAI,MAAM;EAEzE,MAAM,eAAe;GACnB,KAAK,MAAM;GACX,GAAG,UAAU,0BAA0B,EACrC,OAAO;IACL,KAAK,QAAQ,MAAM,SAAS,IAAI;IAChC,QAAQ,QAAQ,MAAM,SAAS,OAAO;IACtC,OAAO;GACT,EACF,CAAC;GACD,QAAQ;IACN,iBAAiB,OAAO;IACxB,oBAAoB,OAAO;GAC7B;GACA,UAAU;EACZ;EAEA,IAAI,OAAO,gBAAgB,YACzB,OAAO,YAAY,OAAO,YAAmB;EAG/C,MAAM,EAAE,KAAK,YAAY,GAAG,qBAAqB;EACjD,OAAO,oBAAC,KAAD,EAAsB,GAAI,iBAAmB,GAAnC,UAAmC;CACtD,CAAC;CAED,MAAM,UACJ,qBAAC,KAAD;EACE,GAAI,UAAU,SAAS;EACvB,KAAK;GACH,QAAQ,SAAS;GACjB,iBAAiB,eAAe;GAChC,4BAA4B,CAAC;GAC7B,qBAAqB,YAAY,cAAc,SAAS,iBAAiB;EAC3E;EACA,GAAI;YARN;GAUG,cACC,oBAAC,oBAAD;IACE,MAAK;IACL,oBAAoB;KAClB,gBAAgB,aAAa,MAAM,IAAI,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;KAC3D,YAAY,aAAa,MAAM,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;KAClD,aAAa,aAAa,WAAW,CAAC;IACxC;IACA,SAAS;KACP,OAAO,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,oBAAC,YAAD;IACE,YAAY,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAAO,YAAY;IAC1D,UAAU,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,YAAY;IAC9C;IACA;IACA;IACF;IACQ;IACY;IAC1B,GAAI;GACL,CAAA;GAGF,CAAC,cACA,oBAAC,WAAW,UAAZ;IACE,eAAe;IACf,GAAI;IACJ,GAAI,UAAU,qBAAqB;KACjC,WAAW,iBAAiB;KAC5B,OAAO,iBAAiB;IAC1B,CAAC;IACD,aAAa;cAEb,qBAAC,KAAD;KAAK,GAAI,UAAU,cAAc;eAAjC,CACE,qBAAC,OAAD;MAAK,GAAI,UAAU,mBAAmB;gBAAtC,CACG,kBACC,oBAAC,KAAD;OAAK,GAAI,UAAU,kBAAkB;OAAG,KAAK,EAAE,WAAW,KAAK;iBAC5D,SAAS,UAAU,MAAM;MACvB,CAAA,GAEN,WACE;SAEL,qBAAC,OAAD;MAAK,GAAI,UAAU,cAAc;gBAAjC,CACG,kBACC,qBAAC,OAAD;OAAK,GAAI,UAAU,eAAe;iBAAlC;QACG;QACD,qBAAC,OAAD;SAAK,GAAI,UAAU,qBAAqB;mBAAxC,CACG,mBACA,kBAAkB,oBAAoB,KACrC,oBAAC,YAAD;UACE,QAAQ,WAAW;UACnB,iBAAiB,kBAAkB;UAClB;UACJ;UACP;UACE;UACM;UACd,GAAI;UACJ,GAAI;SACL,CAAA,CAEA;;QACL,oBAAC,gBAAD;SACE,GAAI,UAAU,aAAa;SAC3B,KAAK;UAAE,WAAW;UAAM,QAAQ,SAAS;SAAS;SAClD,cAAY,GAAG,SAAS,YAAY,MAAM,EAAE,GAAG,SAAS,UAAU,MAAM;SACxE,SACE,SAAS,YAAY,CAAC,oBAClB,KAAA,KACC,MAAM;UACL,kBAAkB,MAAM,IAAI,CAAC,CAAC,OAAO,YAAY,GAAG,CAAC;SACvD;QAEP,CAAA;OACE;UAGP,qBAAC,OAAD;OACE,KAAK;OACL,GAAI,UAAU,kBAAkB;OAChC,YACE,oBACK,UAAU;QACT,MAAM,YAAY,0BAA0B,KAAK;QACjD,IAAI,cAAc,MAChB,SAAS,eAAe,OAAO,SAAS;OAE5C,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;iBAtBR;QAyBG;QAEA;QAEA,4BACC,oBAAC,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;QACF;OACF;;GACc,CAAA;EAEpB;;CAGP,IAAI,uBACF,OAAO,oBAAC,YAAY,UAAb;EAAsB,OAAO,SAAS;YAAmB;CAA8B,CAAA;CAGhG,OAAO;AACT,CAAC;AAED,QAAQ,cAAc;AACtB,QAAQ,UAAUA;AAClB,QAAQ,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"DayView.module.mjs","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 &:where(:first-of-type) .dayViewSlot:first-of-type {\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.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\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"],"mappings":""}
1
+ {"version":3,"file":"DayView.module.mjs","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 &: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\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"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"get-day-positioned-events.mjs","names":[],"sources":["../../../../src/components/DayView/get-day-view-events/get-day-positioned-events.ts"],"sourcesContent":["import { AnyDateValue, DayPositionedEventData, ScheduleEventData } from '../../../types';\nimport { getDayPosition, isAllDayEvent, isEventsOverlap, sortEvents } from '../../../utils';\n\ninterface ColumnHasConflictOptions {\n columns: ScheduleEventData[][];\n columnIndex: number;\n event: ScheduleEventData;\n allDay: boolean;\n date: AnyDateValue;\n}\n\nfunction columnHasConflict({\n columns,\n columnIndex,\n event,\n allDay,\n date,\n}: ColumnHasConflictOptions): boolean {\n if (!columns[columnIndex]) {\n return false;\n }\n\n return columns[columnIndex].some((e) => {\n const eAllDay = isAllDayEvent({ event: e, date });\n const hasTimeConflict = isEventsOverlap(e, event);\n\n // Don't count all-day events as overlaps\n if (allDay || eAllDay) {\n return false;\n }\n\n return hasTimeConflict;\n });\n}\n\ninterface GetDayPositionedEventsInput {\n /** Date at which events are positioned, used to check if events are all-day */\n date: AnyDateValue;\n\n /** List of all events that belong to the given date, extra events must be filtered out before passing to the function */\n events: ScheduleEventData[];\n\n /** Start time of the day view, used to calculate event positions */\n startTime?: string;\n\n /** End time of the day view, used to calculate event positions */\n endTime?: string;\n\n /** Number of minutes per time slot, used to align the canvas to whole slots */\n intervalMinutes?: number;\n}\n\nexport function getDayPositionedEvents({\n events,\n startTime,\n endTime,\n intervalMinutes,\n date,\n}: GetDayPositionedEventsInput) {\n const columns: ScheduleEventData[][] = [];\n const positioned: DayPositionedEventData[] = [];\n\n const sorted = sortEvents(events);\n\n for (const event of sorted) {\n const allDay = isAllDayEvent({ event, date });\n\n let column = 0;\n\n while (columnHasConflict({ columns, columnIndex: column, event, allDay, date })) {\n column++;\n }\n\n if (!columns[column]) {\n columns[column] = [];\n }\n\n columns[column].push(event);\n\n const verticalPosition = allDay\n ? { top: 0, height: 100 }\n : getDayPosition({ event, startTime, endTime, intervalMinutes });\n\n positioned.push({\n ...event,\n position: {\n ...verticalPosition,\n allDay,\n column,\n\n // set later\n width: 0,\n offset: 0,\n overlaps: 0,\n },\n });\n }\n for (const positionedEvent of positioned) {\n const { allDay, column } = positionedEvent.position;\n\n if (allDay) {\n positionedEvent.position.overlaps = 1;\n positionedEvent.position.width = 100;\n positionedEvent.position.offset = 0;\n continue;\n }\n\n // Find events that directly overlap with this event\n const directlyOverlapping: DayPositionedEventData[] = [];\n\n for (const otherEvent of positioned) {\n if (otherEvent === positionedEvent || otherEvent.position.allDay) {\n continue;\n }\n\n if (isEventsOverlap(otherEvent, positionedEvent)) {\n directlyOverlapping.push(otherEvent);\n }\n }\n\n // Find the max column by also checking overlaps of overlapping events\n // This ensures we account for the full column group\n let maxColumn = column;\n\n for (const overlappingEvent of directlyOverlapping) {\n maxColumn = Math.max(maxColumn, overlappingEvent.position.column);\n\n // Check what overlaps with each overlapping event\n for (const otherEvent of positioned) {\n if (otherEvent === overlappingEvent || otherEvent.position.allDay) {\n continue;\n }\n\n if (isEventsOverlap(otherEvent, overlappingEvent)) {\n maxColumn = Math.max(maxColumn, otherEvent.position.column);\n }\n }\n }\n\n const totalColumns = maxColumn + 1;\n\n // Find the first occupied column to the right of this event\n // Events expand to fill empty columns but stop at the next occupied column\n let nextOccupiedColumn = totalColumns;\n\n for (const other of directlyOverlapping) {\n if (other.position.column > column && other.position.column < nextOccupiedColumn) {\n nextOccupiedColumn = other.position.column;\n }\n }\n\n const columnsSpanned = nextOccupiedColumn - column;\n\n positionedEvent.position.overlaps = totalColumns;\n positionedEvent.position.width = (columnsSpanned / totalColumns) * 100;\n positionedEvent.position.offset = (column * 100) / totalColumns;\n }\n\n return positioned;\n}\n"],"mappings":";;;;;;AAWA,SAAS,kBAAkB,EACzB,SACA,aACA,OACA,QACA,QACoC;CACpC,IAAI,CAAC,QAAQ,cACX,OAAO;CAGT,OAAO,QAAQ,aAAa,MAAM,MAAM;EACtC,MAAM,UAAU,cAAc;GAAE,OAAO;GAAG;EAAK,CAAC;EAChD,MAAM,kBAAkB,gBAAgB,GAAG,KAAK;EAGhD,IAAI,UAAU,SACZ,OAAO;EAGT,OAAO;CACT,CAAC;AACH;AAmBA,SAAgB,uBAAuB,EACrC,QACA,WACA,SACA,iBACA,QAC8B;CAC9B,MAAM,UAAiC,CAAC;CACxC,MAAM,aAAuC,CAAC;CAE9C,MAAM,SAAS,WAAW,MAAM;CAEhC,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,SAAS,cAAc;GAAE;GAAO;EAAK,CAAC;EAE5C,IAAI,SAAS;EAEb,OAAO,kBAAkB;GAAE;GAAS,aAAa;GAAQ;GAAO;GAAQ;EAAK,CAAC,GAC5E;EAGF,IAAI,CAAC,QAAQ,SACX,QAAQ,UAAU,CAAC;EAGrB,QAAQ,QAAQ,KAAK,KAAK;EAE1B,MAAM,mBAAmB,SACrB;GAAE,KAAK;GAAG,QAAQ;EAAI,IACtB,eAAe;GAAE;GAAO;GAAW;GAAS;EAAgB,CAAC;EAEjE,WAAW,KAAK;GACd,GAAG;GACH,UAAU;IACR,GAAG;IACH;IACA;IAGA,OAAO;IACP,QAAQ;IACR,UAAU;GACZ;EACF,CAAC;CACH;CACA,KAAK,MAAM,mBAAmB,YAAY;EACxC,MAAM,EAAE,QAAQ,WAAW,gBAAgB;EAE3C,IAAI,QAAQ;GACV,gBAAgB,SAAS,WAAW;GACpC,gBAAgB,SAAS,QAAQ;GACjC,gBAAgB,SAAS,SAAS;GAClC;EACF;EAGA,MAAM,sBAAgD,CAAC;EAEvD,KAAK,MAAM,cAAc,YAAY;GACnC,IAAI,eAAe,mBAAmB,WAAW,SAAS,QACxD;GAGF,IAAI,gBAAgB,YAAY,eAAe,GAC7C,oBAAoB,KAAK,UAAU;EAEvC;EAIA,IAAI,YAAY;EAEhB,KAAK,MAAM,oBAAoB,qBAAqB;GAClD,YAAY,KAAK,IAAI,WAAW,iBAAiB,SAAS,MAAM;GAGhE,KAAK,MAAM,cAAc,YAAY;IACnC,IAAI,eAAe,oBAAoB,WAAW,SAAS,QACzD;IAGF,IAAI,gBAAgB,YAAY,gBAAgB,GAC9C,YAAY,KAAK,IAAI,WAAW,WAAW,SAAS,MAAM;GAE9D;EACF;EAEA,MAAM,eAAe,YAAY;EAIjC,IAAI,qBAAqB;EAEzB,KAAK,MAAM,SAAS,qBAClB,IAAI,MAAM,SAAS,SAAS,UAAU,MAAM,SAAS,SAAS,oBAC5D,qBAAqB,MAAM,SAAS;EAIxC,MAAM,iBAAiB,qBAAqB;EAE5C,gBAAgB,SAAS,WAAW;EACpC,gBAAgB,SAAS,QAAS,iBAAiB,eAAgB;EACnE,gBAAgB,SAAS,SAAU,SAAS,MAAO;CACrD;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"get-day-positioned-events.mjs","names":[],"sources":["../../../../src/components/DayView/get-day-view-events/get-day-positioned-events.ts"],"sourcesContent":["import { AnyDateValue, DayPositionedEventData, ScheduleEventData } from '../../../types';\nimport { getDayPosition, isAllDayEvent, isEventsOverlap, sortEvents } from '../../../utils';\n\ninterface ColumnHasConflictOptions {\n columns: ScheduleEventData[][];\n columnIndex: number;\n event: ScheduleEventData;\n allDay: boolean;\n date: AnyDateValue;\n}\n\nfunction columnHasConflict({\n columns,\n columnIndex,\n event,\n allDay,\n date,\n}: ColumnHasConflictOptions): boolean {\n if (!columns[columnIndex]) {\n return false;\n }\n\n return columns[columnIndex].some((e) => {\n const eAllDay = isAllDayEvent({ event: e, date });\n const hasTimeConflict = isEventsOverlap(e, event);\n\n // Don't count all-day events as overlaps\n if (allDay || eAllDay) {\n return false;\n }\n\n return hasTimeConflict;\n });\n}\n\ninterface GetDayPositionedEventsInput {\n /** Date at which events are positioned, used to check if events are all-day */\n date: AnyDateValue;\n\n /** List of all events that belong to the given date, extra events must be filtered out before passing to the function */\n events: ScheduleEventData[];\n\n /** Start time of the day view, used to calculate event positions */\n startTime?: string;\n\n /** End time of the day view, used to calculate event positions */\n endTime?: string;\n\n /** Number of minutes per time slot, used to align the canvas to whole slots */\n intervalMinutes?: number;\n}\n\nexport function getDayPositionedEvents({\n events,\n startTime,\n endTime,\n intervalMinutes,\n date,\n}: GetDayPositionedEventsInput) {\n const columns: ScheduleEventData[][] = [];\n const positioned: DayPositionedEventData[] = [];\n\n const sorted = sortEvents(events);\n\n for (const event of sorted) {\n const allDay = isAllDayEvent({ event, date });\n\n let column = 0;\n\n while (columnHasConflict({ columns, columnIndex: column, event, allDay, date })) {\n column++;\n }\n\n if (!columns[column]) {\n columns[column] = [];\n }\n\n columns[column].push(event);\n\n const verticalPosition = allDay\n ? { top: 0, height: 100 }\n : getDayPosition({ event, startTime, endTime, intervalMinutes });\n\n positioned.push({\n ...event,\n position: {\n ...verticalPosition,\n allDay,\n column,\n\n // set later\n width: 0,\n offset: 0,\n overlaps: 0,\n },\n });\n }\n for (const positionedEvent of positioned) {\n const { allDay, column } = positionedEvent.position;\n\n if (allDay) {\n positionedEvent.position.overlaps = 1;\n positionedEvent.position.width = 100;\n positionedEvent.position.offset = 0;\n continue;\n }\n\n // Find events that directly overlap with this event\n const directlyOverlapping: DayPositionedEventData[] = [];\n\n for (const otherEvent of positioned) {\n if (otherEvent === positionedEvent || otherEvent.position.allDay) {\n continue;\n }\n\n if (isEventsOverlap(otherEvent, positionedEvent)) {\n directlyOverlapping.push(otherEvent);\n }\n }\n\n // Find the max column by also checking overlaps of overlapping events\n // This ensures we account for the full column group\n let maxColumn = column;\n\n for (const overlappingEvent of directlyOverlapping) {\n maxColumn = Math.max(maxColumn, overlappingEvent.position.column);\n\n // Check what overlaps with each overlapping event\n for (const otherEvent of positioned) {\n if (otherEvent === overlappingEvent || otherEvent.position.allDay) {\n continue;\n }\n\n if (isEventsOverlap(otherEvent, overlappingEvent)) {\n maxColumn = Math.max(maxColumn, otherEvent.position.column);\n }\n }\n }\n\n const totalColumns = maxColumn + 1;\n\n // Find the first occupied column to the right of this event\n // Events expand to fill empty columns but stop at the next occupied column\n let nextOccupiedColumn = totalColumns;\n\n for (const other of directlyOverlapping) {\n if (other.position.column > column && other.position.column < nextOccupiedColumn) {\n nextOccupiedColumn = other.position.column;\n }\n }\n\n const columnsSpanned = nextOccupiedColumn - column;\n\n positionedEvent.position.overlaps = totalColumns;\n positionedEvent.position.width = (columnsSpanned / totalColumns) * 100;\n positionedEvent.position.offset = (column * 100) / totalColumns;\n }\n\n return positioned;\n}\n"],"mappings":";;;;;;AAWA,SAAS,kBAAkB,EACzB,SACA,aACA,OACA,QACA,QACoC;CACpC,IAAI,CAAC,QAAQ,cACX,OAAO;CAGT,OAAO,QAAQ,YAAY,CAAC,MAAM,MAAM;EACtC,MAAM,UAAU,cAAc;GAAE,OAAO;GAAG;EAAK,CAAC;EAChD,MAAM,kBAAkB,gBAAgB,GAAG,KAAK;EAGhD,IAAI,UAAU,SACZ,OAAO;EAGT,OAAO;CACT,CAAC;AACH;AAmBA,SAAgB,uBAAuB,EACrC,QACA,WACA,SACA,iBACA,QAC8B;CAC9B,MAAM,UAAiC,CAAC;CACxC,MAAM,aAAuC,CAAC;CAE9C,MAAM,SAAS,WAAW,MAAM;CAEhC,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,SAAS,cAAc;GAAE;GAAO;EAAK,CAAC;EAE5C,IAAI,SAAS;EAEb,OAAO,kBAAkB;GAAE;GAAS,aAAa;GAAQ;GAAO;GAAQ;EAAK,CAAC,GAC5E;EAGF,IAAI,CAAC,QAAQ,SACX,QAAQ,UAAU,CAAC;EAGrB,QAAQ,OAAO,CAAC,KAAK,KAAK;EAE1B,MAAM,mBAAmB,SACrB;GAAE,KAAK;GAAG,QAAQ;EAAI,IACtB,eAAe;GAAE;GAAO;GAAW;GAAS;EAAgB,CAAC;EAEjE,WAAW,KAAK;GACd,GAAG;GACH,UAAU;IACR,GAAG;IACH;IACA;IAGA,OAAO;IACP,QAAQ;IACR,UAAU;GACZ;EACF,CAAC;CACH;CACA,KAAK,MAAM,mBAAmB,YAAY;EACxC,MAAM,EAAE,QAAQ,WAAW,gBAAgB;EAE3C,IAAI,QAAQ;GACV,gBAAgB,SAAS,WAAW;GACpC,gBAAgB,SAAS,QAAQ;GACjC,gBAAgB,SAAS,SAAS;GAClC;EACF;EAGA,MAAM,sBAAgD,CAAC;EAEvD,KAAK,MAAM,cAAc,YAAY;GACnC,IAAI,eAAe,mBAAmB,WAAW,SAAS,QACxD;GAGF,IAAI,gBAAgB,YAAY,eAAe,GAC7C,oBAAoB,KAAK,UAAU;EAEvC;EAIA,IAAI,YAAY;EAEhB,KAAK,MAAM,oBAAoB,qBAAqB;GAClD,YAAY,KAAK,IAAI,WAAW,iBAAiB,SAAS,MAAM;GAGhE,KAAK,MAAM,cAAc,YAAY;IACnC,IAAI,eAAe,oBAAoB,WAAW,SAAS,QACzD;IAGF,IAAI,gBAAgB,YAAY,gBAAgB,GAC9C,YAAY,KAAK,IAAI,WAAW,WAAW,SAAS,MAAM;GAE9D;EACF;EAEA,MAAM,eAAe,YAAY;EAIjC,IAAI,qBAAqB;EAEzB,KAAK,MAAM,SAAS,qBAClB,IAAI,MAAM,SAAS,SAAS,UAAU,MAAM,SAAS,SAAS,oBAC5D,qBAAqB,MAAM,SAAS;EAIxC,MAAM,iBAAiB,qBAAqB;EAE5C,gBAAgB,SAAS,WAAW;EACpC,gBAAgB,SAAS,QAAS,iBAAiB,eAAgB;EACnE,gBAAgB,SAAS,SAAU,SAAS,MAAO;CACrD;CAEA,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-day-view-events.mjs","names":[],"sources":["../../../../src/components/DayView/get-day-view-events/get-day-view-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayPositionedEventData, ScheduleEventData } from '../../../types';\nimport { getDayPosition, isAllDayEvent, isEventInTimeRange, validateEvent } from '../../../utils';\nimport { getDayPositionedEvents } from './get-day-positioned-events';\n\ninterface GetDayViewEventsInput {\n events: ScheduleEventData[] | undefined;\n date: AnyDateValue;\n startTime?: string;\n endTime?: string;\n intervalMinutes?: number;\n}\n\nexport function getDayViewEvents({\n events,\n date,\n startTime,\n endTime,\n intervalMinutes,\n}: GetDayViewEventsInput) {\n if (events === undefined) {\n return {\n allDayEvents: [],\n regularEvents: [],\n backgroundTimedEvents: [],\n backgroundAllDayEvents: [],\n };\n }\n\n const ids = new Set<string | number>();\n const filteredEvents: ScheduleEventData[] = [];\n const backgroundFiltered: ScheduleEventData[] = [];\n const dayStart = dayjs(date).startOf('day');\n const dayEnd = dayjs(date).endOf('day');\n\n for (const event of events) {\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n const isOnDay = eventStart.isSame(dayStart, 'day');\n const spansIntoDay =\n !isOnDay &&\n event.display === 'background' &&\n eventStart.isBefore(dayEnd) &&\n eventEnd.isAfter(dayStart);\n\n if (isOnDay || spansIntoDay) {\n if (isOnDay && !isEventInTimeRange({ event, startTime, endTime })) {\n continue;\n }\n\n const validated = validateEvent(event);\n\n if (!ids.has(event.id)) {\n ids.add(event.id);\n } else {\n throw new Error(`[@mantine/schedule] DayView: Duplicated event ids found: ${event.id}`);\n }\n\n if (event.display === 'background') {\n backgroundFiltered.push(validated);\n } else {\n filteredEvents.push(validated);\n }\n }\n }\n\n const positionedEvents = getDayPositionedEvents({\n events: filteredEvents,\n startTime,\n endTime,\n intervalMinutes,\n date,\n });\n\n const allDayEvents: DayPositionedEventData[] = [];\n const regularEvents: DayPositionedEventData[] = [];\n\n for (const event of positionedEvents) {\n if (event.position.allDay) {\n allDayEvents.push(event);\n } else {\n regularEvents.push(event);\n }\n }\n\n const backgroundTimedEvents: DayPositionedEventData[] = [];\n const backgroundAllDayEvents: DayPositionedEventData[] = [];\n for (const event of backgroundFiltered) {\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n const clippedStart = eventStart.isBefore(dayStart) ? dayStart : eventStart;\n const clippedEnd = eventEnd.isAfter(dayEnd) ? dayEnd : eventEnd;\n\n const clippedEvent = {\n ...event,\n start: clippedStart.format('YYYY-MM-DD HH:mm:ss'),\n end: clippedEnd.format('YYYY-MM-DD HH:mm:ss'),\n };\n\n const allDay = isAllDayEvent({ event: clippedEvent, date });\n\n if (allDay) {\n backgroundAllDayEvents.push({\n ...event,\n position: {\n top: 0,\n height: 100,\n allDay: true,\n width: 100,\n offset: 0,\n column: 0,\n overlaps: 1,\n },\n });\n } else {\n const { top, height } = getDayPosition({\n event: clippedEvent,\n startTime,\n endTime,\n intervalMinutes,\n });\n if (height <= 0) {\n continue;\n }\n backgroundTimedEvents.push({\n ...event,\n position: { top, height, allDay: false, width: 100, offset: 0, column: 0, overlaps: 1 },\n });\n }\n }\n\n return { allDayEvents, regularEvents, backgroundTimedEvents, backgroundAllDayEvents };\n}\n"],"mappings":";;;;;;;;AAaA,SAAgB,iBAAiB,EAC/B,QACA,MACA,WACA,SACA,mBACwB;CACxB,IAAI,WAAW,KAAA,GACb,OAAO;EACL,cAAc,CAAC;EACf,eAAe,CAAC;EAChB,uBAAuB,CAAC;EACxB,wBAAwB,CAAC;CAC3B;CAGF,MAAM,sBAAM,IAAI,IAAqB;CACrC,MAAM,iBAAsC,CAAC;CAC7C,MAAM,qBAA0C,CAAC;CACjD,MAAM,WAAW,MAAM,IAAI,EAAE,QAAQ,KAAK;CAC1C,MAAM,SAAS,MAAM,IAAI,EAAE,MAAM,KAAK;CAEtC,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,aAAa,MAAM,MAAM,KAAK;EACpC,MAAM,WAAW,MAAM,MAAM,GAAG;EAChC,MAAM,UAAU,WAAW,OAAO,UAAU,KAAK;EACjD,MAAM,eACJ,CAAC,WACD,MAAM,YAAY,gBAClB,WAAW,SAAS,MAAM,KAC1B,SAAS,QAAQ,QAAQ;EAE3B,IAAI,WAAW,cAAc;GAC3B,IAAI,WAAW,CAAC,mBAAmB;IAAE;IAAO;IAAW;GAAQ,CAAC,GAC9D;GAGF,MAAM,YAAY,cAAc,KAAK;GAErC,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,GACnB,IAAI,IAAI,MAAM,EAAE;QAEhB,MAAM,IAAI,MAAM,4DAA4D,MAAM,IAAI;GAGxF,IAAI,MAAM,YAAY,cACpB,mBAAmB,KAAK,SAAS;QAEjC,eAAe,KAAK,SAAS;EAEjC;CACF;CAEA,MAAM,mBAAmB,uBAAuB;EAC9C,QAAQ;EACR;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,eAAyC,CAAC;CAChD,MAAM,gBAA0C,CAAC;CAEjD,KAAK,MAAM,SAAS,kBAClB,IAAI,MAAM,SAAS,QACjB,aAAa,KAAK,KAAK;MAEvB,cAAc,KAAK,KAAK;CAI5B,MAAM,wBAAkD,CAAC;CACzD,MAAM,yBAAmD,CAAC;CAC1D,KAAK,MAAM,SAAS,oBAAoB;EACtC,MAAM,aAAa,MAAM,MAAM,KAAK;EACpC,MAAM,WAAW,MAAM,MAAM,GAAG;EAChC,MAAM,eAAe,WAAW,SAAS,QAAQ,IAAI,WAAW;EAChE,MAAM,aAAa,SAAS,QAAQ,MAAM,IAAI,SAAS;EAEvD,MAAM,eAAe;GACnB,GAAG;GACH,OAAO,aAAa,OAAO,qBAAqB;GAChD,KAAK,WAAW,OAAO,qBAAqB;EAC9C;EAIA,IAFe,cAAc;GAAE,OAAO;GAAc;EAAK,CAEhD,GACP,uBAAuB,KAAK;GAC1B,GAAG;GACH,UAAU;IACR,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;GACZ;EACF,CAAC;OACI;GACL,MAAM,EAAE,KAAK,WAAW,eAAe;IACrC,OAAO;IACP;IACA;IACA;GACF,CAAC;GACD,IAAI,UAAU,GACZ;GAEF,sBAAsB,KAAK;IACzB,GAAG;IACH,UAAU;KAAE;KAAK;KAAQ,QAAQ;KAAO,OAAO;KAAK,QAAQ;KAAG,QAAQ;KAAG,UAAU;IAAE;GACxF,CAAC;EACH;CACF;CAEA,OAAO;EAAE;EAAc;EAAe;EAAuB;CAAuB;AACtF"}
1
+ {"version":3,"file":"get-day-view-events.mjs","names":[],"sources":["../../../../src/components/DayView/get-day-view-events/get-day-view-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DayPositionedEventData, ScheduleEventData } from '../../../types';\nimport { getDayPosition, isAllDayEvent, isEventInTimeRange, validateEvent } from '../../../utils';\nimport { getDayPositionedEvents } from './get-day-positioned-events';\n\ninterface GetDayViewEventsInput {\n events: ScheduleEventData[] | undefined;\n date: AnyDateValue;\n startTime?: string;\n endTime?: string;\n intervalMinutes?: number;\n}\n\nexport function getDayViewEvents({\n events,\n date,\n startTime,\n endTime,\n intervalMinutes,\n}: GetDayViewEventsInput) {\n if (events === undefined) {\n return {\n allDayEvents: [],\n regularEvents: [],\n backgroundTimedEvents: [],\n backgroundAllDayEvents: [],\n };\n }\n\n const ids = new Set<string | number>();\n const filteredEvents: ScheduleEventData[] = [];\n const backgroundFiltered: ScheduleEventData[] = [];\n const dayStart = dayjs(date).startOf('day');\n const dayEnd = dayjs(date).endOf('day');\n\n for (const event of events) {\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n const isOnDay = eventStart.isSame(dayStart, 'day');\n const spansIntoDay =\n !isOnDay &&\n event.display === 'background' &&\n eventStart.isBefore(dayEnd) &&\n eventEnd.isAfter(dayStart);\n\n if (isOnDay || spansIntoDay) {\n if (isOnDay && !isEventInTimeRange({ event, startTime, endTime })) {\n continue;\n }\n\n const validated = validateEvent(event);\n\n if (!ids.has(event.id)) {\n ids.add(event.id);\n } else {\n throw new Error(`[@mantine/schedule] DayView: Duplicated event ids found: ${event.id}`);\n }\n\n if (event.display === 'background') {\n backgroundFiltered.push(validated);\n } else {\n filteredEvents.push(validated);\n }\n }\n }\n\n const positionedEvents = getDayPositionedEvents({\n events: filteredEvents,\n startTime,\n endTime,\n intervalMinutes,\n date,\n });\n\n const allDayEvents: DayPositionedEventData[] = [];\n const regularEvents: DayPositionedEventData[] = [];\n\n for (const event of positionedEvents) {\n if (event.position.allDay) {\n allDayEvents.push(event);\n } else {\n regularEvents.push(event);\n }\n }\n\n const backgroundTimedEvents: DayPositionedEventData[] = [];\n const backgroundAllDayEvents: DayPositionedEventData[] = [];\n for (const event of backgroundFiltered) {\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n const clippedStart = eventStart.isBefore(dayStart) ? dayStart : eventStart;\n const clippedEnd = eventEnd.isAfter(dayEnd) ? dayEnd : eventEnd;\n\n const clippedEvent = {\n ...event,\n start: clippedStart.format('YYYY-MM-DD HH:mm:ss'),\n end: clippedEnd.format('YYYY-MM-DD HH:mm:ss'),\n };\n\n const allDay = isAllDayEvent({ event: clippedEvent, date });\n\n if (allDay) {\n backgroundAllDayEvents.push({\n ...event,\n position: {\n top: 0,\n height: 100,\n allDay: true,\n width: 100,\n offset: 0,\n column: 0,\n overlaps: 1,\n },\n });\n } else {\n const { top, height } = getDayPosition({\n event: clippedEvent,\n startTime,\n endTime,\n intervalMinutes,\n });\n if (height <= 0) {\n continue;\n }\n backgroundTimedEvents.push({\n ...event,\n position: { top, height, allDay: false, width: 100, offset: 0, column: 0, overlaps: 1 },\n });\n }\n }\n\n return { allDayEvents, regularEvents, backgroundTimedEvents, backgroundAllDayEvents };\n}\n"],"mappings":";;;;;;;;AAaA,SAAgB,iBAAiB,EAC/B,QACA,MACA,WACA,SACA,mBACwB;CACxB,IAAI,WAAW,KAAA,GACb,OAAO;EACL,cAAc,CAAC;EACf,eAAe,CAAC;EAChB,uBAAuB,CAAC;EACxB,wBAAwB,CAAC;CAC3B;CAGF,MAAM,sBAAM,IAAI,IAAqB;CACrC,MAAM,iBAAsC,CAAC;CAC7C,MAAM,qBAA0C,CAAC;CACjD,MAAM,WAAW,MAAM,IAAI,CAAC,CAAC,QAAQ,KAAK;CAC1C,MAAM,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK;CAEtC,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,aAAa,MAAM,MAAM,KAAK;EACpC,MAAM,WAAW,MAAM,MAAM,GAAG;EAChC,MAAM,UAAU,WAAW,OAAO,UAAU,KAAK;EACjD,MAAM,eACJ,CAAC,WACD,MAAM,YAAY,gBAClB,WAAW,SAAS,MAAM,KAC1B,SAAS,QAAQ,QAAQ;EAE3B,IAAI,WAAW,cAAc;GAC3B,IAAI,WAAW,CAAC,mBAAmB;IAAE;IAAO;IAAW;GAAQ,CAAC,GAC9D;GAGF,MAAM,YAAY,cAAc,KAAK;GAErC,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE,GACnB,IAAI,IAAI,MAAM,EAAE;QAEhB,MAAM,IAAI,MAAM,4DAA4D,MAAM,IAAI;GAGxF,IAAI,MAAM,YAAY,cACpB,mBAAmB,KAAK,SAAS;QAEjC,eAAe,KAAK,SAAS;EAEjC;CACF;CAEA,MAAM,mBAAmB,uBAAuB;EAC9C,QAAQ;EACR;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,eAAyC,CAAC;CAChD,MAAM,gBAA0C,CAAC;CAEjD,KAAK,MAAM,SAAS,kBAClB,IAAI,MAAM,SAAS,QACjB,aAAa,KAAK,KAAK;MAEvB,cAAc,KAAK,KAAK;CAI5B,MAAM,wBAAkD,CAAC;CACzD,MAAM,yBAAmD,CAAC;CAC1D,KAAK,MAAM,SAAS,oBAAoB;EACtC,MAAM,aAAa,MAAM,MAAM,KAAK;EACpC,MAAM,WAAW,MAAM,MAAM,GAAG;EAChC,MAAM,eAAe,WAAW,SAAS,QAAQ,IAAI,WAAW;EAChE,MAAM,aAAa,SAAS,QAAQ,MAAM,IAAI,SAAS;EAEvD,MAAM,eAAe;GACnB,GAAG;GACH,OAAO,aAAa,OAAO,qBAAqB;GAChD,KAAK,WAAW,OAAO,qBAAqB;EAC9C;EAIA,IAFe,cAAc;GAAE,OAAO;GAAc;EAAK,CAEhD,GACP,uBAAuB,KAAK;GAC1B,GAAG;GACH,UAAU;IACR,KAAK;IACL,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;GACZ;EACF,CAAC;OACI;GACL,MAAM,EAAE,KAAK,WAAW,eAAe;IACrC,OAAO;IACP;IACA;IACA;GACF,CAAC;GACD,IAAI,UAAU,GACZ;GAEF,sBAAsB,KAAK;IACzB,GAAG;IACH,UAAU;KAAE;KAAK;KAAQ,QAAQ;KAAO,OAAO;KAAK,QAAQ;KAAG,QAAQ;KAAG,UAAU;IAAE;GACxF,CAAC;EACH;CACF;CAEA,OAAO;EAAE;EAAc;EAAe;EAAuB;CAAuB;AACtF"}