@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":"ScheduleHeader.mjs","names":["classes"],"sources":["../../../src/components/ScheduleHeader/ScheduleHeader.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n HeaderControl,\n HeaderControlStylesNames,\n ScheduleHeaderNext,\n ScheduleHeaderPrevious,\n ScheduleHeaderToday,\n} from './HeaderControl/HeaderControl';\nimport { MonthYearSelect, MonthYearSelectStylesNames } from './MonthYearSelect/MonthYearSelect';\nimport { ScheduleHeaderLabelsContext } from './ScheduleHeaderContext';\nimport { ViewSelect, ViewSelectStylesNames } from './ViewSelect/ViewSelect';\nimport classes from './ScheduleHeader.module.css';\n\nexport type CombinedScheduleHeaderStylesNames =\n | ScheduleHeaderStylesNames\n | ViewSelectStylesNames\n | HeaderControlStylesNames\n | MonthYearSelectStylesNames;\n\nexport type ScheduleHeaderStylesNames = 'header';\nexport type ScheduleHeaderCssVariables = {\n scheduleHeader: '--test';\n};\n\nexport interface ScheduleHeaderProps\n extends BoxProps, StylesApiProps<ScheduleHeaderFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Labels override shared with compound components rendered inside */\n labels?: ScheduleLabelsOverride;\n}\n\nexport type ScheduleHeaderFactory = Factory<{\n props: ScheduleHeaderProps;\n ref: HTMLDivElement;\n stylesNames: ScheduleHeaderStylesNames;\n vars: ScheduleHeaderCssVariables;\n staticComponents: {\n Control: typeof HeaderControl;\n Previous: typeof ScheduleHeaderPrevious;\n Next: typeof ScheduleHeaderNext;\n Today: typeof ScheduleHeaderToday;\n ViewSelect: typeof ViewSelect;\n MonthYearSelect: typeof MonthYearSelect;\n };\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ScheduleHeader',\n} satisfies Partial<ScheduleHeaderProps>;\n\nconst varsResolver = createVarsResolver<ScheduleHeaderFactory>(() => ({\n scheduleHeader: {\n '--test': 'test',\n },\n}));\n\nexport const ScheduleHeader = factory<ScheduleHeaderFactory>((_props) => {\n const props = useProps('ScheduleHeader', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n __staticSelector,\n labels,\n ...others\n } = props;\n\n const getStyles = useStyles<ScheduleHeaderFactory>({\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: 'header',\n });\n\n return (\n <ScheduleHeaderLabelsContext.Provider value={labels}>\n <Box {...getStyles('header')} {...others} />\n </ScheduleHeaderLabelsContext.Provider>\n );\n});\n\nScheduleHeader.displayName = '@mantine/schedule/ScheduleHeader';\nScheduleHeader.classes = classes;\nScheduleHeader.varsResolver = varsResolver;\nScheduleHeader.Control = HeaderControl;\nScheduleHeader.Next = ScheduleHeaderNext;\nScheduleHeader.Previous = ScheduleHeaderPrevious;\nScheduleHeader.Today = ScheduleHeaderToday;\nScheduleHeader.ViewSelect = ViewSelect;\nScheduleHeader.MonthYearSelect = MonthYearSelect;\n"],"mappings":";;;;;;;;;AA0DA,MAAM,eAAe,EACnB,kBAAkB,iBACpB;AAEA,MAAM,eAAe,0BAAiD,EACpE,gBAAgB,EACd,UAAU,OACZ,EACF,EAAE;AAEF,MAAa,iBAAiB,SAAgC,WAAW;CACvE,MAAM,QAAQ,SAAS,kBAAkB,cAAc,MAAM;CAC7D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,YACA,kBACA,QACA,GAAG,WACD;CAEJ,MAAM,YAAY,UAAiC;EACjD,MAAM;EACN,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,OACE,oBAAC,4BAA4B,UAA7B;EAAsC,OAAO;YAC3C,oBAAC,KAAD;GAAK,GAAI,UAAU,QAAQ;GAAG,GAAI;EAAS,CAAA;CACP,CAAA;AAE1C,CAAC;AAED,eAAe,cAAc;AAC7B,eAAe,UAAUA;AACzB,eAAe,eAAe;AAC9B,eAAe,UAAU;AACzB,eAAe,OAAO;AACtB,eAAe,WAAW;AAC1B,eAAe,QAAQ;AACvB,eAAe,aAAa;AAC5B,eAAe,kBAAkB"}
1
+ {"version":3,"file":"ScheduleHeader.mjs","names":["classes"],"sources":["../../../src/components/ScheduleHeader/ScheduleHeader.tsx"],"sourcesContent":["import {\n Box,\n BoxProps,\n createVarsResolver,\n ElementProps,\n factory,\n Factory,\n StylesApiProps,\n useProps,\n useStyles,\n} from '@mantine/core';\nimport { ScheduleLabelsOverride } from '../../labels';\nimport {\n HeaderControl,\n HeaderControlStylesNames,\n ScheduleHeaderNext,\n ScheduleHeaderPrevious,\n ScheduleHeaderToday,\n} from './HeaderControl/HeaderControl';\nimport { MonthYearSelect, MonthYearSelectStylesNames } from './MonthYearSelect/MonthYearSelect';\nimport { ScheduleHeaderLabelsContext } from './ScheduleHeaderContext';\nimport { ViewSelect, ViewSelectStylesNames } from './ViewSelect/ViewSelect';\nimport classes from './ScheduleHeader.module.css';\n\nexport type CombinedScheduleHeaderStylesNames =\n | ScheduleHeaderStylesNames\n | ViewSelectStylesNames\n | HeaderControlStylesNames\n | MonthYearSelectStylesNames;\n\nexport type ScheduleHeaderStylesNames = 'header';\nexport type ScheduleHeaderCssVariables = {\n scheduleHeader: '--test';\n};\n\nexport interface ScheduleHeaderProps\n extends BoxProps, StylesApiProps<ScheduleHeaderFactory>, ElementProps<'div'> {\n __staticSelector?: string;\n\n /** Labels override shared with compound components rendered inside */\n labels?: ScheduleLabelsOverride;\n}\n\nexport type ScheduleHeaderFactory = Factory<{\n props: ScheduleHeaderProps;\n ref: HTMLDivElement;\n stylesNames: ScheduleHeaderStylesNames;\n vars: ScheduleHeaderCssVariables;\n staticComponents: {\n Control: typeof HeaderControl;\n Previous: typeof ScheduleHeaderPrevious;\n Next: typeof ScheduleHeaderNext;\n Today: typeof ScheduleHeaderToday;\n ViewSelect: typeof ViewSelect;\n MonthYearSelect: typeof MonthYearSelect;\n };\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ScheduleHeader',\n} satisfies Partial<ScheduleHeaderProps>;\n\nconst varsResolver = createVarsResolver<ScheduleHeaderFactory>(() => ({\n scheduleHeader: {\n '--test': 'test',\n },\n}));\n\nexport const ScheduleHeader = factory<ScheduleHeaderFactory>((_props) => {\n const props = useProps('ScheduleHeader', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n __staticSelector,\n labels,\n ...others\n } = props;\n\n const getStyles = useStyles<ScheduleHeaderFactory>({\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: 'header',\n });\n\n return (\n <ScheduleHeaderLabelsContext.Provider value={labels}>\n <Box {...getStyles('header')} {...others} />\n </ScheduleHeaderLabelsContext.Provider>\n );\n});\n\nScheduleHeader.displayName = '@mantine/schedule/ScheduleHeader';\nScheduleHeader.classes = classes;\nScheduleHeader.varsResolver = varsResolver;\nScheduleHeader.Control = HeaderControl;\nScheduleHeader.Next = ScheduleHeaderNext;\nScheduleHeader.Previous = ScheduleHeaderPrevious;\nScheduleHeader.Today = ScheduleHeaderToday;\nScheduleHeader.ViewSelect = ViewSelect;\nScheduleHeader.MonthYearSelect = MonthYearSelect;\n"],"mappings":";;;;;;;;;AA0DA,MAAM,eAAe,EACnB,kBAAkB,iBACpB;AAEA,MAAM,eAAe,0BAAiD,EACpE,gBAAgB,EACd,UAAU,OACZ,EACF,EAAE;AAEF,MAAa,iBAAiB,SAAgC,WAAW;CACvE,MAAM,QAAQ,SAAS,kBAAkB,cAAc,MAAM;CAC7D,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,YACA,kBACA,QACA,GAAG,WACD;CAEJ,MAAM,YAAY,UAAiC;EACjD,MAAM;EACN,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,OACE,oBAAC,4BAA4B,UAA7B;EAAsC,OAAO;EAC3C,UAAA,oBAAC,KAAD;GAAK,GAAI,UAAU,QAAQ;GAAG,GAAI;EAAS,CAAA;CACP,CAAA;AAE1C,CAAC;AAED,eAAe,cAAc;AAC7B,eAAe,UAAUA;AACzB,eAAe,eAAe;AAC9B,eAAe,UAAU;AACzB,eAAe,OAAO;AACtB,eAAe,WAAW;AAC1B,eAAe,QAAQ;AACvB,eAAe,aAAa;AAC5B,eAAe,kBAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ScheduleHeaderBase.mjs","names":["classes"],"sources":["../../../src/components/ScheduleHeader/ScheduleHeaderBase.tsx"],"sourcesContent":["import { NativeSelect, StylesApiProps } from '@mantine/core';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport { DateStringValue, ScheduleViewLevel } from '../../types';\nimport { MonthYearSelectProps } from './MonthYearSelect/MonthYearSelect';\nimport { ScheduleHeader } from './ScheduleHeader';\nimport { ViewSelectProps } from './ViewSelect/ViewSelect';\nimport classes from './ScheduleHeader.module.css';\n\ninterface NavigationHandlers {\n /** Handler for previous button click, returns new date */\n previous: () => DateStringValue;\n\n /** Handler for next button click, returns new date */\n next: () => DateStringValue;\n\n /** Handler for today button click, returns new date */\n today: () => DateStringValue;\n}\n\ninterface HeaderControlOptions {\n /** Title to render in a simple control (used by DayView, WeekView) */\n title?: React.ReactNode;\n /** MonthYearSelect props (used by MonthView, YearView) */\n monthYearSelect?: {\n yearValue: number;\n monthValue: number;\n onYearChange?: (year: number) => void;\n onMonthChange?: (month: number) => void;\n withMonths?: boolean;\n } & Partial<MonthYearSelectProps>;\n /** Minimum width for control */\n miw?: React.CSSProperties['minWidth'];\n}\n\nexport interface ScheduleHeaderBaseProps {\n /** Current view level */\n view: ScheduleViewLevel;\n\n /** Navigation handlers for previous, next, and today */\n navigationHandlers: NavigationHandlers;\n\n /** Central control configuration (either title or monthYearSelect) */\n control: HeaderControlOptions;\n\n /** Label overrides */\n labels?: ScheduleLabelsOverride;\n\n /** Called when date is changed */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Called when view is changed */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous control button */\n previousControlProps?: React.ComponentProps<'button'>;\n\n /** Props passed to next control button */\n nextControlProps?: React.ComponentProps<'button'>;\n\n /** Props passed to today control button */\n todayControlProps?: React.ComponentProps<'button'>;\n\n /** Props passed to view select */\n viewSelectProps?: Partial<ViewSelectProps>;\n\n /** Styles API props to pass through */\n stylesApiProps?: StylesApiProps<any>;\n\n /** Called when agenda button is clicked */\n onAgendaClick?: () => void;\n\n /** Whether the agenda view is currently active */\n agendaActive?: boolean;\n}\n\nconst VIEW_LEVELS: ScheduleViewLevel[] = ['day', 'week', 'month', 'year'];\n\nexport function ScheduleHeaderBase({\n view,\n navigationHandlers,\n control,\n labels,\n onDateChange,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n stylesApiProps,\n onAgendaClick,\n agendaActive,\n}: ScheduleHeaderBaseProps) {\n const centralControl = control.monthYearSelect ? (\n <ScheduleHeader.MonthYearSelect\n {...stylesApiProps}\n labels={labels}\n {...control.monthYearSelect}\n />\n ) : (\n <ScheduleHeader.Control {...stylesApiProps} interactive={false} miw={control.miw}>\n {control.title}\n </ScheduleHeader.Control>\n );\n\n const views = viewSelectProps?.views || VIEW_LEVELS;\n const compactViewSelectData = views.map((v) => ({\n value: v,\n label: getLabel(v, labels) as string,\n }));\n\n return (\n <ScheduleHeader {...stylesApiProps} labels={labels}>\n <div className={classes.navigationGroup}>\n <ScheduleHeader.Previous\n {...stylesApiProps}\n onClick={() => onDateChange?.(navigationHandlers.previous())}\n labels={labels}\n {...previousControlProps}\n />\n\n {centralControl}\n\n <ScheduleHeader.Next\n {...stylesApiProps}\n onClick={() => onDateChange?.(navigationHandlers.next())}\n labels={labels}\n {...nextControlProps}\n />\n </div>\n\n <div className={classes.todayControl}>\n <ScheduleHeader.Today\n {...stylesApiProps}\n onClick={() => onDateChange?.(navigationHandlers.today())}\n labels={labels}\n {...todayControlProps}\n />\n {onAgendaClick && (\n <ScheduleHeader.Control\n {...stylesApiProps}\n data-type=\"agenda\"\n active={agendaActive}\n onClick={onAgendaClick}\n aria-label={getLabel('agenda', labels) as string}\n >\n {getLabel('agenda', labels)}\n </ScheduleHeader.Control>\n )}\n </div>\n\n <div className={classes.compactControls}>\n {onAgendaClick && (\n <ScheduleHeader.Control\n {...stylesApiProps}\n data-type=\"agenda\"\n active={agendaActive}\n onClick={onAgendaClick}\n aria-label={getLabel('agenda', labels) as string}\n className={classes.compactAgendaControl}\n >\n {getLabel('agenda', labels)}\n </ScheduleHeader.Control>\n )}\n <NativeSelect\n className={classes.compactViewSelect}\n data={compactViewSelectData}\n value={view}\n onChange={(event) => onViewChange?.(event.currentTarget.value as ScheduleViewLevel)}\n aria-label={getLabel('viewSelectLabel', labels) as string}\n size=\"sm\"\n />\n </div>\n\n <div className={classes.viewSelect} style={{ marginInlineStart: 'auto' }}>\n <ScheduleHeader.ViewSelect\n value={view}\n onChange={onViewChange}\n labels={labels}\n {...stylesApiProps}\n {...viewSelectProps}\n />\n </div>\n </ScheduleHeader>\n );\n}\n"],"mappings":";;;;;;;AA2EA,MAAM,cAAmC;CAAC;CAAO;CAAQ;CAAS;AAAM;AAExE,SAAgB,mBAAmB,EACjC,MACA,oBACA,SACA,QACA,cACA,cACA,sBACA,kBACA,mBACA,iBACA,gBACA,eACA,gBAC0B;CAC1B,MAAM,iBAAiB,QAAQ,kBAC7B,oBAAC,eAAe,iBAAhB;EACE,GAAI;EACI;EACR,GAAI,QAAQ;CACb,CAAA,IAED,oBAAC,eAAe,SAAhB;EAAwB,GAAI;EAAgB,aAAa;EAAO,KAAK,QAAQ;YAC1E,QAAQ;CACa,CAAA;CAI1B,MAAM,yBADQ,iBAAiB,SAAS,YAAA,CACJ,KAAK,OAAO;EAC9C,OAAO;EACP,OAAO,SAAS,GAAG,MAAM;CAC3B,EAAE;CAEF,OACE,qBAAC,gBAAD;EAAgB,GAAI;EAAwB;YAA5C;GACE,qBAAC,OAAD;IAAK,WAAWA,8BAAQ;cAAxB;KACE,oBAAC,eAAe,UAAhB;MACE,GAAI;MACJ,eAAe,eAAe,mBAAmB,SAAS,CAAC;MACnD;MACR,GAAI;KACL,CAAA;KAEA;KAED,oBAAC,eAAe,MAAhB;MACE,GAAI;MACJ,eAAe,eAAe,mBAAmB,KAAK,CAAC;MAC/C;MACR,GAAI;KACL,CAAA;IACE;;GAEL,qBAAC,OAAD;IAAK,WAAWA,8BAAQ;cAAxB,CACE,oBAAC,eAAe,OAAhB;KACE,GAAI;KACJ,eAAe,eAAe,mBAAmB,MAAM,CAAC;KAChD;KACR,GAAI;IACL,CAAA,GACA,iBACC,oBAAC,eAAe,SAAhB;KACE,GAAI;KACJ,aAAU;KACV,QAAQ;KACR,SAAS;KACT,cAAY,SAAS,UAAU,MAAM;eAEpC,SAAS,UAAU,MAAM;IACJ,CAAA,CAEvB;;GAEL,qBAAC,OAAD;IAAK,WAAWA,8BAAQ;cAAxB,CACG,iBACC,oBAAC,eAAe,SAAhB;KACE,GAAI;KACJ,aAAU;KACV,QAAQ;KACR,SAAS;KACT,cAAY,SAAS,UAAU,MAAM;KACrC,WAAWA,8BAAQ;eAElB,SAAS,UAAU,MAAM;IACJ,CAAA,GAE1B,oBAAC,cAAD;KACE,WAAWA,8BAAQ;KACnB,MAAM;KACN,OAAO;KACP,WAAW,UAAU,eAAe,MAAM,cAAc,KAA0B;KAClF,cAAY,SAAS,mBAAmB,MAAM;KAC9C,MAAK;IACN,CAAA,CACE;;GAEL,oBAAC,OAAD;IAAK,WAAWA,8BAAQ;IAAY,OAAO,EAAE,mBAAmB,OAAO;cACrE,oBAAC,eAAe,YAAhB;KACE,OAAO;KACP,UAAU;KACF;KACR,GAAI;KACJ,GAAI;IACL,CAAA;GACE,CAAA;EACS;;AAEpB"}
1
+ {"version":3,"file":"ScheduleHeaderBase.mjs","names":["classes"],"sources":["../../../src/components/ScheduleHeader/ScheduleHeaderBase.tsx"],"sourcesContent":["import { NativeSelect, StylesApiProps } from '@mantine/core';\nimport { getLabel, ScheduleLabelsOverride } from '../../labels';\nimport { DateStringValue, ScheduleViewLevel } from '../../types';\nimport { MonthYearSelectProps } from './MonthYearSelect/MonthYearSelect';\nimport { ScheduleHeader } from './ScheduleHeader';\nimport { ViewSelectProps } from './ViewSelect/ViewSelect';\nimport classes from './ScheduleHeader.module.css';\n\ninterface NavigationHandlers {\n /** Handler for previous button click, returns new date */\n previous: () => DateStringValue;\n\n /** Handler for next button click, returns new date */\n next: () => DateStringValue;\n\n /** Handler for today button click, returns new date */\n today: () => DateStringValue;\n}\n\ninterface HeaderControlOptions {\n /** Title to render in a simple control (used by DayView, WeekView) */\n title?: React.ReactNode;\n /** MonthYearSelect props (used by MonthView, YearView) */\n monthYearSelect?: {\n yearValue: number;\n monthValue: number;\n onYearChange?: (year: number) => void;\n onMonthChange?: (month: number) => void;\n withMonths?: boolean;\n } & Partial<MonthYearSelectProps>;\n /** Minimum width for control */\n miw?: React.CSSProperties['minWidth'];\n}\n\nexport interface ScheduleHeaderBaseProps {\n /** Current view level */\n view: ScheduleViewLevel;\n\n /** Navigation handlers for previous, next, and today */\n navigationHandlers: NavigationHandlers;\n\n /** Central control configuration (either title or monthYearSelect) */\n control: HeaderControlOptions;\n\n /** Label overrides */\n labels?: ScheduleLabelsOverride;\n\n /** Called when date is changed */\n onDateChange?: (date: DateStringValue) => void;\n\n /** Called when view is changed */\n onViewChange?: (view: ScheduleViewLevel) => void;\n\n /** Props passed to previous control button */\n previousControlProps?: React.ComponentProps<'button'>;\n\n /** Props passed to next control button */\n nextControlProps?: React.ComponentProps<'button'>;\n\n /** Props passed to today control button */\n todayControlProps?: React.ComponentProps<'button'>;\n\n /** Props passed to view select */\n viewSelectProps?: Partial<ViewSelectProps>;\n\n /** Styles API props to pass through */\n stylesApiProps?: StylesApiProps<any>;\n\n /** Called when agenda button is clicked */\n onAgendaClick?: () => void;\n\n /** Whether the agenda view is currently active */\n agendaActive?: boolean;\n}\n\nconst VIEW_LEVELS: ScheduleViewLevel[] = ['day', 'week', 'month', 'year'];\n\nexport function ScheduleHeaderBase({\n view,\n navigationHandlers,\n control,\n labels,\n onDateChange,\n onViewChange,\n previousControlProps,\n nextControlProps,\n todayControlProps,\n viewSelectProps,\n stylesApiProps,\n onAgendaClick,\n agendaActive,\n}: ScheduleHeaderBaseProps) {\n const centralControl = control.monthYearSelect ? (\n <ScheduleHeader.MonthYearSelect\n {...stylesApiProps}\n labels={labels}\n {...control.monthYearSelect}\n />\n ) : (\n <ScheduleHeader.Control {...stylesApiProps} interactive={false} miw={control.miw}>\n {control.title}\n </ScheduleHeader.Control>\n );\n\n const views = viewSelectProps?.views || VIEW_LEVELS;\n const compactViewSelectData = views.map((v) => ({\n value: v,\n label: getLabel(v, labels) as string,\n }));\n\n return (\n <ScheduleHeader {...stylesApiProps} labels={labels}>\n <div className={classes.navigationGroup}>\n <ScheduleHeader.Previous\n {...stylesApiProps}\n onClick={() => onDateChange?.(navigationHandlers.previous())}\n labels={labels}\n {...previousControlProps}\n />\n\n {centralControl}\n\n <ScheduleHeader.Next\n {...stylesApiProps}\n onClick={() => onDateChange?.(navigationHandlers.next())}\n labels={labels}\n {...nextControlProps}\n />\n </div>\n\n <div className={classes.todayControl}>\n <ScheduleHeader.Today\n {...stylesApiProps}\n onClick={() => onDateChange?.(navigationHandlers.today())}\n labels={labels}\n {...todayControlProps}\n />\n {onAgendaClick && (\n <ScheduleHeader.Control\n {...stylesApiProps}\n data-type=\"agenda\"\n active={agendaActive}\n onClick={onAgendaClick}\n aria-label={getLabel('agenda', labels) as string}\n >\n {getLabel('agenda', labels)}\n </ScheduleHeader.Control>\n )}\n </div>\n\n <div className={classes.compactControls}>\n {onAgendaClick && (\n <ScheduleHeader.Control\n {...stylesApiProps}\n data-type=\"agenda\"\n active={agendaActive}\n onClick={onAgendaClick}\n aria-label={getLabel('agenda', labels) as string}\n className={classes.compactAgendaControl}\n >\n {getLabel('agenda', labels)}\n </ScheduleHeader.Control>\n )}\n <NativeSelect\n className={classes.compactViewSelect}\n data={compactViewSelectData}\n value={view}\n onChange={(event) => onViewChange?.(event.currentTarget.value as ScheduleViewLevel)}\n aria-label={getLabel('viewSelectLabel', labels) as string}\n size=\"sm\"\n />\n </div>\n\n <div className={classes.viewSelect} style={{ marginInlineStart: 'auto' }}>\n <ScheduleHeader.ViewSelect\n value={view}\n onChange={onViewChange}\n labels={labels}\n {...stylesApiProps}\n {...viewSelectProps}\n />\n </div>\n </ScheduleHeader>\n );\n}\n"],"mappings":";;;;;;;AA2EA,MAAM,cAAmC;CAAC;CAAO;CAAQ;CAAS;AAAM;AAExE,SAAgB,mBAAmB,EACjC,MACA,oBACA,SACA,QACA,cACA,cACA,sBACA,kBACA,mBACA,iBACA,gBACA,eACA,gBAC0B;CAC1B,MAAM,iBAAiB,QAAQ,kBAC7B,oBAAC,eAAe,iBAAhB;EACE,GAAI;EACI;EACR,GAAI,QAAQ;CACb,CAAA,IAED,oBAAC,eAAe,SAAhB;EAAwB,GAAI;EAAgB,aAAa;EAAO,KAAK,QAAQ;EAC1E,UAAA,QAAQ;CACa,CAAA;CAI1B,MAAM,yBADQ,iBAAiB,SAAS,YAAA,CACJ,KAAK,OAAO;EAC9C,OAAO;EACP,OAAO,SAAS,GAAG,MAAM;CAC3B,EAAE;CAEF,OACE,qBAAC,gBAAD;EAAgB,GAAI;EAAwB;EAA5C,UAAA;GACE,qBAAC,OAAD;IAAK,WAAWA,8BAAQ;IAAxB,UAAA;KACE,oBAAC,eAAe,UAAhB;MACE,GAAI;MACJ,eAAe,eAAe,mBAAmB,SAAS,CAAC;MACnD;MACR,GAAI;KACL,CAAA;KAEA;KAED,oBAAC,eAAe,MAAhB;MACE,GAAI;MACJ,eAAe,eAAe,mBAAmB,KAAK,CAAC;MAC/C;MACR,GAAI;KACL,CAAA;IACE;;GAEL,qBAAC,OAAD;IAAK,WAAWA,8BAAQ;IAAxB,UAAA,CACE,oBAAC,eAAe,OAAhB;KACE,GAAI;KACJ,eAAe,eAAe,mBAAmB,MAAM,CAAC;KAChD;KACR,GAAI;IACL,CAAA,GACA,iBACC,oBAAC,eAAe,SAAhB;KACE,GAAI;KACJ,aAAU;KACV,QAAQ;KACR,SAAS;KACT,cAAY,SAAS,UAAU,MAAM;KAEpC,UAAA,SAAS,UAAU,MAAM;IACJ,CAAA,CAEvB;;GAEL,qBAAC,OAAD;IAAK,WAAWA,8BAAQ;IAAxB,UAAA,CACG,iBACC,oBAAC,eAAe,SAAhB;KACE,GAAI;KACJ,aAAU;KACV,QAAQ;KACR,SAAS;KACT,cAAY,SAAS,UAAU,MAAM;KACrC,WAAWA,8BAAQ;KAElB,UAAA,SAAS,UAAU,MAAM;IACJ,CAAA,GAE1B,oBAAC,cAAD;KACE,WAAWA,8BAAQ;KACnB,MAAM;KACN,OAAO;KACP,WAAW,UAAU,eAAe,MAAM,cAAc,KAA0B;KAClF,cAAY,SAAS,mBAAmB,MAAM;KAC9C,MAAK;IACN,CAAA,CACE;;GAEL,oBAAC,OAAD;IAAK,WAAWA,8BAAQ;IAAY,OAAO,EAAE,mBAAmB,OAAO;IACrE,UAAA,oBAAC,eAAe,YAAhB;KACE,OAAO;KACP,UAAU;KACF;KACR,GAAI;KACJ,GAAI;IACL,CAAA;GACE,CAAA;EACS;;AAEpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewSelect.mjs","names":["classes"],"sources":["../../../../src/components/ScheduleHeader/ViewSelect/ViewSelect.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useDirection,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { getLabel, ScheduleLabels, ScheduleLabelsOverride } from '../../../labels';\nimport { ScheduleViewLevel } from '../../../types';\nimport { HeaderControl } from '../HeaderControl/HeaderControl';\nimport { useScheduleHeaderLabels } from '../ScheduleHeaderContext';\nimport classes from './ViewSelect.module.css';\n\nexport type ViewSelectStylesNames = 'viewSelect';\n\nexport interface ViewSelectProps\n extends BoxProps, StylesApiProps<ViewSelectFactory>, ElementProps<'div', 'value' | 'onChange'> {\n __staticSelector?: string;\n\n /** A list of views to display @default ['day', 'week', 'month', 'year'] */\n views?: readonly ScheduleViewLevel[];\n\n /** Selected view type */\n value?: ScheduleViewLevel;\n\n /** Called when view type changes */\n onChange?: (value: ScheduleViewLevel) => void;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n}\n\nexport type ViewSelectFactory = Factory<{\n props: ViewSelectProps;\n ref: HTMLDivElement;\n stylesNames: ViewSelectStylesNames;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ViewSelect',\n views: ['day', 'week', 'month', 'year'],\n} satisfies Partial<ViewSelectProps>;\n\nexport const ViewSelect = factory<ViewSelectFactory>((_props) => {\n const props = useProps('ViewSelect', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n value,\n onChange,\n views,\n __staticSelector,\n radius,\n labels,\n ...others\n } = props;\n\n const getStyles = useStyles<ViewSelectFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n rootSelector: 'viewSelect',\n });\n\n const resolvedLabels = useScheduleHeaderLabels(labels);\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ViewSelectFactory>({\n classNames,\n styles,\n props,\n });\n\n const { dir } = useDirection();\n const controlsRef = useRef<(HTMLButtonElement | null)[]>([]);\n const activatedWithKeyboardRef = useRef(false);\n\n // Restore focus to the selected tab when the component mounts\n // This handles the case where focus is lost due to view switch (header unmount/remount)\n // Only restore focus if the view was activated via keyboard (Enter/Space)\n useEffect(() => {\n if (activatedWithKeyboardRef.current && document.activeElement === document.body) {\n const selectedIndex = views!.findIndex((view) => view === value);\n if (selectedIndex !== -1) {\n controlsRef.current[selectedIndex]?.focus();\n }\n }\n activatedWithKeyboardRef.current = false;\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>, index: number) => {\n const isRtl = dir === 'rtl';\n const nextKey = isRtl ? 'ArrowLeft' : 'ArrowRight';\n const prevKey = isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n if (event.key === nextKey) {\n event.preventDefault();\n const nextIndex = index < views!.length - 1 ? index + 1 : 0;\n controlsRef.current[nextIndex]?.focus();\n } else if (event.key === prevKey) {\n event.preventDefault();\n const prevIndex = index > 0 ? index - 1 : views!.length - 1;\n controlsRef.current[prevIndex]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n controlsRef.current[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n controlsRef.current[views!.length - 1]?.focus();\n } else if (event.key === 'Enter' || event.key === ' ') {\n activatedWithKeyboardRef.current = true;\n }\n };\n\n const switchToLabelKeys: Record<ScheduleViewLevel, keyof ScheduleLabels> = {\n day: 'switchToDayView',\n week: 'switchToWeekView',\n month: 'switchToMonthView',\n year: 'switchToYearView',\n };\n\n const items = views!.map((view, index) => {\n const isSelected = value === view;\n return (\n <HeaderControl\n key={view}\n ref={(node) => {\n controlsRef.current[index] = node;\n }}\n data-type={view}\n active={isSelected}\n onClick={() => onChange?.(view)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n __staticSelector={__staticSelector}\n radius={radius}\n role=\"tab\"\n aria-label={getLabel(switchToLabelKeys[view], resolvedLabels) as string}\n aria-selected={isSelected}\n tabIndex={isSelected ? 0 : -1}\n >\n {getLabel(view, resolvedLabels)}\n </HeaderControl>\n );\n });\n\n return (\n <Box\n {...getStyles('viewSelect')}\n role=\"tablist\"\n aria-label={getLabel('viewSelectLabel', resolvedLabels)}\n {...others}\n >\n {items}\n </Box>\n );\n});\n\nViewSelect.displayName = '@mantine/schedule/ViewSelect';\nViewSelect.classes = classes;\n"],"mappings":";;;;;;;;;AAgDA,MAAM,eAAe;CACnB,kBAAkB;CAClB,OAAO;EAAC;EAAO;EAAQ;EAAS;CAAM;AACxC;AAEA,MAAa,aAAa,SAA4B,WAAW;CAC/D,MAAM,QAAQ,SAAS,cAAc,cAAc,MAAM;CACzD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,YACA,OACA,UACA,OACA,kBACA,QACA,QACA,GAAG,WACD;CAEJ,MAAM,YAAY,UAA6B;EAC7C,MAAM;EACN,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,iBAAiB,wBAAwB,MAAM;CAErD,MAAM,EAAE,oBAAoB,mBAAmB,qBAAwC;EACrF;EACA;EACA;CACF,CAAC;CAED,MAAM,EAAE,QAAQ,aAAa;CAC7B,MAAM,cAAc,OAAqC,CAAC,CAAC;CAC3D,MAAM,2BAA2B,OAAO,KAAK;CAK7C,gBAAgB;EACd,IAAI,yBAAyB,WAAW,SAAS,kBAAkB,SAAS,MAAM;GAChF,MAAM,gBAAgB,MAAO,WAAW,SAAS,SAAS,KAAK;GAC/D,IAAI,kBAAkB,IACpB,YAAY,QAAQ,cAAc,EAAE,MAAM;EAE9C;EACA,yBAAyB,UAAU;CACrC,GAAG,CAAC,CAAC;CAEL,MAAM,iBAAiB,OAA+C,UAAkB;EACtF,MAAM,QAAQ,QAAQ;EACtB,MAAM,UAAU,QAAQ,cAAc;EACtC,MAAM,UAAU,QAAQ,eAAe;EAEvC,IAAI,MAAM,QAAQ,SAAS;GACzB,MAAM,eAAe;GACrB,MAAM,YAAY,QAAQ,MAAO,SAAS,IAAI,QAAQ,IAAI;GAC1D,YAAY,QAAQ,UAAU,EAAE,MAAM;EACxC,OAAO,IAAI,MAAM,QAAQ,SAAS;GAChC,MAAM,eAAe;GACrB,MAAM,YAAY,QAAQ,IAAI,QAAQ,IAAI,MAAO,SAAS;GAC1D,YAAY,QAAQ,UAAU,EAAE,MAAM;EACxC,OAAO,IAAI,MAAM,QAAQ,QAAQ;GAC/B,MAAM,eAAe;GACrB,YAAY,QAAQ,EAAE,EAAE,MAAM;EAChC,OAAO,IAAI,MAAM,QAAQ,OAAO;GAC9B,MAAM,eAAe;GACrB,YAAY,QAAQ,MAAO,SAAS,EAAE,EAAE,MAAM;EAChD,OAAO,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAChD,yBAAyB,UAAU;CAEvC;CAEA,MAAM,oBAAqE;EACzE,KAAK;EACL,MAAM;EACN,OAAO;EACP,MAAM;CACR;CAEA,MAAM,QAAQ,MAAO,KAAK,MAAM,UAAU;EACxC,MAAM,aAAa,UAAU;EAC7B,OACE,oBAAC,eAAD;GAEE,MAAM,SAAS;IACb,YAAY,QAAQ,SAAS;GAC/B;GACA,aAAW;GACX,QAAQ;GACR,eAAe,WAAW,IAAI;GAC9B,YAAY,UAAU,cAAc,OAAO,KAAK;GAChD,YAAY;GACZ,QAAQ;GACU;GACV;GACR,MAAK;GACL,cAAY,SAAS,kBAAkB,OAAO,cAAc;GAC5D,iBAAe;GACf,UAAU,aAAa,IAAI;aAE1B,SAAS,MAAM,cAAc;EACjB,GAlBR,IAkBQ;CAEnB,CAAC;CAED,OACE,oBAAC,KAAD;EACE,GAAI,UAAU,YAAY;EAC1B,MAAK;EACL,cAAY,SAAS,mBAAmB,cAAc;EACtD,GAAI;YAEH;CACE,CAAA;AAET,CAAC;AAED,WAAW,cAAc;AACzB,WAAW,UAAUA"}
1
+ {"version":3,"file":"ViewSelect.mjs","names":["classes"],"sources":["../../../../src/components/ScheduleHeader/ViewSelect/ViewSelect.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport {\n Box,\n BoxProps,\n ElementProps,\n factory,\n Factory,\n MantineRadius,\n StylesApiProps,\n useDirection,\n useProps,\n useResolvedStylesApi,\n useStyles,\n} from '@mantine/core';\nimport { getLabel, ScheduleLabels, ScheduleLabelsOverride } from '../../../labels';\nimport { ScheduleViewLevel } from '../../../types';\nimport { HeaderControl } from '../HeaderControl/HeaderControl';\nimport { useScheduleHeaderLabels } from '../ScheduleHeaderContext';\nimport classes from './ViewSelect.module.css';\n\nexport type ViewSelectStylesNames = 'viewSelect';\n\nexport interface ViewSelectProps\n extends BoxProps, StylesApiProps<ViewSelectFactory>, ElementProps<'div', 'value' | 'onChange'> {\n __staticSelector?: string;\n\n /** A list of views to display @default ['day', 'week', 'month', 'year'] */\n views?: readonly ScheduleViewLevel[];\n\n /** Selected view type */\n value?: ScheduleViewLevel;\n\n /** Called when view type changes */\n onChange?: (value: ScheduleViewLevel) => void;\n\n /** Key of `theme.radius` or any valid CSS value to set `border-radius` @default theme.defaultRadius */\n radius?: MantineRadius;\n\n /** Labels override */\n labels?: ScheduleLabelsOverride;\n}\n\nexport type ViewSelectFactory = Factory<{\n props: ViewSelectProps;\n ref: HTMLDivElement;\n stylesNames: ViewSelectStylesNames;\n}>;\n\nconst defaultProps = {\n __staticSelector: 'ViewSelect',\n views: ['day', 'week', 'month', 'year'],\n} satisfies Partial<ViewSelectProps>;\n\nexport const ViewSelect = factory<ViewSelectFactory>((_props) => {\n const props = useProps('ViewSelect', defaultProps, _props);\n const {\n classNames,\n className,\n style,\n styles,\n unstyled,\n vars,\n attributes,\n value,\n onChange,\n views,\n __staticSelector,\n radius,\n labels,\n ...others\n } = props;\n\n const getStyles = useStyles<ViewSelectFactory>({\n name: __staticSelector,\n classes,\n props,\n className,\n style,\n classNames,\n styles,\n unstyled,\n attributes,\n vars,\n rootSelector: 'viewSelect',\n });\n\n const resolvedLabels = useScheduleHeaderLabels(labels);\n\n const { resolvedClassNames, resolvedStyles } = useResolvedStylesApi<ViewSelectFactory>({\n classNames,\n styles,\n props,\n });\n\n const { dir } = useDirection();\n const controlsRef = useRef<(HTMLButtonElement | null)[]>([]);\n const activatedWithKeyboardRef = useRef(false);\n\n // Restore focus to the selected tab when the component mounts\n // This handles the case where focus is lost due to view switch (header unmount/remount)\n // Only restore focus if the view was activated via keyboard (Enter/Space)\n useEffect(() => {\n if (activatedWithKeyboardRef.current && document.activeElement === document.body) {\n const selectedIndex = views!.findIndex((view) => view === value);\n if (selectedIndex !== -1) {\n controlsRef.current[selectedIndex]?.focus();\n }\n }\n activatedWithKeyboardRef.current = false;\n }, []);\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>, index: number) => {\n const isRtl = dir === 'rtl';\n const nextKey = isRtl ? 'ArrowLeft' : 'ArrowRight';\n const prevKey = isRtl ? 'ArrowRight' : 'ArrowLeft';\n\n if (event.key === nextKey) {\n event.preventDefault();\n const nextIndex = index < views!.length - 1 ? index + 1 : 0;\n controlsRef.current[nextIndex]?.focus();\n } else if (event.key === prevKey) {\n event.preventDefault();\n const prevIndex = index > 0 ? index - 1 : views!.length - 1;\n controlsRef.current[prevIndex]?.focus();\n } else if (event.key === 'Home') {\n event.preventDefault();\n controlsRef.current[0]?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n controlsRef.current[views!.length - 1]?.focus();\n } else if (event.key === 'Enter' || event.key === ' ') {\n activatedWithKeyboardRef.current = true;\n }\n };\n\n const switchToLabelKeys: Record<ScheduleViewLevel, keyof ScheduleLabels> = {\n day: 'switchToDayView',\n week: 'switchToWeekView',\n month: 'switchToMonthView',\n year: 'switchToYearView',\n };\n\n const items = views!.map((view, index) => {\n const isSelected = value === view;\n return (\n <HeaderControl\n key={view}\n ref={(node) => {\n controlsRef.current[index] = node;\n }}\n data-type={view}\n active={isSelected}\n onClick={() => onChange?.(view)}\n onKeyDown={(event) => handleKeyDown(event, index)}\n classNames={resolvedClassNames}\n styles={resolvedStyles}\n __staticSelector={__staticSelector}\n radius={radius}\n role=\"tab\"\n aria-label={getLabel(switchToLabelKeys[view], resolvedLabels) as string}\n aria-selected={isSelected}\n tabIndex={isSelected ? 0 : -1}\n >\n {getLabel(view, resolvedLabels)}\n </HeaderControl>\n );\n });\n\n return (\n <Box\n {...getStyles('viewSelect')}\n role=\"tablist\"\n aria-label={getLabel('viewSelectLabel', resolvedLabels)}\n {...others}\n >\n {items}\n </Box>\n );\n});\n\nViewSelect.displayName = '@mantine/schedule/ViewSelect';\nViewSelect.classes = classes;\n"],"mappings":";;;;;;;;;AAgDA,MAAM,eAAe;CACnB,kBAAkB;CAClB,OAAO;EAAC;EAAO;EAAQ;EAAS;CAAM;AACxC;AAEA,MAAa,aAAa,SAA4B,WAAW;CAC/D,MAAM,QAAQ,SAAS,cAAc,cAAc,MAAM;CACzD,MAAM,EACJ,YACA,WACA,OACA,QACA,UACA,MACA,YACA,OACA,UACA,OACA,kBACA,QACA,QACA,GAAG,WACD;CAEJ,MAAM,YAAY,UAA6B;EAC7C,MAAM;EACN,SAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;CAChB,CAAC;CAED,MAAM,iBAAiB,wBAAwB,MAAM;CAErD,MAAM,EAAE,oBAAoB,mBAAmB,qBAAwC;EACrF;EACA;EACA;CACF,CAAC;CAED,MAAM,EAAE,QAAQ,aAAa;CAC7B,MAAM,cAAc,OAAqC,CAAC,CAAC;CAC3D,MAAM,2BAA2B,OAAO,KAAK;CAK7C,gBAAgB;EACd,IAAI,yBAAyB,WAAW,SAAS,kBAAkB,SAAS,MAAM;GAChF,MAAM,gBAAgB,MAAO,WAAW,SAAS,SAAS,KAAK;GAC/D,IAAI,kBAAkB,IACpB,YAAY,QAAQ,cAAc,EAAE,MAAM;EAE9C;EACA,yBAAyB,UAAU;CACrC,GAAG,CAAC,CAAC;CAEL,MAAM,iBAAiB,OAA+C,UAAkB;EACtF,MAAM,QAAQ,QAAQ;EACtB,MAAM,UAAU,QAAQ,cAAc;EACtC,MAAM,UAAU,QAAQ,eAAe;EAEvC,IAAI,MAAM,QAAQ,SAAS;GACzB,MAAM,eAAe;GACrB,MAAM,YAAY,QAAQ,MAAO,SAAS,IAAI,QAAQ,IAAI;GAC1D,YAAY,QAAQ,UAAU,EAAE,MAAM;EACxC,OAAO,IAAI,MAAM,QAAQ,SAAS;GAChC,MAAM,eAAe;GACrB,MAAM,YAAY,QAAQ,IAAI,QAAQ,IAAI,MAAO,SAAS;GAC1D,YAAY,QAAQ,UAAU,EAAE,MAAM;EACxC,OAAO,IAAI,MAAM,QAAQ,QAAQ;GAC/B,MAAM,eAAe;GACrB,YAAY,QAAQ,EAAE,EAAE,MAAM;EAChC,OAAO,IAAI,MAAM,QAAQ,OAAO;GAC9B,MAAM,eAAe;GACrB,YAAY,QAAQ,MAAO,SAAS,EAAE,EAAE,MAAM;EAChD,OAAO,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAChD,yBAAyB,UAAU;CAEvC;CAEA,MAAM,oBAAqE;EACzE,KAAK;EACL,MAAM;EACN,OAAO;EACP,MAAM;CACR;CAEA,MAAM,QAAQ,MAAO,KAAK,MAAM,UAAU;EACxC,MAAM,aAAa,UAAU;EAC7B,OACE,oBAAC,eAAD;GAEE,MAAM,SAAS;IACb,YAAY,QAAQ,SAAS;GAC/B;GACA,aAAW;GACX,QAAQ;GACR,eAAe,WAAW,IAAI;GAC9B,YAAY,UAAU,cAAc,OAAO,KAAK;GAChD,YAAY;GACZ,QAAQ;GACU;GACV;GACR,MAAK;GACL,cAAY,SAAS,kBAAkB,OAAO,cAAc;GAC5D,iBAAe;GACf,UAAU,aAAa,IAAI;GAE1B,UAAA,SAAS,MAAM,cAAc;EACjB,GAlBR,IAkBQ;CAEnB,CAAC;CAED,OACE,oBAAC,KAAD;EACE,GAAI,UAAU,YAAY;EAC1B,MAAK;EACL,cAAY,SAAS,mBAAmB,cAAc;EACtD,GAAI;EAEH,UAAA;CACE,CAAA;AAET,CAAC;AAED,WAAW,cAAc;AACzB,WAAW,UAAUA"}
@@ -8,6 +8,7 @@ import { getWeekDays } from "../../utils/get-week-days/get-week-days.mjs";
8
8
  import { nextWeek } from "../../utils/next-week/next-week.mjs";
9
9
  import { previousWeek } from "../../utils/previous-week/previous-week.mjs";
10
10
  import { isAllDayEvent } from "../../utils/is-all-day-event/is-all-day-event.mjs";
11
+ import { getDayPosition } from "../../utils/get-day-position/get-day-position.mjs";
11
12
  import { getTimeAxisEventStyle } from "../../utils/get-time-axis-event-style/get-time-axis-event-style.mjs";
12
13
  import { calculateDropTime } from "../../utils/calculate-drop-time/calculate-drop-time.mjs";
13
14
  import { getBusinessHoursMod } from "../../utils/get-business-hours-mod/get-business-hours-mod.mjs";
@@ -20,6 +21,7 @@ import { AgendaView } from "../AgendaView/AgendaView.mjs";
20
21
  import { CurrentTimeIndicator } from "../CurrentTimeIndicator/CurrentTimeIndicator.mjs";
21
22
  import { DragContext } from "../DragContext/DragContext.mjs";
22
23
  import { ScheduleEvent } from "../ScheduleEvent/ScheduleEvent.mjs";
24
+ import { ScheduleBackgroundEvent } from "../ScheduleBackgroundEvent/ScheduleBackgroundEvent.mjs";
23
25
  import { ScheduleHeaderBase } from "../ScheduleHeader/ScheduleHeaderBase.mjs";
24
26
  import { getWeekLabel } from "./get-week-label/get-week-label.mjs";
25
27
  import { getWeekViewEvents } from "./get-week-view-events/get-week-view-events.mjs";
@@ -27,7 +29,7 @@ import { handleWeekViewKeyDown } from "./handle-week-view-key-down.mjs";
27
29
  import { WeekViewDay } from "./WeekViewDay.mjs";
28
30
  import WeekView_module_default from "./WeekView.module.mjs";
29
31
  import dayjs from "dayjs";
30
- import { Box, ScrollArea, UnstyledButton, createVarsResolver, factory, getRadius, rem, useMantineTheme, useProps, useResolvedStylesApi, useStyles } from "@mantine/core";
32
+ import { Box, ScrollArea, UnstyledButton, createVarsResolver, factory, getRadius, rem, useProps, useResolvedStylesApi, useStyles } from "@mantine/core";
31
33
  import { useIsomorphicEffect, useMergedRef } from "@mantine/hooks";
32
34
  import { createElement, useCallback, useMemo, useRef, useState } from "react";
33
35
  import { useDatesContext } from "@mantine/dates";
@@ -53,7 +55,10 @@ const defaultProps = {
53
55
  withEventsDragAndDrop: false,
54
56
  withDragSlotSelect: false,
55
57
  withEventResize: false,
56
- mode: "default"
58
+ mode: "default",
59
+ withInteractiveBackgroundEvents: false,
60
+ eventOverlapMode: "columns",
61
+ eventOverlapRaiseDelay: 600
57
62
  };
58
63
  const varsResolver = createVarsResolver((_theme, { radius, allDaySlotHeight, slotHeight }) => ({ weekView: {
59
64
  "--week-view-radius": radius !== void 0 ? getRadius(radius) : void 0,
@@ -62,7 +67,7 @@ const varsResolver = createVarsResolver((_theme, { radius, allDaySlotHeight, slo
62
67
  } }));
63
68
  const WeekView = factory((_props) => {
64
69
  const props = useProps("WeekView", defaultProps, _props);
65
- const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, intervalMinutes, withSubHourGridLines, slotLabelFormat, withWeekendDays, weekendDays, firstDayOfWeek, weekdayFormat, radius, highlightToday, withCurrentTimeIndicator, forceCurrentTimeIndicator, getCurrentTime, scrollAreaProps, locale, withWeekNumber, withCurrentTimeBubble, withAllDaySlots, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, weekLabelFormat, events, allDaySlotHeight, slotHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, withEventsDragAndDrop, onEventDrop, canDragEvent, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, renderWeekLabel, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, recurrenceExpansionLimit, getTimeSlotProps, withAgenda, ...others } = props;
70
+ const { classNames, className, style, styles, unstyled, attributes, vars, startTime, endTime, date, onDateChange, intervalMinutes, withSubHourGridLines, slotLabelFormat, withWeekendDays, eventOverlapMode, eventOverlapRaiseDelay, weekendDays, firstDayOfWeek, weekdayFormat, radius, highlightToday, withCurrentTimeIndicator, forceCurrentTimeIndicator, getCurrentTime, scrollAreaProps, locale, withWeekNumber, withCurrentTimeBubble, withAllDaySlots, __staticSelector, withHeader, onViewChange, previousControlProps, nextControlProps, todayControlProps, viewSelectProps, weekLabelFormat, events, allDaySlotHeight, slotHeight, labels, highlightBusinessHours, businessHours, renderEventBody, renderEvent, withEventsDragAndDrop, onEventDrop, canDragEvent, eventDragInterval, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, renderWeekLabel, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, eventResizeInterval, recurrenceExpansionLimit, getTimeSlotProps, withAgenda, ...others } = props;
66
71
  const [agendaOpen, setAgendaOpen] = useState(false);
67
72
  const getStyles = useStyles({
68
73
  name: __staticSelector,
@@ -90,7 +95,6 @@ const WeekView = factory((_props) => {
90
95
  __staticSelector,
91
96
  radius
92
97
  };
93
- const theme = useMantineTheme();
94
98
  const [scrolled, setScrolled] = useState(false);
95
99
  const ctx = useDatesContext();
96
100
  const slots = getDayTimeIntervals({
@@ -103,11 +107,56 @@ const WeekView = factory((_props) => {
103
107
  viewportRef,
104
108
  enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static"
105
109
  });
110
+ const dragOffsetRef = useRef({
111
+ offset: 0,
112
+ size: 0
113
+ });
114
+ const getDropTimeForSlot = (target, draggedEvent) => {
115
+ const slotTime = slots[target.slotIndex].startTime;
116
+ return calculateDropTime({
117
+ draggedEvent,
118
+ targetDate: target.day,
119
+ targetSlotTime: slotTime,
120
+ intervalMinutes,
121
+ dragIntervalMinutes: eventDragInterval,
122
+ slotOffset: eventDragInterval == null ? void 0 : dragOffsetRef.current.offset,
123
+ slotSize: eventDragInterval == null ? void 0 : dragOffsetRef.current.size,
124
+ startTime,
125
+ endTime
126
+ });
127
+ };
106
128
  const handleExternalDrop = useCallback((e, target) => {
107
129
  if (!onExternalEventDrop) return;
108
130
  const slotDate = dayjs(target.day).format("YYYY-MM-DD");
109
- onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[target.slotIndex].startTime}`);
110
- }, [onExternalEventDrop, slots]);
131
+ const slotTime = slots[target.slotIndex].startTime;
132
+ if (eventDragInterval == null) {
133
+ onExternalEventDrop(e.dataTransfer, `${slotDate} ${slotTime}`);
134
+ return;
135
+ }
136
+ const slotStart = `${slotDate} ${slotTime}`;
137
+ const { start } = calculateDropTime({
138
+ draggedEvent: {
139
+ start: slotStart,
140
+ end: slotStart
141
+ },
142
+ targetDate: target.day,
143
+ targetSlotTime: slotTime,
144
+ intervalMinutes,
145
+ dragIntervalMinutes: eventDragInterval,
146
+ slotOffset: dragOffsetRef.current.offset,
147
+ slotSize: dragOffsetRef.current.size,
148
+ startTime,
149
+ endTime
150
+ });
151
+ onExternalEventDrop(e.dataTransfer, dayjs(start).format("YYYY-MM-DD HH:mm:ss"));
152
+ }, [
153
+ onExternalEventDrop,
154
+ slots,
155
+ eventDragInterval,
156
+ intervalMinutes,
157
+ startTime,
158
+ endTime
159
+ ]);
111
160
  const handleExternalAllDayDrop = useCallback((e, day) => {
112
161
  if (!onExternalEventDrop) return;
113
162
  onExternalEventDrop(e.dataTransfer, `${dayjs(day).format("YYYY-MM-DD")} 00:00:00`);
@@ -119,17 +168,21 @@ const WeekView = factory((_props) => {
119
168
  canDragEvent,
120
169
  onEventDragStart,
121
170
  onEventDragEnd,
122
- calculateDropTarget: (target, draggedEvent) => {
123
- const slotTime = slots[target.slotIndex].startTime;
124
- return calculateDropTime({
125
- draggedEvent,
126
- targetDate: target.day,
127
- targetSlotTime: slotTime,
128
- intervalMinutes
129
- });
130
- },
171
+ calculateDropTarget: getDropTimeForSlot,
131
172
  onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0
132
173
  });
174
+ const updateDragPreview = (target) => {
175
+ const draggedEvent = dragDrop.dragContextValue.draggedEvent;
176
+ if (eventDragInterval == null || !draggedEvent) return;
177
+ const { start, end } = getDropTimeForSlot(target, draggedEvent);
178
+ const newStart = dayjs(start).format("YYYY-MM-DD HH:mm:ss");
179
+ if (dragDrop.dragPreview?.start !== newStart || dragDrop.dragPreview?.target.day !== target.day) dragDrop.setDragPreview({
180
+ start: newStart,
181
+ end: dayjs(end).format("YYYY-MM-DD HH:mm:ss"),
182
+ target
183
+ });
184
+ };
185
+ const suppressDropHighlight = eventDragInterval != null && dragDrop.dragContextValue.isDragging;
133
186
  const allDayDragDrop = useDragDropHandlers({
134
187
  enabled: withEventsDragAndDrop,
135
188
  mode,
@@ -161,6 +214,7 @@ const WeekView = factory((_props) => {
161
214
  startTime,
162
215
  endTime,
163
216
  intervalMinutes,
217
+ resizeIntervalMinutes: eventResizeInterval,
164
218
  onEventResize,
165
219
  canResizeEvent
166
220
  });
@@ -183,25 +237,28 @@ const WeekView = factory((_props) => {
183
237
  weekendDays: ctx.getWeekendDays(weekendDays),
184
238
  firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
185
239
  });
240
+ const expandedEvents = expandRecurringEvents({
241
+ events,
242
+ rangeStart: dayjs(weekdays[0]).startOf("day").toDate(),
243
+ rangeEnd: dayjs(weekdays[weekdays.length - 1]).endOf("day").toDate(),
244
+ expansionLimit: recurrenceExpansionLimit
245
+ });
186
246
  const weekEvents = getWeekViewEvents({
187
247
  date,
188
- events: expandRecurringEvents({
189
- events,
190
- rangeStart: dayjs(weekdays[0]).startOf("day").toDate(),
191
- rangeEnd: dayjs(weekdays[weekdays.length - 1]).endOf("day").toDate(),
192
- expansionLimit: recurrenceExpansionLimit
193
- }),
248
+ events: expandedEvents,
194
249
  startTime,
195
250
  endTime,
196
251
  intervalMinutes,
197
252
  firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),
198
253
  weekendDays: ctx.getWeekendDays(weekendDays),
199
- withWeekendDays
254
+ withWeekendDays,
255
+ eventOverlapMode
200
256
  });
201
257
  const timeValues = slots.reduce((acc, interval) => {
202
258
  if (!interval.isHourStart) return acc;
259
+ const intervalTime = dayjs(`${dayjs(date).format("YYYY-MM-DD")} ${interval.startTime}`);
203
260
  const label = formatDate({
204
- date: dayjs(`${dayjs(date).format("YYYY-MM-DD")} ${interval.startTime}`),
261
+ date: intervalTime,
205
262
  locale: ctx.getLocale(locale),
206
263
  format: slotLabelFormat
207
264
  });
@@ -250,14 +307,33 @@ const WeekView = factory((_props) => {
250
307
  const rect = slotNode.getBoundingClientRect();
251
308
  return event.clientY >= rect.top && event.clientY <= rect.bottom;
252
309
  });
253
- if (slotIndex >= 0) return slotIndex;
310
+ if (slotIndex >= 0) {
311
+ const rect = daySlots[slotIndex].getBoundingClientRect();
312
+ dragOffsetRef.current = {
313
+ offset: event.clientY - rect.top,
314
+ size: rect.height
315
+ };
316
+ return slotIndex;
317
+ }
254
318
  const firstSlot = daySlots[0];
255
319
  const lastSlot = daySlots[daySlots.length - 1];
256
320
  if (!firstSlot || !lastSlot) return null;
257
321
  const firstRect = firstSlot.getBoundingClientRect();
258
322
  const lastRect = lastSlot.getBoundingClientRect();
259
- if (event.clientY < firstRect.top) return 0;
260
- if (event.clientY > lastRect.bottom) return daySlots.length - 1;
323
+ if (event.clientY < firstRect.top) {
324
+ dragOffsetRef.current = {
325
+ offset: 0,
326
+ size: firstRect.height
327
+ };
328
+ return 0;
329
+ }
330
+ if (event.clientY > lastRect.bottom) {
331
+ dragOffsetRef.current = {
332
+ offset: lastRect.height,
333
+ size: lastRect.height
334
+ };
335
+ return daySlots.length - 1;
336
+ }
261
337
  return null;
262
338
  }, []);
263
339
  const handleSlotKeyDown = (event, dayIndex, slotIndex) => {
@@ -323,32 +399,20 @@ const WeekView = factory((_props) => {
323
399
  ...getStyles("weekViewDayNumber"),
324
400
  key: "date"
325
401
  }, dayjs(day).date())));
402
+ const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== "static";
326
403
  const days = weekdays.map((day, dayIndex) => {
327
- const backgroundEventNodes = (weekEvents.backgroundEvents[day] || []).filter((event) => !event.position.allDay).map((event) => {
328
- const colors = theme.variantColorResolver({
329
- color: event.color || theme.primaryColor,
330
- theme,
331
- variant: "light",
332
- autoContrast: true
333
- });
334
- const bgEventBody = typeof renderEventBody === "function" ? renderEventBody(event) : event.title;
335
- const bgEventProps = {
336
- key: `bg-${event.id}`,
337
- ...getStyles("weekViewBackgroundEvent", { style: {
338
- top: `${event.position.top}%`,
339
- height: `${event.position.height}%`,
340
- width: "100%"
341
- } }),
342
- __vars: {
343
- "--bg-event-bg": colors.background,
344
- "--bg-event-color": colors.color
345
- },
346
- children: bgEventBody
347
- };
348
- if (typeof renderEvent === "function") return renderEvent(event, bgEventProps);
349
- const { key: bgEventKey, ...restBgEventProps } = bgEventProps;
350
- return /* @__PURE__ */ jsx(Box, { ...restBgEventProps }, bgEventKey);
351
- });
404
+ const backgroundEventNodes = (weekEvents.backgroundEvents[day] || []).filter((event) => !event.position.allDay).map((event) => /* @__PURE__ */ jsx(ScheduleBackgroundEvent, {
405
+ event,
406
+ renderEvent,
407
+ renderEventBody,
408
+ interactive: interactiveBackgroundEvents,
409
+ onEventClick,
410
+ ...getStyles("weekViewBackgroundEvent", { style: {
411
+ top: `${event.position.top}%`,
412
+ height: `${event.position.height}%`,
413
+ width: "100%"
414
+ } })
415
+ }, `bg-${event.id}`));
352
416
  const dayEvents = (weekEvents.regularEvents[day] || []).map((event) => {
353
417
  const eventIsAllDay = isAllDayEvent({
354
418
  event,
@@ -385,6 +449,7 @@ const WeekView = factory((_props) => {
385
449
  onClick: onEventClick ? (e) => {
386
450
  if (!eventResize.wasResizing()) onEventClick(event, e);
387
451
  } : void 0,
452
+ mod: { cascade: eventOverlapMode === "cascade" },
388
453
  style: {
389
454
  position: "absolute",
390
455
  ...getTimeAxisEventStyle({
@@ -393,7 +458,9 @@ const WeekView = factory((_props) => {
393
458
  axis: "vertical"
394
459
  }),
395
460
  left: `${event.position.offset}%`,
396
- width: `${event.position.width}%`
461
+ width: `${event.position.width}%`,
462
+ "--event-z-index": event.position.column + 3,
463
+ "--event-z-index-raised": event.position.overlaps + 3
397
464
  }
398
465
  }, event.id);
399
466
  });
@@ -418,10 +485,16 @@ const WeekView = factory((_props) => {
418
485
  } : void 0,
419
486
  onDaySlotsDragOver: (event, dayStr, dayIdx) => {
420
487
  const slotIndex = getSlotIndexFromDragPoint(event, dayIdx);
421
- if (slotIndex !== null) dragDrop.handleDragOver(event, {
422
- day: dayStr,
423
- slotIndex
424
- });
488
+ if (slotIndex !== null) {
489
+ dragDrop.handleDragOver(event, {
490
+ day: dayStr,
491
+ slotIndex
492
+ });
493
+ updateDragPreview({
494
+ day: dayStr,
495
+ slotIndex
496
+ });
497
+ }
425
498
  },
426
499
  onDaySlotsDragLeave: dragDrop.handleDragLeave,
427
500
  onDaySlotsDrop: (event, dayStr, dayIdx) => {
@@ -431,7 +504,7 @@ const WeekView = factory((_props) => {
431
504
  slotIndex
432
505
  });
433
506
  },
434
- dropTargetSlotIndex: dragDrop.dropTarget?.day === day ? dragDrop.dropTarget.slotIndex : void 0,
507
+ dropTargetSlotIndex: !suppressDropHighlight && dragDrop.dropTarget?.day === day ? dragDrop.dropTarget.slotIndex : void 0,
435
508
  withDragSlotSelect,
436
509
  onSlotPointerDown: slotDragSelect.handleSlotPointerDown,
437
510
  isSlotDragSelected: slotDragSelect.isSlotSelected,
@@ -439,7 +512,29 @@ const WeekView = factory((_props) => {
439
512
  daySlotsContainersRef.current[dayIndex] = node;
440
513
  },
441
514
  getTimeSlotProps,
442
- children: [backgroundEventNodes, dayEvents]
515
+ children: [
516
+ backgroundEventNodes,
517
+ dayEvents,
518
+ dragDrop.dragPreview?.target.day === day && dragDrop.dragContextValue.draggedEvent && /* @__PURE__ */ jsx(Box, { ...getStyles("weekViewDragPreview", { style: (() => {
519
+ const { top, height } = getDayPosition({
520
+ event: {
521
+ ...dragDrop.dragContextValue.draggedEvent,
522
+ start: dragDrop.dragPreview.start,
523
+ end: dragDrop.dragPreview.end
524
+ },
525
+ startTime,
526
+ endTime,
527
+ intervalMinutes
528
+ });
529
+ return {
530
+ position: "absolute",
531
+ insetInlineStart: 0,
532
+ insetInlineEnd: 0,
533
+ top: `${top}%`,
534
+ height: `${height}%`
535
+ };
536
+ })() }) })
537
+ ]
443
538
  }, day);
444
539
  });
445
540
  const allDaySlots = weekdays.map((day, dayIndex) => /* @__PURE__ */ jsx(UnstyledButton, {
@@ -480,32 +575,19 @@ const WeekView = factory((_props) => {
480
575
  const allDayBgEvents = (weekEvents.backgroundEvents[day] || []).filter((event) => event.position.allDay);
481
576
  const dayWidth = 100 / weekdays.length;
482
577
  const dayOffset = dayIndex * dayWidth;
483
- return allDayBgEvents.map((event) => {
484
- const colors = theme.variantColorResolver({
485
- color: event.color || theme.primaryColor,
486
- theme,
487
- variant: "light",
488
- autoContrast: true
489
- });
490
- const bgEventBody = typeof renderEventBody === "function" ? renderEventBody(event) : event.title;
491
- const bgEventProps = {
492
- key: `bg-allday-${event.id}-${day}`,
493
- ...getStyles("weekViewBackgroundEvent", { style: {
494
- top: 0,
495
- height: "100%",
496
- left: `${dayOffset}%`,
497
- width: `${dayWidth}%`
498
- } }),
499
- __vars: {
500
- "--bg-event-bg": colors.background,
501
- "--bg-event-color": colors.color
502
- },
503
- children: bgEventBody
504
- };
505
- if (typeof renderEvent === "function") return renderEvent(event, bgEventProps);
506
- const { key: bgEventKey, ...restBgEventProps } = bgEventProps;
507
- return /* @__PURE__ */ jsx(Box, { ...restBgEventProps }, bgEventKey);
508
- });
578
+ return allDayBgEvents.map((event) => /* @__PURE__ */ jsx(ScheduleBackgroundEvent, {
579
+ event,
580
+ renderEvent,
581
+ renderEventBody,
582
+ interactive: interactiveBackgroundEvents,
583
+ onEventClick,
584
+ ...getStyles("weekViewBackgroundEvent", { style: {
585
+ top: 0,
586
+ height: "100%",
587
+ left: `${dayOffset}%`,
588
+ width: `${dayWidth}%`
589
+ } })
590
+ }, `bg-allday-${event.id}-${day}`));
509
591
  });
510
592
  const extraRows = Math.max(...weekEvents.allDayEvents.map((event) => event.position.row), 1) - 1;
511
593
  const content = /* @__PURE__ */ jsxs(Box, {
@@ -557,13 +639,15 @@ const WeekView = factory((_props) => {
557
639
  !agendaOpen && /* @__PURE__ */ jsx(Box, {
558
640
  ...getStyles("weekViewRoot"),
559
641
  __vars: {
642
+ "--event-raise-delay": `${eventOverlapRaiseDelay}ms`,
560
643
  "--indicator-offset-index": currentWeekdayIndex === -1 ? void 0 : `${currentWeekdayIndex + 1}`,
561
644
  "--number-of-days": withWeekendDays ? "7" : `${7 - ctx.getWeekendDays(weekendDays).length}`
562
645
  },
563
646
  mod: {
564
647
  "with-weekends": withWeekendDays,
565
648
  "hide-sub-hour-grid-lines": !withSubHourGridLines,
566
- "event-interaction": eventResize.isResizing || dragDrop.dragContextValue.isDragging
649
+ "event-interaction": eventResize.isResizing || dragDrop.dragContextValue.isDragging,
650
+ "all-day-dragging": allDayDragDrop.dragContextValue.isDragging
567
651
  },
568
652
  children: /* @__PURE__ */ jsxs(ScrollArea.Autosize, {
569
653
  scrollbarSize: 4,