@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
@@ -6,7 +6,10 @@ var React = require('react');
6
6
  var dayjs = require('dayjs');
7
7
  var core = require('@mantine/core');
8
8
  var dates = require('@mantine/dates');
9
+ var hooks = require('@mantine/hooks');
10
+ var useAutoScrollOnDrag = require('../../hooks/use-auto-scroll-on-drag.cjs');
9
11
  var useDragDropHandlers = require('../../hooks/use-drag-drop-handlers.cjs');
12
+ var useEventResize = require('../../hooks/use-event-resize.cjs');
10
13
  var useSlotDragSelect = require('../../hooks/use-slot-drag-select.cjs');
11
14
  var labels = require('../../labels.cjs');
12
15
  var formatDate = require('../../utils/format-date/format-date.cjs');
@@ -19,6 +22,7 @@ var previousWeek = require('../../utils/previous-week/previous-week.cjs');
19
22
  var isAllDayEvent = require('../../utils/is-all-day-event/is-all-day-event.cjs');
20
23
  var calculateDropTime = require('../../utils/calculate-drop-time/calculate-drop-time.cjs');
21
24
  var getBusinessHoursMod = require('../../utils/get-business-hours-mod/get-business-hours-mod.cjs');
25
+ var expandRecurringEvents = require('../../utils/expand-recurring-events/expand-recurring-events.cjs');
22
26
  var CurrentTimeIndicator = require('../CurrentTimeIndicator/CurrentTimeIndicator.cjs');
23
27
  var DragContext = require('../DragContext/DragContext.cjs');
24
28
  var ScheduleEvent = require('../ScheduleEvent/ScheduleEvent.cjs');
@@ -26,8 +30,8 @@ var ScheduleHeaderBase = require('../ScheduleHeader/ScheduleHeaderBase.cjs');
26
30
  var getWeekLabel = require('./get-week-label/get-week-label.cjs');
27
31
  var getWeekViewEvents = require('./get-week-view-events/get-week-view-events.cjs');
28
32
  var handleWeekViewKeyDown = require('./handle-week-view-key-down.cjs');
29
- var WeekView_module = require('./WeekView.module.css.cjs');
30
33
  var WeekViewDay = require('./WeekViewDay.cjs');
34
+ var WeekView_module = require('./WeekView.module.css.cjs');
31
35
 
32
36
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
33
37
 
@@ -51,6 +55,7 @@ const defaultProps = {
51
55
  businessHours: ["09:00:00", "17:00:00"],
52
56
  withEventsDragAndDrop: false,
53
57
  withDragSlotSelect: false,
58
+ withEventResize: false,
54
59
  mode: "default"
55
60
  };
56
61
  const varsResolver = core.createVarsResolver(
@@ -117,7 +122,13 @@ const WeekView = core.factory((_props) => {
117
122
  withDragSlotSelect,
118
123
  onSlotDragEnd,
119
124
  mode,
125
+ startScrollTime,
120
126
  renderWeekLabel,
127
+ onExternalEventDrop,
128
+ withEventResize,
129
+ onEventResize,
130
+ canResizeEvent,
131
+ recurrenceExpansionLimit,
121
132
  ...others
122
133
  } = props;
123
134
  const getStyles = core.useStyles({
@@ -146,9 +157,34 @@ const WeekView = core.factory((_props) => {
146
157
  __staticSelector,
147
158
  radius
148
159
  };
160
+ const theme = core.useMantineTheme();
149
161
  const [scrolled, setScrolled] = React.useState(false);
150
162
  const ctx = dates.useDatesContext();
151
163
  const slots = getDayTimeIntervals.getDayTimeIntervals({ startTime, endTime, intervalMinutes });
164
+ const viewportRef = React.useRef(null);
165
+ useAutoScrollOnDrag.useAutoScrollOnDrag({
166
+ viewportRef,
167
+ enabled: (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static"
168
+ });
169
+ const handleExternalDrop = React.useCallback(
170
+ (e, target) => {
171
+ if (!onExternalEventDrop) {
172
+ return;
173
+ }
174
+ const slotDate = dayjs__default.default(target.day).format("YYYY-MM-DD");
175
+ onExternalEventDrop(e.dataTransfer, `${slotDate} ${slots[target.slotIndex].startTime}`);
176
+ },
177
+ [onExternalEventDrop, slots]
178
+ );
179
+ const handleExternalAllDayDrop = React.useCallback(
180
+ (e, day) => {
181
+ if (!onExternalEventDrop) {
182
+ return;
183
+ }
184
+ onExternalEventDrop(e.dataTransfer, `${dayjs__default.default(day).format("YYYY-MM-DD")} 00:00:00`);
185
+ },
186
+ [onExternalEventDrop]
187
+ );
152
188
  const dragDrop = useDragDropHandlers.useDragDropHandlers({
153
189
  enabled: withEventsDragAndDrop,
154
190
  mode,
@@ -164,7 +200,8 @@ const WeekView = core.factory((_props) => {
164
200
  targetSlotTime: slotTime,
165
201
  intervalMinutes
166
202
  });
167
- }
203
+ },
204
+ onExternalDrop: onExternalEventDrop ? handleExternalDrop : void 0
168
205
  });
169
206
  const allDayDragDrop = useDragDropHandlers.useDragDropHandlers({
170
207
  enabled: withEventsDragAndDrop,
@@ -177,7 +214,8 @@ const WeekView = core.factory((_props) => {
177
214
  const eventDuration = dayjs__default.default(draggedEvent.end).diff(dayjs__default.default(draggedEvent.start), "millisecond");
178
215
  const newStart = dayjs__default.default(targetDay).startOf("day");
179
216
  return { start: newStart.toDate(), end: newStart.add(eventDuration, "millisecond").toDate() };
180
- }
217
+ },
218
+ onExternalDrop: onExternalEventDrop ? handleExternalAllDayDrop : void 0
181
219
  });
182
220
  const slotDragSelect = useSlotDragSelect.useSlotDragSelect({
183
221
  enabled: withDragSlotSelect && mode !== "static",
@@ -192,6 +230,16 @@ const WeekView = core.factory((_props) => {
192
230
  );
193
231
  }
194
232
  });
233
+ const eventResize = useEventResize.useEventResize({
234
+ enabled: withEventResize,
235
+ mode,
236
+ startTime,
237
+ endTime,
238
+ intervalMinutes,
239
+ onEventResize,
240
+ canResizeEvent
241
+ });
242
+ const withDragHandlers = (withEventsDragAndDrop || !!onExternalEventDrop) && mode !== "static";
195
243
  const handleTimeSlotClick = (day, slotTime, e) => {
196
244
  if (!onTimeSlotClick) {
197
245
  return;
@@ -204,9 +252,21 @@ const WeekView = core.factory((_props) => {
204
252
  const slot = slots[slotIndex];
205
253
  onTimeSlotClick(`${slotDate} ${slot.startTime}`, `${slotDate} ${slot.endTime}`, e);
206
254
  };
255
+ const weekdays = getWeekDays.getWeekDays({
256
+ week: date,
257
+ withWeekendDays,
258
+ weekendDays: ctx.getWeekendDays(weekendDays),
259
+ firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
260
+ });
261
+ const expandedEvents = expandRecurringEvents.expandRecurringEvents({
262
+ events,
263
+ rangeStart: dayjs__default.default(weekdays[0]).startOf("day").toDate(),
264
+ rangeEnd: dayjs__default.default(weekdays[weekdays.length - 1]).endOf("day").toDate(),
265
+ expansionLimit: recurrenceExpansionLimit
266
+ });
207
267
  const weekEvents = getWeekViewEvents.getWeekViewEvents({
208
268
  date,
209
- events,
269
+ events: expandedEvents,
210
270
  startTime,
211
271
  endTime,
212
272
  firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek),
@@ -237,16 +297,32 @@ const WeekView = core.factory((_props) => {
237
297
  label
238
298
  );
239
299
  });
240
- const weekdays = getWeekDays.getWeekDays({
241
- week: date,
242
- withWeekendDays,
243
- weekendDays: ctx.getWeekendDays(weekendDays),
244
- firstDayOfWeek: ctx.getFirstDayOfWeek(firstDayOfWeek)
245
- });
246
300
  const slotsRef = React.useRef([]);
247
301
  const allDaySlotsRef = React.useRef([]);
248
302
  const weekdaysRef = React.useRef([]);
303
+ const daySlotsContainersRef = React.useRef([]);
304
+ const mergedViewportRef = hooks.useMergedRef(viewportRef, scrollAreaProps?.viewportRef);
249
305
  const firstSlotIndex = { dayIndex: 0, slotIndex: 0 };
306
+ hooks.useIsomorphicEffect(() => {
307
+ if (!startScrollTime || !viewportRef.current) {
308
+ return;
309
+ }
310
+ const firstDaySlots = slotsRef.current[0];
311
+ if (!firstDaySlots || firstDaySlots.length === 0) {
312
+ return;
313
+ }
314
+ const targetIndex = slots.findIndex((s) => s.startTime >= startScrollTime);
315
+ if (targetIndex < 0) {
316
+ return;
317
+ }
318
+ const targetSlot = firstDaySlots[targetIndex];
319
+ if (!targetSlot) {
320
+ return;
321
+ }
322
+ const slotRect = targetSlot.getBoundingClientRect();
323
+ const viewportRect = viewportRef.current.getBoundingClientRect();
324
+ viewportRef.current.scrollTo({ left: 0, top: slotRect.top - viewportRect.top });
325
+ }, []);
250
326
  const getSlotIndexFromDragPoint = React.useCallback((event, dayIndex) => {
251
327
  const daySlots = slotsRef.current[dayIndex] ?? [];
252
328
  const slotIndex = daySlots.findIndex((slotNode) => {
@@ -331,9 +407,42 @@ const WeekView = core.factory((_props) => {
331
407
  /* @__PURE__ */ React.createElement("div", { ...getStyles("weekViewDayNumber"), key: "date" }, dayjs__default.default(day).date())
332
408
  ));
333
409
  const days = weekdays.map((day, dayIndex) => {
410
+ const allBgEvents = weekEvents.backgroundEvents[day] || [];
411
+ const backgroundEventNodes = allBgEvents.filter((event) => !event.position.allDay).map((event) => {
412
+ const colors = theme.variantColorResolver({
413
+ color: event.color || theme.primaryColor,
414
+ theme,
415
+ variant: "light",
416
+ autoContrast: true
417
+ });
418
+ const bgEventBody = typeof renderEventBody === "function" ? renderEventBody(event) : event.title;
419
+ const bgEventProps = {
420
+ key: `bg-${event.id}`,
421
+ ...getStyles("weekViewBackgroundEvent", {
422
+ style: {
423
+ top: `${event.position.top}%`,
424
+ height: `${event.position.height}%`,
425
+ width: "100%"
426
+ }
427
+ }),
428
+ __vars: {
429
+ "--bg-event-bg": colors.background,
430
+ "--bg-event-color": colors.color
431
+ },
432
+ children: bgEventBody
433
+ };
434
+ if (typeof renderEvent === "function") {
435
+ return renderEvent(event, bgEventProps);
436
+ }
437
+ return /* @__PURE__ */ jsxRuntime.jsx(core.Box, { ...bgEventProps });
438
+ });
334
439
  const dayEvents = (weekEvents.regularEvents[day] || []).map((event) => {
335
440
  const eventIsAllDay = isAllDayEvent.isAllDayEvent({ event, date: day });
336
441
  const isDraggable = !eventIsAllDay && dragDrop.isDraggableEvent(event);
442
+ const isResizable = !eventIsAllDay && eventResize.isResizableEvent(event);
443
+ const resizePosition = eventResize.getResizePosition(event.id);
444
+ const eventTop = resizePosition ? resizePosition.top : event.position.top;
445
+ const eventHeight = resizePosition ? resizePosition.height : event.position.height;
337
446
  return /* @__PURE__ */ jsxRuntime.jsx(
338
447
  ScheduleEvent.ScheduleEvent,
339
448
  {
@@ -341,6 +450,22 @@ const WeekView = core.factory((_props) => {
341
450
  autoSize: true,
342
451
  hanging: event.position.hanging,
343
452
  draggable: isDraggable,
453
+ withResize: isResizable,
454
+ isResizing: resizePosition !== null,
455
+ onResizeStart: isResizable ? (edge, e) => {
456
+ const container = daySlotsContainersRef.current[dayIndex];
457
+ if (container) {
458
+ eventResize.handleResizeStart(
459
+ event,
460
+ edge,
461
+ container,
462
+ event.position.top,
463
+ event.position.height,
464
+ dayjs__default.default(day).format("YYYY-MM-DD"),
465
+ e
466
+ );
467
+ }
468
+ } : void 0,
344
469
  renderEventBody,
345
470
  renderEvent,
346
471
  radius,
@@ -348,16 +473,16 @@ const WeekView = core.factory((_props) => {
348
473
  onClick: onEventClick ? (e) => onEventClick(event, e) : void 0,
349
474
  style: {
350
475
  position: "absolute",
351
- top: `calc(${event.position.top}% + 1px)`,
476
+ top: `calc(${eventTop}% + 1px)`,
352
477
  left: `${event.position.offset}%`,
353
478
  width: `${event.position.width}%`,
354
- height: `calc(${event.position.height}% - 1px)`
479
+ height: `calc(${eventHeight}% - 1px)`
355
480
  }
356
481
  },
357
482
  event.id
358
483
  );
359
484
  });
360
- return /* @__PURE__ */ jsxRuntime.jsx(
485
+ return /* @__PURE__ */ jsxRuntime.jsxs(
361
486
  WeekViewDay.WeekViewDay,
362
487
  {
363
488
  day,
@@ -368,7 +493,7 @@ const WeekView = core.factory((_props) => {
368
493
  highlightBusinessHours,
369
494
  businessHours,
370
495
  labels: labels$1,
371
- withEventsDragAndDrop,
496
+ withEventsDragAndDrop: withDragHandlers,
372
497
  mode,
373
498
  slotsRef,
374
499
  firstSlotIndex,
@@ -394,7 +519,13 @@ const WeekView = core.factory((_props) => {
394
519
  withDragSlotSelect,
395
520
  onSlotPointerDown: slotDragSelect.handleSlotPointerDown,
396
521
  isSlotDragSelected: slotDragSelect.isSlotSelected,
397
- children: dayEvents
522
+ daySlotsContainerRef: (node) => {
523
+ daySlotsContainersRef.current[dayIndex] = node;
524
+ },
525
+ children: [
526
+ backgroundEventNodes,
527
+ dayEvents
528
+ ]
398
529
  },
399
530
  day
400
531
  );
@@ -409,9 +540,9 @@ const WeekView = core.factory((_props) => {
409
540
  tabIndex: dayIndex === 0 ? 0 : -1,
410
541
  onKeyDown: (event) => handleAllDaySlotKeyDown(event, dayIndex),
411
542
  onClick: mode === "static" || !onAllDaySlotClick ? void 0 : (e) => onAllDaySlotClick(dayjs__default.default(day).format("YYYY-MM-DD"), e),
412
- onDragOver: withEventsDragAndDrop && mode !== "static" ? (e) => allDayDragDrop.handleDragOver(e, day) : void 0,
413
- onDragLeave: withEventsDragAndDrop && mode !== "static" ? allDayDragDrop.handleDragLeave : void 0,
414
- onDrop: withEventsDragAndDrop && mode !== "static" ? (e) => allDayDragDrop.handleDrop(e, day) : void 0,
543
+ onDragOver: withDragHandlers ? (e) => allDayDragDrop.handleDragOver(e, day) : void 0,
544
+ onDragLeave: withDragHandlers ? allDayDragDrop.handleDragLeave : void 0,
545
+ onDrop: withDragHandlers ? (e) => allDayDragDrop.handleDrop(e, day) : void 0,
415
546
  ...getStyles("weekViewDaySlot"),
416
547
  mod: { "drop-target": allDayDragDrop.isDropTarget(day) }
417
548
  },
@@ -444,6 +575,42 @@ const WeekView = core.factory((_props) => {
444
575
  },
445
576
  event.id
446
577
  ));
578
+ const allDayBackgroundEventNodes = weekdays.flatMap((day, dayIndex) => {
579
+ const allDayBgEvents = (weekEvents.backgroundEvents[day] || []).filter(
580
+ (event) => event.position.allDay
581
+ );
582
+ const dayWidth = 100 / weekdays.length;
583
+ const dayOffset = dayIndex * dayWidth;
584
+ return allDayBgEvents.map((event) => {
585
+ const colors = theme.variantColorResolver({
586
+ color: event.color || theme.primaryColor,
587
+ theme,
588
+ variant: "light",
589
+ autoContrast: true
590
+ });
591
+ const bgEventBody = typeof renderEventBody === "function" ? renderEventBody(event) : event.title;
592
+ const bgEventProps = {
593
+ key: `bg-allday-${event.id}-${day}`,
594
+ ...getStyles("weekViewBackgroundEvent", {
595
+ style: {
596
+ top: 0,
597
+ height: "100%",
598
+ left: `${dayOffset}%`,
599
+ width: `${dayWidth}%`
600
+ }
601
+ }),
602
+ __vars: {
603
+ "--bg-event-bg": colors.background,
604
+ "--bg-event-color": colors.color
605
+ },
606
+ children: bgEventBody
607
+ };
608
+ if (typeof renderEvent === "function") {
609
+ return renderEvent(event, bgEventProps);
610
+ }
611
+ return /* @__PURE__ */ jsxRuntime.jsx(core.Box, { ...bgEventProps });
612
+ });
613
+ });
447
614
  const extraRows = Math.max(...weekEvents.allDayEvents.map((event) => event.position.row), 1) - 1;
448
615
  const content = /* @__PURE__ */ jsxRuntime.jsxs(
449
616
  core.Box,
@@ -502,6 +669,7 @@ const WeekView = core.factory((_props) => {
502
669
  scrollAreaProps?.onScrollPositionChange?.(position);
503
670
  setScrolled(position.y !== 0);
504
671
  },
672
+ viewportRef: mergedViewportRef,
505
673
  children: [
506
674
  /* @__PURE__ */ jsxRuntime.jsxs(core.Box, { ...getStyles("weekViewHeader"), mod: { scrolled }, children: [
507
675
  /* @__PURE__ */ React.createElement("div", { ...getStyles("weekViewCorner"), key: "corner" }, withWeekNumber && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -513,6 +681,7 @@ const WeekView = core.factory((_props) => {
513
681
  withAllDaySlots && /* @__PURE__ */ jsxRuntime.jsxs("div", { ...getStyles("weekViewAllDaySlots"), children: [
514
682
  /* @__PURE__ */ jsxRuntime.jsx("div", { ...getStyles("weekViewAllDaySlotsLabel"), children: labels.getLabel("allDay", labels$1) }),
515
683
  /* @__PURE__ */ jsxRuntime.jsxs("div", { ...getStyles("weekViewAllDaySlotsList"), children: [
684
+ allDayBackgroundEventNodes,
516
685
  /* @__PURE__ */ jsxRuntime.jsx(
517
686
  core.Box,
518
687
  {