@mantine/schedule 9.0.0-alpha.3 → 9.0.0-alpha.5

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 (155) hide show
  1. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs +1 -0
  2. package/cjs/components/CurrentTimeIndicator/CurrentTimeIndicator.cjs.map +1 -1
  3. package/cjs/components/DayView/DayView.cjs +146 -9
  4. package/cjs/components/DayView/DayView.cjs.map +1 -1
  5. package/cjs/components/DayView/DayView.module.css.cjs +1 -1
  6. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs +1 -0
  7. package/cjs/components/DayView/get-day-view-events/get-day-positioned-events.cjs.map +1 -1
  8. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs +62 -5
  9. package/cjs/components/DayView/get-day-view-events/get-day-view-events.cjs.map +1 -1
  10. package/cjs/components/MobileMonthView/MobileMonthView.cjs +9 -1
  11. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  12. package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs +4 -0
  13. package/cjs/components/MobileMonthView/get-mobile-month-view-events.cjs.map +1 -1
  14. package/cjs/components/MonthView/MonthView.cjs +76 -13
  15. package/cjs/components/MonthView/MonthView.cjs.map +1 -1
  16. package/cjs/components/MonthView/MonthView.module.css.cjs +1 -1
  17. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs +17 -1
  18. package/cjs/components/MonthView/get-month-view-events/get-month-positioned-events.cjs.map +1 -1
  19. package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs +2 -1
  20. package/cjs/components/MonthView/get-month-view-events/get-month-view-events.cjs.map +1 -1
  21. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs +1 -0
  22. package/cjs/components/MonthView/get-month-view-events/get-weeks-in-range.cjs.map +1 -1
  23. package/cjs/components/Schedule/Schedule.cjs +11 -0
  24. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  25. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs +36 -2
  26. package/cjs/components/ScheduleEvent/ScheduleEvent.cjs.map +1 -1
  27. package/cjs/components/ScheduleEvent/ScheduleEvent.module.css.cjs +1 -1
  28. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs +1 -0
  29. package/cjs/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.cjs.map +1 -1
  30. package/cjs/components/ScheduleHeader/ScheduleHeader.cjs +1 -1
  31. package/cjs/components/ScheduleHeader/ScheduleHeader.cjs.map +1 -1
  32. package/cjs/components/ScheduleHeader/ScheduleHeaderBase.cjs.map +1 -1
  33. package/cjs/components/WeekView/WeekView.cjs +187 -18
  34. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  35. package/cjs/components/WeekView/WeekView.module.css.cjs +1 -1
  36. package/cjs/components/WeekView/WeekViewDay.cjs +4 -1
  37. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
  38. package/cjs/components/WeekView/get-week-label/get-week-label.cjs +1 -0
  39. package/cjs/components/WeekView/get-week-label/get-week-label.cjs.map +1 -1
  40. package/cjs/components/WeekView/get-week-view-events/assign-event-rows.cjs +1 -0
  41. package/cjs/components/WeekView/get-week-view-events/assign-event-rows.cjs.map +1 -1
  42. package/cjs/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.cjs +1 -0
  43. package/cjs/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.cjs.map +1 -1
  44. package/cjs/components/WeekView/get-week-view-events/filter-week-view-events.cjs +1 -0
  45. package/cjs/components/WeekView/get-week-view-events/filter-week-view-events.cjs.map +1 -1
  46. package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs +1 -0
  47. package/cjs/components/WeekView/get-week-view-events/find-available-column.cjs.map +1 -1
  48. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs +47 -1
  49. package/cjs/components/WeekView/get-week-view-events/get-week-positioned-events.cjs.map +1 -1
  50. package/cjs/components/YearView/YearView.cjs +58 -55
  51. package/cjs/components/YearView/YearView.cjs.map +1 -1
  52. package/cjs/components/YearView/YearView.module.css.cjs +1 -1
  53. package/cjs/components/YearView/YearViewMonth.cjs +2 -0
  54. package/cjs/components/YearView/YearViewMonth.cjs.map +1 -1
  55. package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs +1 -0
  56. package/cjs/components/YearView/get-year-view-events/get-year-view-events.cjs.map +1 -1
  57. package/cjs/hooks/use-auto-scroll-on-drag.cjs +75 -0
  58. package/cjs/hooks/use-auto-scroll-on-drag.cjs.map +1 -0
  59. package/cjs/hooks/use-drag-drop-handlers.cjs +42 -19
  60. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
  61. package/cjs/hooks/use-event-resize.cjs +165 -0
  62. package/cjs/hooks/use-event-resize.cjs.map +1 -0
  63. package/cjs/index.cjs +2 -0
  64. package/cjs/index.cjs.map +1 -1
  65. package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs +158 -0
  66. package/cjs/utils/expand-recurring-events/expand-recurring-events.cjs.map +1 -0
  67. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs +1 -0
  68. package/esm/components/CurrentTimeIndicator/CurrentTimeIndicator.mjs.map +1 -1
  69. package/esm/components/DayView/DayView.mjs +147 -10
  70. package/esm/components/DayView/DayView.mjs.map +1 -1
  71. package/esm/components/DayView/DayView.module.css.mjs +1 -1
  72. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs +1 -0
  73. package/esm/components/DayView/get-day-view-events/get-day-positioned-events.mjs.map +1 -1
  74. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs +62 -5
  75. package/esm/components/DayView/get-day-view-events/get-day-view-events.mjs.map +1 -1
  76. package/esm/components/MobileMonthView/MobileMonthView.mjs +9 -1
  77. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  78. package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs +4 -0
  79. package/esm/components/MobileMonthView/get-mobile-month-view-events.mjs.map +1 -1
  80. package/esm/components/MonthView/MonthView.mjs +78 -15
  81. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  82. package/esm/components/MonthView/MonthView.module.css.mjs +1 -1
  83. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs +17 -1
  84. package/esm/components/MonthView/get-month-view-events/get-month-positioned-events.mjs.map +1 -1
  85. package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs +2 -1
  86. package/esm/components/MonthView/get-month-view-events/get-month-view-events.mjs.map +1 -1
  87. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs +1 -0
  88. package/esm/components/MonthView/get-month-view-events/get-weeks-in-range.mjs.map +1 -1
  89. package/esm/components/Schedule/Schedule.mjs +11 -0
  90. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  91. package/esm/components/ScheduleEvent/ScheduleEvent.mjs +38 -4
  92. package/esm/components/ScheduleEvent/ScheduleEvent.mjs.map +1 -1
  93. package/esm/components/ScheduleEvent/ScheduleEvent.module.css.mjs +1 -1
  94. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs +1 -0
  95. package/esm/components/ScheduleHeader/MonthYearSelect/MonthYearSelect.mjs.map +1 -1
  96. package/esm/components/ScheduleHeader/ScheduleHeader.mjs +1 -1
  97. package/esm/components/ScheduleHeader/ScheduleHeader.mjs.map +1 -1
  98. package/esm/components/ScheduleHeader/ScheduleHeaderBase.mjs.map +1 -1
  99. package/esm/components/WeekView/WeekView.mjs +189 -20
  100. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  101. package/esm/components/WeekView/WeekView.module.css.mjs +1 -1
  102. package/esm/components/WeekView/WeekViewDay.mjs +4 -1
  103. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  104. package/esm/components/WeekView/get-week-label/get-week-label.mjs +1 -0
  105. package/esm/components/WeekView/get-week-label/get-week-label.mjs.map +1 -1
  106. package/esm/components/WeekView/get-week-view-events/assign-event-rows.mjs +1 -0
  107. package/esm/components/WeekView/get-week-view-events/assign-event-rows.mjs.map +1 -1
  108. package/esm/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.mjs +1 -0
  109. package/esm/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.mjs.map +1 -1
  110. package/esm/components/WeekView/get-week-view-events/filter-week-view-events.mjs +1 -0
  111. package/esm/components/WeekView/get-week-view-events/filter-week-view-events.mjs.map +1 -1
  112. package/esm/components/WeekView/get-week-view-events/find-available-column.mjs +1 -0
  113. package/esm/components/WeekView/get-week-view-events/find-available-column.mjs.map +1 -1
  114. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs +47 -1
  115. package/esm/components/WeekView/get-week-view-events/get-week-positioned-events.mjs.map +1 -1
  116. package/esm/components/YearView/YearView.mjs +58 -55
  117. package/esm/components/YearView/YearView.mjs.map +1 -1
  118. package/esm/components/YearView/YearView.module.css.mjs +1 -1
  119. package/esm/components/YearView/YearViewMonth.mjs +2 -0
  120. package/esm/components/YearView/YearViewMonth.mjs.map +1 -1
  121. package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs +1 -0
  122. package/esm/components/YearView/get-year-view-events/get-year-view-events.mjs.map +1 -1
  123. package/esm/hooks/use-auto-scroll-on-drag.mjs +73 -0
  124. package/esm/hooks/use-auto-scroll-on-drag.mjs.map +1 -0
  125. package/esm/hooks/use-drag-drop-handlers.mjs +42 -19
  126. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  127. package/esm/hooks/use-event-resize.mjs +159 -0
  128. package/esm/hooks/use-event-resize.mjs.map +1 -0
  129. package/esm/index.mjs +1 -0
  130. package/esm/index.mjs.map +1 -1
  131. package/esm/utils/expand-recurring-events/expand-recurring-events.mjs +151 -0
  132. package/esm/utils/expand-recurring-events/expand-recurring-events.mjs.map +1 -0
  133. package/lib/components/DayView/DayView.d.ts +14 -2
  134. package/lib/components/DayView/get-day-view-events/get-day-positioned-events.d.ts +1 -1
  135. package/lib/components/DayView/get-day-view-events/get-day-view-events.d.ts +4 -2
  136. package/lib/components/MobileMonthView/MobileMonthView.d.ts +2 -0
  137. package/lib/components/MonthView/MonthView.d.ts +9 -3
  138. package/lib/components/MonthView/get-month-view-events/get-month-positioned-events.d.ts +4 -0
  139. package/lib/components/Schedule/Schedule.d.ts +12 -2
  140. package/lib/components/ScheduleEvent/ScheduleEvent.d.ts +7 -1
  141. package/lib/components/WeekView/WeekView.d.ts +14 -2
  142. package/lib/components/WeekView/WeekViewDay.d.ts +3 -1
  143. package/lib/components/WeekView/get-week-view-events/get-week-positioned-events.d.ts +1 -0
  144. package/lib/components/YearView/YearView.d.ts +3 -1
  145. package/lib/hooks/use-auto-scroll-on-drag.d.ts +6 -0
  146. package/lib/hooks/use-drag-drop-handlers.d.ts +3 -1
  147. package/lib/hooks/use-event-resize.d.ts +22 -0
  148. package/lib/test-utils.d.ts +1 -1
  149. package/lib/types.d.ts +58 -8
  150. package/lib/utils/expand-recurring-events/expand-recurring-events.d.ts +10 -0
  151. package/lib/utils/index.d.ts +1 -0
  152. package/lib/utils/validate-event/validate-event.d.ts +1 -1
  153. package/package.json +9 -6
  154. package/styles.css +193 -82
  155. package/styles.layer.css +193 -82
@@ -1,10 +1,13 @@
1
1
  'use client';
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
- import { useState, createElement, useRef, useCallback, useMemo } from 'react';
3
+ import { useState, useRef, useCallback, createElement, useMemo } from 'react';
4
4
  import dayjs from 'dayjs';
5
- import { createVarsResolver, rem, getRadius, factory, useProps, useStyles, useResolvedStylesApi, Box, UnstyledButton, ScrollArea } from '@mantine/core';
5
+ import { createVarsResolver, rem, getRadius, factory, useProps, useStyles, useResolvedStylesApi, useMantineTheme, Box, UnstyledButton, ScrollArea } from '@mantine/core';
6
6
  import { useDatesContext } from '@mantine/dates';
7
+ import { useMergedRef, useIsomorphicEffect } from '@mantine/hooks';
8
+ import { useAutoScrollOnDrag } from '../../hooks/use-auto-scroll-on-drag.mjs';
7
9
  import { useDragDropHandlers } from '../../hooks/use-drag-drop-handlers.mjs';
10
+ import { useEventResize } from '../../hooks/use-event-resize.mjs';
8
11
  import { useSlotDragSelect } from '../../hooks/use-slot-drag-select.mjs';
9
12
  import { getLabel } from '../../labels.mjs';
10
13
  import { formatDate } from '../../utils/format-date/format-date.mjs';
@@ -17,6 +20,7 @@ import { previousWeek } from '../../utils/previous-week/previous-week.mjs';
17
20
  import { isAllDayEvent } from '../../utils/is-all-day-event/is-all-day-event.mjs';
18
21
  import { calculateDropTime } from '../../utils/calculate-drop-time/calculate-drop-time.mjs';
19
22
  import { getBusinessHoursMod } from '../../utils/get-business-hours-mod/get-business-hours-mod.mjs';
23
+ import { expandRecurringEvents } from '../../utils/expand-recurring-events/expand-recurring-events.mjs';
20
24
  import { CurrentTimeIndicator } from '../CurrentTimeIndicator/CurrentTimeIndicator.mjs';
21
25
  import { DragContext } from '../DragContext/DragContext.mjs';
22
26
  import { ScheduleEvent } from '../ScheduleEvent/ScheduleEvent.mjs';
@@ -24,8 +28,8 @@ import { ScheduleHeaderBase } from '../ScheduleHeader/ScheduleHeaderBase.mjs';
24
28
  import { getWeekLabel } from './get-week-label/get-week-label.mjs';
25
29
  import { getWeekViewEvents } from './get-week-view-events/get-week-view-events.mjs';
26
30
  import { handleWeekViewKeyDown } from './handle-week-view-key-down.mjs';
27
- import classes from './WeekView.module.css.mjs';
28
31
  import { WeekViewDay } from './WeekViewDay.mjs';
32
+ import classes from './WeekView.module.css.mjs';
29
33
 
30
34
  const defaultProps = {
31
35
  __staticSelector: "WeekView",
@@ -45,6 +49,7 @@ const defaultProps = {
45
49
  businessHours: ["09:00:00", "17:00:00"],
46
50
  withEventsDragAndDrop: false,
47
51
  withDragSlotSelect: false,
52
+ withEventResize: false,
48
53
  mode: "default"
49
54
  };
50
55
  const varsResolver = createVarsResolver(
@@ -111,7 +116,13 @@ const WeekView = factory((_props) => {
111
116
  withDragSlotSelect,
112
117
  onSlotDragEnd,
113
118
  mode,
119
+ startScrollTime,
114
120
  renderWeekLabel,
121
+ onExternalEventDrop,
122
+ withEventResize,
123
+ onEventResize,
124
+ canResizeEvent,
125
+ recurrenceExpansionLimit,
115
126
  ...others
116
127
  } = props;
117
128
  const getStyles = useStyles({
@@ -140,9 +151,34 @@ const WeekView = factory((_props) => {
140
151
  __staticSelector,
141
152
  radius
142
153
  };
154
+ const theme = useMantineTheme();
143
155
  const [scrolled, setScrolled] = useState(false);
144
156
  const ctx = useDatesContext();
145
157
  const slots = getDayTimeIntervals({ startTime, endTime, intervalMinutes });
158
+ const viewportRef = useRef(null);
159
+ useAutoScrollOnDrag({
160
+ viewportRef,
161
+ enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static"
162
+ });
163
+ const handleExternalDrop = useCallback(
164
+ (e, target) => {
165
+ if (!onExternalEventDrop) {
166
+ return;
167
+ }
168
+ const slotDate = dayjs(target.day).format("YYYY-MM-DD");
169
+ onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[target.slotIndex].startTime}`);
170
+ },
171
+ [onExternalEventDrop, slots]
172
+ );
173
+ const handleExternalAllDayDrop = useCallback(
174
+ (e, day) => {
175
+ if (!onExternalEventDrop) {
176
+ return;
177
+ }
178
+ onExternalEventDrop(e.dataTransfer, `${dayjs(day).format("YYYY-MM-DD")} 00:00:00`);
179
+ },
180
+ [onExternalEventDrop]
181
+ );
146
182
  const dragDrop = useDragDropHandlers({
147
183
  enabled: withEventsDragAndDrop,
148
184
  mode,
@@ -158,7 +194,8 @@ const WeekView = factory((_props) => {
158
194
  targetSlotTime: slotTime,
159
195
  intervalMinutes
160
196
  });
161
- }
197
+ },
198
+ onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0
162
199
  });
163
200
  const allDayDragDrop = useDragDropHandlers({
164
201
  enabled: withEventsDragAndDrop,
@@ -171,7 +208,8 @@ const WeekView = factory((_props) => {
171
208
  const eventDuration = dayjs(draggedEvent.end).diff(dayjs(draggedEvent.start), "millisecond");
172
209
  const newStart = dayjs(targetDay).startOf("day");
173
210
  return { start: newStart.toDate(), end: newStart.add(eventDuration, "millisecond").toDate() };
174
- }
211
+ },
212
+ onExternalDrop: onExternalEventDrop ? handleExternalAllDayDrop : void 0
175
213
  });
176
214
  const slotDragSelect = useSlotDragSelect({
177
215
  enabled: withDragSlotSelect && mode !== "static",
@@ -186,6 +224,16 @@ const WeekView = factory((_props) => {
186
224
  );
187
225
  }
188
226
  });
227
+ const eventResize = useEventResize({
228
+ enabled: withEventResize,
229
+ mode,
230
+ startTime,
231
+ endTime,
232
+ intervalMinutes,
233
+ onEventResize,
234
+ canResizeEvent
235
+ });
236
+ const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static";
189
237
  const handleTimeSlotClick = (day, slotTime, e) => {
190
238
  if (!onTimeSlotClick) {
191
239
  return;
@@ -198,9 +246,21 @@ const WeekView = factory((_props) => {
198
246
  const slot = slots[slotIndex];
199
247
  onTimeSlotClick(`${slotDate} ${slot.startTime}`, `${slotDate} ${slot.endTime}`, e);
200
248
  };
249
+ const weekdays = getWeekDays({
250
+ week: date,
251
+ withWeekendDays,
252
+ weekendDays: ctx.getWeekendDays(weekendDays),
253
+ firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
254
+ });
255
+ const expandedEvents = expandRecurringEvents({
256
+ events,
257
+ rangeStart: dayjs(weekdays[0]).startOf("day").toDate(),
258
+ rangeEnd: dayjs(weekdays[weekdays.length - 1]).endOf("day").toDate(),
259
+ expansionLimit: recurrenceExpansionLimit
260
+ });
201
261
  const weekEvents = getWeekViewEvents({
202
262
  date,
203
- events,
263
+ events: expandedEvents,
204
264
  startTime,
205
265
  endTime,
206
266
  firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),
@@ -231,16 +291,32 @@ const WeekView = factory((_props) => {
231
291
  label
232
292
  );
233
293
  });
234
- const weekdays = getWeekDays({
235
- week: date,
236
- withWeekendDays,
237
- weekendDays: ctx.getWeekendDays(weekendDays),
238
- firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
239
- });
240
294
  const slotsRef = useRef([]);
241
295
  const allDaySlotsRef = useRef([]);
242
296
  const weekdaysRef = useRef([]);
297
+ const daySlotsContainersRef = useRef([]);
298
+ const mergedViewportRef = useMergedRef(viewportRef, scrollAreaProps?.viewportRef);
243
299
  const firstSlotIndex = { dayIndex: 0, slotIndex: 0 };
300
+ useIsomorphicEffect(() => {
301
+ if (!startScrollTime || !viewportRef.current) {
302
+ return;
303
+ }
304
+ const firstDaySlots = slotsRef.current[0];
305
+ if (!firstDaySlots || firstDaySlots.length === 0) {
306
+ return;
307
+ }
308
+ const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);
309
+ if (targetIndex < 0) {
310
+ return;
311
+ }
312
+ const targetSlot = firstDaySlots[targetIndex];
313
+ if (!targetSlot) {
314
+ return;
315
+ }
316
+ const slotRect = targetSlot.getBoundingClientRect();
317
+ const viewportRect = viewportRef.current.getBoundingClientRect();
318
+ viewportRef.current.scrollTo({ left: 0, top: slotRect.top - viewportRect.top });
319
+ }, []);
244
320
  const getSlotIndexFromDragPoint = useCallback((event, dayIndex) => {
245
321
  const daySlots = slotsRef.current[dayIndex] ?? [];
246
322
  const slotIndex = daySlots.findIndex((slotNode) => {
@@ -325,9 +401,42 @@ const WeekView = factory((_props) => {
325
401
  /* @__PURE__ */ createElement("div", { ...getStyles("weekViewDayNumber"), key: "date" }, dayjs(day).date())
326
402
  ));
327
403
  const days = weekdays.map((day, dayIndex) => {
404
+ const allBgEvents = weekEvents.backgroundEvents[day] || [];
405
+ const backgroundEventNodes = allBgEvents.filter((event) => !event.position.allDay).map((event) => {
406
+ const colors = theme.variantColorResolver({
407
+ color: event.color || theme.primaryColor,
408
+ theme,
409
+ variant: "light",
410
+ autoContrast: true
411
+ });
412
+ const bgEventBody = typeof renderEventBody === "function" ? renderEventBody(event) : event.title;
413
+ const bgEventProps = {
414
+ key: `bg-${event.id}`,
415
+ ...getStyles("weekViewBackgroundEvent", {
416
+ style: {
417
+ top: `${event.position.top}%`,
418
+ height: `${event.position.height}%`,
419
+ width: "100%"
420
+ }
421
+ }),
422
+ __vars: {
423
+ "--bg-event-bg": colors.background,
424
+ "--bg-event-color": colors.color
425
+ },
426
+ children: bgEventBody
427
+ };
428
+ if (typeof renderEvent === "function") {
429
+ return renderEvent(event, bgEventProps);
430
+ }
431
+ return /* @__PURE__ */ jsx(Box, { ...bgEventProps });
432
+ });
328
433
  const dayEvents = (weekEvents.regularEvents[day] || []).map((event) => {
329
434
  const eventIsAllDay = isAllDayEvent({ event, date: day });
330
435
  const isDraggable = !eventIsAllDay && dragDrop.isDraggableEvent(event);
436
+ const isResizable = !eventIsAllDay && eventResize.isResizableEvent(event);
437
+ const resizePosition = eventResize.getResizePosition(event.id);
438
+ const eventTop = resizePosition ? resizePosition.top : event.position.top;
439
+ const eventHeight = resizePosition ? resizePosition.height : event.position.height;
331
440
  return /* @__PURE__ */ jsx(
332
441
  ScheduleEvent,
333
442
  {
@@ -335,6 +444,22 @@ const WeekView = factory((_props) => {
335
444
  autoSize: true,
336
445
  hanging: event.position.hanging,
337
446
  draggable: isDraggable,
447
+ withResize: isResizable,
448
+ isResizing: resizePosition !== null,
449
+ onResizeStart: isResizable ? (edge, e) => {
450
+ const container = daySlotsContainersRef.current[dayIndex];
451
+ if (container) {
452
+ eventResize.handleResizeStart(
453
+ event,
454
+ edge,
455
+ container,
456
+ event.position.top,
457
+ event.position.height,
458
+ dayjs(day).format("YYYY-MM-DD"),
459
+ e
460
+ );
461
+ }
462
+ } : void 0,
338
463
  renderEventBody,
339
464
  renderEvent,
340
465
  radius,
@@ -342,16 +467,16 @@ const WeekView = factory((_props) => {
342
467
  onClick: onEventClick ? (e) => onEventClick(event, e) : void 0,
343
468
  style: {
344
469
  position: "absolute",
345
- top: `calc(${event.position.top}% + 1px)`,
470
+ top: `calc(${eventTop}% + 1px)`,
346
471
  left: `${event.position.offset}%`,
347
472
  width: `${event.position.width}%`,
348
- height: `calc(${event.position.height}% - 1px)`
473
+ height: `calc(${eventHeight}% - 1px)`
349
474
  }
350
475
  },
351
476
  event.id
352
477
  );
353
478
  });
354
- return /* @__PURE__ */ jsx(
479
+ return /* @__PURE__ */ jsxs(
355
480
  WeekViewDay,
356
481
  {
357
482
  day,
@@ -362,7 +487,7 @@ const WeekView = factory((_props) => {
362
487
  highlightBusinessHours,
363
488
  businessHours,
364
489
  labels,
365
- withEventsDragAndDrop,
490
+ withEventsDragAndDrop: withDragHandlers,
366
491
  mode,
367
492
  slotsRef,
368
493
  firstSlotIndex,
@@ -388,7 +513,13 @@ const WeekView = factory((_props) => {
388
513
  withDragSlotSelect,
389
514
  onSlotPointerDown: slotDragSelect.handleSlotPointerDown,
390
515
  isSlotDragSelected: slotDragSelect.isSlotSelected,
391
- children: dayEvents
516
+ daySlotsContainerRef: (node) => {
517
+ daySlotsContainersRef.current[dayIndex] = node;
518
+ },
519
+ children: [
520
+ backgroundEventNodes,
521
+ dayEvents
522
+ ]
392
523
  },
393
524
  day
394
525
  );
@@ -403,9 +534,9 @@ const WeekView = factory((_props) => {
403
534
  tabIndex: dayIndex === 0 ? 0 : -1,
404
535
  onKeyDown: (event) => handleAllDaySlotKeyDown(event, dayIndex),
405
536
  onClick: mode === "static" || !onAllDaySlotClick ? void 0 : (e) => onAllDaySlotClick(dayjs(day).format("YYYY-MM-DD"), e),
406
- onDragOver: withEventsDragAndDrop && mode !== "static" ? (e) => allDayDragDrop.handleDragOver(e, day) : void 0,
407
- onDragLeave: withEventsDragAndDrop && mode !== "static" ? allDayDragDrop.handleDragLeave : void 0,
408
- onDrop: withEventsDragAndDrop && mode !== "static" ? (e) => allDayDragDrop.handleDrop(e, day) : void 0,
537
+ onDragOver: withDragHandlers ? (e) => allDayDragDrop.handleDragOver(e, day) : void 0,
538
+ onDragLeave: withDragHandlers ? allDayDragDrop.handleDragLeave : void 0,
539
+ onDrop: withDragHandlers ? (e) => allDayDragDrop.handleDrop(e, day) : void 0,
409
540
  ...getStyles("weekViewDaySlot"),
410
541
  mod: { "drop-target": allDayDragDrop.isDropTarget(day) }
411
542
  },
@@ -438,6 +569,42 @@ const WeekView = factory((_props) => {
438
569
  },
439
570
  event.id
440
571
  ));
572
+ const allDayBackgroundEventNodes = weekdays.flatMap((day, dayIndex) => {
573
+ const allDayBgEvents = (weekEvents.backgroundEvents[day] || []).filter(
574
+ (event) => event.position.allDay
575
+ );
576
+ const dayWidth = 100 / weekdays.length;
577
+ const dayOffset = dayIndex * dayWidth;
578
+ return allDayBgEvents.map((event) => {
579
+ const colors = theme.variantColorResolver({
580
+ color: event.color || theme.primaryColor,
581
+ theme,
582
+ variant: "light",
583
+ autoContrast: true
584
+ });
585
+ const bgEventBody = typeof renderEventBody === "function" ? renderEventBody(event) : event.title;
586
+ const bgEventProps = {
587
+ key: `bg-allday-${event.id}-${day}`,
588
+ ...getStyles("weekViewBackgroundEvent", {
589
+ style: {
590
+ top: 0,
591
+ height: "100%",
592
+ left: `${dayOffset}%`,
593
+ width: `${dayWidth}%`
594
+ }
595
+ }),
596
+ __vars: {
597
+ "--bg-event-bg": colors.background,
598
+ "--bg-event-color": colors.color
599
+ },
600
+ children: bgEventBody
601
+ };
602
+ if (typeof renderEvent === "function") {
603
+ return renderEvent(event, bgEventProps);
604
+ }
605
+ return /* @__PURE__ */ jsx(Box, { ...bgEventProps });
606
+ });
607
+ });
441
608
  const extraRows = Math.max(...weekEvents.allDayEvents.map((event) => event.position.row), 1) - 1;
442
609
  const content = /* @__PURE__ */ jsxs(
443
610
  Box,
@@ -496,6 +663,7 @@ const WeekView = factory((_props) => {
496
663
  scrollAreaProps?.onScrollPositionChange?.(position);
497
664
  setScrolled(position.y !== 0);
498
665
  },
666
+ viewportRef: mergedViewportRef,
499
667
  children: [
500
668
  /* @__PURE__ */ jsxs(Box, { ...getStyles("weekViewHeader"), mod: { scrolled }, children: [
501
669
  /* @__PURE__ */ createElement("div", { ...getStyles("weekViewCorner"), key: "corner" }, withWeekNumber && /* @__PURE__ */ jsxs(Fragment, { children: [
@@ -507,6 +675,7 @@ const WeekView = factory((_props) => {
507
675
  withAllDaySlots && /* @__PURE__ */ jsxs("div", { ...getStyles("weekViewAllDaySlots"), children: [
508
676
  /* @__PURE__ */ jsx("div", { ...getStyles("weekViewAllDaySlotsLabel"), children: getLabel("allDay", labels) }),
509
677
  /* @__PURE__ */ jsxs("div", { ...getStyles("weekViewAllDaySlotsList"), children: [
678
+ allDayBackgroundEventNodes,
510
679
  /* @__PURE__ */ jsx(
511
680
  Box,
512
681
  {