@mantine/schedule 9.5.2 → 9.6.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 (240) hide show
  1. package/cjs/_virtual/_rolldown/runtime.cjs +1 -1
  2. package/cjs/components/AgendaView/AgendaView.cjs +7 -6
  3. package/cjs/components/AgendaView/AgendaView.cjs.map +1 -1
  4. package/cjs/components/AgendaView/get-agenda-view-events.cjs.map +1 -1
  5. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs +3 -2
  6. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs.map +1 -1
  7. package/cjs/components/DayView/DayView.cjs +153 -80
  8. package/cjs/components/DayView/DayView.cjs.map +1 -1
  9. package/cjs/components/DayView/DayView.module.cjs +1 -0
  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 +12 -7
  12. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs.map +1 -1
  13. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs +3 -2
  14. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -1
  15. package/cjs/components/DragContext/DragContext.cjs.map +1 -1
  16. package/cjs/components/MobileMonthView/MobileMonthView.cjs +7 -6
  17. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  18. package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs.map +1 -1
  19. package/cjs/components/MonthView/MonthView.cjs +24 -34
  20. package/cjs/components/MonthView/MonthView.cjs.map +1 -1
  21. package/cjs/components/MonthView/MonthView.module.cjs.map +1 -1
  22. package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +1 -1
  23. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs +4 -2
  24. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
  25. package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs.map +1 -1
  26. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs +3 -2
  27. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs.map +1 -1
  28. package/cjs/components/MonthView/get-renderable-month-event-segments.cjs +1 -1
  29. package/cjs/components/MonthView/get-renderable-month-event-segments.cjs.map +1 -1
  30. package/cjs/components/MoreEvents/MoreEvents.cjs.map +1 -1
  31. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +137 -53
  32. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
  33. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs +2 -1
  34. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
  35. package/cjs/components/ResourcesDayView/ResourcesDayViewColumn.cjs.map +1 -1
  36. package/cjs/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.cjs.map +1 -1
  37. package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs.map +1 -1
  38. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs +3 -1
  39. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs.map +1 -1
  40. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +151 -60
  41. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
  42. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs +2 -1
  43. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
  44. package/cjs/components/ResourcesWeekView/ResourcesWeekViewRow.cjs.map +1 -1
  45. package/cjs/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.cjs +6 -3
  46. package/cjs/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.cjs.map +1 -1
  47. package/cjs/components/Schedule/Schedule.cjs +4 -1
  48. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  49. package/cjs/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.cjs +53 -0
  50. package/cjs/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.cjs.map +1 -0
  51. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs.map +1 -1
  52. package/cjs/components/ScheduleEvent/ScheduleEvent.module.cjs.map +1 -1
  53. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs +15 -14
  54. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs.map +1 -1
  55. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs.map +1 -1
  56. package/cjs/components/ScheduleHeader/ScheduleHeader.cjs.map +1 -1
  57. package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs.map +1 -1
  58. package/cjs/components/ScheduleHeader/ScheduleHeaderContext.cjs.map +1 -1
  59. package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.cjs.map +1 -1
  60. package/cjs/components/WeekView/WeekView.cjs +168 -84
  61. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  62. package/cjs/components/WeekView/WeekView.module.cjs +1 -0
  63. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  64. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
  65. package/cjs/components/WeekView/get-week-label/get-week-label.cjs.map +1 -1
  66. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-offset.cjs.map +1 -1
  67. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-width.cjs.map +1 -1
  68. package/cjs/components/WeekView/get-week-view-events/calculate-event-days.cjs.map +1 -1
  69. package/cjs/components/WeekView/get-week-view-events/get-event-end-date.cjs.map +1 -1
  70. package/cjs/components/WeekView/get-week-view-events/get-hanging-status.cjs.map +1 -1
  71. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs +4 -2
  72. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -1
  73. package/cjs/components/YearView/YearView.cjs +7 -6
  74. package/cjs/components/YearView/YearView.cjs.map +1 -1
  75. package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
  76. package/cjs/components/YearView/get-visible-week-days.cjs.map +1 -1
  77. package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs.map +1 -1
  78. package/cjs/hooks/use-auto-scroll-on-drag.cjs.map +1 -1
  79. package/cjs/hooks/use-day-grid-event-resize.cjs.map +1 -1
  80. package/cjs/hooks/use-drag-drop-handlers.cjs +13 -2
  81. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
  82. package/cjs/hooks/use-drag-state.cjs.map +1 -1
  83. package/cjs/hooks/use-event-resize.cjs +30 -15
  84. package/cjs/hooks/use-event-resize.cjs.map +1 -1
  85. package/cjs/hooks/use-horizontal-event-resize.cjs +30 -15
  86. package/cjs/hooks/use-horizontal-event-resize.cjs.map +1 -1
  87. package/cjs/hooks/use-slot-drag-select.cjs.map +1 -1
  88. package/cjs/index.cjs +6 -0
  89. package/cjs/utils/apply-cascade-layout/apply-cascade-layout.cjs +21 -0
  90. package/cjs/utils/apply-cascade-layout/apply-cascade-layout.cjs.map +1 -0
  91. package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs +25 -4
  92. package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs.map +1 -1
  93. package/cjs/utils/calculate-month-drop-date/calculate-month-drop-date.cjs.map +1 -1
  94. package/cjs/utils/calculate-month-resize-dates/calculate-month-resize-dates.cjs.map +1 -1
  95. package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs.map +1 -1
  96. package/cjs/utils/format-date/format-date.cjs.map +1 -1
  97. package/cjs/utils/get-current-time-position/get-current-time-position.cjs.map +1 -1
  98. package/cjs/utils/get-day-position/get-day-position.cjs.map +1 -1
  99. package/cjs/utils/get-end-of-week/get-end-of-week.cjs.map +1 -1
  100. package/cjs/utils/get-month-days/get-month-days.cjs +4 -2
  101. package/cjs/utils/get-month-days/get-month-days.cjs.map +1 -1
  102. package/cjs/utils/get-month-range/get-month-range.cjs.map +1 -1
  103. package/cjs/utils/get-months-by-quarter/get-months-by-quarter.cjs.map +1 -1
  104. package/cjs/utils/get-months-list/get-months-list.cjs.map +1 -1
  105. package/cjs/{components/ResourcesDayView → utils}/get-overlap-clusters/get-overlap-clusters.cjs +2 -2
  106. package/cjs/utils/get-overlap-clusters/get-overlap-clusters.cjs.map +1 -0
  107. package/cjs/utils/get-start-of-week/get-start-of-week.cjs.map +1 -1
  108. package/cjs/utils/get-week-days/get-week-days.cjs.map +1 -1
  109. package/cjs/utils/get-week-number/get-week-number.cjs +4 -1
  110. package/cjs/utils/get-week-number/get-week-number.cjs.map +1 -1
  111. package/cjs/utils/get-weekdays-names/get-weekdays-names.cjs.map +1 -1
  112. package/cjs/utils/is-after-min-date/is-after-min-date.cjs.map +1 -1
  113. package/cjs/utils/is-all-day-event/is-all-day-event.cjs.map +1 -1
  114. package/cjs/utils/is-before-max-date/is-before-max-date.cjs.map +1 -1
  115. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs +2 -1
  116. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs.map +1 -1
  117. package/cjs/utils/is-events-overlap/is-events-overlap.cjs.map +1 -1
  118. package/cjs/utils/is-in-time-range/is-in-time-range.cjs.map +1 -1
  119. package/cjs/utils/is-multiday-event/is-multiday-event.cjs.map +1 -1
  120. package/cjs/utils/is-same-month/is-same-month.cjs.map +1 -1
  121. package/cjs/utils/is-within-week/is-within-week.cjs.map +1 -1
  122. package/cjs/utils/next-week/next-week.cjs.map +1 -1
  123. package/cjs/utils/previous-week/previous-week.cjs.map +1 -1
  124. package/cjs/utils/sort-events/sort-events.cjs.map +1 -1
  125. package/cjs/utils/to-date-string/to-date-string.cjs.map +1 -1
  126. package/cjs/utils/validate-event/validate-event.cjs.map +1 -1
  127. package/esm/components/AgendaView/AgendaView.mjs +7 -6
  128. package/esm/components/AgendaView/AgendaView.mjs.map +1 -1
  129. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs +4 -3
  130. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -1
  131. package/esm/components/DayView/DayView.mjs +154 -81
  132. package/esm/components/DayView/DayView.mjs.map +1 -1
  133. package/esm/components/DayView/DayView.module.mjs +1 -0
  134. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  135. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs +12 -7
  136. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -1
  137. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs +3 -2
  138. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -1
  139. package/esm/components/MobileMonthView/MobileMonthView.mjs +7 -6
  140. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  141. package/esm/components/MonthView/MonthView.mjs +25 -35
  142. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  143. package/esm/components/MonthView/MonthView.module.mjs.map +1 -1
  144. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs +4 -2
  145. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
  146. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs +3 -2
  147. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs.map +1 -1
  148. package/esm/components/MonthView/get-renderable-month-event-segments.mjs +1 -1
  149. package/esm/components/MonthView/get-renderable-month-event-segments.mjs.map +1 -1
  150. package/esm/components/MoreEvents/MoreEvents.mjs.map +1 -1
  151. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +139 -55
  152. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
  153. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs +2 -1
  154. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
  155. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs.map +1 -1
  156. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs.map +1 -1
  157. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs +3 -1
  158. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -1
  159. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +153 -62
  160. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
  161. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs +2 -1
  162. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
  163. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs.map +1 -1
  164. package/esm/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.mjs +6 -3
  165. package/esm/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.mjs.map +1 -1
  166. package/esm/components/Schedule/Schedule.mjs +4 -1
  167. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  168. package/esm/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.mjs +53 -0
  169. package/esm/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.mjs.map +1 -0
  170. package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -1
  171. package/esm/components/ScheduleEvent/ScheduleEvent.module.mjs.map +1 -1
  172. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs +15 -14
  173. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -1
  174. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -1
  175. package/esm/components/ScheduleHeader/ScheduleHeader.mjs.map +1 -1
  176. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -1
  177. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.mjs.map +1 -1
  178. package/esm/components/WeekView/WeekView.mjs +169 -85
  179. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  180. package/esm/components/WeekView/WeekView.module.mjs +1 -0
  181. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  182. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  183. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs +4 -2
  184. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -1
  185. package/esm/components/YearView/YearView.mjs +7 -6
  186. package/esm/components/YearView/YearView.mjs.map +1 -1
  187. package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
  188. package/esm/hooks/use-drag-drop-handlers.mjs +13 -2
  189. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  190. package/esm/hooks/use-event-resize.mjs +30 -15
  191. package/esm/hooks/use-event-resize.mjs.map +1 -1
  192. package/esm/hooks/use-horizontal-event-resize.mjs +30 -15
  193. package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -1
  194. package/esm/index.mjs +4 -1
  195. package/esm/utils/apply-cascade-layout/apply-cascade-layout.mjs +21 -0
  196. package/esm/utils/apply-cascade-layout/apply-cascade-layout.mjs.map +1 -0
  197. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs +25 -4
  198. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs.map +1 -1
  199. package/esm/utils/get-month-days/get-month-days.mjs +4 -2
  200. package/esm/utils/get-month-days/get-month-days.mjs.map +1 -1
  201. package/esm/{components/ResourcesDayView → utils}/get-overlap-clusters/get-overlap-clusters.mjs +2 -2
  202. package/esm/utils/get-overlap-clusters/get-overlap-clusters.mjs.map +1 -0
  203. package/esm/utils/get-week-number/get-week-number.mjs +4 -1
  204. package/esm/utils/get-week-number/get-week-number.mjs.map +1 -1
  205. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs +2 -1
  206. package/esm/utils/is-event-in-time-range/is-event-in-time-range.mjs.map +1 -1
  207. package/lib/components/DayView/DayView.d.ts +12 -2
  208. package/lib/components/DayView/get-day-view-events/get-day-positioned-events.d.ts +4 -2
  209. package/lib/components/DayView/get-day-view-events/get-day-view-events.d.ts +3 -2
  210. package/lib/components/MonthView/MonthView.d.ts +2 -0
  211. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +7 -1
  212. package/lib/components/ResourcesDayView/ResourcesDayViewColumn.d.ts +1 -1
  213. package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +3 -1
  214. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +7 -1
  215. package/lib/components/ResourcesWeekView/ResourcesWeekViewRow.d.ts +1 -1
  216. package/lib/components/Schedule/Schedule.d.ts +3 -1
  217. package/lib/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.d.ts +19 -0
  218. package/lib/components/ScheduleBackgroundEvent/index.d.ts +2 -0
  219. package/lib/components/ScheduleHeader/HeaderControl/HeaderControl.d.ts +3 -3
  220. package/lib/components/ScheduleHeader/ScheduleHeaderBase.d.ts +1 -1
  221. package/lib/components/WeekView/WeekView.d.ts +12 -2
  222. package/lib/components/WeekView/WeekViewDay.d.ts +1 -1
  223. package/lib/components/WeekView/get-week-view-events/get-week-positioned-events.d.ts +4 -2
  224. package/lib/components/YearView/YearViewMonth.d.ts +1 -1
  225. package/lib/hooks/use-drag-drop-handlers.d.ts +10 -1
  226. package/lib/hooks/use-event-resize.d.ts +2 -1
  227. package/lib/hooks/use-horizontal-event-resize.d.ts +2 -1
  228. package/lib/index.d.mts +1 -0
  229. package/lib/index.d.ts +1 -0
  230. package/lib/types.d.ts +3 -1
  231. package/lib/utils/apply-cascade-layout/apply-cascade-layout.d.ts +6 -0
  232. package/lib/utils/calculate-drop-time/calculate-drop-time.d.ts +11 -1
  233. package/lib/utils/get-overlap-clusters/get-overlap-clusters.d.ts +2 -0
  234. package/lib/utils/index.d.ts +3 -0
  235. package/package.json +8 -5
  236. package/styles.css +221 -0
  237. package/styles.layer.css +221 -0
  238. package/cjs/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.cjs.map +0 -1
  239. package/esm/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.mjs.map +0 -1
  240. package/lib/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"get-month-days.mjs","names":[],"sources":["../../../src/utils/get-month-days/get-month-days.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getEndOfWeek } from '../get-end-of-week/get-end-of-week';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\n\ninterface GetMonthDaysInput {\n month: AnyDateValue;\n firstDayOfWeek: DayOfWeek | undefined;\n consistentWeeks: boolean | undefined;\n}\n\nexport function getMonthDays({\n month,\n firstDayOfWeek = 1,\n consistentWeeks,\n}: GetMonthDaysInput): DateStringValue[][] {\n const day = dayjs(month).subtract(dayjs(month).date() - 1, 'day');\n const start = dayjs(day.format('YYYY-MM-DD'));\n const startOfMonth = start.format('YYYY-MM-DD');\n const endOfMonth = start.add(+start.daysInMonth() - 1, 'day').format('YYYY-MM-DD');\n const endDate = getEndOfWeek(endOfMonth, firstDayOfWeek);\n const weeks: DateStringValue[][] = [];\n\n let date = dayjs(getStartOfWeek({ date: startOfMonth, firstDayOfWeek }));\n\n while (dayjs(date).isBefore(endDate, 'day')) {\n const days: DateStringValue[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n days.push(date.format('YYYY-MM-DD 00:00:00'));\n date = date.add(1, 'day');\n }\n\n weeks.push(days);\n }\n\n if (consistentWeeks && weeks.length < 6) {\n const lastWeek = weeks[weeks.length - 1];\n const lastDay = lastWeek[lastWeek.length - 1];\n let nextDay = dayjs(lastDay).add(1, 'day');\n\n while (weeks.length < 6) {\n const days: DateStringValue[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n days.push(nextDay.format('YYYY-MM-DD 00:00:00'));\n nextDay = nextDay.add(1, 'day');\n }\n\n weeks.push(days);\n }\n }\n\n return weeks;\n}\n"],"mappings":";;;;;AAWA,SAAgB,aAAa,EAC3B,OACA,iBAAiB,GACjB,mBACyC;CAEzC,MAAM,QAAQ,MADF,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,KACrC,CAAC,CAAC,OAAO,YAAY,CAAC;CAC5C,MAAM,eAAe,MAAM,OAAO,YAAY;CAE9C,MAAM,UAAU,aADG,MAAM,IAAI,CAAC,MAAM,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,YAC/B,GAAG,cAAc;CACvD,MAAM,QAA6B,CAAC;CAEpC,IAAI,OAAO,MAAM,eAAe;EAAE,MAAM;EAAc;CAAe,CAAC,CAAC;CAEvE,OAAO,MAAM,IAAI,CAAC,CAAC,SAAS,SAAS,KAAK,GAAG;EAC3C,MAAM,OAA0B,CAAC;EAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;GAC7B,KAAK,KAAK,KAAK,OAAO,qBAAqB,CAAC;GAC5C,OAAO,KAAK,IAAI,GAAG,KAAK;EAC1B;EAEA,MAAM,KAAK,IAAI;CACjB;CAEA,IAAI,mBAAmB,MAAM,SAAS,GAAG;EACvC,MAAM,WAAW,MAAM,MAAM,SAAS;EACtC,MAAM,UAAU,SAAS,SAAS,SAAS;EAC3C,IAAI,UAAU,MAAM,OAAO,CAAC,CAAC,IAAI,GAAG,KAAK;EAEzC,OAAO,MAAM,SAAS,GAAG;GACvB,MAAM,OAA0B,CAAC;GAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;IAC7B,KAAK,KAAK,QAAQ,OAAO,qBAAqB,CAAC;IAC/C,UAAU,QAAQ,IAAI,GAAG,KAAK;GAChC;GAEA,MAAM,KAAK,IAAI;EACjB;CACF;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"get-month-days.mjs","names":[],"sources":["../../../src/utils/get-month-days/get-month-days.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';\nimport { getEndOfWeek } from '../get-end-of-week/get-end-of-week';\nimport { getStartOfWeek } from '../get-start-of-week/get-start-of-week';\n\ninterface GetMonthDaysInput {\n month: AnyDateValue;\n firstDayOfWeek: DayOfWeek | undefined;\n consistentWeeks: boolean | undefined;\n}\n\nexport function getMonthDays({\n month,\n firstDayOfWeek = 1,\n consistentWeeks,\n}: GetMonthDaysInput): DateStringValue[][] {\n const day = dayjs(month).subtract(dayjs(month).date() - 1, 'day');\n const start = dayjs(day.format('YYYY-MM-DD'));\n const startOfMonth = start.format('YYYY-MM-DD');\n const endOfMonth = start.add(+start.daysInMonth() - 1, 'day').format('YYYY-MM-DD');\n const endDate = getEndOfWeek(endOfMonth, firstDayOfWeek);\n const weeks: DateStringValue[][] = [];\n\n let date = dayjs(getStartOfWeek({ date: startOfMonth, firstDayOfWeek }));\n\n while (dayjs(date).isBefore(endDate, 'day')) {\n const days: DateStringValue[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n days.push(date.format('YYYY-MM-DD 00:00:00'));\n date = date.add(1, 'day');\n }\n\n weeks.push(days);\n }\n\n if (consistentWeeks && weeks.length < 6) {\n const lastWeek = weeks[weeks.length - 1];\n const lastDay = lastWeek[lastWeek.length - 1];\n let nextDay = dayjs(lastDay).add(1, 'day');\n\n while (weeks.length < 6) {\n const days: DateStringValue[] = [];\n\n for (let i = 0; i < 7; i += 1) {\n days.push(nextDay.format('YYYY-MM-DD 00:00:00'));\n nextDay = nextDay.add(1, 'day');\n }\n\n weeks.push(days);\n }\n }\n\n return weeks;\n}\n"],"mappings":";;;;;AAWA,SAAgB,aAAa,EAC3B,OACA,iBAAiB,GACjB,mBACyC;CACzC,MAAM,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,KAAK;CAChE,MAAM,QAAQ,MAAM,IAAI,OAAO,YAAY,CAAC;CAC5C,MAAM,eAAe,MAAM,OAAO,YAAY;CAC9C,MAAM,aAAa,MAAM,IAAI,CAAC,MAAM,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,YAAY;CACjF,MAAM,UAAU,aAAa,YAAY,cAAc;CACvD,MAAM,QAA6B,CAAC;CAEpC,IAAI,OAAO,MAAM,eAAe;EAAE,MAAM;EAAc;CAAe,CAAC,CAAC;CAEvE,OAAO,MAAM,IAAI,CAAC,CAAC,SAAS,SAAS,KAAK,GAAG;EAC3C,MAAM,OAA0B,CAAC;EAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;GAC7B,KAAK,KAAK,KAAK,OAAO,qBAAqB,CAAC;GAC5C,OAAO,KAAK,IAAI,GAAG,KAAK;EAC1B;EAEA,MAAM,KAAK,IAAI;CACjB;CAEA,IAAI,mBAAmB,MAAM,SAAS,GAAG;EACvC,MAAM,WAAW,MAAM,MAAM,SAAS;EACtC,MAAM,UAAU,SAAS,SAAS,SAAS;EAC3C,IAAI,UAAU,MAAM,OAAO,CAAC,CAAC,IAAI,GAAG,KAAK;EAEzC,OAAO,MAAM,SAAS,GAAG;GACvB,MAAM,OAA0B,CAAC;GAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;IAC7B,KAAK,KAAK,QAAQ,OAAO,qBAAqB,CAAC;IAC/C,UAAU,QAAQ,IAAI,GAAG,KAAK;GAChC;GAEA,MAAM,KAAK,IAAI;EACjB;CACF;CAEA,OAAO;AACT"}
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { isEventsOverlap } from "../../../utils/is-events-overlap/is-events-overlap.mjs";
3
- //#region packages/@mantine/schedule/src/components/ResourcesDayView/get-overlap-clusters/get-overlap-clusters.ts
2
+ import { isEventsOverlap } from "../is-events-overlap/is-events-overlap.mjs";
3
+ //#region packages/@mantine/schedule/src/utils/get-overlap-clusters/get-overlap-clusters.ts
4
4
  function getOverlapClusters(events) {
5
5
  const clusters = [];
6
6
  const assigned = /* @__PURE__ */ new Set();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-overlap-clusters.mjs","names":[],"sources":["../../../src/utils/get-overlap-clusters/get-overlap-clusters.ts"],"sourcesContent":["import { ScheduleEventData } from '../../types';\nimport { isEventsOverlap } from '../is-events-overlap/is-events-overlap';\n\nexport function getOverlapClusters<T extends ScheduleEventData>(events: T[]): T[][] {\n const clusters: T[][] = [];\n const assigned = new Set<number>();\n\n for (let i = 0; i < events.length; i++) {\n if (assigned.has(i)) {\n continue;\n }\n\n const cluster: T[] = [events[i]];\n assigned.add(i);\n\n let j = 0;\n while (j < cluster.length) {\n for (let k = 0; k < events.length; k++) {\n if (!assigned.has(k) && isEventsOverlap(cluster[j], events[k])) {\n cluster.push(events[k]);\n assigned.add(k);\n }\n }\n j++;\n }\n\n clusters.push(cluster);\n }\n\n return clusters;\n}\n"],"mappings":";;;AAGA,SAAgB,mBAAgD,QAAoB;CAClF,MAAM,WAAkB,CAAC;CACzB,MAAM,2BAAW,IAAI,IAAY;CAEjC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,IAAI,SAAS,IAAI,CAAC,GAChB;EAGF,MAAM,UAAe,CAAC,OAAO,EAAE;EAC/B,SAAS,IAAI,CAAC;EAEd,IAAI,IAAI;EACR,OAAO,IAAI,QAAQ,QAAQ;GACzB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,gBAAgB,QAAQ,IAAI,OAAO,EAAE,GAAG;IAC9D,QAAQ,KAAK,OAAO,EAAE;IACtB,SAAS,IAAI,CAAC;GAChB;GAEF;EACF;EAEA,SAAS,KAAK,OAAO;CACvB;CAEA,OAAO;AACT"}
@@ -4,7 +4,10 @@ import isoWeek from "dayjs/plugin/isoWeek.js";
4
4
  //#region packages/@mantine/schedule/src/utils/get-week-number/get-week-number.ts
5
5
  dayjs.extend(isoWeek);
6
6
  function getWeekNumber(week) {
7
- if (Array.isArray(week)) return dayjs(week.find((date) => dayjs(date).day() === 1)).isoWeek();
7
+ if (Array.isArray(week)) {
8
+ const monday = week.find((date) => dayjs(date).day() === 1);
9
+ return dayjs(monday).isoWeek();
10
+ }
8
11
  return dayjs(week).isoWeek();
9
12
  }
10
13
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"get-week-number.mjs","names":[],"sources":["../../../src/utils/get-week-number/get-week-number.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek.js';\nimport { AnyDateValue } from '../../types';\n\ndayjs.extend(isoWeek);\n\nexport function getWeekNumber(week: AnyDateValue | AnyDateValue[]): number {\n if (Array.isArray(week)) {\n const monday = week.find((date) => dayjs(date).day() === 1);\n return dayjs(monday).isoWeek();\n }\n\n return dayjs(week).isoWeek();\n}\n"],"mappings":";;;;AAIA,MAAM,OAAO,OAAO;AAEpB,SAAgB,cAAc,MAA6C;CACzE,IAAI,MAAM,QAAQ,IAAI,GAEpB,OAAO,MADQ,KAAK,MAAM,SAAS,MAAM,IAAI,CAAC,CAAC,IAAI,MAAM,CACvC,CAAC,CAAC,CAAC,QAAQ;CAG/B,OAAO,MAAM,IAAI,CAAC,CAAC,QAAQ;AAC7B"}
1
+ {"version":3,"file":"get-week-number.mjs","names":[],"sources":["../../../src/utils/get-week-number/get-week-number.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport isoWeek from 'dayjs/plugin/isoWeek.js';\nimport { AnyDateValue } from '../../types';\n\ndayjs.extend(isoWeek);\n\nexport function getWeekNumber(week: AnyDateValue | AnyDateValue[]): number {\n if (Array.isArray(week)) {\n const monday = week.find((date) => dayjs(date).day() === 1);\n return dayjs(monday).isoWeek();\n }\n\n return dayjs(week).isoWeek();\n}\n"],"mappings":";;;;AAIA,MAAM,OAAO,OAAO;AAEpB,SAAgB,cAAc,MAA6C;CACzE,IAAI,MAAM,QAAQ,IAAI,GAAG;EACvB,MAAM,SAAS,KAAK,MAAM,SAAS,MAAM,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;EAC1D,OAAO,MAAM,MAAM,CAAC,CAAC,QAAQ;CAC/B;CAEA,OAAO,MAAM,IAAI,CAAC,CAAC,QAAQ;AAC7B"}
@@ -18,8 +18,9 @@ function isEventInTimeRange({ event, startTime, endTime }) {
18
18
  const timeWindowEndMinutes = endHour * 60 + endMinute;
19
19
  const eventStart = dayjs(event.start);
20
20
  const eventEnd = dayjs(event.end);
21
+ const endsAtNextDayStart = eventEnd.isSame(eventStart.startOf("day").add(1, "day"), "second");
21
22
  const eventStartMinutes = eventStart.hour() * 60 + eventStart.minute();
22
- return !(eventEnd.hour() * 60 + eventEnd.minute() <= timeWindowStartMinutes || eventStartMinutes >= timeWindowEndMinutes);
23
+ return !((endsAtNextDayStart ? 1440 : eventEnd.hour() * 60 + eventEnd.minute()) <= timeWindowStartMinutes || eventStartMinutes >= timeWindowEndMinutes);
23
24
  }
24
25
  //#endregion
25
26
  export { isEventInTimeRange };
@@ -1 +1 @@
1
- {"version":3,"file":"is-event-in-time-range.mjs","names":[],"sources":["../../../src/utils/is-event-in-time-range/is-event-in-time-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\nimport { isMultidayEvent } from '../is-multiday-event/is-multiday-event';\n\ninterface IsEventInTimeRangeInput {\n event: ScheduleEventData;\n startTime?: string;\n endTime?: string;\n}\n\nfunction spansFullDay(event: ScheduleEventData) {\n const start = dayjs(event.start);\n const end = dayjs(event.end);\n if (!start.isSame(start.startOf('day'))) {\n return false;\n }\n const nextDayStart = start.startOf('day').add(1, 'day');\n return end.isSame(nextDayStart) || end.isSame(nextDayStart.subtract(1, 'second'));\n}\n\nexport function isEventInTimeRange({ event, startTime, endTime }: IsEventInTimeRangeInput) {\n if (isMultidayEvent(event) || spansFullDay(event)) {\n return true;\n }\n\n if (!startTime || !endTime) {\n return true;\n }\n\n const [startHour, startMinute] = startTime.split(':').map(Number);\n const [endHour, endMinute] = endTime.split(':').map(Number);\n const timeWindowStartMinutes = startHour * 60 + startMinute;\n const timeWindowEndMinutes = endHour * 60 + endMinute;\n\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n const eventStartMinutes = eventStart.hour() * 60 + eventStart.minute();\n const eventEndMinutes = eventEnd.hour() * 60 + eventEnd.minute();\n\n return !(eventEndMinutes <= timeWindowStartMinutes || eventStartMinutes >= timeWindowEndMinutes);\n}\n"],"mappings":";;;;AAUA,SAAS,aAAa,OAA0B;CAC9C,MAAM,QAAQ,MAAM,MAAM,KAAK;CAC/B,MAAM,MAAM,MAAM,MAAM,GAAG;CAC3B,IAAI,CAAC,MAAM,OAAO,MAAM,QAAQ,KAAK,CAAC,GACpC,OAAO;CAET,MAAM,eAAe,MAAM,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK;CACtD,OAAO,IAAI,OAAO,YAAY,KAAK,IAAI,OAAO,aAAa,SAAS,GAAG,QAAQ,CAAC;AAClF;AAEA,SAAgB,mBAAmB,EAAE,OAAO,WAAW,WAAoC;CACzF,IAAI,gBAAgB,KAAK,KAAK,aAAa,KAAK,GAC9C,OAAO;CAGT,IAAI,CAAC,aAAa,CAAC,SACjB,OAAO;CAGT,MAAM,CAAC,WAAW,eAAe,UAAU,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;CAChE,MAAM,CAAC,SAAS,aAAa,QAAQ,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;CAC1D,MAAM,yBAAyB,YAAY,KAAK;CAChD,MAAM,uBAAuB,UAAU,KAAK;CAE5C,MAAM,aAAa,MAAM,MAAM,KAAK;CACpC,MAAM,WAAW,MAAM,MAAM,GAAG;CAChC,MAAM,oBAAoB,WAAW,KAAK,IAAI,KAAK,WAAW,OAAO;CAGrE,OAAO,EAFiB,SAAS,KAAK,IAAI,KAAK,SAAS,OAAO,KAEnC,0BAA0B,qBAAqB;AAC7E"}
1
+ {"version":3,"file":"is-event-in-time-range.mjs","names":[],"sources":["../../../src/utils/is-event-in-time-range/is-event-in-time-range.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport { ScheduleEventData } from '../../types';\nimport { isMultidayEvent } from '../is-multiday-event/is-multiday-event';\n\ninterface IsEventInTimeRangeInput {\n event: ScheduleEventData;\n startTime?: string;\n endTime?: string;\n}\n\nfunction spansFullDay(event: ScheduleEventData) {\n const start = dayjs(event.start);\n const end = dayjs(event.end);\n if (!start.isSame(start.startOf('day'))) {\n return false;\n }\n const nextDayStart = start.startOf('day').add(1, 'day');\n return end.isSame(nextDayStart) || end.isSame(nextDayStart.subtract(1, 'second'));\n}\n\nexport function isEventInTimeRange({ event, startTime, endTime }: IsEventInTimeRangeInput) {\n if (isMultidayEvent(event) || spansFullDay(event)) {\n return true;\n }\n\n if (!startTime || !endTime) {\n return true;\n }\n\n const [startHour, startMinute] = startTime.split(':').map(Number);\n const [endHour, endMinute] = endTime.split(':').map(Number);\n const timeWindowStartMinutes = startHour * 60 + startMinute;\n const timeWindowEndMinutes = endHour * 60 + endMinute;\n\n const eventStart = dayjs(event.start);\n const eventEnd = dayjs(event.end);\n const endsAtNextDayStart = eventEnd.isSame(eventStart.startOf('day').add(1, 'day'), 'second');\n const eventStartMinutes = eventStart.hour() * 60 + eventStart.minute();\n const eventEndMinutes = endsAtNextDayStart ? 24 * 60 : eventEnd.hour() * 60 + eventEnd.minute();\n\n return !(eventEndMinutes <= timeWindowStartMinutes || eventStartMinutes >= timeWindowEndMinutes);\n}\n"],"mappings":";;;;AAUA,SAAS,aAAa,OAA0B;CAC9C,MAAM,QAAQ,MAAM,MAAM,KAAK;CAC/B,MAAM,MAAM,MAAM,MAAM,GAAG;CAC3B,IAAI,CAAC,MAAM,OAAO,MAAM,QAAQ,KAAK,CAAC,GACpC,OAAO;CAET,MAAM,eAAe,MAAM,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK;CACtD,OAAO,IAAI,OAAO,YAAY,KAAK,IAAI,OAAO,aAAa,SAAS,GAAG,QAAQ,CAAC;AAClF;AAEA,SAAgB,mBAAmB,EAAE,OAAO,WAAW,WAAoC;CACzF,IAAI,gBAAgB,KAAK,KAAK,aAAa,KAAK,GAC9C,OAAO;CAGT,IAAI,CAAC,aAAa,CAAC,SACjB,OAAO;CAGT,MAAM,CAAC,WAAW,eAAe,UAAU,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;CAChE,MAAM,CAAC,SAAS,aAAa,QAAQ,MAAM,GAAG,CAAC,CAAC,IAAI,MAAM;CAC1D,MAAM,yBAAyB,YAAY,KAAK;CAChD,MAAM,uBAAuB,UAAU,KAAK;CAE5C,MAAM,aAAa,MAAM,MAAM,KAAK;CACpC,MAAM,WAAW,MAAM,MAAM,GAAG;CAChC,MAAM,qBAAqB,SAAS,OAAO,WAAW,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,GAAG,QAAQ;CAC5F,MAAM,oBAAoB,WAAW,KAAK,IAAI,KAAK,WAAW,OAAO;CAGrE,OAAO,GAFiB,qBAAqB,OAAU,SAAS,KAAK,IAAI,KAAK,SAAS,OAAO,MAElE,0BAA0B,qBAAqB;AAC7E"}
@@ -1,6 +1,6 @@
1
1
  import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaAutosizeProps, StylesApiProps } from '@mantine/core';
2
2
  import { ScheduleLabelsOverride } from '../../labels';
3
- import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleMode, ScheduleViewLevel } from '../../types';
3
+ import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleEventOverlapMode, ScheduleMode, ScheduleViewLevel } from '../../types';
4
4
  import { AgendaViewStylesNames } from '../AgendaView/AgendaView';
5
5
  import { CurrentTimeIndicatorStylesNames } from '../CurrentTimeIndicator/CurrentTimeIndicator';
6
6
  import { MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents';
@@ -8,7 +8,7 @@ import { RenderEvent, RenderEventBody, ScheduleEventStylesNames } from '../Sched
8
8
  import { MonthYearSelectStylesNames } from '../ScheduleHeader/MonthYearSelect/MonthYearSelect';
9
9
  import { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';
10
10
  import { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';
11
- export type DayViewStylesNames = 'dayView' | 'dayViewInner' | 'dayViewScrollArea' | 'dayViewAllDay' | 'dayViewAllDayEvents' | 'dayViewSlot' | 'dayViewSlots' | 'dayViewTimeSlots' | 'dayViewSlotLabel' | 'dayViewSlotLabels' | 'dayViewBackgroundEvent' | MoreEventsStylesNames | ScheduleEventStylesNames | Exclude<CombinedScheduleHeaderStylesNames, MonthYearSelectStylesNames> | CurrentTimeIndicatorStylesNames | AgendaViewStylesNames;
11
+ export type DayViewStylesNames = 'dayView' | 'dayViewInner' | 'dayViewScrollArea' | 'dayViewAllDay' | 'dayViewAllDayEvents' | 'dayViewSlot' | 'dayViewSlots' | 'dayViewTimeSlots' | 'dayViewSlotLabel' | 'dayViewSlotLabels' | 'dayViewBackgroundEvent' | 'dayViewDragPreview' | MoreEventsStylesNames | ScheduleEventStylesNames | Exclude<CombinedScheduleHeaderStylesNames, MonthYearSelectStylesNames> | CurrentTimeIndicatorStylesNames | AgendaViewStylesNames;
12
12
  export type DayViewCssVariables = {
13
13
  dayView: '--day-view-radius' | '--day-view-slot-height' | '--day-view-all-day-slot-height';
14
14
  };
@@ -28,6 +28,10 @@ export interface DayViewProps extends BoxProps, StylesApiProps<DayViewFactory>,
28
28
  intervalMinutes?: number;
29
29
  /** If set, grid lines are displayed for intervals smaller than one hour, for example 15 and 30 minutes intervals @default true */
30
30
  withSubHourGridLines?: boolean;
31
+ /** Determines how events that overlap in time are laid out: `columns` splits the available width between them, `cascade` indents each event and stacks it over the previous one @default 'columns' */
32
+ eventOverlapMode?: ScheduleEventOverlapMode;
33
+ /** Time in ms the pointer must rest on an event before it is raised above the events covering it, only used with `eventOverlapMode="cascade"` @default 600 */
34
+ eventOverlapRaiseDelay?: number;
31
35
  /** If set, the all-day slot is displayed below the header @default true */
32
36
  withAllDaySlot?: boolean;
33
37
  /** Locale passed down to dayjs, overrides value defined on `DatesProvider` */
@@ -85,6 +89,8 @@ export interface DayViewProps extends BoxProps, StylesApiProps<DayViewFactory>,
85
89
  }) => void;
86
90
  /** Function to determine if event can be dragged */
87
91
  canDragEvent?: (event: ScheduleEventData) => boolean;
92
+ /** Snap step for moving events by drag and drop, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
93
+ eventDragInterval?: number;
88
94
  /** Called when any event drag starts */
89
95
  onEventDragStart?: (event: ScheduleEventData) => void;
90
96
  /** Called when any event drag ends */
@@ -99,6 +105,8 @@ export interface DayViewProps extends BoxProps, StylesApiProps<DayViewFactory>,
99
105
  onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
100
106
  /** Called when event is clicked */
101
107
  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
108
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick` @default false */
109
+ withInteractiveBackgroundEvents?: boolean;
102
110
  /** If set, enables drag-to-select time slot ranges @default false */
103
111
  withDragSlotSelect?: boolean;
104
112
  /** Called when a time slot range is selected by dragging */
@@ -120,6 +128,8 @@ export interface DayViewProps extends BoxProps, StylesApiProps<DayViewFactory>,
120
128
  }) => void;
121
129
  /** Function to determine if event can be resized */
122
130
  canResizeEvent?: (event: ScheduleEventData) => boolean;
131
+ /** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
132
+ eventResizeInterval?: number;
123
133
  /** Max number of generated recurring instances per recurring series @default 2000 */
124
134
  recurrenceExpansionLimit?: number;
125
135
  /** Function to get additional props for each time slot. Receives slot start and end datetime strings. Returned props are spread onto the slot element. Event handlers returned by this function are composed with internal handlers (e.g. onClick) rather than overriding them. */
@@ -1,4 +1,4 @@
1
- import { AnyDateValue, DayPositionedEventData, ScheduleEventData } from '../../../types';
1
+ import { AnyDateValue, DayPositionedEventData, ScheduleEventData, ScheduleEventOverlapMode } from '../../../types';
2
2
  interface GetDayPositionedEventsInput {
3
3
  /** Date at which events are positioned, used to check if events are all-day */
4
4
  date: AnyDateValue;
@@ -10,6 +10,8 @@ interface GetDayPositionedEventsInput {
10
10
  endTime?: string;
11
11
  /** Number of minutes per time slot, used to align the canvas to whole slots */
12
12
  intervalMinutes?: number;
13
+ /** Determines how events that overlap in time are laid out @default 'columns' */
14
+ eventOverlapMode?: ScheduleEventOverlapMode;
13
15
  }
14
- export declare function getDayPositionedEvents({ events, startTime, endTime, intervalMinutes, date, }: GetDayPositionedEventsInput): DayPositionedEventData[];
16
+ export declare function getDayPositionedEvents({ events, startTime, endTime, intervalMinutes, date, eventOverlapMode, }: GetDayPositionedEventsInput): DayPositionedEventData[];
15
17
  export {};
@@ -1,12 +1,13 @@
1
- import { AnyDateValue, DayPositionedEventData, ScheduleEventData } from '../../../types';
1
+ import { AnyDateValue, DayPositionedEventData, ScheduleEventData, ScheduleEventOverlapMode } from '../../../types';
2
2
  interface GetDayViewEventsInput {
3
3
  events: ScheduleEventData[] | undefined;
4
4
  date: AnyDateValue;
5
5
  startTime?: string;
6
6
  endTime?: string;
7
7
  intervalMinutes?: number;
8
+ eventOverlapMode?: ScheduleEventOverlapMode;
8
9
  }
9
- export declare function getDayViewEvents({ events, date, startTime, endTime, intervalMinutes, }: GetDayViewEventsInput): {
10
+ export declare function getDayViewEvents({ events, date, startTime, endTime, intervalMinutes, eventOverlapMode, }: GetDayViewEventsInput): {
10
11
  allDayEvents: DayPositionedEventData[];
11
12
  regularEvents: DayPositionedEventData[];
12
13
  backgroundTimedEvents: DayPositionedEventData[];
@@ -86,6 +86,8 @@ export interface MonthViewProps extends BoxProps, StylesApiProps<MonthViewFactor
86
86
  onEventDragEnd?: () => void;
87
87
  /** Called when event is clicked */
88
88
  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
89
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick` @default false */
90
+ withInteractiveBackgroundEvents?: boolean;
89
91
  /** If set, enables drag-to-select day ranges @default false */
90
92
  withDragSlotSelect?: boolean;
91
93
  /** Called when a day range is selected by dragging */
@@ -5,7 +5,7 @@ import { MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents
5
5
  import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
6
6
  import { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';
7
7
  import { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';
8
- export type ResourcesDayViewStylesNames = 'resourcesDayView' | 'resourcesDayViewRoot' | 'resourcesDayViewInner' | 'resourcesDayViewTimeLabelsRow' | 'resourcesDayViewScrollArea' | 'resourcesDayViewCorner' | 'resourcesDayViewTimeLabel' | 'resourcesDayViewResourceLabel' | 'resourcesDayViewRow' | 'resourcesDayViewRowSlot' | 'resourcesDayViewRowSlots' | 'resourcesDayViewBackgroundEvent' | 'resourcesDayViewAllDayEvent' | 'resourcesDayViewCurrentTimeIndicator' | 'resourcesDayViewCurrentTimeIndicatorLine' | 'resourcesDayViewCurrentTimeIndicatorThumb' | 'resourcesDayViewCurrentTimeIndicatorTimeBubble' | 'resourcesDayViewEventWrapper' | 'resourcesDayViewResizeHandle' | 'resourcesDayViewGroupColumn' | 'resourcesDayViewGroupColumnEmpty' | MoreEventsStylesNames | CombinedScheduleHeaderStylesNames;
8
+ export type ResourcesDayViewStylesNames = 'resourcesDayView' | 'resourcesDayViewRoot' | 'resourcesDayViewInner' | 'resourcesDayViewTimeLabelsRow' | 'resourcesDayViewScrollArea' | 'resourcesDayViewCorner' | 'resourcesDayViewTimeLabel' | 'resourcesDayViewResourceLabel' | 'resourcesDayViewRow' | 'resourcesDayViewRowSlot' | 'resourcesDayViewRowSlots' | 'resourcesDayViewBackgroundEvent' | 'resourcesDayViewAllDayEvent' | 'resourcesDayViewCurrentTimeIndicator' | 'resourcesDayViewCurrentTimeIndicatorLine' | 'resourcesDayViewCurrentTimeIndicatorThumb' | 'resourcesDayViewCurrentTimeIndicatorTimeBubble' | 'resourcesDayViewEventWrapper' | 'resourcesDayViewDragPreview' | 'resourcesDayViewResizeHandle' | 'resourcesDayViewGroupColumn' | 'resourcesDayViewGroupColumnEmpty' | MoreEventsStylesNames | CombinedScheduleHeaderStylesNames;
9
9
  export type ResourcesDayViewCssVariables = {
10
10
  resourcesDayView: '--resources-day-view-radius' | '--resources-day-view-slot-width' | '--resources-day-view-row-height' | '--resources-day-view-group-label-width';
11
11
  };
@@ -91,6 +91,8 @@ export interface ResourcesDayViewProps extends BoxProps, StylesApiProps<Resource
91
91
  }) => void;
92
92
  /** Function to determine if event can be dragged */
93
93
  canDragEvent?: (event: ScheduleEventData) => boolean;
94
+ /** Snap step for moving events by drag and drop, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
95
+ eventDragInterval?: number;
94
96
  /** Called when any event drag starts */
95
97
  onEventDragStart?: (event: ScheduleEventData) => void;
96
98
  /** Called when any event drag ends */
@@ -104,6 +106,8 @@ export interface ResourcesDayViewProps extends BoxProps, StylesApiProps<Resource
104
106
  }) => void;
105
107
  /** Called when event is clicked */
106
108
  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
109
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick` @default false */
110
+ withInteractiveBackgroundEvents?: boolean;
107
111
  /** If set, enables drag-to-select time slot ranges @default false */
108
112
  withDragSlotSelect?: boolean;
109
113
  /** Called when a time slot range is selected by dragging, includes resourceId */
@@ -131,6 +135,8 @@ export interface ResourcesDayViewProps extends BoxProps, StylesApiProps<Resource
131
135
  }) => void;
132
136
  /** Function to determine if event can be resized */
133
137
  canResizeEvent?: (event: ScheduleEventData) => boolean;
138
+ /** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
139
+ eventResizeInterval?: number;
134
140
  /** Max number of generated recurring instances per recurring series @default 2000 */
135
141
  recurrenceExpansionLimit?: number;
136
142
  /** Maximum number of events visible per time slot before "+more" indicator shows, minimum value is 1 @default 2 */
@@ -36,4 +36,4 @@ export interface ResourcesDayViewRowProps {
36
36
  groupInfo?: ResourceGroupInfo | null;
37
37
  allDayCount?: number;
38
38
  }
39
- export declare function ResourcesDayViewRow({ resource, resourceIndex, date, 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, }: ResourcesDayViewRowProps): import("react/jsx-runtime").JSX.Element;
39
+ export declare function ResourcesDayViewRow({ resource, resourceIndex, date, 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, }: ResourcesDayViewRowProps): import("react").JSX.Element;
@@ -7,7 +7,7 @@ import { ResourcesWeekViewProps, ResourcesWeekViewStylesNames } from '../Resourc
7
7
  import { RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
8
8
  export type ResourcesScheduleStylesNames = 'root' | ResourcesDayViewStylesNames | ResourcesWeekViewStylesNames | ResourcesMonthViewStylesNames;
9
9
  export type ResourcesScheduleViewLevel = 'day' | 'week' | 'month';
10
- type ResourcesScheduleCommonProps = 'date' | 'onDateChange' | 'resources' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'renderResourceLabel' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onEventClick' | 'onDayClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'recurrenceExpansionLimit';
10
+ type ResourcesScheduleCommonProps = 'date' | 'onDateChange' | 'resources' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'renderResourceLabel' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onEventClick' | 'onDayClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'recurrenceExpansionLimit' | 'withInteractiveBackgroundEvents';
11
11
  type ResourcesScheduleViewProps<T> = Partial<Omit<T, ResourcesScheduleCommonProps>>;
12
12
  export interface ResourcesScheduleProps extends BoxProps, StylesApiProps<ResourcesScheduleFactory>, ElementProps<'div'> {
13
13
  __staticSelector?: string;
@@ -95,6 +95,8 @@ export interface ResourcesScheduleProps extends BoxProps, StylesApiProps<Resourc
95
95
  }) => void;
96
96
  /** Function to determine if event can be resized */
97
97
  canResizeEvent?: (event: ScheduleEventData) => boolean;
98
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day` and `week` views only – `ResourcesMonthView` does not render background events separately. @default false */
99
+ withInteractiveBackgroundEvents?: boolean;
98
100
  /** Max number of generated recurring instances @default 2000 */
99
101
  recurrenceExpansionLimit?: number;
100
102
  /** Props specific to ResourcesDayView */
@@ -5,7 +5,7 @@ import { MoreEventsProps, MoreEventsStylesNames } from '../MoreEvents/MoreEvents
5
5
  import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
6
6
  import { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';
7
7
  import { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';
8
- export type ResourcesWeekViewStylesNames = 'resourcesWeekView' | 'resourcesWeekViewRoot' | 'resourcesWeekViewInner' | 'resourcesWeekViewHeaderRows' | 'resourcesWeekViewHeaderContent' | 'resourcesWeekViewDayLabelsRow' | 'resourcesWeekViewDayLabel' | 'resourcesWeekViewTimeLabelsRow' | 'resourcesWeekViewScrollArea' | 'resourcesWeekViewCorner' | 'resourcesWeekViewTimeLabel' | 'resourcesWeekViewResourceLabel' | 'resourcesWeekViewRow' | 'resourcesWeekViewRowSlot' | 'resourcesWeekViewRowSlots' | 'resourcesWeekViewBackgroundEvent' | 'resourcesWeekViewAllDayEvent' | 'resourcesWeekViewCurrentTimeIndicator' | 'resourcesWeekViewCurrentTimeIndicatorLine' | 'resourcesWeekViewCurrentTimeIndicatorThumb' | 'resourcesWeekViewCurrentTimeIndicatorTimeBubble' | 'resourcesWeekViewEventWrapper' | 'resourcesWeekViewResizeHandle' | 'resourcesWeekViewGroupColumn' | 'resourcesWeekViewGroupColumnEmpty' | MoreEventsStylesNames | CombinedScheduleHeaderStylesNames;
8
+ export type ResourcesWeekViewStylesNames = 'resourcesWeekView' | 'resourcesWeekViewRoot' | 'resourcesWeekViewInner' | 'resourcesWeekViewHeaderRows' | 'resourcesWeekViewHeaderContent' | 'resourcesWeekViewDayLabelsRow' | 'resourcesWeekViewDayLabel' | 'resourcesWeekViewTimeLabelsRow' | 'resourcesWeekViewScrollArea' | 'resourcesWeekViewCorner' | 'resourcesWeekViewTimeLabel' | 'resourcesWeekViewResourceLabel' | 'resourcesWeekViewRow' | 'resourcesWeekViewRowSlot' | 'resourcesWeekViewRowSlots' | 'resourcesWeekViewBackgroundEvent' | 'resourcesWeekViewAllDayEvent' | 'resourcesWeekViewCurrentTimeIndicator' | 'resourcesWeekViewCurrentTimeIndicatorLine' | 'resourcesWeekViewCurrentTimeIndicatorThumb' | 'resourcesWeekViewCurrentTimeIndicatorTimeBubble' | 'resourcesWeekViewEventWrapper' | 'resourcesWeekViewDragPreview' | 'resourcesWeekViewResizeHandle' | 'resourcesWeekViewGroupColumn' | 'resourcesWeekViewGroupColumnEmpty' | MoreEventsStylesNames | CombinedScheduleHeaderStylesNames;
9
9
  export type ResourcesWeekViewCssVariables = {
10
10
  resourcesWeekView: '--resources-week-view-radius' | '--resources-week-view-slot-width' | '--resources-week-view-row-height' | '--resources-week-view-group-label-width';
11
11
  };
@@ -65,6 +65,8 @@ export interface ResourcesWeekViewProps extends BoxProps, StylesApiProps<Resourc
65
65
  resourceId?: string | number;
66
66
  }) => void;
67
67
  canDragEvent?: (event: ScheduleEventData) => boolean;
68
+ /** Snap step for moving events by drag and drop, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
69
+ eventDragInterval?: number;
68
70
  onEventDragStart?: (event: ScheduleEventData) => void;
69
71
  onEventDragEnd?: () => void;
70
72
  onTimeSlotClick?: (data: {
@@ -74,6 +76,8 @@ export interface ResourcesWeekViewProps extends BoxProps, StylesApiProps<Resourc
74
76
  resourceId?: string | number;
75
77
  }) => void;
76
78
  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
79
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick` @default false */
80
+ withInteractiveBackgroundEvents?: boolean;
77
81
  withDragSlotSelect?: boolean;
78
82
  onSlotDragEnd?: (data: {
79
83
  rangeStart: DateTimeStringValue;
@@ -97,6 +101,8 @@ export interface ResourcesWeekViewProps extends BoxProps, StylesApiProps<Resourc
97
101
  }) => void;
98
102
  /** Function to determine if event can be resized */
99
103
  canResizeEvent?: (event: ScheduleEventData) => boolean;
104
+ /** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
105
+ eventResizeInterval?: number;
100
106
  recurrenceExpansionLimit?: number;
101
107
  /** Maximum number of events visible per time slot before "+more" indicator shows, minimum value is 1 @default 2 */
102
108
  maxEventsPerTimeSlot?: number;
@@ -36,4 +36,4 @@ export interface ResourcesWeekViewRowProps {
36
36
  groupInfo?: ResourceGroupInfo | null;
37
37
  allDayCount?: number;
38
38
  }
39
- export declare 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, }: ResourcesWeekViewRowProps): import("react/jsx-runtime").JSX.Element;
39
+ export declare 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, }: ResourcesWeekViewRowProps): import("react").JSX.Element;
@@ -9,7 +9,7 @@ import { WeekViewProps, WeekViewStylesNames } from '../WeekView/WeekView';
9
9
  import { YearViewProps, YearViewStylesNames } from '../YearView/YearView';
10
10
  export type ScheduleStylesNames = 'root' | 'desktopView' | 'mobileView' | DayViewStylesNames | WeekViewStylesNames | MonthViewStylesNames | YearViewStylesNames | MobileMonthViewStylesNames;
11
11
  export type ScheduleLayout = 'default' | 'responsive';
12
- type ScheduleCommonProps = 'date' | 'onDateChange' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onAllDaySlotClick' | 'onEventClick' | 'onDayClick' | 'onMonthClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'withAgenda' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'recurrenceExpansionLimit';
12
+ type ScheduleCommonProps = 'date' | 'onDateChange' | 'events' | 'locale' | 'radius' | 'labels' | 'renderEventBody' | 'withEventsDragAndDrop' | 'onEventDrop' | 'canDragEvent' | 'onEventDragStart' | 'onEventDragEnd' | 'onTimeSlotClick' | 'onAllDaySlotClick' | 'onEventClick' | 'onDayClick' | 'onMonthClick' | 'withDragSlotSelect' | 'onSlotDragEnd' | 'view' | 'onViewChange' | 'mode' | 'withAgenda' | 'onExternalEventDrop' | 'withEventResize' | 'onEventResize' | 'canResizeEvent' | 'recurrenceExpansionLimit' | 'withInteractiveBackgroundEvents';
13
13
  type ScheduleViewProps<T> = Partial<Omit<T, ScheduleCommonProps>>;
14
14
  export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>, ElementProps<'div'> {
15
15
  __staticSelector?: string;
@@ -84,6 +84,8 @@ export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>
84
84
  }) => void;
85
85
  /** Function to determine if event can be resized */
86
86
  canResizeEvent?: (event: ScheduleEventData) => boolean;
87
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day`, `week` and `month` views only – `YearView` and the `MobileMonthView` used by `layout="responsive"` on small screens do not render background events at all. @default false */
88
+ withInteractiveBackgroundEvents?: boolean;
87
89
  /** Max number of generated recurring instances per recurring series @default 2000 */
88
90
  recurrenceExpansionLimit?: number;
89
91
  /** Layout mode:
@@ -0,0 +1,19 @@
1
+ import { BoxProps, ElementProps } from '@mantine/core';
2
+ import { ScheduleEventData } from '../../types';
3
+ import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
4
+ export interface ScheduleBackgroundEventProps extends BoxProps, ElementProps<'div', 'onClick'> {
5
+ /** Background event to display */
6
+ event: ScheduleEventData;
7
+ /** If set, the root element is a `button` instead of a `div` and the event can be clicked @default false */
8
+ interactive?: boolean;
9
+ /** Called when the event is clicked, only when `interactive` is set */
10
+ onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
11
+ /** Function to fully customize event rendering */
12
+ renderEvent?: RenderEvent;
13
+ /** Function to customize event body */
14
+ renderEventBody?: RenderEventBody;
15
+ }
16
+ export declare function ScheduleBackgroundEvent(props: ScheduleBackgroundEventProps): import("react").JSX.Element;
17
+ export declare namespace ScheduleBackgroundEvent {
18
+ var displayName: string;
19
+ }
@@ -0,0 +1,2 @@
1
+ export { ScheduleBackgroundEvent } from './ScheduleBackgroundEvent';
2
+ export type { ScheduleBackgroundEventProps } from './ScheduleBackgroundEvent';
@@ -29,15 +29,15 @@ export declare const HeaderControl: import("@mantine/core").MantineComponent<{
29
29
  stylesNames: HeaderControlStylesNames;
30
30
  vars: HeaderControlCssVariables;
31
31
  }>;
32
- export declare function ScheduleHeaderNext(props: HeaderControlProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function ScheduleHeaderNext(props: HeaderControlProps): import("react").JSX.Element;
33
33
  export declare namespace ScheduleHeaderNext {
34
34
  var displayName: string;
35
35
  }
36
- export declare function ScheduleHeaderPrevious(props: HeaderControlProps): import("react/jsx-runtime").JSX.Element;
36
+ export declare function ScheduleHeaderPrevious(props: HeaderControlProps): import("react").JSX.Element;
37
37
  export declare namespace ScheduleHeaderPrevious {
38
38
  var displayName: string;
39
39
  }
40
- export declare function ScheduleHeaderToday(props: HeaderControlProps): import("react/jsx-runtime").JSX.Element;
40
+ export declare function ScheduleHeaderToday(props: HeaderControlProps): import("react").JSX.Element;
41
41
  export declare namespace ScheduleHeaderToday {
42
42
  var displayName: string;
43
43
  }
@@ -53,5 +53,5 @@ export interface ScheduleHeaderBaseProps {
53
53
  /** Whether the agenda view is currently active */
54
54
  agendaActive?: boolean;
55
55
  }
56
- export declare function ScheduleHeaderBase({ view, navigationHandlers, control, labels, onDateChange, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, stylesApiProps, onAgendaClick, agendaActive, }: ScheduleHeaderBaseProps): import("react/jsx-runtime").JSX.Element;
56
+ export declare function ScheduleHeaderBase({ view, navigationHandlers, control, labels, onDateChange, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, stylesApiProps, onAgendaClick, agendaActive, }: ScheduleHeaderBaseProps): import("react").JSX.Element;
57
57
  export {};
@@ -1,13 +1,13 @@
1
1
  import { BoxProps, DataAttributes, ElementProps, Factory, MantineRadius, ScrollAreaAutosizeProps, StylesApiProps } from '@mantine/core';
2
2
  import { ScheduleLabelsOverride } from '../../labels';
3
- import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleEventData, ScheduleMode, ScheduleViewLevel } from '../../types';
3
+ import { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleEventData, ScheduleEventOverlapMode, ScheduleMode, ScheduleViewLevel } from '../../types';
4
4
  import { BusinessHoursValue } from '../../utils';
5
5
  import { AgendaViewStylesNames } from '../AgendaView/AgendaView';
6
6
  import { CurrentTimeIndicatorStylesNames } from '../CurrentTimeIndicator/CurrentTimeIndicator';
7
7
  import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
8
8
  import { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';
9
9
  import { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';
10
- export type WeekViewStylesNames = 'weekView' | 'weekViewRoot' | 'weekViewHeader' | 'weekViewInner' | 'weekViewAllDaySlotsEvents' | 'weekViewAllDaySlots' | 'weekViewAllDaySlotsList' | 'weekViewAllDaySlot' | 'weekViewAllDaySlotsLabel' | 'weekViewScrollArea' | 'weekViewCorner' | 'weekViewSlotLabels' | 'weekViewSlotLabel' | 'weekViewDayLabel' | 'weekViewDayWeekday' | 'weekViewDay' | 'weekViewDayNumber' | 'weekViewDaySlot' | 'weekViewDaySlots' | 'weekViewWeekLabel' | 'weekViewWeekNumber' | 'weekViewBackgroundEvent' | CurrentTimeIndicatorStylesNames | CombinedScheduleHeaderStylesNames | AgendaViewStylesNames;
10
+ export type WeekViewStylesNames = 'weekView' | 'weekViewRoot' | 'weekViewHeader' | 'weekViewInner' | 'weekViewAllDaySlotsEvents' | 'weekViewAllDaySlots' | 'weekViewAllDaySlotsList' | 'weekViewAllDaySlot' | 'weekViewAllDaySlotsLabel' | 'weekViewScrollArea' | 'weekViewCorner' | 'weekViewSlotLabels' | 'weekViewSlotLabel' | 'weekViewDayLabel' | 'weekViewDayWeekday' | 'weekViewDay' | 'weekViewDayNumber' | 'weekViewDaySlot' | 'weekViewDaySlots' | 'weekViewWeekLabel' | 'weekViewWeekNumber' | 'weekViewBackgroundEvent' | 'weekViewDragPreview' | CurrentTimeIndicatorStylesNames | CombinedScheduleHeaderStylesNames | AgendaViewStylesNames;
11
11
  export type WeekViewCssVariables = {
12
12
  weekView: '--week-view-radius' | '--week-view-slot-height' | '--week-view-all-day-slots-height';
13
13
  };
@@ -35,6 +35,10 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
35
35
  weekendDays?: DayOfWeek[];
36
36
  /** If set to false, weekend days are hidden @default true */
37
37
  withWeekendDays?: boolean;
38
+ /** Determines how events that overlap in time are laid out: `columns` splits the available width between them, `cascade` indents each event and stacks it over the previous one @default 'columns' */
39
+ eventOverlapMode?: ScheduleEventOverlapMode;
40
+ /** Time in ms the pointer must rest on an event before it is raised above the events covering it, only used with `eventOverlapMode="cascade"` @default 600 */
41
+ eventOverlapRaiseDelay?: number;
38
42
  /** If set to true, highlights today in the weekday row @default false */
39
43
  highlightToday?: boolean;
40
44
  /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */
@@ -96,6 +100,8 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
96
100
  }) => void;
97
101
  /** Function to determine if event can be dragged */
98
102
  canDragEvent?: (event: ScheduleEventData) => boolean;
103
+ /** Snap step for moving events by drag and drop, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
104
+ eventDragInterval?: number;
99
105
  /** Called when any event drag starts */
100
106
  onEventDragStart?: (event: ScheduleEventData) => void;
101
107
  /** Called when any event drag ends */
@@ -110,6 +116,8 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
110
116
  onAllDaySlotClick?: (day: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
111
117
  /** Called when event is clicked */
112
118
  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
119
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick` @default false */
120
+ withInteractiveBackgroundEvents?: boolean;
113
121
  /** If set, enables drag-to-select time slot ranges @default false */
114
122
  withDragSlotSelect?: boolean;
115
123
  /** Called when a time slot range is selected by dragging */
@@ -136,6 +144,8 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
136
144
  }) => void;
137
145
  /** Function to determine if event can be resized */
138
146
  canResizeEvent?: (event: ScheduleEventData) => boolean;
147
+ /** Snap step for resizing events, in minutes. Must divide evenly into an hour (e.g. `15`, `30`) or be a whole number of hours. When not set, `intervalMinutes` is used. @default intervalMinutes */
148
+ eventResizeInterval?: number;
139
149
  /** Max number of generated recurring instances per recurring series @default 2000 */
140
150
  recurrenceExpansionLimit?: number;
141
151
  /** Function to get additional props for each time slot. Receives slot start and end datetime strings. Returned props are spread onto the slot element. Event handlers returned by this function are composed with internal handlers (e.g. onClick) rather than overriding them. */
@@ -64,4 +64,4 @@ export interface WeekViewDayProps {
64
64
  end: DateTimeStringValue;
65
65
  }) => Record<string, any> | undefined;
66
66
  }
67
- export declare function WeekViewDay({ day, dayIndex, slots, intervalMinutes, getStyles, weekendDays, children, labels, highlightBusinessHours, businessHours, withEventsDragAndDrop, onDaySlotsDragOver, onDaySlotsDragLeave, onDaySlotsDrop, onSlotClick, dropTargetSlotIndex, mode, slotsRef, firstSlotIndex, onSlotKeyDown, onFirstSlotArrowUp, withDragSlotSelect, onSlotPointerDown, isSlotDragSelected, daySlotsContainerRef, getTimeSlotProps, }: WeekViewDayProps): import("react/jsx-runtime").JSX.Element;
67
+ export declare function WeekViewDay({ day, dayIndex, slots, intervalMinutes, getStyles, weekendDays, children, labels, highlightBusinessHours, businessHours, withEventsDragAndDrop, onDaySlotsDragOver, onDaySlotsDragLeave, onDaySlotsDrop, onSlotClick, dropTargetSlotIndex, mode, slotsRef, firstSlotIndex, onSlotKeyDown, onFirstSlotArrowUp, withDragSlotSelect, onSlotPointerDown, isSlotDragSelected, daySlotsContainerRef, getTimeSlotProps, }: WeekViewDayProps): import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { AnyDateValue, DateStringValue, DayOfWeek, ScheduleEventData, WeekPositionedEventData } from '../../../types';
1
+ import { AnyDateValue, DateStringValue, DayOfWeek, ScheduleEventData, ScheduleEventOverlapMode, WeekPositionedEventData } from '../../../types';
2
2
  export interface GetWeekPositionedEventsInput {
3
3
  /** Date (week start) at which events are positioned, used to check if events are all-day */
4
4
  date: AnyDateValue;
@@ -16,6 +16,8 @@ export interface GetWeekPositionedEventsInput {
16
16
  weekendDays?: DayOfWeek[];
17
17
  /** If set to false, weekend days are hidden @default true */
18
18
  withWeekendDays?: boolean;
19
+ /** Determines how events that overlap in time are laid out @default 'columns' */
20
+ eventOverlapMode?: ScheduleEventOverlapMode;
19
21
  }
20
22
  /** Events grouped by week day date (YYYY-MM-DD 00:00:00) and by columns */
21
23
  export interface GroupedWeekEvents {
@@ -23,4 +25,4 @@ export interface GroupedWeekEvents {
23
25
  regularEvents: Record<DateStringValue, WeekPositionedEventData[]>;
24
26
  backgroundEvents: Record<DateStringValue, WeekPositionedEventData[]>;
25
27
  }
26
- export declare function getWeekPositionedEvents({ date, events, startTime, endTime, intervalMinutes, firstDayOfWeek, weekendDays, withWeekendDays, }: GetWeekPositionedEventsInput): GroupedWeekEvents;
28
+ export declare function getWeekPositionedEvents({ date, events, startTime, endTime, intervalMinutes, firstDayOfWeek, weekendDays, withWeekendDays, eventOverlapMode, }: GetWeekPositionedEventsInput): GroupedWeekEvents;
@@ -68,4 +68,4 @@ export interface YearViewMonthProps extends YearViewMonthSettings {
68
68
  dayIndex: number;
69
69
  };
70
70
  }
71
- export declare function YearViewMonth({ month, getStyles, monthLabelFormat, withWeekNumbers, withWeekDays, locale, firstDayOfWeek, weekdayFormat, weekendDays, withWeekendDays, getDayProps, onDayClick, onWeekNumberClick, onMonthClick, getWeekNumberProps, highlightToday, groupedEvents, mode, withOutsideDays, renderDay, __getDayRef, __onDayKeyDown, firstDayIndex, }: YearViewMonthProps): import("react/jsx-runtime").JSX.Element;
71
+ export declare function YearViewMonth({ month, getStyles, monthLabelFormat, withWeekNumbers, withWeekDays, locale, firstDayOfWeek, weekdayFormat, weekendDays, withWeekendDays, getDayProps, onDayClick, onWeekNumberClick, onMonthClick, getWeekNumberProps, highlightToday, groupedEvents, mode, withOutsideDays, renderDay, __getDayRef, __onDayKeyDown, firstDayIndex, }: YearViewMonthProps): import("react").JSX.Element;
@@ -1,5 +1,10 @@
1
1
  import { DragContextValue } from '../components/DragContext/DragContext';
2
2
  import { DateTimeStringValue, ScheduleEventData, ScheduleMode } from '../types';
3
+ export interface DragPreview<T = any> {
4
+ start: DateTimeStringValue;
5
+ end: DateTimeStringValue;
6
+ target: T;
7
+ }
3
8
  export interface UseDragDropHandlersOptions<T = any> {
4
9
  /** Whether drag and drop is enabled */
5
10
  enabled: boolean;
@@ -41,13 +46,17 @@ export interface DragDropHandlers<T = any> {
41
46
  /** Handle drag over event */
42
47
  handleDragOver: (e: React.DragEvent, target: T) => void;
43
48
  /** Handle drag leave event */
44
- handleDragLeave: () => void;
49
+ handleDragLeave: (event?: React.DragEvent) => void;
45
50
  /** Handle drop event */
46
51
  handleDrop: (e: React.DragEvent, target: T) => void;
47
52
  /** Check if event is draggable */
48
53
  isDraggableEvent: (event: ScheduleEventData) => boolean;
49
54
  /** Check if target is the current drop target */
50
55
  isDropTarget: (target: T) => boolean;
56
+ /** Snapped drop preview used to render the drag ghost, or `null` when not dragging */
57
+ dragPreview: DragPreview<T> | null;
58
+ /** Sets the current drag preview */
59
+ setDragPreview: (preview: DragPreview<T> | null) => void;
51
60
  }
52
61
  /**
53
62
  * Hook that provides unified drag-drop handlers for Schedule views.
@@ -6,6 +6,7 @@ export interface UseEventResizeInput {
6
6
  startTime: string;
7
7
  endTime: string;
8
8
  intervalMinutes: number;
9
+ resizeIntervalMinutes?: number;
9
10
  onEventResize?: (data: {
10
11
  eventId: string | number;
11
12
  newStart: DateTimeStringValue;
@@ -14,7 +15,7 @@ export interface UseEventResizeInput {
14
15
  }) => void;
15
16
  canResizeEvent?: (event: ScheduleEventData) => boolean;
16
17
  }
17
- export declare function useEventResize({ enabled, mode, startTime, endTime, intervalMinutes, onEventResize, canResizeEvent, }: UseEventResizeInput): {
18
+ export declare function useEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, }: UseEventResizeInput): {
18
19
  handleResizeStart: ({ event, edge, container, originalTop, originalHeight, eventDate, pointerEvent, }: {
19
20
  event: ScheduleEventData;
20
21
  edge: ResizeEdge;
@@ -6,6 +6,7 @@ export interface UseHorizontalEventResizeInput {
6
6
  startTime: string;
7
7
  endTime: string;
8
8
  intervalMinutes: number;
9
+ resizeIntervalMinutes?: number;
9
10
  onEventResize?: (data: {
10
11
  eventId: string | number;
11
12
  newStart: DateTimeStringValue;
@@ -14,7 +15,7 @@ export interface UseHorizontalEventResizeInput {
14
15
  }) => void;
15
16
  canResizeEvent?: (event: ScheduleEventData) => boolean;
16
17
  }
17
- export declare function useHorizontalEventResize({ enabled, mode, startTime, endTime, intervalMinutes, onEventResize, canResizeEvent, }: UseHorizontalEventResizeInput): {
18
+ export declare function useHorizontalEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, }: UseHorizontalEventResizeInput): {
18
19
  handleResizeStart: ({ event, edge, container, originalLeft, originalWidth, eventDate, dayIndex, dayCount, pointerEvent, }: {
19
20
  event: ScheduleEventData;
20
21
  edge: ResizeEdge;
package/lib/index.d.mts CHANGED
@@ -12,6 +12,7 @@ export * from './components/ResourcesWeekView';
12
12
  export * from './components/ResourcesMonthView';
13
13
  export * from './components/ResourcesSchedule';
14
14
  export * from './components/AgendaView';
15
+ export * from './components/ScheduleBackgroundEvent';
15
16
  export * from './components/ScheduleEvent';
16
17
  export * from './components/ScheduleHeader';
17
18
  export * from './components/CurrentTimeIndicator';
package/lib/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export * from './components/ResourcesWeekView';
12
12
  export * from './components/ResourcesMonthView';
13
13
  export * from './components/ResourcesSchedule';
14
14
  export * from './components/AgendaView';
15
+ export * from './components/ScheduleBackgroundEvent';
15
16
  export * from './components/ScheduleEvent';
16
17
  export * from './components/ScheduleHeader';
17
18
  export * from './components/CurrentTimeIndicator';
package/lib/types.d.ts CHANGED
@@ -68,7 +68,7 @@ interface ScheduleEventBase<Payload extends EventPayload = EventPayload> {
68
68
  color: MantineColor;
69
69
  /** Event variant, default is `'light'` */
70
70
  variant?: 'filled' | 'light';
71
- /** Event display mode. Background events render as full-width, non-interactive blocks behind regular events. @default 'default' */
71
+ /** Event display mode. Background events render as full-width blocks behind regular events, non-interactive unless `withInteractiveBackgroundEvents` is set on the view. @default 'default' */
72
72
  display?: 'default' | 'background';
73
73
  /** Additional event data, defined by the user, not used internally by the library */
74
74
  payload?: Payload;
@@ -102,6 +102,8 @@ interface ScheduleEventRuntimeMeta {
102
102
  }
103
103
  /** Event data object passed to all `@mantine/schedule` components */
104
104
  export type ScheduleEventData<Payload extends EventPayload = EventPayload> = (ScheduleSingleEventData<Payload> & ScheduleEventRuntimeMeta) | (ScheduleRecurringSeriesEventData<Payload> & ScheduleEventRuntimeMeta) | (ScheduleRecurringOverrideEventData<Payload> & ScheduleEventRuntimeMeta);
105
+ /** Controls how events that overlap in time are laid out along the horizontal axis */
106
+ export type ScheduleEventOverlapMode = 'columns' | 'cascade';
105
107
  export interface DayEventPositionData {
106
108
  /** All day events */
107
109
  allDay: boolean;
@@ -0,0 +1,6 @@
1
+ import { DayEventPositionData, ScheduleEventData } from '../../types';
2
+ /** Minimal shape `applyCascadeLayout` needs, shared by day and week positioned events */
3
+ export type CascadePositionedEvent = ScheduleEventData & {
4
+ position: Pick<DayEventPositionData, 'allDay' | 'column' | 'width' | 'offset' | 'overlaps'>;
5
+ };
6
+ export declare function applyCascadeLayout<T extends CascadePositionedEvent>(events: T[]): void;