@mantine/schedule 9.5.2 → 9.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) 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 +144 -78
  8. package/cjs/components/DayView/DayView.cjs.map +1 -1
  9. package/cjs/components/DayView/DayView.module.cjs +2 -1
  10. package/cjs/components/DayView/DayView.module.cjs.map +1 -1
  11. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -1
  12. package/cjs/components/DragContext/DragContext.cjs.map +1 -1
  13. package/cjs/components/MobileMonthView/MobileMonthView.cjs +7 -6
  14. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  15. package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs.map +1 -1
  16. package/cjs/components/MonthView/MonthView.cjs +24 -34
  17. package/cjs/components/MonthView/MonthView.cjs.map +1 -1
  18. package/cjs/components/MonthView/MonthView.module.cjs.map +1 -1
  19. package/cjs/components/MonthView/get-month-view-events/find-available-row.cjs.map +1 -1
  20. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs +4 -2
  21. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
  22. package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs.map +1 -1
  23. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs +3 -2
  24. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs.map +1 -1
  25. package/cjs/components/MonthView/get-renderable-month-event-segments.cjs +1 -1
  26. package/cjs/components/MonthView/get-renderable-month-event-segments.cjs.map +1 -1
  27. package/cjs/components/MoreEvents/MoreEvents.cjs.map +1 -1
  28. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +136 -52
  29. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
  30. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs +2 -1
  31. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
  32. package/cjs/components/ResourcesDayView/ResourcesDayViewColumn.cjs.map +1 -1
  33. package/cjs/components/ResourcesDayView/get-resources-day-view-events/get-resources-day-view-events.cjs.map +1 -1
  34. package/cjs/components/ResourcesMonthView/ResourcesMonthView.cjs.map +1 -1
  35. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs +3 -1
  36. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs.map +1 -1
  37. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +150 -59
  38. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
  39. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs +2 -1
  40. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
  41. package/cjs/components/ResourcesWeekView/ResourcesWeekViewRow.cjs.map +1 -1
  42. package/cjs/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.cjs +6 -3
  43. package/cjs/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.cjs.map +1 -1
  44. package/cjs/components/Schedule/Schedule.cjs +4 -1
  45. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  46. package/cjs/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.cjs +53 -0
  47. package/cjs/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.cjs.map +1 -0
  48. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs.map +1 -1
  49. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs +15 -14
  50. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs.map +1 -1
  51. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs.map +1 -1
  52. package/cjs/components/ScheduleHeader/ScheduleHeader.cjs.map +1 -1
  53. package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs.map +1 -1
  54. package/cjs/components/ScheduleHeader/ScheduleHeaderContext.cjs.map +1 -1
  55. package/cjs/components/ScheduleHeader/ViewSelect/ViewSelect.cjs.map +1 -1
  56. package/cjs/components/WeekView/WeekView.cjs +159 -82
  57. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  58. package/cjs/components/WeekView/WeekView.module.cjs +2 -1
  59. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  60. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
  61. package/cjs/components/WeekView/get-week-label/get-week-label.cjs.map +1 -1
  62. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-offset.cjs.map +1 -1
  63. package/cjs/components/WeekView/get-week-view-events/calculate-all-day-event-width.cjs.map +1 -1
  64. package/cjs/components/WeekView/get-week-view-events/calculate-event-days.cjs.map +1 -1
  65. package/cjs/components/WeekView/get-week-view-events/get-event-end-date.cjs.map +1 -1
  66. package/cjs/components/WeekView/get-week-view-events/get-hanging-status.cjs.map +1 -1
  67. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -1
  68. package/cjs/components/YearView/YearView.cjs +7 -6
  69. package/cjs/components/YearView/YearView.cjs.map +1 -1
  70. package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
  71. package/cjs/components/YearView/get-visible-week-days.cjs.map +1 -1
  72. package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs.map +1 -1
  73. package/cjs/hooks/use-auto-scroll-on-drag.cjs.map +1 -1
  74. package/cjs/hooks/use-day-grid-event-resize.cjs.map +1 -1
  75. package/cjs/hooks/use-drag-drop-handlers.cjs +13 -2
  76. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
  77. package/cjs/hooks/use-drag-state.cjs.map +1 -1
  78. package/cjs/hooks/use-event-resize.cjs +30 -15
  79. package/cjs/hooks/use-event-resize.cjs.map +1 -1
  80. package/cjs/hooks/use-horizontal-event-resize.cjs +30 -15
  81. package/cjs/hooks/use-horizontal-event-resize.cjs.map +1 -1
  82. package/cjs/hooks/use-slot-drag-select.cjs.map +1 -1
  83. package/cjs/index.cjs +2 -0
  84. package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs +25 -4
  85. package/cjs/utils/calculate-drop-time/calculate-drop-time.cjs.map +1 -1
  86. package/cjs/utils/calculate-month-drop-date/calculate-month-drop-date.cjs.map +1 -1
  87. package/cjs/utils/calculate-month-resize-dates/calculate-month-resize-dates.cjs.map +1 -1
  88. package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs.map +1 -1
  89. package/cjs/utils/format-date/format-date.cjs.map +1 -1
  90. package/cjs/utils/get-current-time-position/get-current-time-position.cjs.map +1 -1
  91. package/cjs/utils/get-day-position/get-day-position.cjs.map +1 -1
  92. package/cjs/utils/get-end-of-week/get-end-of-week.cjs.map +1 -1
  93. package/cjs/utils/get-month-days/get-month-days.cjs +4 -2
  94. package/cjs/utils/get-month-days/get-month-days.cjs.map +1 -1
  95. package/cjs/utils/get-month-range/get-month-range.cjs.map +1 -1
  96. package/cjs/utils/get-months-by-quarter/get-months-by-quarter.cjs.map +1 -1
  97. package/cjs/utils/get-months-list/get-months-list.cjs.map +1 -1
  98. package/cjs/utils/get-start-of-week/get-start-of-week.cjs.map +1 -1
  99. package/cjs/utils/get-week-days/get-week-days.cjs.map +1 -1
  100. package/cjs/utils/get-week-number/get-week-number.cjs +4 -1
  101. package/cjs/utils/get-week-number/get-week-number.cjs.map +1 -1
  102. package/cjs/utils/get-weekdays-names/get-weekdays-names.cjs.map +1 -1
  103. package/cjs/utils/is-after-min-date/is-after-min-date.cjs.map +1 -1
  104. package/cjs/utils/is-all-day-event/is-all-day-event.cjs.map +1 -1
  105. package/cjs/utils/is-before-max-date/is-before-max-date.cjs.map +1 -1
  106. package/cjs/utils/is-event-in-time-range/is-event-in-time-range.cjs.map +1 -1
  107. package/cjs/utils/is-events-overlap/is-events-overlap.cjs.map +1 -1
  108. package/cjs/utils/is-in-time-range/is-in-time-range.cjs.map +1 -1
  109. package/cjs/utils/is-multiday-event/is-multiday-event.cjs.map +1 -1
  110. package/cjs/utils/is-same-month/is-same-month.cjs.map +1 -1
  111. package/cjs/utils/is-within-week/is-within-week.cjs.map +1 -1
  112. package/cjs/utils/next-week/next-week.cjs.map +1 -1
  113. package/cjs/utils/previous-week/previous-week.cjs.map +1 -1
  114. package/cjs/utils/sort-events/sort-events.cjs.map +1 -1
  115. package/cjs/utils/to-date-string/to-date-string.cjs.map +1 -1
  116. package/cjs/utils/validate-event/validate-event.cjs.map +1 -1
  117. package/esm/components/AgendaView/AgendaView.mjs +7 -6
  118. package/esm/components/AgendaView/AgendaView.mjs.map +1 -1
  119. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs +4 -3
  120. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -1
  121. package/esm/components/DayView/DayView.mjs +145 -79
  122. package/esm/components/DayView/DayView.mjs.map +1 -1
  123. package/esm/components/DayView/DayView.module.mjs +2 -1
  124. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  125. package/esm/components/MobileMonthView/MobileMonthView.mjs +7 -6
  126. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  127. package/esm/components/MonthView/MonthView.mjs +25 -35
  128. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  129. package/esm/components/MonthView/MonthView.module.mjs.map +1 -1
  130. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs +4 -2
  131. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
  132. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs +3 -2
  133. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs.map +1 -1
  134. package/esm/components/MonthView/get-renderable-month-event-segments.mjs +1 -1
  135. package/esm/components/MonthView/get-renderable-month-event-segments.mjs.map +1 -1
  136. package/esm/components/MoreEvents/MoreEvents.mjs.map +1 -1
  137. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +138 -54
  138. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
  139. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs +2 -1
  140. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
  141. package/esm/components/ResourcesDayView/ResourcesDayViewColumn.mjs.map +1 -1
  142. package/esm/components/ResourcesMonthView/ResourcesMonthView.mjs.map +1 -1
  143. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs +3 -1
  144. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -1
  145. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +152 -61
  146. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
  147. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs +2 -1
  148. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
  149. package/esm/components/ResourcesWeekView/ResourcesWeekViewRow.mjs.map +1 -1
  150. package/esm/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.mjs +6 -3
  151. package/esm/components/ResourcesWeekView/get-resources-week-view-events/get-resources-week-view-events.mjs.map +1 -1
  152. package/esm/components/Schedule/Schedule.mjs +4 -1
  153. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  154. package/esm/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.mjs +53 -0
  155. package/esm/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.mjs.map +1 -0
  156. package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -1
  157. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs +15 -14
  158. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -1
  159. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -1
  160. package/esm/components/ScheduleHeader/ScheduleHeader.mjs.map +1 -1
  161. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -1
  162. package/esm/components/ScheduleHeader/ViewSelect/ViewSelect.mjs.map +1 -1
  163. package/esm/components/WeekView/WeekView.mjs +160 -83
  164. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  165. package/esm/components/WeekView/WeekView.module.mjs +2 -1
  166. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  167. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  168. package/esm/components/YearView/YearView.mjs +7 -6
  169. package/esm/components/YearView/YearView.mjs.map +1 -1
  170. package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
  171. package/esm/hooks/use-drag-drop-handlers.mjs +13 -2
  172. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  173. package/esm/hooks/use-event-resize.mjs +30 -15
  174. package/esm/hooks/use-event-resize.mjs.map +1 -1
  175. package/esm/hooks/use-horizontal-event-resize.mjs +30 -15
  176. package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -1
  177. package/esm/index.mjs +2 -1
  178. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs +25 -4
  179. package/esm/utils/calculate-drop-time/calculate-drop-time.mjs.map +1 -1
  180. package/esm/utils/get-month-days/get-month-days.mjs +4 -2
  181. package/esm/utils/get-month-days/get-month-days.mjs.map +1 -1
  182. package/esm/utils/get-week-number/get-week-number.mjs +4 -1
  183. package/esm/utils/get-week-number/get-week-number.mjs.map +1 -1
  184. package/lib/components/DayView/DayView.d.ts +7 -1
  185. package/lib/components/MonthView/MonthView.d.ts +2 -0
  186. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +7 -1
  187. package/lib/components/ResourcesDayView/ResourcesDayViewColumn.d.ts +1 -1
  188. package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +3 -1
  189. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +7 -1
  190. package/lib/components/ResourcesWeekView/ResourcesWeekViewRow.d.ts +1 -1
  191. package/lib/components/Schedule/Schedule.d.ts +3 -1
  192. package/lib/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.d.ts +19 -0
  193. package/lib/components/ScheduleBackgroundEvent/index.d.ts +2 -0
  194. package/lib/components/ScheduleHeader/HeaderControl/HeaderControl.d.ts +3 -3
  195. package/lib/components/ScheduleHeader/ScheduleHeaderBase.d.ts +1 -1
  196. package/lib/components/WeekView/WeekView.d.ts +7 -1
  197. package/lib/components/WeekView/WeekViewDay.d.ts +1 -1
  198. package/lib/components/YearView/YearViewMonth.d.ts +1 -1
  199. package/lib/hooks/use-drag-drop-handlers.d.ts +10 -1
  200. package/lib/hooks/use-event-resize.d.ts +2 -1
  201. package/lib/hooks/use-horizontal-event-resize.d.ts +2 -1
  202. package/lib/index.d.mts +1 -0
  203. package/lib/index.d.ts +1 -0
  204. package/lib/types.d.ts +1 -1
  205. package/lib/utils/calculate-drop-time/calculate-drop-time.d.ts +11 -1
  206. package/package.json +8 -5
  207. package/styles.css +160 -0
  208. package/styles.layer.css +160 -0
@@ -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,8 @@ const defaultProps = {
53
55
  withEventsDragAndDrop: false,
54
56
  withDragSlotSelect: false,
55
57
  withEventResize: false,
56
- mode: "default"
58
+ mode: "default",
59
+ withInteractiveBackgroundEvents: false
57
60
  };
58
61
  const varsResolver = createVarsResolver((_theme, { radius, allDaySlotHeight, slotHeight }) => ({ weekView: {
59
62
  "--week-view-radius": radius !== void 0 ? getRadius(radius) : void 0,
@@ -62,7 +65,7 @@ const varsResolver = createVarsResolver((_theme, { radius, allDaySlotHeight, slo
62
65
  } }));
63
66
  const WeekView = factory((_props) => {
64
67
  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;
68
+ 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, eventDragInterval, onEventDragStart, onEventDragEnd, onTimeSlotClick, onAllDaySlotClick, onEventClick, withInteractiveBackgroundEvents, withDragSlotSelect, onSlotDragEnd, mode, startScrollTime, renderWeekLabel, onExternalEventDrop, withEventResize, onEventResize, canResizeEvent, eventResizeInterval, recurrenceExpansionLimit, getTimeSlotProps, withAgenda, ...others } = props;
66
69
  const [agendaOpen, setAgendaOpen] = useState(false);
67
70
  const getStyles = useStyles({
68
71
  name: __staticSelector,
@@ -90,7 +93,6 @@ const WeekView = factory((_props) => {
90
93
  __staticSelector,
91
94
  radius
92
95
  };
93
- const theme = useMantineTheme();
94
96
  const [scrolled, setScrolled] = useState(false);
95
97
  const ctx = useDatesContext();
96
98
  const slots = getDayTimeIntervals({
@@ -103,11 +105,56 @@ const WeekView = factory((_props) => {
103
105
  viewportRef,
104
106
  enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static"
105
107
  });
108
+ const dragOffsetRef = useRef({
109
+ offset: 0,
110
+ size: 0
111
+ });
112
+ const getDropTimeForSlot = (target, draggedEvent) => {
113
+ const slotTime = slots[target.slotIndex].startTime;
114
+ return calculateDropTime({
115
+ draggedEvent,
116
+ targetDate: target.day,
117
+ targetSlotTime: slotTime,
118
+ intervalMinutes,
119
+ dragIntervalMinutes: eventDragInterval,
120
+ slotOffset: eventDragInterval == null ? void 0 : dragOffsetRef.current.offset,
121
+ slotSize: eventDragInterval == null ? void 0 : dragOffsetRef.current.size,
122
+ startTime,
123
+ endTime
124
+ });
125
+ };
106
126
  const handleExternalDrop = useCallback((e, target) => {
107
127
  if (!onExternalEventDrop) return;
108
128
  const slotDate = dayjs(target.day).format("YYYY-MM-DD");
109
- onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[target.slotIndex].startTime}`);
110
- }, [onExternalEventDrop, slots]);
129
+ const slotTime = slots[target.slotIndex].startTime;
130
+ if (eventDragInterval == null) {
131
+ onExternalEventDrop(e.dataTransfer, `${slotDate} ${slotTime}`);
132
+ return;
133
+ }
134
+ const slotStart = `${slotDate} ${slotTime}`;
135
+ const { start } = calculateDropTime({
136
+ draggedEvent: {
137
+ start: slotStart,
138
+ end: slotStart
139
+ },
140
+ targetDate: target.day,
141
+ targetSlotTime: slotTime,
142
+ intervalMinutes,
143
+ dragIntervalMinutes: eventDragInterval,
144
+ slotOffset: dragOffsetRef.current.offset,
145
+ slotSize: dragOffsetRef.current.size,
146
+ startTime,
147
+ endTime
148
+ });
149
+ onExternalEventDrop(e.dataTransfer, dayjs(start).format("YYYY-MM-DD HH:mm:ss"));
150
+ }, [
151
+ onExternalEventDrop,
152
+ slots,
153
+ eventDragInterval,
154
+ intervalMinutes,
155
+ startTime,
156
+ endTime
157
+ ]);
111
158
  const handleExternalAllDayDrop = useCallback((e, day) => {
112
159
  if (!onExternalEventDrop) return;
113
160
  onExternalEventDrop(e.dataTransfer, `${dayjs(day).format("YYYY-MM-DD")} 00:00:00`);
@@ -119,17 +166,21 @@ const WeekView = factory((_props) => {
119
166
  canDragEvent,
120
167
  onEventDragStart,
121
168
  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
- },
169
+ calculateDropTarget: getDropTimeForSlot,
131
170
  onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0
132
171
  });
172
+ const updateDragPreview = (target) => {
173
+ const draggedEvent = dragDrop.dragContextValue.draggedEvent;
174
+ if (eventDragInterval == null || !draggedEvent) return;
175
+ const { start, end } = getDropTimeForSlot(target, draggedEvent);
176
+ const newStart = dayjs(start).format("YYYY-MM-DD HH:mm:ss");
177
+ if (dragDrop.dragPreview?.start !== newStart || dragDrop.dragPreview?.target.day !== target.day) dragDrop.setDragPreview({
178
+ start: newStart,
179
+ end: dayjs(end).format("YYYY-MM-DD HH:mm:ss"),
180
+ target
181
+ });
182
+ };
183
+ const suppressDropHighlight = eventDragInterval != null && dragDrop.dragContextValue.isDragging;
133
184
  const allDayDragDrop = useDragDropHandlers({
134
185
  enabled: withEventsDragAndDrop,
135
186
  mode,
@@ -161,6 +212,7 @@ const WeekView = factory((_props) => {
161
212
  startTime,
162
213
  endTime,
163
214
  intervalMinutes,
215
+ resizeIntervalMinutes: eventResizeInterval,
164
216
  onEventResize,
165
217
  canResizeEvent
166
218
  });
@@ -183,14 +235,15 @@ const WeekView = factory((_props) => {
183
235
  weekendDays: ctx.getWeekendDays(weekendDays),
184
236
  firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
185
237
  });
238
+ const expandedEvents = expandRecurringEvents({
239
+ events,
240
+ rangeStart: dayjs(weekdays[0]).startOf("day").toDate(),
241
+ rangeEnd: dayjs(weekdays[weekdays.length - 1]).endOf("day").toDate(),
242
+ expansionLimit: recurrenceExpansionLimit
243
+ });
186
244
  const weekEvents = getWeekViewEvents({
187
245
  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
- }),
246
+ events: expandedEvents,
194
247
  startTime,
195
248
  endTime,
196
249
  intervalMinutes,
@@ -200,8 +253,9 @@ const WeekView = factory((_props) => {
200
253
  });
201
254
  const timeValues = slots.reduce((acc, interval) => {
202
255
  if (!interval.isHourStart) return acc;
256
+ const intervalTime = dayjs(`${dayjs(date).format("YYYY-MM-DD")} ${interval.startTime}`);
203
257
  const label = formatDate({
204
- date: dayjs(`${dayjs(date).format("YYYY-MM-DD")} ${interval.startTime}`),
258
+ date: intervalTime,
205
259
  locale: ctx.getLocale(locale),
206
260
  format: slotLabelFormat
207
261
  });
@@ -250,14 +304,33 @@ const WeekView = factory((_props) => {
250
304
  const rect = slotNode.getBoundingClientRect();
251
305
  return event.clientY >= rect.top && event.clientY <= rect.bottom;
252
306
  });
253
- if (slotIndex >= 0) return slotIndex;
307
+ if (slotIndex >= 0) {
308
+ const rect = daySlots[slotIndex].getBoundingClientRect();
309
+ dragOffsetRef.current = {
310
+ offset: event.clientY - rect.top,
311
+ size: rect.height
312
+ };
313
+ return slotIndex;
314
+ }
254
315
  const firstSlot = daySlots[0];
255
316
  const lastSlot = daySlots[daySlots.length - 1];
256
317
  if (!firstSlot || !lastSlot) return null;
257
318
  const firstRect = firstSlot.getBoundingClientRect();
258
319
  const lastRect = lastSlot.getBoundingClientRect();
259
- if (event.clientY < firstRect.top) return 0;
260
- if (event.clientY > lastRect.bottom) return daySlots.length - 1;
320
+ if (event.clientY < firstRect.top) {
321
+ dragOffsetRef.current = {
322
+ offset: 0,
323
+ size: firstRect.height
324
+ };
325
+ return 0;
326
+ }
327
+ if (event.clientY > lastRect.bottom) {
328
+ dragOffsetRef.current = {
329
+ offset: lastRect.height,
330
+ size: lastRect.height
331
+ };
332
+ return daySlots.length - 1;
333
+ }
261
334
  return null;
262
335
  }, []);
263
336
  const handleSlotKeyDown = (event, dayIndex, slotIndex) => {
@@ -323,32 +396,20 @@ const WeekView = factory((_props) => {
323
396
  ...getStyles("weekViewDayNumber"),
324
397
  key: "date"
325
398
  }, dayjs(day).date())));
399
+ const interactiveBackgroundEvents = withInteractiveBackgroundEvents && mode !== "static";
326
400
  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
- });
401
+ const backgroundEventNodes = (weekEvents.backgroundEvents[day] || []).filter((event) => !event.position.allDay).map((event) => /* @__PURE__ */ jsx(ScheduleBackgroundEvent, {
402
+ event,
403
+ renderEvent,
404
+ renderEventBody,
405
+ interactive: interactiveBackgroundEvents,
406
+ onEventClick,
407
+ ...getStyles("weekViewBackgroundEvent", { style: {
408
+ top: `${event.position.top}%`,
409
+ height: `${event.position.height}%`,
410
+ width: "100%"
411
+ } })
412
+ }, `bg-${event.id}`));
352
413
  const dayEvents = (weekEvents.regularEvents[day] || []).map((event) => {
353
414
  const eventIsAllDay = isAllDayEvent({
354
415
  event,
@@ -418,10 +479,16 @@ const WeekView = factory((_props) => {
418
479
  } : void 0,
419
480
  onDaySlotsDragOver: (event, dayStr, dayIdx) => {
420
481
  const slotIndex = getSlotIndexFromDragPoint(event, dayIdx);
421
- if (slotIndex !== null) dragDrop.handleDragOver(event, {
422
- day: dayStr,
423
- slotIndex
424
- });
482
+ if (slotIndex !== null) {
483
+ dragDrop.handleDragOver(event, {
484
+ day: dayStr,
485
+ slotIndex
486
+ });
487
+ updateDragPreview({
488
+ day: dayStr,
489
+ slotIndex
490
+ });
491
+ }
425
492
  },
426
493
  onDaySlotsDragLeave: dragDrop.handleDragLeave,
427
494
  onDaySlotsDrop: (event, dayStr, dayIdx) => {
@@ -431,7 +498,7 @@ const WeekView = factory((_props) => {
431
498
  slotIndex
432
499
  });
433
500
  },
434
- dropTargetSlotIndex: dragDrop.dropTarget?.day === day ? dragDrop.dropTarget.slotIndex : void 0,
501
+ dropTargetSlotIndex: !suppressDropHighlight && dragDrop.dropTarget?.day === day ? dragDrop.dropTarget.slotIndex : void 0,
435
502
  withDragSlotSelect,
436
503
  onSlotPointerDown: slotDragSelect.handleSlotPointerDown,
437
504
  isSlotDragSelected: slotDragSelect.isSlotSelected,
@@ -439,7 +506,29 @@ const WeekView = factory((_props) => {
439
506
  daySlotsContainersRef.current[dayIndex] = node;
440
507
  },
441
508
  getTimeSlotProps,
442
- children: [backgroundEventNodes, dayEvents]
509
+ children: [
510
+ backgroundEventNodes,
511
+ dayEvents,
512
+ dragDrop.dragPreview?.target.day === day && dragDrop.dragContextValue.draggedEvent && /* @__PURE__ */ jsx(Box, { ...getStyles("weekViewDragPreview", { style: (() => {
513
+ const { top, height } = getDayPosition({
514
+ event: {
515
+ ...dragDrop.dragContextValue.draggedEvent,
516
+ start: dragDrop.dragPreview.start,
517
+ end: dragDrop.dragPreview.end
518
+ },
519
+ startTime,
520
+ endTime,
521
+ intervalMinutes
522
+ });
523
+ return {
524
+ position: "absolute",
525
+ insetInlineStart: 0,
526
+ insetInlineEnd: 0,
527
+ top: `${top}%`,
528
+ height: `${height}%`
529
+ };
530
+ })() }) })
531
+ ]
443
532
  }, day);
444
533
  });
445
534
  const allDaySlots = weekdays.map((day, dayIndex) => /* @__PURE__ */ jsx(UnstyledButton, {
@@ -480,32 +569,19 @@ const WeekView = factory((_props) => {
480
569
  const allDayBgEvents = (weekEvents.backgroundEvents[day] || []).filter((event) => event.position.allDay);
481
570
  const dayWidth = 100 / weekdays.length;
482
571
  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
- });
572
+ return allDayBgEvents.map((event) => /* @__PURE__ */ jsx(ScheduleBackgroundEvent, {
573
+ event,
574
+ renderEvent,
575
+ renderEventBody,
576
+ interactive: interactiveBackgroundEvents,
577
+ onEventClick,
578
+ ...getStyles("weekViewBackgroundEvent", { style: {
579
+ top: 0,
580
+ height: "100%",
581
+ left: `${dayOffset}%`,
582
+ width: `${dayWidth}%`
583
+ } })
584
+ }, `bg-allday-${event.id}-${day}`));
509
585
  });
510
586
  const extraRows = Math.max(...weekEvents.allDayEvents.map((event) => event.position.row), 1) - 1;
511
587
  const content = /* @__PURE__ */ jsxs(Box, {
@@ -563,7 +639,8 @@ const WeekView = factory((_props) => {
563
639
  mod: {
564
640
  "with-weekends": withWeekendDays,
565
641
  "hide-sub-hour-grid-lines": !withSubHourGridLines,
566
- "event-interaction": eventResize.isResizing || dragDrop.dragContextValue.isDragging
642
+ "event-interaction": eventResize.isResizing || dragDrop.dragContextValue.isDragging,
643
+ "all-day-dragging": allDayDragDrop.dragContextValue.isDragging
567
644
  },
568
645
  children: /* @__PURE__ */ jsxs(ScrollArea.Autosize, {
569
646
  scrollbarSize: 4,