@mantine/schedule 9.3.2 → 9.4.1

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 (301) 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 +127 -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 +129 -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 +105 -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 +676 -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 +161 -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 +20 -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-day-relative-percent/get-day-relative-percent.cjs +18 -0
  104. package/cjs/utils/get-day-relative-percent/get-day-relative-percent.cjs.map +1 -0
  105. package/cjs/utils/get-end-of-week/get-end-of-week.cjs.map +1 -1
  106. package/cjs/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.cjs +12 -0
  107. package/cjs/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.cjs.map +1 -0
  108. package/cjs/utils/get-index-from-drag-point/get-index-from-drag-point.cjs +27 -0
  109. package/cjs/utils/get-index-from-drag-point/get-index-from-drag-point.cjs.map +1 -0
  110. package/cjs/utils/get-month-days/get-month-days.cjs.map +1 -1
  111. package/cjs/utils/get-month-range/get-month-range.cjs.map +1 -1
  112. package/cjs/utils/get-months-by-quarter/get-months-by-quarter.cjs.map +1 -1
  113. package/cjs/utils/get-months-list/get-months-list.cjs.map +1 -1
  114. package/cjs/utils/get-ordered-resources/get-ordered-resources.cjs +54 -0
  115. package/cjs/utils/get-ordered-resources/get-ordered-resources.cjs.map +1 -0
  116. package/cjs/utils/get-start-of-week/get-start-of-week.cjs.map +1 -1
  117. package/cjs/utils/get-week-days/get-week-days.cjs.map +1 -1
  118. package/cjs/utils/get-week-number/get-week-number.cjs.map +1 -1
  119. package/cjs/utils/get-weekdays-names/get-weekdays-names.cjs.map +1 -1
  120. package/cjs/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.cjs +88 -0
  121. package/cjs/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.cjs.map +1 -0
  122. package/cjs/utils/is-after-min-date/is-after-min-date.cjs.map +1 -1
  123. package/cjs/utils/is-all-day-event/is-all-day-event.cjs.map +1 -1
  124. package/cjs/utils/is-before-max-date/is-before-max-date.cjs.map +1 -1
  125. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs.map +1 -1
  126. package/cjs/utils/is-events-overlap/is-events-overlap.cjs.map +1 -1
  127. package/cjs/utils/is-in-time-range/is-in-time-range.cjs.map +1 -1
  128. package/cjs/utils/is-multiday-event/is-multiday-event.cjs.map +1 -1
  129. package/cjs/utils/is-same-month/is-same-month.cjs.map +1 -1
  130. package/cjs/utils/is-within-week/is-within-week.cjs.map +1 -1
  131. package/cjs/utils/next-week/next-week.cjs.map +1 -1
  132. package/cjs/utils/parse-time-string/parse-time-string.cjs.map +1 -1
  133. package/cjs/utils/previous-week/previous-week.cjs.map +1 -1
  134. package/cjs/utils/sort-events/sort-events.cjs.map +1 -1
  135. package/cjs/utils/to-date-string/to-date-string.cjs.map +1 -1
  136. package/cjs/utils/to-time-string/to-time-string.cjs.map +1 -1
  137. package/cjs/utils/validate-event/validate-event.cjs.map +1 -1
  138. package/esm/components/AgendaView/AgendaView.mjs +130 -0
  139. package/esm/components/AgendaView/AgendaView.mjs.map +1 -0
  140. package/esm/components/AgendaView/AgendaView.module.mjs +19 -0
  141. package/esm/components/AgendaView/AgendaView.module.mjs.map +1 -0
  142. package/esm/components/AgendaView/get-agenda-view-events.mjs +46 -0
  143. package/esm/components/AgendaView/get-agenda-view-events.mjs.map +1 -0
  144. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -1
  145. package/esm/components/DayView/DayView.mjs +128 -107
  146. package/esm/components/DayView/DayView.mjs.map +1 -1
  147. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  148. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -1
  149. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -1
  150. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  151. package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs.map +1 -1
  152. package/esm/components/MonthView/MonthView.mjs +115 -65
  153. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  154. package/esm/components/MonthView/MonthView.module.mjs.map +1 -1
  155. package/esm/components/MonthView/get-month-view-events/add-event-to-day-groups.mjs.map +1 -1
  156. package/esm/components/MonthView/get-month-view-events/find-available-row.mjs.map +1 -1
  157. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
  158. package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs.map +1 -1
  159. package/esm/components/MonthView/get-renderable-month-event-segments.mjs +17 -15
  160. package/esm/components/MonthView/get-renderable-month-event-segments.mjs.map +1 -1
  161. package/esm/components/MonthView/get-visible-columns.mjs +53 -0
  162. package/esm/components/MonthView/get-visible-columns.mjs.map +1 -0
  163. package/esm/components/MonthView/handle-month-view-key-down.mjs.map +1 -1
  164. package/esm/components/MoreEvents/MoreEvents.mjs.map +1 -1
  165. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +576 -0
  166. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -0
  167. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs +29 -0
  168. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -0
  169. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs +89 -0
  170. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs.map +1 -0
  171. package/esm/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.mjs +26 -0
  172. package/esm/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.mjs.map +1 -0
  173. package/esm/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.mjs +127 -0
  174. package/esm/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.mjs.map +1 -0
  175. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs +600 -0
  176. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs.map +1 -0
  177. package/esm/components/ResourcesMonthView/ResourcesMonthView.module.mjs +23 -0
  178. package/esm/components/ResourcesMonthView/ResourcesMonthView.module.mjs.map +1 -0
  179. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs +105 -0
  180. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -0
  181. package/esm/components/ResourcesSchedule/ResourcesSchedule.module.mjs +7 -0
  182. package/esm/components/ResourcesSchedule/ResourcesSchedule.module.mjs.map +1 -0
  183. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +674 -0
  184. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -0
  185. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs +33 -0
  186. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -0
  187. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs +90 -0
  188. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs.map +1 -0
  189. package/esm/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.mjs +95 -0
  190. package/esm/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.mjs.map +1 -0
  191. package/esm/components/Schedule/Schedule.mjs +3 -2
  192. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  193. package/esm/components/ScheduleEvent/ScheduleEvent.mjs +1 -1
  194. package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -1
  195. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -1
  196. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -1
  197. package/esm/components/ScheduleHeader/ScheduleHeader.module.mjs +2 -0
  198. package/esm/components/ScheduleHeader/ScheduleHeader.module.mjs.map +1 -1
  199. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs +29 -11
  200. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -1
  201. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.mjs.map +1 -1
  202. package/esm/components/WeekView/WeekView.mjs +128 -102
  203. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  204. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  205. package/esm/components/WeekView/WeekViewDay.mjs +3 -1
  206. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  207. package/esm/components/WeekView/get-week-label/get-week-label.mjs.map +1 -1
  208. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-offset.mjs.map +1 -1
  209. package/esm/components/WeekView/get-week-view-events/calculate-all-day-event-width.mjs.map +1 -1
  210. package/esm/components/WeekView/get-week-view-events/calculate-event-days.mjs.map +1 -1
  211. package/esm/components/WeekView/get-week-view-events/find-available-column.mjs.map +1 -1
  212. package/esm/components/WeekView/get-week-view-events/get-event-end-date.mjs.map +1 -1
  213. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -1
  214. package/esm/components/WeekView/handle-week-view-key-down.mjs.map +1 -1
  215. package/esm/components/YearView/YearView.mjs.map +1 -1
  216. package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
  217. package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs.map +1 -1
  218. package/esm/components/YearView/handle-year-view-key-down.mjs.map +1 -1
  219. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  220. package/esm/hooks/use-event-resize.mjs.map +1 -1
  221. package/esm/hooks/use-horizontal-event-resize.mjs +159 -0
  222. package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -0
  223. package/esm/index.mjs +11 -1
  224. package/esm/labels.mjs +5 -1
  225. package/esm/labels.mjs.map +1 -1
  226. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs.map +1 -1
  227. package/esm/utils/calculate-month-drop-date/calculate-month-drop-date.mjs.map +1 -1
  228. package/esm/utils/expand-recurring-events/expand-recurring-events.mjs.map +1 -1
  229. package/esm/utils/format-date/format-date.mjs.map +1 -1
  230. package/esm/utils/get-current-time-position/get-current-time-position.mjs.map +1 -1
  231. package/esm/utils/get-day-position/get-day-position.mjs.map +1 -1
  232. package/esm/utils/get-day-relative-percent/get-day-relative-percent.mjs +18 -0
  233. package/esm/utils/get-day-relative-percent/get-day-relative-percent.mjs.map +1 -0
  234. package/esm/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.mjs +12 -0
  235. package/esm/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.mjs.map +1 -0
  236. package/esm/utils/get-index-from-drag-point/get-index-from-drag-point.mjs +27 -0
  237. package/esm/utils/get-index-from-drag-point/get-index-from-drag-point.mjs.map +1 -0
  238. package/esm/utils/get-month-days/get-month-days.mjs.map +1 -1
  239. package/esm/utils/get-month-range/get-month-range.mjs.map +1 -1
  240. package/esm/utils/get-months-by-quarter/get-months-by-quarter.mjs.map +1 -1
  241. package/esm/utils/get-months-list/get-months-list.mjs.map +1 -1
  242. package/esm/utils/get-ordered-resources/get-ordered-resources.mjs +54 -0
  243. package/esm/utils/get-ordered-resources/get-ordered-resources.mjs.map +1 -0
  244. package/esm/utils/get-week-number/get-week-number.mjs.map +1 -1
  245. package/esm/utils/get-weekdays-names/get-weekdays-names.mjs.map +1 -1
  246. package/esm/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.mjs +88 -0
  247. package/esm/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.mjs.map +1 -0
  248. package/esm/utils/is-after-min-date/is-after-min-date.mjs.map +1 -1
  249. package/esm/utils/is-all-day-event/is-all-day-event.mjs.map +1 -1
  250. package/esm/utils/is-before-max-date/is-before-max-date.mjs.map +1 -1
  251. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs.map +1 -1
  252. package/esm/utils/is-events-overlap/is-events-overlap.mjs.map +1 -1
  253. package/esm/utils/is-in-time-range/is-in-time-range.mjs.map +1 -1
  254. package/esm/utils/is-multiday-event/is-multiday-event.mjs.map +1 -1
  255. package/esm/utils/is-same-month/is-same-month.mjs.map +1 -1
  256. package/esm/utils/is-within-week/is-within-week.mjs.map +1 -1
  257. package/esm/utils/next-week/next-week.mjs.map +1 -1
  258. package/esm/utils/parse-time-string/parse-time-string.mjs.map +1 -1
  259. package/esm/utils/previous-week/previous-week.mjs.map +1 -1
  260. package/esm/utils/sort-events/sort-events.mjs.map +1 -1
  261. package/esm/utils/to-date-string/to-date-string.mjs.map +1 -1
  262. package/esm/utils/to-time-string/to-time-string.mjs.map +1 -1
  263. package/esm/utils/validate-event/validate-event.mjs.map +1 -1
  264. package/lib/components/AgendaView/AgendaView.d.ts +54 -0
  265. package/lib/components/AgendaView/get-agenda-view-events.d.ts +9 -0
  266. package/lib/components/AgendaView/index.d.ts +2 -0
  267. package/lib/components/DayView/DayView.d.ts +6 -1
  268. package/lib/components/MonthView/MonthView.d.ts +6 -1
  269. package/lib/components/MonthView/get-renderable-month-event-segments.d.ts +5 -1
  270. package/lib/components/MonthView/get-visible-columns.d.ts +19 -0
  271. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +148 -0
  272. package/lib/components/ResourcesDayView/ResourcesDayViewColumn.d.ts +39 -0
  273. package/lib/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.d.ts +2 -0
  274. package/lib/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.d.ts +16 -0
  275. package/lib/components/ResourcesDayView/index.d.ts +9 -0
  276. package/lib/components/ResourcesMonthView/ResourcesMonthView.d.ts +129 -0
  277. package/lib/components/ResourcesMonthView/index.d.ts +9 -0
  278. package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +123 -0
  279. package/lib/components/ResourcesSchedule/index.d.ts +3 -0
  280. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +117 -0
  281. package/lib/components/ResourcesWeekView/ResourcesWeekViewRow.d.ts +39 -0
  282. package/lib/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.d.ts +29 -0
  283. package/lib/components/ResourcesWeekView/index.d.ts +3 -0
  284. package/lib/components/Schedule/Schedule.d.ts +3 -1
  285. package/lib/components/ScheduleHeader/ScheduleHeaderBase.d.ts +5 -1
  286. package/lib/components/WeekView/WeekView.d.ts +6 -1
  287. package/lib/components/WeekView/WeekViewDay.d.ts +3 -1
  288. package/lib/hooks/use-horizontal-event-resize.d.ts +39 -0
  289. package/lib/index.d.mts +5 -0
  290. package/lib/index.d.ts +5 -0
  291. package/lib/labels.d.ts +4 -0
  292. package/lib/types.d.ts +20 -0
  293. package/lib/utils/get-day-relative-percent/get-day-relative-percent.d.ts +15 -0
  294. package/lib/utils/get-group-to-resource-id-map/get-group-to-resource-id-map.d.ts +3 -0
  295. package/lib/utils/get-index-from-drag-point/get-index-from-drag-point.d.ts +6 -0
  296. package/lib/utils/get-ordered-resources/get-ordered-resources.d.ts +17 -0
  297. package/lib/utils/handle-resources-grid-key-down/handle-resources-grid-key-down.d.ts +10 -0
  298. package/lib/utils/index.d.ts +7 -0
  299. package/package.json +4 -4
  300. package/styles.css +1362 -9
  301. package/styles.layer.css +1363 -10
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourcesWeekView.cjs","names":["getDayTimeIntervals","getOrderedResources","getWeekDays","getCurrentTimePosition","isInTimeRange","formatDate","useDragDropHandlers","calculateDropTime","getGroupToResourceIdMap","useSlotDragSelect","useHorizontalEventResize","getResourcesWeekViewEvents","Box","getBusinessHoursMod","classes","getIndexFromDragPoint","isAllDayEvent","ScheduleEvent","getOverlapClusters","MoreEvents","ResourcesWeekViewRow","getWeekLabel","ScheduleHeaderBase","previousWeek","nextWeek","toDateString","ScrollArea","getLabel","DragContext"],"sources":["../../../src/components/ResourcesWeekView/ResourcesWeekView.tsx"],"sourcesContent":["import dayjs from 'dayjs';\nimport { useCallback, useMemo, 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 ScrollAreaProps,\n StylesApiProps,\n useMantineTheme,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { useDatesContext } from '@mantine/dates';\nimport { useInterval, useIsomorphicEffect, useMergedRef } from '@mantine/hooks';\nimport { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers';\nimport { useHorizontalEventResize } from '../../hooks/use-horizontal-event-resize';\nimport { useSlotDragSelect } from '../../hooks/use-slot-drag-select';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport {\n DateLabelFormat,\n DateStringValue,\n DateTimeStringValue,\n DayOfWeek,\n ScheduleEventData,\n ScheduleMode,\n ScheduleResourceData,\n ScheduleResourceGroup,\n ScheduleViewLevel,\n} from '../../types';\nimport {\n calculateDropTime,\n formatDate,\n getBusinessHoursMod,\n getCurrentTimePosition,\n getDayTimeIntervals,\n getGroupToResourceIdMap,\n getIndexFromDragPoint,\n getOrderedResources,\n getWeekDays,\n handleResourcesGridKeyDown,\n isAllDayEvent,\n isInTimeRange,\n nextWeek,\n previousWeek,\n ResourcesGridControlsRef,\n toDateString,\n} from '../../utils';\nimport { DragContext, DragContextValue } from '../DragContext/DragContext';\nimport { MoreEvents, MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';\nimport { getOverlapClusters } from '../ResourcesDayView/get-overlap-clusters/get-overlap-clusters';\nimport { RenderEvent, RenderEventBody, ScheduleEvent } from '../ScheduleEvent/ScheduleEvent';\nimport { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';\nimport { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase';\nimport { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';\nimport { getWeekLabel } from '../WeekView/get-week-label/get-week-label';\nimport { getResourcesWeekViewEvents } from './get-resources-week-view-events/get-resources-week-view-events';\nimport { ResourcesWeekViewRow } from './ResourcesWeekViewRow';\nimport classes from './ResourcesWeekView.module.css';\n\nexport type ResourcesWeekViewStylesNames =\n | 'resourcesWeekView'\n | 'resourcesWeekViewRoot'\n | 'resourcesWeekViewInner'\n | 'resourcesWeekViewHeaderRows'\n | 'resourcesWeekViewHeaderContent'\n | 'resourcesWeekViewDayLabelsRow'\n | 'resourcesWeekViewDayLabel'\n | 'resourcesWeekViewTimeLabelsRow'\n | 'resourcesWeekViewScrollArea'\n | 'resourcesWeekViewCorner'\n | 'resourcesWeekViewTimeLabel'\n | 'resourcesWeekViewResourceLabel'\n | 'resourcesWeekViewRow'\n | 'resourcesWeekViewRowSlot'\n | 'resourcesWeekViewRowSlots'\n | 'resourcesWeekViewBackgroundEvent'\n | 'resourcesWeekViewAllDayEvent'\n | 'resourcesWeekViewCurrentTimeIndicator'\n | 'resourcesWeekViewCurrentTimeIndicatorLine'\n | 'resourcesWeekViewCurrentTimeIndicatorThumb'\n | 'resourcesWeekViewCurrentTimeIndicatorTimeBubble'\n | 'resourcesWeekViewEventWrapper'\n | 'resourcesWeekViewResizeHandle'\n | 'resourcesWeekViewGroupColumn'\n | 'resourcesWeekViewGroupColumnEmpty'\n | MoreEventsStylesNames\n | CombinedScheduleHeaderStylesNames;\n\nexport type ResourcesWeekViewCssVariables = {\n resourcesWeekView:\n | '--resources-week-view-radius'\n | '--resources-week-view-slot-width'\n | '--resources-week-view-row-height'\n | '--resources-week-view-group-label-width';\n};\n\nexport interface ResourcesWeekViewProps\n extends BoxProps, StylesApiProps<ResourcesWeekViewFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n date: Date | string;\n onDateChange?: (value: DateStringValue) => void;\n resources: ScheduleResourceData[];\n startTime?: string;\n endTime?: string;\n intervalMinutes?: number;\n slotLabelFormat?: DateLabelFormat;\n radius?: MantineRadius;\n /** Date and time to scroll to on initial render, in `YYYY-MM-DD HH:mm:ss` format */\n startScrollDateTime?: string;\n scrollAreaProps?: Partial<ScrollAreaProps> & DataAttributes;\n locale?: string;\n withCurrentTimeIndicator?: boolean;\n withCurrentTimeBubble?: boolean;\n withHeader?: boolean;\n onViewChange?: (view: ScheduleViewLevel) => void;\n previousControlProps?: React.ComponentProps<'button'> & DataAttributes;\n nextControlProps?: React.ComponentProps<'button'> & DataAttributes;\n todayControlProps?: React.ComponentProps<'button'> & DataAttributes;\n viewSelectProps?: Partial<ViewSelectProps> & DataAttributes;\n weekLabelFormat?: DateLabelFormat;\n renderWeekLabel?: (params: {\n weekStart: DateStringValue;\n weekEnd: DateStringValue;\n }) => React.ReactNode;\n events?: ScheduleEventData[];\n slotWidth?: React.CSSProperties['width'];\n rowHeight?: React.CSSProperties['height'];\n labels?: ScheduleLabelsOverride;\n highlightBusinessHours?: boolean;\n businessHours?: [string, string];\n renderEventBody?: RenderEventBody;\n renderEvent?: RenderEvent;\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n\n /** List of resource groups to display as a column to the left of resource labels */\n groups?: ScheduleResourceGroup[];\n\n /** Function to customize group label rendering */\n renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n\n /** Width of the group label column @default 80px */\n groupLabelWidth?: React.CSSProperties['width'];\n\n withEventsDragAndDrop?: boolean;\n onEventDrop?: (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n resourceId?: string | number;\n }) => void;\n canDragEvent?: (event: ScheduleEventData) => boolean;\n onEventDragStart?: (event: ScheduleEventData) => void;\n onEventDragEnd?: () => void;\n onTimeSlotClick?: (data: {\n slotStart: DateTimeStringValue;\n slotEnd: DateTimeStringValue;\n nativeEvent: React.MouseEvent<HTMLButtonElement>;\n resourceId?: string | number;\n }) => void;\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n withDragSlotSelect?: boolean;\n onSlotDragEnd?: (data: {\n rangeStart: DateTimeStringValue;\n rangeEnd: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n mode?: ScheduleMode;\n onExternalEventDrop?: (data: {\n dataTransfer: DataTransfer;\n dropDateTime: DateTimeStringValue;\n resourceId?: string | number;\n }) => void;\n\n /** If true, events can be resized by dragging their left/right 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 recurrenceExpansionLimit?: number;\n\n /** Maximum number of events visible per time slot before \"+more\" indicator shows, minimum value is 1 @default 2 */\n maxEventsPerTimeSlot?: number;\n\n /** Props passed down to `MoreEvents` component */\n moreEventsProps?: Partial<MoreEventsProps>;\n\n firstDayOfWeek?: DayOfWeek;\n weekendDays?: DayOfWeek[];\n withWeekendDays?: boolean;\n weekdayFormat?: DateLabelFormat;\n highlightToday?: boolean;\n}\n\nexport type ResourcesWeekViewFactory = Factory<{\n props: ResourcesWeekViewProps;\n ref: HTMLDivElement;\n stylesNames: ResourcesWeekViewStylesNames;\n vars: ResourcesWeekViewCssVariables;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ResourcesWeekView',\n startTime: '00:00:00',\n endTime: '23:59:59',\n slotLabelFormat: 'HH:mm',\n intervalMinutes: 60,\n withHeader: true,\n weekLabelFormat: 'MMM DD',\n weekdayFormat: 'ddd D',\n highlightBusinessHours: false,\n businessHours: ['09:00:00', '17:00:00'],\n withEventsDragAndDrop: false,\n withEventResize: false,\n withDragSlotSelect: false,\n withWeekendDays: true,\n withCurrentTimeBubble: true,\n highlightToday: true,\n mode: 'default',\n maxEventsPerTimeSlot: 2,\n} satisfies Partial<ResourcesWeekViewProps>;\n\nconst varsResolver = createVarsResolver<ResourcesWeekViewFactory>(\n (_theme, { radius, slotWidth, rowHeight, groupLabelWidth }) => ({\n resourcesWeekView: {\n '--resources-week-view-radius': radius ? getRadius(radius) : undefined,\n '--resources-week-view-slot-width': rem(slotWidth),\n '--resources-week-view-row-height': rem(rowHeight),\n '--resources-week-view-group-label-width': rem(groupLabelWidth),\n },\n })\n);\n\nexport const ResourcesWeekView = factory<ResourcesWeekViewFactory>((_props) => {\n const props = useProps('ResourcesWeekView', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n attributes,\n vars,\n startTime,\n endTime,\n date,\n onDateChange,\n resources,\n intervalMinutes,\n slotLabelFormat,\n radius,\n startScrollDateTime,\n scrollAreaProps,\n locale,\n withCurrentTimeIndicator: _withCurrentTimeIndicator,\n withCurrentTimeBubble,\n __staticSelector,\n withHeader,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n weekLabelFormat,\n renderWeekLabel,\n events,\n slotWidth,\n rowHeight,\n labels,\n highlightBusinessHours,\n businessHours,\n renderEventBody,\n renderEvent,\n renderResourceLabel,\n groups,\n renderGroupLabel,\n groupLabelWidth,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n withEventResize,\n onEventResize,\n canResizeEvent,\n onTimeSlotClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n mode,\n onExternalEventDrop,\n recurrenceExpansionLimit,\n maxEventsPerTimeSlot: _maxEventsPerTimeSlot,\n moreEventsProps,\n firstDayOfWeek,\n weekendDays,\n withWeekendDays,\n weekdayFormat,\n highlightToday,\n ...others\n } = props;\n\n const maxEventsPerTimeSlot =\n _maxEventsPerTimeSlot !== undefined ? Math.max(1, _maxEventsPerTimeSlot) : undefined;\n\n const getStyles = useStyles<ResourcesWeekViewFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n varsResolver,\n attributes,\n rootSelector: 'resourcesWeekView',\n });\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ResourcesWeekViewFactory>({\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 [scrolled, setScrolled] = useState(false);\n const [scrolledX, setScrolledX] = useState(false);\n const ctx = useDatesContext();\n const slots = getDayTimeIntervals({ startTime, endTime, intervalMinutes });\n const { orderedResources, groupRanges, resourceGroupMap } = useMemo(\n () => getOrderedResources(resources, groups),\n [resources, groups]\n );\n const hasGroups = groupRanges.length > 0;\n\n const weekdays = useMemo(\n () =>\n getWeekDays({\n week: date,\n withWeekendDays,\n weekendDays: ctx.getWeekendDays(weekendDays),\n firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),\n }),\n [date, withWeekendDays, weekendDays, firstDayOfWeek, ctx]\n );\n\n const totalSlotsPerDay = slots.length;\n\n const isToday = weekdays.some((day) => dayjs(day).isSame(dayjs(), 'day'));\n const withCurrentTimeIndicator = _withCurrentTimeIndicator ?? isToday;\n\n const [timeIndicatorOffset, setTimeIndicatorOffset] = useState(\n getCurrentTimePosition({ startTime, endTime, intervalMinutes })\n );\n useInterval(\n () => setTimeIndicatorOffset(getCurrentTimePosition({ startTime, endTime, intervalMinutes })),\n 60000,\n { autoInvoke: true }\n );\n\n const todayDayIndex = weekdays.findIndex((day) => dayjs(day).isSame(dayjs(), 'day'));\n const showTimeIndicator =\n withCurrentTimeIndicator &&\n todayDayIndex >= 0 &&\n isInTimeRange({ date: dayjs().toDate(), startTime, endTime });\n const formattedCurrentTime = withCurrentTimeBubble\n ? formatDate({ locale: ctx.getLocale(locale), date: dayjs(), format: slotLabelFormat })\n : '';\n\n type DropTargetSlot = { resourceId: string | number; slotIndex: number };\n\n const handleExternalDrop = useCallback(\n (e: React.DragEvent, target: DropTargetSlot) => {\n if (!onExternalEventDrop) {\n return;\n }\n const dayIndex = Math.floor(target.slotIndex / totalSlotsPerDay);\n const slotInDay = target.slotIndex % totalSlotsPerDay;\n const slotDay = weekdays[dayIndex];\n if (slotDay) {\n onExternalEventDrop({\n dataTransfer: e.dataTransfer,\n dropDateTime: `${dayjs(slotDay).format('YYYY-MM-DD')} ${slots[slotInDay].startTime}`,\n resourceId: target.resourceId,\n });\n }\n },\n [onExternalEventDrop, slots, weekdays, totalSlotsPerDay]\n );\n\n const lastDropResourceId = useRef<string | number | undefined>(undefined);\n\n const handleInternalEventDrop = useCallback(\n (data: {\n eventId: string | number;\n newStart: DateTimeStringValue;\n newEnd: DateTimeStringValue;\n event: ScheduleEventData;\n }) => {\n onEventDrop?.({ ...data, resourceId: lastDropResourceId.current });\n },\n [onEventDrop]\n );\n\n const dragDrop = useDragDropHandlers<DropTargetSlot>({\n enabled: withEventsDragAndDrop,\n mode,\n onEventDrop: handleInternalEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n calculateDropTarget: (target: DropTargetSlot, draggedEvent: ScheduleEventData) => {\n lastDropResourceId.current = target.resourceId;\n const dayIndex = Math.floor(target.slotIndex / totalSlotsPerDay);\n const slotInDay = target.slotIndex % totalSlotsPerDay;\n const slotTime = slots[slotInDay].startTime;\n const targetDay = weekdays[dayIndex] || weekdays[0];\n return calculateDropTime({\n draggedEvent,\n targetDate: targetDay,\n targetSlotTime: slotTime,\n intervalMinutes,\n });\n },\n onExternalDrop: onExternalEventDrop ? handleExternalDrop : undefined,\n });\n\n const groupToResourceId = useMemo(() => getGroupToResourceIdMap(resources), [resources]);\n\n const slotDragSelect = useSlotDragSelect({\n enabled: withDragSlotSelect && mode !== 'static',\n onDragEnd: (startIndex, endIndex, group) => {\n if (!onSlotDragEnd) {\n return;\n }\n const startDayIndex = Math.floor(startIndex / totalSlotsPerDay);\n const startSlotInDay = startIndex % totalSlotsPerDay;\n const endDayIndex = Math.floor(endIndex / totalSlotsPerDay);\n const endSlotInDay = endIndex % totalSlotsPerDay;\n const startDay = weekdays[startDayIndex];\n const endDay = weekdays[endDayIndex];\n if (startDay && endDay) {\n onSlotDragEnd({\n rangeStart: `${dayjs(startDay).format('YYYY-MM-DD')} ${slots[startSlotInDay].startTime}`,\n rangeEnd: `${dayjs(endDay).format('YYYY-MM-DD')} ${slots[endSlotInDay].endTime}`,\n resourceId: groupToResourceId.get(group) ?? group,\n });\n }\n },\n });\n\n const eventResize = useHorizontalEventResize({\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 handleTimeSlotClick = (\n resourceId: string | number,\n day: string,\n slotTime: string,\n e: React.MouseEvent<HTMLButtonElement>\n ) => {\n if (!onTimeSlotClick) {\n return;\n }\n const slotIndex = slots.findIndex((s) => s.startTime === slotTime);\n if (slotIndex === -1) {\n return;\n }\n const slot = slots[slotIndex];\n const dayStr = dayjs(day).format('YYYY-MM-DD');\n onTimeSlotClick({\n slotStart: `${dayStr} ${slot.startTime}`,\n slotEnd: `${dayStr} ${slot.endTime}`,\n nativeEvent: e,\n resourceId,\n });\n };\n\n const weekViewEvents = useMemo(\n () =>\n getResourcesWeekViewEvents({\n events,\n resources,\n weekdays,\n startTime,\n endTime,\n expansionLimit: recurrenceExpansionLimit,\n }),\n [events, resources, weekdays, startTime, endTime, recurrenceExpansionLimit]\n );\n\n const dayLabels = weekdays.map((day) => {\n const d = dayjs(day);\n const today = d.isSame(dayjs(), 'day') && highlightToday;\n const weekend = ctx.getWeekendDays(weekendDays).includes(d.day() as DayOfWeek);\n\n return (\n <Box\n {...getStyles('resourcesWeekViewDayLabel')}\n key={day}\n mod={{ today, weekend }}\n style={{ width: `calc(var(--resources-week-view-slot-width) * ${totalSlotsPerDay})` }}\n >\n {formatDate({ date: d, locale: ctx.getLocale(locale), format: weekdayFormat })}\n </Box>\n );\n });\n\n const timeLabels = weekdays.flatMap((day) =>\n slots.map((interval) => {\n const dayStr = dayjs(day).format('YYYY-MM-DD');\n const intervalTime = dayjs(`${dayStr} ${interval.startTime}`);\n const label = formatDate({\n date: intervalTime,\n locale: ctx.getLocale(locale),\n format: slotLabelFormat,\n });\n\n return (\n <Box\n {...getStyles('resourcesWeekViewTimeLabel')}\n key={`${day}-${interval.startTime}`}\n mod={{\n 'hour-start': interval.isHourStart,\n ...getBusinessHoursMod({\n time: interval.startTime,\n businessHours,\n highlightBusinessHours,\n }),\n }}\n >\n {label}\n </Box>\n );\n })\n );\n\n const slotsRef: ResourcesGridControlsRef = useRef<HTMLButtonElement[][]>([]);\n const rowSlotsContainersRef = useRef<(HTMLDivElement | null)[]>([]);\n const viewportRef = useRef<HTMLDivElement>(null);\n const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);\n\n const firstSlotIndex = { resourceIndex: 0, slotIndex: 0 };\n\n useIsomorphicEffect(() => {\n if (!startScrollDateTime || !viewportRef.current) {\n return;\n }\n const parsed = dayjs(startScrollDateTime);\n const targetDayStr = parsed.format('YYYY-MM-DD 00:00:00');\n const targetTime = parsed.format('HH:mm:ss');\n const dayIndex = weekdays.indexOf(targetDayStr);\n if (dayIndex < 0) {\n return;\n }\n const slotInDay = slots.findIndex((s) => s.startTime >= targetTime);\n if (slotInDay < 0) {\n return;\n }\n const flatIndex = dayIndex * totalSlotsPerDay + slotInDay;\n const firstResourceSlots = slotsRef.current[0];\n if (!firstResourceSlots || firstResourceSlots.length === 0) {\n return;\n }\n const targetSlot = firstResourceSlots[flatIndex];\n if (!targetSlot) {\n return;\n }\n const slotRect = targetSlot.getBoundingClientRect();\n const viewportRect = viewportRef.current.getBoundingClientRect();\n const cornerEl = viewportRef.current.querySelector(`.${classes.resourcesWeekViewCorner}`);\n const labelWidth = cornerEl ? cornerEl.getBoundingClientRect().width : 0;\n viewportRef.current.scrollTo({\n left: slotRect.left - viewportRect.left - labelWidth,\n top: 0,\n });\n }, []);\n\n const getSlotIndexFromDragPoint = useCallback((event: React.DragEvent, resourceIndex: number) => {\n return getIndexFromDragPoint(slotsRef.current[resourceIndex] ?? [], event.clientX);\n }, []);\n\n const handleSlotKeyDown = (\n event: React.KeyboardEvent<HTMLButtonElement>,\n resourceIndex: number,\n slotIndex: number\n ) => {\n handleResourcesGridKeyDown({\n controlsRef: slotsRef,\n resourceIndex,\n slotIndex,\n event,\n });\n };\n\n const dayWidthPercent = 100 / weekdays.length;\n\n const rows = orderedResources.map((resource, resourceIndex) => {\n const eventNodes: React.ReactNode[] = [];\n const resourceAllDayBars = weekViewEvents.allDayBars[resource.id] ?? [];\n const maxAllDayCount = resourceAllDayBars.reduce((max, bar) => Math.max(max, bar.row + 1), 0);\n\n weekdays.forEach((day, dayIndex) => {\n const dayEvents = weekViewEvents.byDay[day];\n if (!dayEvents) {\n return;\n }\n\n const dayOffsetPercent = (dayIndex / weekdays.length) * 100;\n\n const bgEvents = [\n ...(dayEvents.backgroundTimedEvents[resource.id] || []),\n ...(dayEvents.backgroundAllDayEvents[resource.id] || []),\n ];\n for (const event of bgEvents) {\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-${event.id}-${day}`,\n ...getStyles('resourcesWeekViewBackgroundEvent', {\n style: {\n left: `${dayOffsetPercent + (event.position.top / 100) * dayWidthPercent}%`,\n width: `${(event.position.height / 100) * dayWidthPercent}%`,\n top: 0,\n height: '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 eventNodes.push(renderEvent(event, bgEventProps as any));\n } else {\n eventNodes.push(<Box {...bgEventProps} />);\n }\n }\n\n const allRegularEvents = (dayEvents.regularEvents[resource.id] || []).filter(\n (event) => !isAllDayEvent({ event, date: day })\n );\n\n const visibleEvents =\n maxEventsPerTimeSlot !== undefined\n ? allRegularEvents.filter((event) => event.position.column < maxEventsPerTimeSlot)\n : allRegularEvents;\n\n for (const event of visibleEvents) {\n const isDraggable = dragDrop.isDraggableEvent(event);\n const isResizable = eventResize.isResizableEvent(event);\n const resizePosition = eventResize.getResizePosition(event.id);\n const isThisEventResizing = resizePosition !== null;\n const activeEdge =\n isThisEventResizing && eventResize.resizingEdge ? eventResize.resizingEdge : null;\n\n const effectiveTop = resizePosition ? resizePosition.left : event.position.top;\n const effectiveHeight = resizePosition ? resizePosition.width : event.position.height;\n const eventLeft = dayOffsetPercent + (effectiveTop / 100) * dayWidthPercent;\n const eventWidth = (effectiveHeight / 100) * dayWidthPercent;\n\n const eventColors = isResizable\n ? theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: event.variant || 'light',\n autoContrast: true,\n })\n : null;\n\n const adjustPosition =\n maxEventsPerTimeSlot !== undefined && event.position.overlaps > maxEventsPerTimeSlot;\n\n const eventDate = dayjs(day).format('YYYY-MM-DD');\n\n eventNodes.push(\n <Box\n key={`${event.id}-${day}`}\n {...getStyles('resourcesWeekViewEventWrapper')}\n __vars={eventColors ? { '--event-color': eventColors.color } : undefined}\n data-resizing={isThisEventResizing || undefined}\n style={{\n left: `calc(${eventLeft}% + 1px)`,\n top: adjustPosition\n ? `calc((100% - 22px) * ${event.position.column} / ${maxEventsPerTimeSlot})`\n : `${event.position.offset}%`,\n width: `calc(${eventWidth}% - 2px)`,\n height: adjustPosition\n ? `calc((100% - 22px) / ${maxEventsPerTimeSlot})`\n : `${event.position.width}%`,\n }}\n >\n <ScheduleEvent\n event={event}\n autoSize\n nowrap\n draggable={isDraggable}\n isResizing={isThisEventResizing}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={\n onEventClick\n ? (e) => {\n if (!eventResize.wasResizing()) {\n onEventClick(event, e);\n }\n }\n : undefined\n }\n style={{ width: '100%', height: '100%' }}\n />\n {isResizable && mode !== 'static' && (\n <>\n <div\n {...getStyles('resourcesWeekViewResizeHandle')}\n data-edge=\"start\"\n data-active={activeEdge === 'start' || undefined}\n onPointerDown={(e) => {\n const container = rowSlotsContainersRef.current[resourceIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge: 'start',\n container,\n originalLeft: event.position.top,\n originalWidth: event.position.height,\n eventDate,\n dayIndex,\n dayCount: weekdays.length,\n pointerEvent: e,\n });\n }\n }}\n />\n <div\n {...getStyles('resourcesWeekViewResizeHandle')}\n data-edge=\"end\"\n data-active={activeEdge === 'end' || undefined}\n onPointerDown={(e) => {\n const container = rowSlotsContainersRef.current[resourceIndex];\n if (container) {\n eventResize.handleResizeStart({\n event,\n edge: 'end',\n container,\n originalLeft: event.position.top,\n originalWidth: event.position.height,\n eventDate,\n dayIndex,\n dayCount: weekdays.length,\n pointerEvent: e,\n });\n }\n }}\n />\n </>\n )}\n </Box>\n );\n }\n\n if (maxEventsPerTimeSlot !== undefined) {\n const clusters = getOverlapClusters(allRegularEvents);\n for (const cluster of clusters) {\n const hiddenCount = cluster.filter(\n (e) => e.position.column >= maxEventsPerTimeSlot\n ).length;\n\n if (hiddenCount > 0 && mode !== 'static') {\n const leftPercent =\n dayOffsetPercent +\n (Math.min(...cluster.map((e) => e.position.top)) / 100) * dayWidthPercent;\n const rightPercent =\n dayOffsetPercent +\n (Math.max(...cluster.map((e) => e.position.top + e.position.height)) / 100) *\n dayWidthPercent;\n\n eventNodes.push(\n <MoreEvents\n key={`more-${resource.id}-${day}-${cluster[0].id}`}\n events={cluster}\n moreEventsCount={hiddenCount}\n mode={mode}\n labels={labels}\n renderEventBody={renderEventBody}\n renderEvent={renderEvent}\n onEventClick={onEventClick}\n style={{\n position: 'absolute',\n left: `calc(${leftPercent}% + 1px)`,\n width: `calc(${rightPercent - leftPercent}% - 2px)`,\n bottom: 0,\n height: '22px',\n paddingInline: 4,\n zIndex: 4,\n }}\n {...stylesApiProps}\n {...moreEventsProps}\n />\n );\n }\n }\n }\n });\n\n const stickyLabelOffset = hasGroups\n ? 'calc(var(--resources-week-view-group-label-width) + var(--resources-week-view-resource-label-width) + 5px)'\n : 'calc(var(--resources-week-view-resource-label-width) + 5px)';\n\n resourceAllDayBars.forEach((bar) => {\n const leftPercent = bar.startDayIndex * dayWidthPercent;\n const widthPercent = (bar.endDayIndex - bar.startDayIndex + 1) * dayWidthPercent;\n\n eventNodes.push(\n <div\n key={`all-day-${bar.event.id}-${bar.startDayIndex}`}\n {...getStyles('resourcesWeekViewAllDayEvent', {\n style: {\n left: `calc(${leftPercent}% + 1px)`,\n width: `calc(${widthPercent}% - 2px)`,\n top: `calc(${bar.row} * (var(--resources-week-view-all-day-height) + 2px) + 2px)`,\n },\n })}\n >\n <ScheduleEvent\n event={bar.event}\n autoSize\n nowrap\n renderEventBody={(barEvent) => (\n <span\n style={{\n position: 'sticky',\n insetInlineStart: stickyLabelOffset,\n display: 'inline-block',\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {renderEventBody ? renderEventBody(barEvent) : barEvent.title}\n </span>\n )}\n renderEvent={renderEvent}\n radius={radius}\n mode={mode}\n onClick={onEventClick ? (e) => onEventClick(bar.event, e) : undefined}\n style={{ width: '100%', height: '100%', overflow: 'visible' }}\n styles={{\n eventInner: {\n display: 'block',\n overflow: 'visible',\n lineHeight: 'var(--resources-week-view-all-day-height)',\n },\n }}\n />\n </div>\n );\n });\n\n return (\n <ResourcesWeekViewRow\n key={resource.id}\n resource={resource}\n resourceIndex={resourceIndex}\n weekdays={weekdays}\n slots={slots}\n getStyles={getStyles}\n labels={labels}\n highlightBusinessHours={highlightBusinessHours}\n businessHours={businessHours}\n withEventsDragAndDrop={withDragHandlers}\n mode={mode}\n slotsRef={slotsRef}\n firstSlotIndex={firstSlotIndex}\n onSlotKeyDown={handleSlotKeyDown}\n onSlotClick={handleTimeSlotClick}\n onRowSlotsDragOver={(event, resourceId, resIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, resIdx);\n if (slotIndex !== null) {\n dragDrop.handleDragOver(event, { resourceId, slotIndex });\n }\n }}\n onRowSlotsDragLeave={dragDrop.handleDragLeave}\n onRowSlotsDrop={(event, resourceId, resIdx) => {\n const slotIndex = getSlotIndexFromDragPoint(event, resIdx);\n if (slotIndex !== null) {\n dragDrop.handleDrop(event, { resourceId, slotIndex });\n }\n }}\n dropTargetSlotIndex={\n dragDrop.dropTarget?.resourceId === resource.id\n ? dragDrop.dropTarget.slotIndex\n : undefined\n }\n withDragSlotSelect={withDragSlotSelect}\n onSlotPointerDown={slotDragSelect.handleSlotPointerDown}\n isSlotDragSelected={slotDragSelect.isSlotSelected}\n rowSlotsContainerRef={(node) => {\n rowSlotsContainersRef.current[resourceIndex] = node;\n }}\n renderResourceLabel={renderResourceLabel}\n renderGroupLabel={renderGroupLabel}\n scrolledX={scrolledX}\n groupInfo={hasGroups ? resourceGroupMap[resourceIndex] : undefined}\n allDayCount={maxAllDayCount}\n >\n {eventNodes}\n </ResourcesWeekViewRow>\n );\n });\n\n const headerLabel = getWeekLabel({\n weekdays,\n locale: ctx.getLocale(locale),\n weekLabelFormat: weekLabelFormat!,\n renderWeekLabel,\n });\n\n const indicatorLeftPercent =\n todayDayIndex >= 0 ? ((todayDayIndex + timeIndicatorOffset / 100) / weekdays.length) * 100 : 0;\n\n const content = (\n <Box\n {...getStyles('resourcesWeekView')}\n mod={{\n static: mode === 'static',\n 'slot-dragging': slotDragSelect.isDragging,\n resizing: eventResize.isResizing,\n 'event-interaction': eventResize.isResizing || dragDrop.dragContextValue.isDragging,\n }}\n {...others}\n >\n {withHeader && (\n <ScheduleHeaderBase\n view=\"week\"\n navigationHandlers={{\n previous: () => previousWeek(date, ctx.getFirstDayOfWeek(firstDayOfWeek)),\n next: () => nextWeek(date, ctx.getFirstDayOfWeek(firstDayOfWeek)),\n today: () => toDateString(dayjs()),\n }}\n control={{\n miw: 180,\n title: headerLabel,\n }}\n labels={labels}\n onDateChange={onDateChange}\n onViewChange={onViewChange}\n previousControlProps={previousControlProps}\n nextControlProps={nextControlProps}\n todayControlProps={todayControlProps}\n viewSelectProps={{ views: ['day', 'week', 'month'] as const, ...viewSelectProps }}\n stylesApiProps={stylesApiProps}\n />\n )}\n\n <Box {...getStyles('resourcesWeekViewRoot')}>\n <ScrollArea\n scrollbarSize={4}\n {...scrollAreaProps}\n {...getStyles('resourcesWeekViewScrollArea', {\n className: scrollAreaProps?.className,\n style: scrollAreaProps?.style,\n })}\n onScrollPositionChange={(position) => {\n scrollAreaProps?.onScrollPositionChange?.(position);\n setScrolled(position.y !== 0);\n setScrolledX(position.x !== 0);\n }}\n viewportRef={mergedViewportRef}\n >\n <div {...getStyles('resourcesWeekViewInner')}>\n <div {...getStyles('resourcesWeekViewHeaderRows')}>\n <div\n {...getStyles('resourcesWeekViewCorner')}\n key=\"corner\"\n style={\n hasGroups\n ? {\n flexBasis:\n 'calc(var(--resources-week-view-resource-label-width) + var(--resources-week-view-group-label-width))',\n minWidth:\n 'calc(var(--resources-week-view-resource-label-width) + var(--resources-week-view-group-label-width))',\n }\n : undefined\n }\n >\n {getLabel('resources', labels)}\n </div>\n <div {...getStyles('resourcesWeekViewHeaderContent')}>\n <div {...getStyles('resourcesWeekViewDayLabelsRow')}>{dayLabels}</div>\n <Box {...getStyles('resourcesWeekViewTimeLabelsRow')} mod={{ scrolled }}>\n {timeLabels}\n </Box>\n </div>\n </div>\n\n {rows}\n\n {showTimeIndicator && (\n <Box\n {...getStyles('resourcesWeekViewCurrentTimeIndicator')}\n __vars={{\n '--indicator-left-offset': hasGroups\n ? `calc(var(--resources-week-view-resource-label-width) + var(--resources-week-view-group-label-width) + (100% - var(--resources-week-view-resource-label-width) - var(--resources-week-view-group-label-width)) * ${indicatorLeftPercent} / 100)`\n : `calc(var(--resources-week-view-resource-label-width) + (100% - var(--resources-week-view-resource-label-width)) * ${indicatorLeftPercent} / 100)`,\n '--_time-bubble-width': formattedCurrentTime\n ?.toString()\n .toLowerCase()\n .includes('m')\n ? '64px'\n : '46px',\n }}\n >\n {withCurrentTimeBubble && (\n <div {...getStyles('resourcesWeekViewCurrentTimeIndicatorTimeBubble')}>\n {formattedCurrentTime}\n </div>\n )}\n {!withCurrentTimeBubble && (\n <div {...getStyles('resourcesWeekViewCurrentTimeIndicatorThumb')} />\n )}\n <div {...getStyles('resourcesWeekViewCurrentTimeIndicatorLine')} />\n </Box>\n )}\n </div>\n </ScrollArea>\n </Box>\n </Box>\n );\n\n const dragContextValue = useMemo<DragContextValue>(\n () => dragDrop.dragContextValue,\n [dragDrop.dragContextValue]\n );\n\n if (withEventsDragAndDrop) {\n return <DragContext.Provider value={dragContextValue}>{content}</DragContext.Provider>;\n }\n\n return content;\n});\n\nResourcesWeekView.displayName = '@mantine/schedule/ResourcesWeekView';\nResourcesWeekView.classes = classes;\nResourcesWeekView.varsResolver = varsResolver;\n"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ "use client";
2
+ //#region packages/@mantine/schedule/src/components/ResourcesWeekView/ResourcesWeekView.module.css
3
+ var ResourcesWeekView_module_default = {
4
+ "resourcesWeekView": "m_ed4c47cf",
5
+ "resourcesWeekViewRoot": "m_5b5cbd51",
6
+ "resourcesWeekViewScrollArea": "m_b88ea29",
7
+ "resourcesWeekViewInner": "m_fbb9fc7",
8
+ "resourcesWeekViewHeaderRows": "m_7d7bb735",
9
+ "resourcesWeekViewCorner": "m_dd8b4f04",
10
+ "resourcesWeekViewHeaderContent": "m_85f2b19d",
11
+ "resourcesWeekViewDayLabelsRow": "m_cde0b68e",
12
+ "resourcesWeekViewDayLabel": "m_354e59a7",
13
+ "resourcesWeekViewTimeLabelsRow": "m_b7f0617f",
14
+ "resourcesWeekViewTimeLabel": "m_a6832518",
15
+ "resourcesWeekViewRow": "m_9fd9b38b",
16
+ "resourcesWeekViewResourceLabel": "m_9c6373f7",
17
+ "resourcesWeekViewGroupColumn": "m_fdcb5366",
18
+ "resourcesWeekViewGroupColumnEmpty": "m_3d5e7187",
19
+ "resourcesWeekViewRowSlots": "m_c534316a",
20
+ "resourcesWeekViewRowSlot": "m_ed965429",
21
+ "resourcesWeekViewBackgroundEvent": "m_3c19323d",
22
+ "resourcesWeekViewAllDayEvent": "m_682c45d0",
23
+ "resourcesWeekViewResizeHandle": "m_30c8fd6b",
24
+ "resourcesWeekViewEventWrapper": "m_2d13c608",
25
+ "resourcesWeekViewCurrentTimeIndicator": "m_6f70bf38",
26
+ "resourcesWeekViewCurrentTimeIndicatorLine": "m_be32874c",
27
+ "resourcesWeekViewCurrentTimeIndicatorThumb": "m_88ec57e",
28
+ "resourcesWeekViewCurrentTimeIndicatorTimeBubble": "m_9ff3db11"
29
+ };
30
+ //#endregion
31
+ exports.default = ResourcesWeekView_module_default;
32
+
33
+ //# sourceMappingURL=ResourcesWeekView.module.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourcesWeekView.module.cjs","names":[],"sources":["../../../src/components/ResourcesWeekView/ResourcesWeekView.module.css"],"sourcesContent":[".resourcesWeekView {\n --resources-week-view-radius: var(--schedule-radius, var(--mantine-radius-default));\n --resources-week-view-resource-label-width: 120px;\n --resources-week-view-slot-width: 60px;\n --resources-week-view-row-height: 64px;\n --resources-week-view-group-label-width: 80px;\n --resources-week-view-all-day-height: 20px;\n\n @mixin where-light {\n --resources-week-view-border-color: var(--mantine-color-gray-3);\n --resources-week-view-business-hours-bg: var(--mantine-color-white);\n --resources-week-view-non-business-hours-bg: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n --resources-week-view-border-color: var(--mantine-color-dark-4);\n --resources-week-view-business-hours-bg: var(--mantine-color-dark-7);\n --resources-week-view-non-business-hours-bg: var(--mantine-color-dark-6);\n }\n}\n\n.resourcesWeekViewRoot {\n border: 1px solid var(--resources-week-view-border-color);\n border-radius: var(--resources-week-view-radius);\n overflow: hidden;\n max-width: fit-content;\n position: relative;\n}\n\n.resourcesWeekViewScrollArea {\n :where([data-mantine-scrollbar]) {\n z-index: 20;\n }\n\n :where([data-scrollarea-viewport]) {\n overscroll-behavior-x: none;\n }\n}\n\n.resourcesWeekViewInner {\n display: inline-flex;\n flex-direction: column;\n position: relative;\n}\n\n.resourcesWeekViewHeaderRows {\n display: flex;\n position: sticky;\n top: 0;\n z-index: 5;\n background-color: var(--mantine-color-body);\n border-bottom: 1px solid var(--resources-week-view-border-color);\n margin-bottom: -1px;\n}\n\n.resourcesWeekViewCorner {\n flex: 0 0 var(--resources-week-view-resource-label-width);\n min-width: var(--resources-week-view-resource-label-width);\n border-inline-end: 1px solid var(--resources-week-view-border-color);\n position: sticky;\n left: 0;\n z-index: 6;\n background-color: var(--mantine-color-body);\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 user-select: none;\n}\n\n.resourcesWeekViewHeaderContent {\n display: flex;\n flex-direction: column;\n}\n\n.resourcesWeekViewDayLabelsRow {\n display: flex;\n border-bottom: 1px solid var(--resources-week-view-border-color);\n}\n\n.resourcesWeekViewDayLabel {\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 user-select: none;\n cursor: default;\n height: 32px;\n text-transform: capitalize;\n border-inline-end: 1px solid var(--resources-week-view-border-color);\n\n &:where(:last-of-type) {\n border-inline-end: none;\n }\n\n &:where([data-weekend]) {\n color: var(--mantine-color-red-6);\n }\n\n &:where([data-today]) {\n color: var(--mantine-primary-color-contrast);\n background-color: var(--mantine-primary-color-filled);\n font-weight: var(--mantine-font-weight-bold);\n }\n}\n\n.resourcesWeekViewTimeLabelsRow {\n display: flex;\n}\n\n.resourcesWeekViewTimeLabel {\n flex: 0 0 var(--resources-week-view-slot-width);\n min-width: var(--resources-week-view-slot-width);\n max-width: var(--resources-week-view-slot-width);\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--mantine-font-size-xs);\n user-select: none;\n cursor: default;\n font-variant-numeric: tabular-nums;\n text-transform: uppercase;\n border-inline-end: 1px solid var(--resources-week-view-border-color);\n\n &:where(:last-of-type) {\n border-inline-end: none;\n }\n\n &:where([data-business-hours]) {\n background-color: var(--resources-week-view-business-hours-bg);\n }\n\n &:where([data-non-business-hours]) {\n background-color: var(--resources-week-view-non-business-hours-bg);\n }\n}\n\n.resourcesWeekViewRow {\n display: flex;\n border-top: 1px solid var(--resources-week-view-border-color);\n}\n\n.resourcesWeekViewResourceLabel {\n flex: 0 0 var(--resources-week-view-resource-label-width);\n min-width: var(--resources-week-view-resource-label-width);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n font-size: var(--mantine-font-size-sm);\n font-weight: var(--mantine-font-weight-medium);\n user-select: none;\n border-inline-end: 1px solid var(--resources-week-view-border-color);\n min-height: var(--resources-week-view-row-height);\n position: sticky;\n left: 0;\n z-index: 4;\n background-color: var(--mantine-color-body);\n transition: box-shadow 100ms ease;\n\n &:where([data-scrolled-x]) {\n box-shadow: var(--mantine-shadow-sm);\n }\n\n &:where([data-has-groups]) {\n left: var(--resources-week-view-group-label-width);\n }\n}\n\n.resourcesWeekViewGroupColumn {\n flex: 0 0 var(--resources-week-view-group-label-width);\n min-width: var(--resources-week-view-group-label-width);\n min-height: var(--resources-week-view-row-height);\n position: sticky;\n left: 0;\n z-index: 12;\n background-color: var(--mantine-color-body);\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n overflow-wrap: break-word;\n font-size: var(--mantine-font-size-sm);\n font-weight: var(--mantine-font-weight-medium);\n user-select: none;\n border-inline-end: 1px solid var(--resources-week-view-border-color);\n overflow: visible;\n\n &:where([data-group-position='first']),\n &:where([data-group-position='only']) {\n z-index: 13;\n }\n\n &:where([data-group-position='middle']),\n &:where([data-group-position='last']) {\n margin-top: -1px;\n min-height: calc(var(--resources-week-view-row-height) + 1px);\n }\n}\n\n.resourcesWeekViewGroupColumnEmpty {\n flex: 0 0 var(--resources-week-view-group-label-width);\n min-width: var(--resources-week-view-group-label-width);\n min-height: var(--resources-week-view-row-height);\n position: sticky;\n left: 0;\n z-index: 12;\n background-color: var(--mantine-color-body);\n border-inline-end: 1px solid var(--resources-week-view-border-color);\n}\n\n.resourcesWeekViewRowSlots {\n display: flex;\n position: relative;\n min-height: var(--resources-week-view-row-height);\n}\n\n.resourcesWeekViewRowSlot {\n flex: 0 0 var(--resources-week-view-slot-width);\n min-width: var(--resources-week-view-slot-width);\n max-width: var(--resources-week-view-slot-width);\n min-height: var(--resources-week-view-row-height);\n border-inline-end: 1px solid var(--resources-week-view-border-color);\n cursor: pointer;\n position: relative;\n\n &:where(:last-of-type) {\n border-inline-end: none;\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(:focus) {\n z-index: 1;\n }\n\n &:where([data-business-hours]) {\n background-color: var(--resources-week-view-business-hours-bg);\n }\n\n &:where([data-non-business-hours]) {\n background-color: var(--resources-week-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.resourcesWeekViewBackgroundEvent {\n position: absolute;\n pointer-events: none;\n z-index: 2;\n border-radius: var(--resources-week-view-radius);\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.resourcesWeekViewAllDayEvent {\n position: absolute;\n height: var(--resources-week-view-all-day-height);\n z-index: 2;\n}\n\n.resourcesWeekViewResizeHandle {\n position: absolute;\n top: 20%;\n width: 4px;\n height: 60%;\n cursor: ew-resize;\n z-index: 5;\n border-radius: 2px;\n opacity: 0;\n transition: opacity 100ms ease;\n pointer-events: all;\n background-color: var(--event-color);\n\n &::before {\n content: '';\n position: absolute;\n inset: -4px -6px;\n }\n\n &:where([data-edge='start']) {\n left: -2px;\n }\n\n &:where([data-edge='end']) {\n right: -2px;\n }\n}\n\n.resourcesWeekViewEventWrapper {\n position: absolute;\n z-index: 3;\n\n &:hover .resourcesWeekViewResizeHandle {\n opacity: 0.5;\n }\n\n & .resourcesWeekViewResizeHandle:hover {\n opacity: 0.8;\n }\n\n &:where([data-resizing]) .resourcesWeekViewResizeHandle:where([data-active]) {\n opacity: 0.8;\n }\n\n &:where([data-resizing]) .resourcesWeekViewResizeHandle:not([data-active]) {\n opacity: 0;\n pointer-events: none;\n }\n}\n\n.resourcesWeekView:where([data-event-interaction]) .resourcesWeekViewRowSlot {\n pointer-events: none;\n}\n\n.resourcesWeekView:where([data-resizing]) {\n & * {\n cursor: ew-resize !important;\n }\n\n & .resourcesWeekViewEventWrapper:not([data-resizing]) {\n pointer-events: none;\n\n & .resourcesWeekViewResizeHandle {\n opacity: 0;\n }\n }\n}\n\n.resourcesWeekViewCurrentTimeIndicator {\n --_indicator-color: var(--resources-week-view-indicator-color, var(--mantine-color-red-7));\n --_time-bubble-height: 18px;\n --_thumb-size: 12px;\n\n position: absolute;\n pointer-events: none;\n top: 62px;\n bottom: 0;\n left: var(--indicator-left-offset);\n width: 2px;\n z-index: 3;\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n background-color: var(--_indicator-color);\n opacity: 0.2;\n }\n}\n\n.resourcesWeekViewCurrentTimeIndicatorLine {\n width: 100%;\n position: absolute;\n top: 0;\n bottom: 0;\n background-color: var(--_indicator-color);\n}\n\n.resourcesWeekViewCurrentTimeIndicatorThumb {\n position: absolute;\n top: calc(-1 * (var(--_thumb-size) / 2 - 1px));\n width: var(--_thumb-size);\n height: var(--_thumb-size);\n border-radius: 50%;\n border: 1px solid var(--mantine-color-body);\n background-color: var(--_indicator-color);\n left: calc(-1 * (var(--_thumb-size) / 2 - 1px));\n}\n\n.resourcesWeekViewCurrentTimeIndicatorTimeBubble {\n position: absolute;\n top: 0;\n height: var(--_time-bubble-height);\n width: var(--_time-bubble-width);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 1000px;\n background-color: var(--_indicator-color);\n color: var(--mantine-color-white);\n font-size: var(--mantine-font-size-xs);\n font-weight: var(--mantine-font-weight-bold);\n box-shadow: var(--mantine-shadow-sm);\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n text-transform: uppercase;\n left: calc(-1 * (var(--_time-bubble-width) / 2 - 1px));\n z-index: 3;\n}\n"],"mappings":""}
@@ -0,0 +1,90 @@
1
+ "use client";
2
+ const require_labels = require("../../labels.cjs");
3
+ const require_get_business_hours_mod = require("../../utils/get-business-hours-mod/get-business-hours-mod.cjs");
4
+ let _mantine_core = require("@mantine/core");
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+ //#region packages/@mantine/schedule/src/components/ResourcesWeekView/ResourcesWeekViewRow.tsx
7
+ function ResourcesWeekViewRow({ resource, resourceIndex, weekdays, slots, getStyles, children, labels, highlightBusinessHours, businessHours, withEventsDragAndDrop, onRowSlotsDragOver, onRowSlotsDragLeave, onRowSlotsDrop, onSlotClick, dropTargetSlotIndex, mode, slotsRef, firstSlotIndex, onSlotKeyDown, withDragSlotSelect, onSlotPointerDown, isSlotDragSelected, rowSlotsContainerRef, renderResourceLabel, renderGroupLabel, scrolledX, groupInfo, allDayCount }) {
8
+ const slotGroup = String(resource.id);
9
+ const items = weekdays.flatMap((day, dayIndex) => slots.map((slot, slotIndex) => {
10
+ const flatIndex = dayIndex * slots.length + slotIndex;
11
+ const isDropTarget = dropTargetSlotIndex === flatIndex;
12
+ const isFirstSlot = firstSlotIndex?.resourceIndex === resourceIndex && firstSlotIndex?.slotIndex === flatIndex;
13
+ const isDragSelected = isSlotDragSelected?.(flatIndex, slotGroup) || false;
14
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.UnstyledButton, {
15
+ ref: (node) => {
16
+ if (!slotsRef?.current) return;
17
+ if (!slotsRef.current[resourceIndex]) slotsRef.current[resourceIndex] = [];
18
+ const row = slotsRef.current[resourceIndex];
19
+ if (node) row[flatIndex] = node;
20
+ else {
21
+ delete row[flatIndex];
22
+ while (row.length > 0 && row[row.length - 1] == null) row.length -= 1;
23
+ }
24
+ },
25
+ ...getStyles("resourcesWeekViewRowSlot"),
26
+ mod: {
27
+ "hour-start": slot.isHourStart,
28
+ ...require_get_business_hours_mod.getBusinessHoursMod({
29
+ time: slot.startTime,
30
+ businessHours,
31
+ highlightBusinessHours
32
+ }),
33
+ "drop-target": isDropTarget,
34
+ "drag-selected": isDragSelected,
35
+ static: mode === "static"
36
+ },
37
+ "aria-label": `${require_labels.getLabel("resourceSlot", labels)} ${resource.label} ${day} ${slot.startTime} - ${slot.endTime}`,
38
+ tabIndex: mode === "static" ? -1 : isFirstSlot ? 0 : -1,
39
+ "data-drag-slot-index": withDragSlotSelect && mode !== "static" ? flatIndex : void 0,
40
+ "data-drag-slot-group": withDragSlotSelect && mode !== "static" ? slotGroup : void 0,
41
+ onKeyDown: (e) => {
42
+ if (onSlotKeyDown) onSlotKeyDown(e, resourceIndex, flatIndex);
43
+ },
44
+ onPointerDown: withDragSlotSelect && mode !== "static" ? (e) => onSlotPointerDown?.(e, flatIndex, slotGroup) : void 0,
45
+ onClick: mode === "static" || !onSlotClick ? void 0 : (e) => onSlotClick(resource.id, day, slot.startTime, e),
46
+ onDragOver: withEventsDragAndDrop && mode !== "static" ? (e) => e.preventDefault() : void 0
47
+ }, `${day}-${slot.startTime}`);
48
+ }));
49
+ const isGroupStart = groupInfo?.position === "first" || groupInfo?.position === "only";
50
+ const groupCell = groupInfo !== void 0 ? groupInfo !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, {
51
+ ...getStyles("resourcesWeekViewGroupColumn"),
52
+ mod: {
53
+ "scrolled-x": scrolledX,
54
+ "group-position": groupInfo.position
55
+ },
56
+ children: isGroupStart && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
57
+ style: groupInfo.count > 1 ? { transform: `translateY(calc((${groupInfo.count - 1} * (var(--resources-week-view-row-height) + 1px)) / 2))` } : void 0,
58
+ children: renderGroupLabel ? renderGroupLabel(groupInfo.group) : groupInfo.group.label
59
+ })
60
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, {
61
+ ...getStyles("resourcesWeekViewGroupColumnEmpty"),
62
+ mod: { "scrolled-x": scrolledX }
63
+ }) : null;
64
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mantine_core.Box, {
65
+ ...getStyles("resourcesWeekViewRow"),
66
+ children: [
67
+ groupCell,
68
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mantine_core.Box, {
69
+ ...getStyles("resourcesWeekViewResourceLabel"),
70
+ mod: {
71
+ "scrolled-x": scrolledX,
72
+ "has-groups": groupInfo !== void 0
73
+ },
74
+ children: renderResourceLabel ? renderResourceLabel(resource) : resource.label
75
+ }),
76
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mantine_core.Box, {
77
+ ref: rowSlotsContainerRef,
78
+ ...getStyles("resourcesWeekViewRowSlots", { style: allDayCount ? { minHeight: `max(var(--resources-week-view-row-height), calc(${allDayCount} * (var(--resources-week-view-all-day-height) + 2px) + 4px))` } : void 0 }),
79
+ onDragOver: withEventsDragAndDrop && mode !== "static" ? (e) => onRowSlotsDragOver?.(e, resource.id, resourceIndex) : void 0,
80
+ onDragLeave: withEventsDragAndDrop && mode !== "static" ? onRowSlotsDragLeave : void 0,
81
+ onDrop: withEventsDragAndDrop && mode !== "static" ? (e) => onRowSlotsDrop?.(e, resource.id, resourceIndex) : void 0,
82
+ children: [children, items]
83
+ })
84
+ ]
85
+ });
86
+ }
87
+ //#endregion
88
+ exports.ResourcesWeekViewRow = ResourcesWeekViewRow;
89
+
90
+ //# sourceMappingURL=ResourcesWeekViewRow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourcesWeekViewRow.cjs","names":["UnstyledButton","getBusinessHoursMod","getLabel","Box"],"sources":["../../../src/components/ResourcesWeekView/ResourcesWeekViewRow.tsx"],"sourcesContent":["import { Box, GetStylesApi, UnstyledButton } from '@mantine/core';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport { ScheduleMode, ScheduleResourceData, ScheduleResourceGroup } from '../../types';\nimport {\n DayTimeInterval,\n getBusinessHoursMod,\n ResourceGroupInfo,\n ResourcesGridControlsRef,\n} from '../../utils';\nimport type { ResourcesWeekViewFactory } from './ResourcesWeekView';\n\nexport interface ResourcesWeekViewRowProps {\n resource: ScheduleResourceData;\n resourceIndex: number;\n weekdays: string[];\n slots: DayTimeInterval[];\n getStyles: GetStylesApi<ResourcesWeekViewFactory>;\n children?: React.ReactNode;\n labels?: ScheduleLabelsOverride;\n highlightBusinessHours?: boolean;\n businessHours?: [string, string];\n withEventsDragAndDrop?: boolean;\n onRowSlotsDragOver?: (\n e: React.DragEvent<HTMLDivElement>,\n resourceId: string | number,\n resourceIndex: number\n ) => void;\n onRowSlotsDragLeave?: () => void;\n onRowSlotsDrop?: (\n e: React.DragEvent<HTMLDivElement>,\n resourceId: string | number,\n resourceIndex: number\n ) => void;\n onSlotClick?: (\n resourceId: string | number,\n day: string,\n slotTime: string,\n event: React.MouseEvent<HTMLButtonElement>\n ) => void;\n dropTargetSlotIndex?: number;\n mode?: ScheduleMode;\n slotsRef?: ResourcesGridControlsRef;\n firstSlotIndex?: { resourceIndex: number; slotIndex: number };\n onSlotKeyDown?: (\n event: React.KeyboardEvent<HTMLButtonElement>,\n resourceIndex: number,\n slotIndex: number\n ) => void;\n withDragSlotSelect?: boolean;\n onSlotPointerDown?: (\n event: React.PointerEvent<HTMLButtonElement>,\n index: number,\n group: string\n ) => void;\n isSlotDragSelected?: (index: number, group: string) => boolean;\n rowSlotsContainerRef?: (node: HTMLDivElement | null) => void;\n renderResourceLabel?: (resource: ScheduleResourceData) => React.ReactNode;\n renderGroupLabel?: (group: ScheduleResourceGroup) => React.ReactNode;\n scrolledX?: boolean;\n groupInfo?: ResourceGroupInfo | null;\n allDayCount?: number;\n}\n\nexport function ResourcesWeekViewRow({\n resource,\n resourceIndex,\n weekdays,\n slots,\n getStyles,\n children,\n labels,\n highlightBusinessHours,\n businessHours,\n withEventsDragAndDrop,\n onRowSlotsDragOver,\n onRowSlotsDragLeave,\n onRowSlotsDrop,\n onSlotClick,\n dropTargetSlotIndex,\n mode,\n slotsRef,\n firstSlotIndex,\n onSlotKeyDown,\n withDragSlotSelect,\n onSlotPointerDown,\n isSlotDragSelected,\n rowSlotsContainerRef,\n renderResourceLabel,\n renderGroupLabel,\n scrolledX,\n groupInfo,\n allDayCount,\n}: ResourcesWeekViewRowProps) {\n const slotGroup = String(resource.id);\n\n const items = weekdays.flatMap((day, dayIndex) =>\n slots.map((slot, slotIndex) => {\n const flatIndex = dayIndex * slots.length + slotIndex;\n const isDropTarget = dropTargetSlotIndex === flatIndex;\n const isFirstSlot =\n firstSlotIndex?.resourceIndex === resourceIndex && firstSlotIndex?.slotIndex === flatIndex;\n const isDragSelected = isSlotDragSelected?.(flatIndex, slotGroup) || false;\n\n return (\n <UnstyledButton\n key={`${day}-${slot.startTime}`}\n ref={(node) => {\n if (!slotsRef?.current) {\n return;\n }\n if (!slotsRef.current[resourceIndex]) {\n slotsRef.current[resourceIndex] = [];\n }\n const row = slotsRef.current[resourceIndex];\n if (node) {\n row[flatIndex] = node;\n } else {\n delete row[flatIndex];\n while (row.length > 0 && row[row.length - 1] == null) {\n row.length -= 1;\n }\n }\n }}\n {...getStyles('resourcesWeekViewRowSlot')}\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 aria-label={`${getLabel('resourceSlot', labels)} ${resource.label} ${day} ${slot.startTime} - ${slot.endTime}`}\n tabIndex={mode === 'static' ? -1 : isFirstSlot ? 0 : -1}\n data-drag-slot-index={withDragSlotSelect && mode !== 'static' ? flatIndex : undefined}\n data-drag-slot-group={withDragSlotSelect && mode !== 'static' ? slotGroup : undefined}\n onKeyDown={(e) => {\n if (onSlotKeyDown) {\n onSlotKeyDown(e, resourceIndex, flatIndex);\n }\n }}\n onPointerDown={\n withDragSlotSelect && mode !== 'static'\n ? (e) => onSlotPointerDown?.(e, flatIndex, slotGroup)\n : undefined\n }\n onClick={\n mode === 'static' || !onSlotClick\n ? undefined\n : (e) => onSlotClick(resource.id, day, slot.startTime, e)\n }\n onDragOver={\n withEventsDragAndDrop && mode !== 'static' ? (e) => e.preventDefault() : undefined\n }\n />\n );\n })\n );\n\n const isGroupStart = groupInfo?.position === 'first' || groupInfo?.position === 'only';\n const groupCell =\n groupInfo !== undefined ? (\n groupInfo !== null ? (\n <Box\n {...getStyles('resourcesWeekViewGroupColumn')}\n mod={{ 'scrolled-x': scrolledX, 'group-position': groupInfo.position }}\n >\n {isGroupStart && (\n <span\n style={\n groupInfo.count > 1\n ? {\n transform: `translateY(calc((${groupInfo.count - 1} * (var(--resources-week-view-row-height) + 1px)) / 2))`,\n }\n : undefined\n }\n >\n {renderGroupLabel ? renderGroupLabel(groupInfo.group) : groupInfo.group.label}\n </span>\n )}\n </Box>\n ) : (\n <Box\n {...getStyles('resourcesWeekViewGroupColumnEmpty')}\n mod={{ 'scrolled-x': scrolledX }}\n />\n )\n ) : null;\n\n return (\n <Box {...getStyles('resourcesWeekViewRow')}>\n {groupCell}\n <Box\n {...getStyles('resourcesWeekViewResourceLabel')}\n mod={{ 'scrolled-x': scrolledX, 'has-groups': groupInfo !== undefined }}\n >\n {renderResourceLabel ? renderResourceLabel(resource) : resource.label}\n </Box>\n <Box\n ref={rowSlotsContainerRef}\n {...getStyles('resourcesWeekViewRowSlots', {\n style: allDayCount\n ? {\n minHeight: `max(var(--resources-week-view-row-height), calc(${allDayCount} * (var(--resources-week-view-all-day-height) + 2px) + 4px))`,\n }\n : undefined,\n })}\n onDragOver={\n withEventsDragAndDrop && mode !== 'static'\n ? (e) => onRowSlotsDragOver?.(e, resource.id, resourceIndex)\n : undefined\n }\n onDragLeave={withEventsDragAndDrop && mode !== 'static' ? onRowSlotsDragLeave : undefined}\n onDrop={\n withEventsDragAndDrop && mode !== 'static'\n ? (e) => onRowSlotsDrop?.(e, resource.id, resourceIndex)\n : undefined\n }\n >\n {children}\n {items}\n </Box>\n </Box>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ "use client";
2
+ const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
3
+ const require_is_multiday_event = require("../../../utils/is-multiday-event/is-multiday-event.cjs");
4
+ const require_expand_recurring_events = require("../../../utils/expand-recurring-events/expand-recurring-events.cjs");
5
+ const require_calculate_event_days = require("../../WeekView/get-week-view-events/calculate-event-days.cjs");
6
+ const require_get_event_end_date = require("../../WeekView/get-week-view-events/get-event-end-date.cjs");
7
+ const require_get_resources_day_view_events = require("../../ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.cjs");
8
+ let dayjs = require("dayjs");
9
+ dayjs = require_runtime.__toESM(dayjs);
10
+ //#region packages/@mantine/schedule/src/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.ts
11
+ /** Assigns each bar the lowest row whose previously placed bars all end before this bar starts,
12
+ * so bars overlapping in days are stacked on separate rows (mutates `bar.row`). */
13
+ function assignAllDayRows(bars) {
14
+ const order = bars.map((bar, index) => ({
15
+ bar,
16
+ index
17
+ })).sort((a, b) => a.bar.startDayIndex - b.bar.startDayIndex || a.bar.endDayIndex - b.bar.endDayIndex || a.index - b.index);
18
+ const rowEnds = [];
19
+ for (const { bar } of order) {
20
+ let row = 0;
21
+ while (row < rowEnds.length && rowEnds[row] >= bar.startDayIndex) row += 1;
22
+ rowEnds[row] = bar.endDayIndex;
23
+ bar.row = row;
24
+ }
25
+ }
26
+ function getResourcesWeekViewEvents({ events, resources, weekdays, startTime, endTime, expansionLimit }) {
27
+ const expandedEvents = require_expand_recurring_events.expandRecurringEvents({
28
+ events,
29
+ rangeStart: (0, dayjs.default)(weekdays[0]).startOf("day").toDate(),
30
+ rangeEnd: (0, dayjs.default)(weekdays[weekdays.length - 1]).endOf("day").toDate(),
31
+ expansionLimit
32
+ });
33
+ if (expandedEvents) {
34
+ const seenIds = /* @__PURE__ */ new Set();
35
+ for (const event of expandedEvents) {
36
+ if (seenIds.has(event.id)) throw new Error(`[@mantine/schedule] ResourcesWeekView: Duplicated event ids found: ${event.id}`);
37
+ seenIds.add(event.id);
38
+ }
39
+ }
40
+ const byDay = {};
41
+ const assignedIds = /* @__PURE__ */ new Set();
42
+ const isSpanningRegularEvent = (event) => event.display !== "background" && require_is_multiday_event.isMultidayEvent(event);
43
+ for (const day of weekdays) {
44
+ const dayEvents = expandedEvents?.filter((event) => {
45
+ if (assignedIds.has(event.id) || isSpanningRegularEvent(event)) return false;
46
+ const eventStart = (0, dayjs.default)(event.start);
47
+ const dayStart = (0, dayjs.default)(day).startOf("day");
48
+ if (eventStart.isSame(dayStart, "day")) {
49
+ assignedIds.add(event.id);
50
+ return true;
51
+ }
52
+ if (event.display === "background" && eventStart.isBefore((0, dayjs.default)(day).endOf("day")) && (0, dayjs.default)(event.end).isAfter(dayStart)) return true;
53
+ return false;
54
+ });
55
+ byDay[day] = require_get_resources_day_view_events.getResourcesDayViewEvents({
56
+ events: dayEvents,
57
+ resources,
58
+ date: day,
59
+ startTime,
60
+ endTime
61
+ });
62
+ }
63
+ const allDayBars = {};
64
+ for (const resource of resources) allDayBars[resource.id] = [];
65
+ weekdays.forEach((day, dayIndex) => {
66
+ for (const resource of resources) for (const positioned of byDay[day].allDayEvents[resource.id] ?? []) allDayBars[resource.id].push({
67
+ event: positioned,
68
+ startDayIndex: dayIndex,
69
+ endDayIndex: dayIndex,
70
+ row: 0
71
+ });
72
+ });
73
+ if (expandedEvents) for (const event of expandedEvents) {
74
+ if (!isSpanningRegularEvent(event) || event.resourceId === void 0 || !(event.resourceId in allDayBars)) continue;
75
+ const eventWeekDays = require_calculate_event_days.calculateEventDays({
76
+ event,
77
+ weekDays: weekdays,
78
+ actualEndDate: require_get_event_end_date.getEventEndDate(event)
79
+ });
80
+ if (eventWeekDays.length === 0) continue;
81
+ allDayBars[event.resourceId].push({
82
+ event,
83
+ startDayIndex: weekdays.indexOf(eventWeekDays[0]),
84
+ endDayIndex: weekdays.indexOf(eventWeekDays[eventWeekDays.length - 1]),
85
+ row: 0
86
+ });
87
+ }
88
+ for (const resource of resources) assignAllDayRows(allDayBars[resource.id]);
89
+ return {
90
+ byDay,
91
+ allDayBars
92
+ };
93
+ }
94
+ //#endregion
95
+ exports.getResourcesWeekViewEvents = getResourcesWeekViewEvents;
96
+
97
+ //# sourceMappingURL=get-resources-week-view-events.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-resources-week-view-events.cjs","names":["expandRecurringEvents","isMultidayEvent","getResourcesDayViewEvents","calculateEventDays","getEventEndDate"],"sources":["../../../../src/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData, ScheduleResourceData } from '../../../types';\nimport { expandRecurringEvents, isMultidayEvent } from '../../../utils';\nimport {\n getResourcesDayViewEvents,\n ResourcesDayViewEventsResult,\n} from '../../ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events';\nimport { calculateEventDays } from '../../WeekView/get-week-view-events/calculate-event-days';\nimport { getEventEndDate } from '../../WeekView/get-week-view-events/get-event-end-date';\n\n/** A single all-day bar (single-day all-day event or a multi-day event) spanning one or more\n * consecutive visible weekdays, placed on a shared row so overlapping bars do not collide. */\nexport interface ResourcesWeekViewAllDayBar {\n /** The original event, with its declared start/end preserved for display and interaction */\n event: ScheduleEventData;\n /** Index of the first visible weekday the bar covers */\n startDayIndex: number;\n /** Index of the last visible weekday the bar covers */\n endDayIndex: number;\n /** Row within the all-day band, assigned so overlapping bars stack instead of overlapping */\n row: number;\n}\n\nexport interface ResourcesWeekViewEventsResult {\n byDay: Record<string, ResourcesDayViewEventsResult>;\n /** All-day bars per resource, each spanning the days it covers as a single continuous bar */\n allDayBars: Record<string | number, ResourcesWeekViewAllDayBar[]>;\n}\n\n/** Assigns each bar the lowest row whose previously placed bars all end before this bar starts,\n * so bars overlapping in days are stacked on separate rows (mutates `bar.row`). */\nfunction assignAllDayRows(bars: ResourcesWeekViewAllDayBar[]): void {\n const order = bars\n .map((bar, index) => ({ bar, index }))\n .sort(\n (a, b) =>\n a.bar.startDayIndex - b.bar.startDayIndex ||\n a.bar.endDayIndex - b.bar.endDayIndex ||\n a.index - b.index\n );\n\n const rowEnds: number[] = [];\n for (const { bar } of order) {\n let row = 0;\n while (row < rowEnds.length && rowEnds[row] >= bar.startDayIndex) {\n row += 1;\n }\n rowEnds[row] = bar.endDayIndex;\n bar.row = row;\n }\n}\n\ninterface GetResourcesWeekViewEventsInput {\n events: ScheduleEventData[] | undefined;\n resources: ScheduleResourceData[];\n weekdays: string[];\n startTime?: string;\n endTime?: string;\n expansionLimit?: number;\n}\n\nexport function getResourcesWeekViewEvents({\n events,\n resources,\n weekdays,\n startTime,\n endTime,\n expansionLimit,\n}: GetResourcesWeekViewEventsInput): ResourcesWeekViewEventsResult {\n const rangeStart = dayjs(weekdays[0]).startOf('day').toDate();\n const rangeEnd = dayjs(weekdays[weekdays.length - 1])\n .endOf('day')\n .toDate();\n\n const expandedEvents = expandRecurringEvents({\n events,\n rangeStart,\n rangeEnd,\n expansionLimit,\n });\n\n if (expandedEvents) {\n const seenIds = new Set<string | number>();\n for (const event of expandedEvents) {\n if (seenIds.has(event.id)) {\n throw new Error(\n `[@mantine/schedule] ResourcesWeekView: Duplicated event ids found: ${event.id}`\n );\n }\n seenIds.add(event.id);\n }\n }\n\n const byDay: Record<string, ResourcesDayViewEventsResult> = {};\n\n const assignedIds = new Set<string | number>();\n\n // Multi-day regular events are rendered as a single all-day bar spanning the days they cover\n // (matching the base WeekView, which treats any multi-day event as all-day), so they are excluded\n // from the per-day timed flow and collected as spanning bars below.\n const isSpanningRegularEvent = (event: ScheduleEventData) =>\n event.display !== 'background' && isMultidayEvent(event);\n\n for (const day of weekdays) {\n const dayEvents = expandedEvents?.filter((event) => {\n if (assignedIds.has(event.id) || isSpanningRegularEvent(event)) {\n return false;\n }\n\n const eventStart = dayjs(event.start);\n const dayStart = dayjs(day).startOf('day');\n\n if (eventStart.isSame(dayStart, 'day')) {\n assignedIds.add(event.id);\n return true;\n }\n\n if (\n event.display === 'background' &&\n eventStart.isBefore(dayjs(day).endOf('day')) &&\n dayjs(event.end).isAfter(dayStart)\n ) {\n return true;\n }\n\n return false;\n });\n\n byDay[day] = getResourcesDayViewEvents({\n events: dayEvents,\n resources,\n date: day,\n startTime,\n endTime,\n });\n }\n\n const allDayBars: Record<string | number, ResourcesWeekViewAllDayBar[]> = {};\n for (const resource of resources) {\n allDayBars[resource.id] = [];\n }\n\n // Single-day all-day events keep the per-day classification done by getResourcesDayViewEvents and\n // become single-day bars.\n weekdays.forEach((day, dayIndex) => {\n for (const resource of resources) {\n for (const positioned of byDay[day].allDayEvents[resource.id] ?? []) {\n allDayBars[resource.id].push({\n event: positioned,\n startDayIndex: dayIndex,\n endDayIndex: dayIndex,\n row: 0,\n });\n }\n }\n });\n\n // Multi-day regular events become a single bar spanning the visible days they cover.\n if (expandedEvents) {\n for (const event of expandedEvents) {\n if (\n !isSpanningRegularEvent(event) ||\n event.resourceId === undefined ||\n !(event.resourceId in allDayBars)\n ) {\n continue;\n }\n\n const actualEndDate = getEventEndDate(event);\n const eventWeekDays = calculateEventDays({ event, weekDays: weekdays, actualEndDate });\n if (eventWeekDays.length === 0) {\n continue;\n }\n\n allDayBars[event.resourceId].push({\n event,\n startDayIndex: weekdays.indexOf(eventWeekDays[0]),\n endDayIndex: weekdays.indexOf(eventWeekDays[eventWeekDays.length - 1]),\n row: 0,\n });\n }\n }\n\n for (const resource of resources) {\n assignAllDayRows(allDayBars[resource.id]);\n }\n\n return { byDay, allDayBars };\n}\n"],"mappings":";;;;;;;;;;;;AA+BA,SAAS,iBAAiB,MAA0C;CAClE,MAAM,QAAQ,KACX,KAAK,KAAK,WAAW;EAAE;EAAK;CAAM,EAAE,CAAC,CACrC,MACE,GAAG,MACF,EAAE,IAAI,gBAAgB,EAAE,IAAI,iBAC5B,EAAE,IAAI,cAAc,EAAE,IAAI,eAC1B,EAAE,QAAQ,EAAE,KAChB;CAEF,MAAM,UAAoB,CAAC;CAC3B,KAAK,MAAM,EAAE,SAAS,OAAO;EAC3B,IAAI,MAAM;EACV,OAAO,MAAM,QAAQ,UAAU,QAAQ,QAAQ,IAAI,eACjD,OAAO;EAET,QAAQ,OAAO,IAAI;EACnB,IAAI,MAAM;CACZ;AACF;AAWA,SAAgB,2BAA2B,EACzC,QACA,WACA,UACA,WACA,SACA,kBACiE;CAMjE,MAAM,iBAAiBA,gCAAAA,sBAAsB;EAC3C;EACA,aAAA,GAAA,MAAA,QAAA,CAPuB,SAAS,EAAE,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,OAO1C;EACT,WAAA,GAAA,MAAA,QAAA,CAPqB,SAAS,SAAS,SAAS,EAAE,CAAC,CAClD,MAAM,KAAK,CAAC,CACZ,OAKM;EACP;CACF,CAAC;CAED,IAAI,gBAAgB;EAClB,MAAM,0BAAU,IAAI,IAAqB;EACzC,KAAK,MAAM,SAAS,gBAAgB;GAClC,IAAI,QAAQ,IAAI,MAAM,EAAE,GACtB,MAAM,IAAI,MACR,sEAAsE,MAAM,IAC9E;GAEF,QAAQ,IAAI,MAAM,EAAE;EACtB;CACF;CAEA,MAAM,QAAsD,CAAC;CAE7D,MAAM,8BAAc,IAAI,IAAqB;CAK7C,MAAM,0BAA0B,UAC9B,MAAM,YAAY,gBAAgBC,0BAAAA,gBAAgB,KAAK;CAEzD,KAAK,MAAM,OAAO,UAAU;EAC1B,MAAM,YAAY,gBAAgB,QAAQ,UAAU;GAClD,IAAI,YAAY,IAAI,MAAM,EAAE,KAAK,uBAAuB,KAAK,GAC3D,OAAO;GAGT,MAAM,cAAA,GAAA,MAAA,QAAA,CAAmB,MAAM,KAAK;GACpC,MAAM,YAAA,GAAA,MAAA,QAAA,CAAiB,GAAG,CAAC,CAAC,QAAQ,KAAK;GAEzC,IAAI,WAAW,OAAO,UAAU,KAAK,GAAG;IACtC,YAAY,IAAI,MAAM,EAAE;IACxB,OAAO;GACT;GAEA,IACE,MAAM,YAAY,gBAClB,WAAW,UAAA,GAAA,MAAA,QAAA,CAAe,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,MAAA,GAAA,MAAA,QAAA,CACrC,MAAM,GAAG,CAAC,CAAC,QAAQ,QAAQ,GAEjC,OAAO;GAGT,OAAO;EACT,CAAC;EAED,MAAM,OAAOC,sCAAAA,0BAA0B;GACrC,QAAQ;GACR;GACA,MAAM;GACN;GACA;EACF,CAAC;CACH;CAEA,MAAM,aAAoE,CAAC;CAC3E,KAAK,MAAM,YAAY,WACrB,WAAW,SAAS,MAAM,CAAC;CAK7B,SAAS,SAAS,KAAK,aAAa;EAClC,KAAK,MAAM,YAAY,WACrB,KAAK,MAAM,cAAc,MAAM,IAAI,CAAC,aAAa,SAAS,OAAO,CAAC,GAChE,WAAW,SAAS,GAAG,CAAC,KAAK;GAC3B,OAAO;GACP,eAAe;GACf,aAAa;GACb,KAAK;EACP,CAAC;CAGP,CAAC;CAGD,IAAI,gBACF,KAAK,MAAM,SAAS,gBAAgB;EAClC,IACE,CAAC,uBAAuB,KAAK,KAC7B,MAAM,eAAe,KAAA,KACrB,EAAE,MAAM,cAAc,aAEtB;EAIF,MAAM,gBAAgBC,6BAAAA,mBAAmB;GAAE;GAAO,UAAU;GAAU,eADhDC,2BAAAA,gBAAgB,KAC4C;EAAE,CAAC;EACrF,IAAI,cAAc,WAAW,GAC3B;EAGF,WAAW,MAAM,WAAW,CAAC,KAAK;GAChC;GACA,eAAe,SAAS,QAAQ,cAAc,EAAE;GAChD,aAAa,SAAS,QAAQ,cAAc,cAAc,SAAS,EAAE;GACrE,KAAK;EACP,CAAC;CACH;CAGF,KAAK,MAAM,YAAY,WACrB,iBAAiB,WAAW,SAAS,GAAG;CAG1C,OAAO;EAAE;EAAO;CAAW;AAC7B"}
@@ -16,7 +16,7 @@ const defaultProps = {
16
16
  };
17
17
  const Schedule = (0, _mantine_core.factory)((_props) => {
18
18
  const props = (0, _mantine_core.useProps)("Schedule", defaultProps, _props);
19
- const { classNames, className, style, styles, unstyled, vars, date, defaultDate, onDateChange, view, defaultView, onViewChange, events, locale, radius, labels, renderEventBody, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onDayClick, onEventClick, withDragSlotSelect, onSlotDragEnd, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, recurrenceExpansionLimit, mode, layout, dayViewProps, weekViewProps, monthViewProps, yearViewProps, mobileMonthViewProps, __staticSelector, mod, ...others } = props;
19
+ const { classNames, className, style, styles, unstyled, vars, date, defaultDate, onDateChange, view, defaultView, onViewChange, events, locale, radius, labels, renderEventBody, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onDayClick, onEventClick, withDragSlotSelect, onSlotDragEnd, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, recurrenceExpansionLimit, mode, layout, dayViewProps, weekViewProps, monthViewProps, yearViewProps, mobileMonthViewProps, withAgenda, __staticSelector, mod, ...others } = props;
20
20
  const getStyles = (0, _mantine_core.useStyles)({
21
21
  name: __staticSelector || "Schedule",
22
22
  classes: require_Schedule_module.default,
@@ -75,7 +75,8 @@ const Schedule = (0, _mantine_core.factory)((_props) => {
75
75
  onEventResize,
76
76
  canResizeEvent,
77
77
  recurrenceExpansionLimit,
78
- mode
78
+ mode,
79
+ withAgenda
79
80
  };
80
81
  const desktopContent = (() => {
81
82
  switch (_view) {
@@ -1 +1 @@
1
- {"version":3,"file":"Schedule.cjs","names":["DayView","WeekView","MonthView","YearView","MobileMonthView","Box","classes"],"sources":["../../../src/components/Schedule/Schedule.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateStringValue,\n DateTimeStringValue,\n ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport { DayView, DayViewProps, DayViewStylesNames } from '../DayView/DayView';\nimport {\n MobileMonthView,\n MobileMonthViewProps,\n MobileMonthViewStylesNames,\n} from '../MobileMonthView/MobileMonthView';\nimport { MonthView, MonthViewProps, MonthViewStylesNames } from '../MonthView/MonthView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport { WeekView, WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView';\nimport { YearView, YearViewProps, YearViewStylesNames } from '../YearView/YearView';\nimport classes from './Schedule.module.css';\n\nexport type ScheduleStylesNames =\n | 'root'\n | 'desktopView'\n | 'mobileView'\n | DayViewStylesNames\n | WeekViewStylesNames\n | MonthViewStylesNames\n | YearViewStylesNames\n | MobileMonthViewStylesNames;\n\nexport type ScheduleLayout = 'default' | 'responsive';\n\ntype ScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onAllDaySlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'onMonthClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'recurrenceExpansionLimit';\n\ntype ScheduleViewProps<T> = Partial<Omit<T, ScheduleCommonProps>>;\n\nexport interface ScheduleProps\n extends BoxProps, StylesApiProps<ScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Current date to display (controlled) */\n date?: Date | DateStringValue;\n\n /** Default date (uncontrolled) */\n defaultDate?: Date | DateStringValue;\n\n /** Called when date changes via navigation */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Current view level (controlled) */\n view?: ScheduleViewLevel;\n\n /** Default view level (uncontrolled) */\n defaultView?: ScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting (overrides `DatesProvider`) */\n locale?: string;\n\n /** Key of theme.radius or any valid CSS value to set border-radius */\n radius?: MantineRadius;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Custom event body renderer */\n renderEventBody?: RenderEventBody;\n\n /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\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 in DayView/WeekView */\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 in DayView/WeekView */\n onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called when a day is clicked in MonthView and YearView */\n onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a slot range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Called when event is clicked in any view */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Interaction mode:\n * - `'default'` allows all interactions\n * - `'static'` disables event interactions\n * @default 'default' */\n mode?: ScheduleMode;\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 /** Layout mode:\n * - `'default'` uses same views on all screen sizes\n * - `'responsive'` switches to YearView/MobileMonthView on small screens\n * @default 'default' */\n layout?: ScheduleLayout;\n\n /** Props specific to DayView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n dayViewProps?: ScheduleViewProps<DayViewProps>;\n\n /** Props specific to WeekView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n weekViewProps?: ScheduleViewProps<WeekViewProps>;\n\n /** Props specific to MonthView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n monthViewProps?: ScheduleViewProps<MonthViewProps>;\n\n /** Props specific to YearView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n yearViewProps?: ScheduleViewProps<YearViewProps>;\n\n /** Props specific to MobileMonthView (used in responsive layout) */\n mobileMonthViewProps?: ScheduleViewProps<MobileMonthViewProps>;\n}\n\nexport type ScheduleFactory = Factory<{\n props: ScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ScheduleProps> = {\n defaultView: 'week',\n mode: 'default',\n layout: 'default',\n};\n\nexport const Schedule = factory<ScheduleFactory>((_props) => {\n const props = useProps('Schedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n layout,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n yearViewProps,\n mobileMonthViewProps,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ScheduleFactory>({\n name: __staticSelector || 'Schedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ScheduleViewLevel>({\n value: view,\n defaultValue: defaultView,\n onChange: onViewChange,\n });\n\n const [_date, _setDate] = useUncontrolled<Date | DateStringValue>({\n value: date,\n defaultValue: defaultDate ?? new Date(),\n });\n\n const handleDateChange = (newDate: DateStringValue) => {\n _setDate(newDate);\n onDateChange?.(newDate);\n };\n\n const handleViewChange = (newView: ScheduleViewLevel) => {\n _setView(newView);\n onViewChange?.(newView);\n };\n\n const handleMonthClick = (monthDate: DateStringValue) => {\n handleDateChange(monthDate);\n handleViewChange('month');\n };\n\n const commonProps = {\n date: _date,\n onDateChange: handleDateChange,\n view: _view,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize: mode === 'static' ? false : withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n };\n\n const desktopContent = (() => {\n switch (_view) {\n case 'day':\n return <DayView {...commonProps} {...dayViewProps} />;\n case 'week':\n return <WeekView {...commonProps} {...weekViewProps} />;\n case 'month':\n return <MonthView {...commonProps} {...monthViewProps} />;\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n const mobileContent = (() => {\n switch (_view) {\n case 'day':\n case 'week':\n case 'month':\n return (\n <MobileMonthView\n date={_date}\n onDateChange={handleDateChange}\n events={events}\n locale={locale}\n radius={radius}\n labels={labels}\n mode={mode}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n onYearClick={() => handleViewChange('year')}\n onEventClick={onEventClick}\n {...mobileMonthViewProps}\n />\n );\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n if (layout === 'responsive') {\n return (\n <Box {...getStyles('root')} mod={[{ layout }, mod]} {...others}>\n <Box {...getStyles('desktopView')}>{desktopContent}</Box>\n <Box {...getStyles('mobileView')}>{mobileContent}</Box>\n </Box>\n );\n }\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {desktopContent}\n </Box>\n );\n});\n\nSchedule.displayName = '@mantine/schedule/Schedule';\nSchedule.classes = classes;\n\nexport namespace Schedule {\n export type Props = ScheduleProps;\n export type StylesNames = ScheduleStylesNames;\n export type Factory = ScheduleFactory;\n export type Layout = ScheduleLayout;\n}\n"],"mappings":";;;;;;;;;;;AAgNA,MAAM,eAAuC;CAC3C,aAAa;CACb,MAAM;CACN,QAAQ;AACV;AAEA,MAAa,YAAA,GAAA,cAAA,UAAqC,WAAW;CAC3D,MAAM,SAAA,GAAA,cAAA,UAAiB,YAAY,cAAc,MAAM;CACvD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,MACA,aACA,cACA,MACA,aACA,cACA,QACA,QACA,QACA,QACA,iBACA,uBACA,aACA,cACA,kBACA,gBACA,iBACA,mBACA,YACA,cACA,oBACA,eACA,qBACA,iBACA,eACA,gBACA,0BACA,MACA,QACA,cACA,eACA,gBACA,eACA,sBACA,kBACA,KACA,GAAG,WACD;CAEJ,MAAM,aAAA,GAAA,cAAA,WAAuC;EAC3C,MAAM,oBAAoB;EAC1B,SAAA,wBAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAA,eAAA,iBAA+C;EAC3D,OAAO;EACP,cAAc;EACd,UAAU;CACZ,CAAC;CAED,MAAM,CAAC,OAAO,aAAA,GAAA,eAAA,iBAAoD;EAChE,OAAO;EACP,cAAc,+BAAe,IAAI,KAAK;CACxC,CAAC;CAED,MAAM,oBAAoB,YAA6B;EACrD,SAAS,OAAO;EAChB,eAAe,OAAO;CACxB;CAEA,MAAM,oBAAoB,YAA+B;EACvD,SAAS,OAAO;EAChB,eAAe,OAAO;CACxB;CAEA,MAAM,oBAAoB,cAA+B;EACvD,iBAAiB,SAAS;EAC1B,iBAAiB,OAAO;CAC1B;CAEA,MAAM,cAAc;EAClB,MAAM;EACN,cAAc;EACd,MAAM;EACN,cAAc;EACd;EACA;EACA;EACA;EACA;EACA,uBAAuB,SAAS,WAAW,QAAQ;EACnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB,SAAS,WAAW,QAAQ;EAC7C;EACA;EACA;EACA;CACF;CAEA,MAAM,wBAAwB;EAC5B,QAAQ,OAAR;GACE,KAAK,OACH,OAAO,iBAAA,GAAA,kBAAA,KAACA,gBAAAA,SAAD;IAAS,GAAI;IAAa,GAAI;GAAe,CAAA;GACtD,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,KAACC,iBAAAA,UAAD;IAAU,GAAI;IAAa,GAAI;GAAgB,CAAA;GACxD,KAAK,SACH,OAAO,iBAAA,GAAA,kBAAA,KAACC,kBAAAA,WAAD;IAAW,GAAI;IAAa,GAAI;GAAiB,CAAA;GAC1D,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,KAACC,iBAAAA,UAAD;IAAU,GAAI;IAAa,cAAc;IAAkB,GAAI;GAAgB,CAAA;GACxF,SACE,OAAO;EACX;CACF,GAAG;CAEH,MAAM,uBAAuB;EAC3B,QAAQ,OAAR;GACE,KAAK;GACL,KAAK;GACL,KAAK,SACH,OACE,iBAAA,GAAA,kBAAA,KAACC,wBAAAA,iBAAD;IACE,MAAM;IACN,cAAc;IACN;IACA;IACA;IACA;IACF;IACoB;IAC1B,mBAAmB,iBAAiB,MAAM;IAC5B;IACd,GAAI;GACL,CAAA;GAEL,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,KAACD,iBAAAA,UAAD;IAAU,GAAI;IAAa,cAAc;IAAkB,GAAI;GAAgB,CAAA;GACxF,SACE,OAAO;EACX;CACF,GAAG;CAEH,IAAI,WAAW,cACb,OACE,iBAAA,GAAA,kBAAA,MAACE,cAAAA,KAAD;EAAK,GAAI,UAAU,MAAM;EAAG,KAAK,CAAC,EAAE,OAAO,GAAG,GAAG;EAAG,GAAI;YAAxD,CACE,iBAAA,GAAA,kBAAA,KAACA,cAAAA,KAAD;GAAK,GAAI,UAAU,aAAa;aAAI;EAAoB,CAAA,GACxD,iBAAA,GAAA,kBAAA,KAACA,cAAAA,KAAD;GAAK,GAAI,UAAU,YAAY;aAAI;EAAmB,CAAA,CACnD;;CAIT,OACE,iBAAA,GAAA,kBAAA,KAACA,cAAAA,KAAD;EAAK,GAAI,UAAU,MAAM;EAAQ;EAAK,GAAI;YACvC;CACE,CAAA;AAET,CAAC;AAED,SAAS,cAAc;AACvB,SAAS,UAAUC,wBAAAA"}
1
+ {"version":3,"file":"Schedule.cjs","names":["DayView","WeekView","MonthView","YearView","MobileMonthView","Box","classes"],"sources":["../../../src/components/Schedule/Schedule.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { useUncontrolled } from '@mantine/hooks';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n DateStringValue,\n DateTimeStringValue,\n ScheduleEventData,\n ScheduleMode,\n ScheduleViewLevel,\n} from '../../types';\nimport { DayView, DayViewProps, DayViewStylesNames } from '../DayView/DayView';\nimport {\n MobileMonthView,\n MobileMonthViewProps,\n MobileMonthViewStylesNames,\n} from '../MobileMonthView/MobileMonthView';\nimport { MonthView, MonthViewProps, MonthViewStylesNames } from '../MonthView/MonthView';\nimport { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';\nimport { WeekView, WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView';\nimport { YearView, YearViewProps, YearViewStylesNames } from '../YearView/YearView';\nimport classes from './Schedule.module.css';\n\nexport type ScheduleStylesNames =\n | 'root'\n | 'desktopView'\n | 'mobileView'\n | DayViewStylesNames\n | WeekViewStylesNames\n | MonthViewStylesNames\n | YearViewStylesNames\n | MobileMonthViewStylesNames;\n\nexport type ScheduleLayout = 'default' | 'responsive';\n\ntype ScheduleCommonProps =\n | 'date'\n | 'onDateChange'\n | 'events'\n | 'locale'\n | 'radius'\n | 'labels'\n | 'renderEventBody'\n | 'withEventsDragAndDrop'\n | 'onEventDrop'\n | 'canDragEvent'\n | 'onEventDragStart'\n | 'onEventDragEnd'\n | 'onTimeSlotClick'\n | 'onAllDaySlotClick'\n | 'onEventClick'\n | 'onDayClick'\n | 'onMonthClick'\n | 'withDragSlotSelect'\n | 'onSlotDragEnd'\n | 'view'\n | 'onViewChange'\n | 'mode'\n | 'withAgenda'\n | 'onExternalEventDrop'\n | 'withEventResize'\n | 'onEventResize'\n | 'canResizeEvent'\n | 'recurrenceExpansionLimit';\n\ntype ScheduleViewProps<T> = Partial<Omit<T, ScheduleCommonProps>>;\n\nexport interface ScheduleProps\n extends BoxProps, StylesApiProps<ScheduleFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Current date to display (controlled) */\n date?: Date | DateStringValue;\n\n /** Default date (uncontrolled) */\n defaultDate?: Date | DateStringValue;\n\n /** Called when date changes via navigation */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Current view level (controlled) */\n view?: ScheduleViewLevel;\n\n /** Default view level (uncontrolled) */\n defaultView?: ScheduleViewLevel;\n\n /** Called when view level changes */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Events to display across all views */\n events?: ScheduleEventData[];\n\n /** Locale for date formatting (overrides `DatesProvider`) */\n locale?: string;\n\n /** Key of theme.radius or any valid CSS value to set border-radius */\n radius?: MantineRadius;\n\n /** Labels override for i18n */\n labels?: ScheduleLabelsOverride;\n\n /** Custom event body renderer */\n renderEventBody?: RenderEventBody;\n\n /** Enable drag and drop for events @default false */\n withEventsDragAndDrop?: boolean;\n\n /** Called when event is dropped */\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 in DayView/WeekView */\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 in DayView/WeekView */\n onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Called when a day is clicked in MonthView and YearView */\n onDayClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** If set, enables drag-to-select slot ranges @default false */\n withDragSlotSelect?: boolean;\n\n /** Called when a slot range is selected by dragging */\n onSlotDragEnd?: (rangeStart: DateTimeStringValue, rangeEnd: DateTimeStringValue) => void;\n\n /** Called when event is clicked in any view */\n onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /** Interaction mode:\n * - `'default'` allows all interactions\n * - `'static'` disables event interactions\n * @default 'default' */\n mode?: ScheduleMode;\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 /** Layout mode:\n * - `'default'` uses same views on all screen sizes\n * - `'responsive'` switches to YearView/MobileMonthView on small screens\n * @default 'default' */\n layout?: ScheduleLayout;\n\n /** Props specific to DayView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n dayViewProps?: ScheduleViewProps<DayViewProps>;\n\n /** Props specific to WeekView (includes `startTime`, `endTime`, `intervalMinutes`, etc.) */\n weekViewProps?: ScheduleViewProps<WeekViewProps>;\n\n /** Props specific to MonthView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n monthViewProps?: ScheduleViewProps<MonthViewProps>;\n\n /** Props specific to YearView (includes `firstDayOfWeek`, `weekendDays`, etc.) */\n yearViewProps?: ScheduleViewProps<YearViewProps>;\n\n /** Props specific to MobileMonthView (used in responsive layout) */\n mobileMonthViewProps?: ScheduleViewProps<MobileMonthViewProps>;\n\n /** If set, displays an Agenda button in the header of DayView, WeekView and MonthView @default false */\n withAgenda?: boolean;\n}\n\nexport type ScheduleFactory = Factory<{\n props: ScheduleProps;\n ref: HTMLDivElement;\n stylesNames: ScheduleStylesNames;\n}>;\n\nconst defaultProps: Partial<ScheduleProps> = {\n defaultView: 'week',\n mode: 'default',\n layout: 'default',\n};\n\nexport const Schedule = factory<ScheduleFactory>((_props) => {\n const props = useProps('Schedule', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n date,\n defaultDate,\n onDateChange,\n view,\n defaultView,\n onViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n layout,\n dayViewProps,\n weekViewProps,\n monthViewProps,\n yearViewProps,\n mobileMonthViewProps,\n withAgenda,\n __staticSelector,\n mod,\n ...others\n } = props;\n\n const getStyles = useStyles<ScheduleFactory>({\n name: __staticSelector || 'Schedule',\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n vars,\n });\n\n const [_view, _setView] = useUncontrolled<ScheduleViewLevel>({\n value: view,\n defaultValue: defaultView,\n onChange: onViewChange,\n });\n\n const [_date, _setDate] = useUncontrolled<Date | DateStringValue>({\n value: date,\n defaultValue: defaultDate ?? new Date(),\n });\n\n const handleDateChange = (newDate: DateStringValue) => {\n _setDate(newDate);\n onDateChange?.(newDate);\n };\n\n const handleViewChange = (newView: ScheduleViewLevel) => {\n _setView(newView);\n onViewChange?.(newView);\n };\n\n const handleMonthClick = (monthDate: DateStringValue) => {\n handleDateChange(monthDate);\n handleViewChange('month');\n };\n\n const commonProps = {\n date: _date,\n onDateChange: handleDateChange,\n view: _view,\n onViewChange: handleViewChange,\n events,\n locale,\n radius,\n labels,\n renderEventBody,\n withEventsDragAndDrop: mode === 'static' ? false : withEventsDragAndDrop,\n onEventDrop,\n canDragEvent,\n onEventDragStart,\n onEventDragEnd,\n onTimeSlotClick,\n onAllDaySlotClick,\n onDayClick,\n onEventClick,\n withDragSlotSelect,\n onSlotDragEnd,\n onExternalEventDrop,\n withEventResize: mode === 'static' ? false : withEventResize,\n onEventResize,\n canResizeEvent,\n recurrenceExpansionLimit,\n mode,\n withAgenda,\n };\n\n const desktopContent = (() => {\n switch (_view) {\n case 'day':\n return <DayView {...commonProps} {...dayViewProps} />;\n case 'week':\n return <WeekView {...commonProps} {...weekViewProps} />;\n case 'month':\n return <MonthView {...commonProps} {...monthViewProps} />;\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n const mobileContent = (() => {\n switch (_view) {\n case 'day':\n case 'week':\n case 'month':\n return (\n <MobileMonthView\n date={_date}\n onDateChange={handleDateChange}\n events={events}\n locale={locale}\n radius={radius}\n labels={labels}\n mode={mode}\n recurrenceExpansionLimit={recurrenceExpansionLimit}\n onYearClick={() => handleViewChange('year')}\n onEventClick={onEventClick}\n {...mobileMonthViewProps}\n />\n );\n case 'year':\n return <YearView {...commonProps} onMonthClick={handleMonthClick} {...yearViewProps} />;\n default:\n return null;\n }\n })();\n\n if (layout === 'responsive') {\n return (\n <Box {...getStyles('root')} mod={[{ layout }, mod]} {...others}>\n <Box {...getStyles('desktopView')}>{desktopContent}</Box>\n <Box {...getStyles('mobileView')}>{mobileContent}</Box>\n </Box>\n );\n }\n\n return (\n <Box {...getStyles('root')} mod={mod} {...others}>\n {desktopContent}\n </Box>\n );\n});\n\nSchedule.displayName = '@mantine/schedule/Schedule';\nSchedule.classes = classes;\n\nexport namespace Schedule {\n export type Props = ScheduleProps;\n export type StylesNames = ScheduleStylesNames;\n export type Factory = ScheduleFactory;\n export type Layout = ScheduleLayout;\n}\n"],"mappings":"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"}
@@ -103,12 +103,12 @@ const ScheduleEvent = (0, _mantine_core.factory)((_props) => {
103
103
  resizing: isResizing,
104
104
  resizable: showResizeHandles
105
105
  }, mod],
106
+ ...others,
106
107
  draggable: draggable && mode !== "static",
107
108
  tabIndex: mode === "static" ? -1 : 0,
108
109
  onDragStart: mode === "static" ? void 0 : handleDragStart,
109
110
  onDragEnd: mode === "static" ? void 0 : handleDragEnd,
110
111
  onClick: mode === "static" ? void 0 : others.onClick,
111
- ...others,
112
112
  children: eventChildren
113
113
  };
114
114
  if (typeof renderEvent === "function") return renderEvent(event, rootProps);
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduleEvent.cjs","names":["DragContext","Box","UnstyledButton","classes"],"sources":["../../../src/components/ScheduleEvent/ScheduleEvent.tsx"],"sourcesContent":["import { use, useEffect, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { ScheduleEventData, ScheduleMode } from '../../types';\nimport { DragContext } from '../DragContext/DragContext';\nimport classes from './ScheduleEvent.module.css';\n\nexport type ScheduleEventStylesNames = 'event' | 'eventInner' | 'eventResizeHandle';\n\nexport type ScheduleEventVariant = 'filled' | 'light';\nexport type ScheduleEventCssVariables = {\n event: '--event-bg' | '--event-color' | '--event-radius' | '--event-hover';\n};\n\nexport type RenderEventBody = (event: ScheduleEventData<any>) => React.ReactNode;\n\nexport type RenderEvent = (\n event: ScheduleEventData,\n props: React.ComponentPropsWithoutRef<'button'> & { children: React.ReactNode }\n) => React.ReactElement;\n\nexport interface ScheduleEventProps\n extends BoxProps, StylesApiProps<ScheduleEventFactory>, ElementProps<'button'> {\n __staticSelector?: string;\n\n /** Event to display */\n event: ScheduleEventData;\n\n /** Key of `theme.radius` or any valid CSS value to set border-radius @default 'sm' */\n radius?: MantineRadius;\n\n /** If set, event has `white-space: nowrap` @default false */\n nowrap?: boolean;\n\n /** If set, event shrinks its font-size with limited height @default false */\n autoSize?: boolean;\n\n /** Event size @default 'sm' */\n size?: 'sm' | 'md' | (string & {});\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 /** Event hanging position */\n hanging?: 'start' | 'end' | 'both' | 'none';\n\n /** If true, event can be dragged @default false */\n draggable?: boolean;\n\n /** Called when event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when event drag ends */\n onEventDragEnd?: () => void;\n\n /** If true, event is currently being dragged @default false */\n isDragging?: boolean;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** If true, event can be resized by dragging its edges @default false */\n withResize?: boolean;\n\n /** Called when resize starts on an edge */\n onResizeStart?: (edge: 'top' | 'bottom', e: React.PointerEvent) => void;\n\n /** If true, event is currently being resized @default false */\n isResizing?: boolean;\n}\n\nexport type ScheduleEventFactory = Factory<{\n props: ScheduleEventProps;\n ref: HTMLButtonElement;\n stylesNames: ScheduleEventStylesNames;\n vars: ScheduleEventCssVariables;\n variant: ScheduleEventVariant;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ScheduleEvent',\n mode: 'default',\n radius: 'sm' as MantineRadius,\n} satisfies Partial<ScheduleEventProps>;\n\nconst varsResolver = createVarsResolver<ScheduleEventFactory>(\n (theme, { event, variant, radius }) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: variant || event.variant || 'light',\n autoContrast: true,\n });\n\n return {\n event: {\n '--event-bg': colors.background,\n '--event-hover': colors.hover,\n '--event-color': colors.color,\n '--event-radius': getRadius(radius),\n },\n };\n }\n);\n\nexport const ScheduleEvent = factory<ScheduleEventFactory>((_props) => {\n const props = useProps('ScheduleEvent', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n children,\n nowrap,\n radius,\n color,\n __staticSelector,\n event,\n renderEventBody,\n renderEvent,\n size,\n autoSize,\n mod,\n hanging,\n draggable = false,\n onEventDragStart,\n onEventDragEnd,\n isDragging = false,\n mode,\n withResize = false,\n onResizeStart,\n isResizing = false,\n ...others\n } = props;\n\n const ctx = use(DragContext);\n\n const getStyles = useStyles<ScheduleEventFactory>({\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: 'event',\n });\n\n const handleDragStart = (e: React.DragEvent<HTMLButtonElement>) => {\n if (!draggable) {\n e.preventDefault();\n return;\n }\n\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('application/json', JSON.stringify({ eventId: event.id }));\n onEventDragStart?.(event);\n ctx.onDragStart?.(event);\n };\n\n const handleDragEnd = () => {\n onEventDragEnd?.();\n ctx.onDragEnd?.();\n };\n\n const isCurrentlyDragging = isDragging || ctx.draggedEventId === event.id;\n const isAnyEventDragging = ctx.isDragging || false;\n\n const dragEndRef = useRef(ctx.onDragEnd);\n dragEndRef.current = ctx.onDragEnd;\n\n useEffect(() => {\n if (isCurrentlyDragging) {\n return () => {\n dragEndRef.current?.();\n };\n }\n return undefined;\n }, [isCurrentlyDragging]);\n\n const showResizeHandles = withResize && mode !== 'static';\n\n const eventChildren = (\n <>\n {showResizeHandles && (\n <Box\n {...getStyles('eventResizeHandle')}\n mod={{ edge: 'top' }}\n onPointerDown={(e: React.PointerEvent) => onResizeStart?.('top', e)}\n />\n )}\n <Box mod={{ nowrap, size, autoSize, hanging }} {...getStyles('eventInner')}>\n {typeof renderEventBody === 'function' ? renderEventBody(event) : event.title}\n </Box>\n {showResizeHandles && (\n <Box\n {...getStyles('eventResizeHandle')}\n mod={{ edge: 'bottom' }}\n onPointerDown={(e: React.PointerEvent) => onResizeStart?.('bottom', e)}\n />\n )}\n </>\n );\n\n const rootProps = {\n ...getStyles('event'),\n 'data-event-id': event.id,\n size,\n title: event.title,\n mod: [\n {\n autoSize,\n hanging,\n draggable,\n dragging: isCurrentlyDragging,\n 'any-dragging': isAnyEventDragging,\n static: mode === 'static',\n resizing: isResizing,\n resizable: showResizeHandles,\n },\n mod,\n ],\n draggable: draggable && mode !== 'static',\n tabIndex: mode === 'static' ? -1 : 0,\n onDragStart: mode === 'static' ? undefined : handleDragStart,\n onDragEnd: mode === 'static' ? undefined : handleDragEnd,\n onClick: mode === 'static' ? undefined : others.onClick,\n ...others,\n children: eventChildren,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, rootProps);\n }\n\n return <UnstyledButton {...rootProps} />;\n});\n\nScheduleEvent.displayName = '@mantine/schedule/ScheduleEvent';\nScheduleEvent.classes = classes;\nScheduleEvent.varsResolver = varsResolver;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ScheduleEvent.cjs","names":["DragContext","Box","UnstyledButton","classes"],"sources":["../../../src/components/ScheduleEvent/ScheduleEvent.tsx"],"sourcesContent":["import { use, useEffect, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n getRadius,\n MantineRadius,\n StylesApiProps,\n UnstyledButton,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { ScheduleEventData, ScheduleMode } from '../../types';\nimport { DragContext } from '../DragContext/DragContext';\nimport classes from './ScheduleEvent.module.css';\n\nexport type ScheduleEventStylesNames = 'event' | 'eventInner' | 'eventResizeHandle';\n\nexport type ScheduleEventVariant = 'filled' | 'light';\nexport type ScheduleEventCssVariables = {\n event: '--event-bg' | '--event-color' | '--event-radius' | '--event-hover';\n};\n\nexport type RenderEventBody = (event: ScheduleEventData<any>) => React.ReactNode;\n\nexport type RenderEvent = (\n event: ScheduleEventData,\n props: React.ComponentPropsWithoutRef<'button'> & { children: React.ReactNode }\n) => React.ReactElement;\n\nexport interface ScheduleEventProps\n extends BoxProps, StylesApiProps<ScheduleEventFactory>, ElementProps<'button'> {\n __staticSelector?: string;\n\n /** Event to display */\n event: ScheduleEventData;\n\n /** Key of `theme.radius` or any valid CSS value to set border-radius @default 'sm' */\n radius?: MantineRadius;\n\n /** If set, event has `white-space: nowrap` @default false */\n nowrap?: boolean;\n\n /** If set, event shrinks its font-size with limited height @default false */\n autoSize?: boolean;\n\n /** Event size @default 'sm' */\n size?: 'sm' | 'md' | (string & {});\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 /** Event hanging position */\n hanging?: 'start' | 'end' | 'both' | 'none';\n\n /** If true, event can be dragged @default false */\n draggable?: boolean;\n\n /** Called when event drag starts */\n onEventDragStart?: (event: ScheduleEventData) => void;\n\n /** Called when event drag ends */\n onEventDragEnd?: () => void;\n\n /** If true, event is currently being dragged @default false */\n isDragging?: boolean;\n\n /** Interaction mode: 'default' allows all interactions, 'static' disables event interactions @default default */\n mode?: ScheduleMode;\n\n /** If true, event can be resized by dragging its edges @default false */\n withResize?: boolean;\n\n /** Called when resize starts on an edge */\n onResizeStart?: (edge: 'top' | 'bottom', e: React.PointerEvent) => void;\n\n /** If true, event is currently being resized @default false */\n isResizing?: boolean;\n}\n\nexport type ScheduleEventFactory = Factory<{\n props: ScheduleEventProps;\n ref: HTMLButtonElement;\n stylesNames: ScheduleEventStylesNames;\n vars: ScheduleEventCssVariables;\n variant: ScheduleEventVariant;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ScheduleEvent',\n mode: 'default',\n radius: 'sm' as MantineRadius,\n} satisfies Partial<ScheduleEventProps>;\n\nconst varsResolver = createVarsResolver<ScheduleEventFactory>(\n (theme, { event, variant, radius }) => {\n const colors = theme.variantColorResolver({\n color: event.color || theme.primaryColor,\n theme,\n variant: variant || event.variant || 'light',\n autoContrast: true,\n });\n\n return {\n event: {\n '--event-bg': colors.background,\n '--event-hover': colors.hover,\n '--event-color': colors.color,\n '--event-radius': getRadius(radius),\n },\n };\n }\n);\n\nexport const ScheduleEvent = factory<ScheduleEventFactory>((_props) => {\n const props = useProps('ScheduleEvent', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n children,\n nowrap,\n radius,\n color,\n __staticSelector,\n event,\n renderEventBody,\n renderEvent,\n size,\n autoSize,\n mod,\n hanging,\n draggable = false,\n onEventDragStart,\n onEventDragEnd,\n isDragging = false,\n mode,\n withResize = false,\n onResizeStart,\n isResizing = false,\n ...others\n } = props;\n\n const ctx = use(DragContext);\n\n const getStyles = useStyles<ScheduleEventFactory>({\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: 'event',\n });\n\n const handleDragStart = (e: React.DragEvent<HTMLButtonElement>) => {\n if (!draggable) {\n e.preventDefault();\n return;\n }\n\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('application/json', JSON.stringify({ eventId: event.id }));\n onEventDragStart?.(event);\n ctx.onDragStart?.(event);\n };\n\n const handleDragEnd = () => {\n onEventDragEnd?.();\n ctx.onDragEnd?.();\n };\n\n const isCurrentlyDragging = isDragging || ctx.draggedEventId === event.id;\n const isAnyEventDragging = ctx.isDragging || false;\n\n const dragEndRef = useRef(ctx.onDragEnd);\n dragEndRef.current = ctx.onDragEnd;\n\n useEffect(() => {\n if (isCurrentlyDragging) {\n return () => {\n dragEndRef.current?.();\n };\n }\n return undefined;\n }, [isCurrentlyDragging]);\n\n const showResizeHandles = withResize && mode !== 'static';\n\n const eventChildren = (\n <>\n {showResizeHandles && (\n <Box\n {...getStyles('eventResizeHandle')}\n mod={{ edge: 'top' }}\n onPointerDown={(e: React.PointerEvent) => onResizeStart?.('top', e)}\n />\n )}\n <Box mod={{ nowrap, size, autoSize, hanging }} {...getStyles('eventInner')}>\n {typeof renderEventBody === 'function' ? renderEventBody(event) : event.title}\n </Box>\n {showResizeHandles && (\n <Box\n {...getStyles('eventResizeHandle')}\n mod={{ edge: 'bottom' }}\n onPointerDown={(e: React.PointerEvent) => onResizeStart?.('bottom', e)}\n />\n )}\n </>\n );\n\n const rootProps = {\n ...getStyles('event'),\n 'data-event-id': event.id,\n size,\n title: event.title,\n mod: [\n {\n autoSize,\n hanging,\n draggable,\n dragging: isCurrentlyDragging,\n 'any-dragging': isAnyEventDragging,\n static: mode === 'static',\n resizing: isResizing,\n resizable: showResizeHandles,\n },\n mod,\n ],\n ...others,\n draggable: draggable && mode !== 'static',\n tabIndex: mode === 'static' ? -1 : 0,\n onDragStart: mode === 'static' ? undefined : handleDragStart,\n onDragEnd: mode === 'static' ? undefined : handleDragEnd,\n onClick: mode === 'static' ? undefined : others.onClick,\n children: eventChildren,\n };\n\n if (typeof renderEvent === 'function') {\n return renderEvent(event, rootProps);\n }\n\n return <UnstyledButton {...rootProps} />;\n});\n\nScheduleEvent.displayName = '@mantine/schedule/ScheduleEvent';\nScheduleEvent.classes = classes;\nScheduleEvent.varsResolver = varsResolver;\n"],"mappings":"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"}