@mantine/schedule 9.6.1 → 9.6.2

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 (60) hide show
  1. package/cjs/components/DayView/DayView.cjs +37 -16
  2. package/cjs/components/DayView/DayView.cjs.map +1 -1
  3. package/cjs/components/DayView/DayView.module.cjs +1 -0
  4. package/cjs/components/DayView/DayView.module.cjs.map +1 -1
  5. package/cjs/components/MobileMonthView/MobileMonthView.cjs +1 -1
  6. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  7. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs +39 -14
  8. package/cjs/components/ResourcesDayView/ResourcesDayView.cjs.map +1 -1
  9. package/cjs/components/ResourcesDayView/ResourcesDayView.module.cjs.map +1 -1
  10. package/cjs/components/ResourcesSchedule/ResourcesSchedule.cjs.map +1 -1
  11. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs +45 -15
  12. package/cjs/components/ResourcesWeekView/ResourcesWeekView.cjs.map +1 -1
  13. package/cjs/components/ResourcesWeekView/ResourcesWeekView.module.cjs.map +1 -1
  14. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  15. package/cjs/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.cjs +18 -3
  16. package/cjs/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.cjs.map +1 -1
  17. package/cjs/components/WeekView/WeekView.cjs +36 -13
  18. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  19. package/cjs/components/WeekView/WeekView.module.cjs +1 -0
  20. package/cjs/components/WeekView/WeekView.module.cjs.map +1 -1
  21. package/cjs/hooks/use-event-resize.cjs +7 -4
  22. package/cjs/hooks/use-event-resize.cjs.map +1 -1
  23. package/cjs/hooks/use-horizontal-event-resize.cjs +7 -4
  24. package/cjs/hooks/use-horizontal-event-resize.cjs.map +1 -1
  25. package/esm/components/DayView/DayView.mjs +37 -16
  26. package/esm/components/DayView/DayView.mjs.map +1 -1
  27. package/esm/components/DayView/DayView.module.mjs +1 -0
  28. package/esm/components/DayView/DayView.module.mjs.map +1 -1
  29. package/esm/components/MobileMonthView/MobileMonthView.mjs +1 -1
  30. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  31. package/esm/components/ResourcesDayView/ResourcesDayView.mjs +39 -14
  32. package/esm/components/ResourcesDayView/ResourcesDayView.mjs.map +1 -1
  33. package/esm/components/ResourcesDayView/ResourcesDayView.module.mjs.map +1 -1
  34. package/esm/components/ResourcesSchedule/ResourcesSchedule.mjs.map +1 -1
  35. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs +45 -15
  36. package/esm/components/ResourcesWeekView/ResourcesWeekView.mjs.map +1 -1
  37. package/esm/components/ResourcesWeekView/ResourcesWeekView.module.mjs.map +1 -1
  38. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  39. package/esm/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.mjs +19 -4
  40. package/esm/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.mjs.map +1 -1
  41. package/esm/components/WeekView/WeekView.mjs +36 -13
  42. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  43. package/esm/components/WeekView/WeekView.module.mjs +1 -0
  44. package/esm/components/WeekView/WeekView.module.mjs.map +1 -1
  45. package/esm/hooks/use-event-resize.mjs +7 -4
  46. package/esm/hooks/use-event-resize.mjs.map +1 -1
  47. package/esm/hooks/use-horizontal-event-resize.mjs +7 -4
  48. package/esm/hooks/use-horizontal-event-resize.mjs.map +1 -1
  49. package/lib/components/DayView/DayView.d.ts +2 -2
  50. package/lib/components/ResourcesDayView/ResourcesDayView.d.ts +1 -1
  51. package/lib/components/ResourcesSchedule/ResourcesSchedule.d.ts +1 -1
  52. package/lib/components/ResourcesWeekView/ResourcesWeekView.d.ts +1 -1
  53. package/lib/components/Schedule/Schedule.d.ts +1 -1
  54. package/lib/components/ScheduleBackgroundEvent/ScheduleBackgroundEvent.d.ts +15 -2
  55. package/lib/components/WeekView/WeekView.d.ts +2 -2
  56. package/lib/hooks/use-event-resize.d.ts +3 -2
  57. package/lib/hooks/use-horizontal-event-resize.d.ts +3 -2
  58. package/package.json +4 -4
  59. package/styles.css +254 -6
  60. package/styles.layer.css +254 -6
@@ -95,7 +95,7 @@ export interface ResourcesScheduleProps extends BoxProps, StylesApiProps<Resourc
95
95
  }) => void;
96
96
  /** Function to determine if event can be resized */
97
97
  canResizeEvent?: (event: ScheduleEventData) => boolean;
98
- /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day` and `week` views only – `ResourcesMonthView` does not render background events separately. @default false */
98
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day` and `week` views only – `ResourcesMonthView` does not render background events separately. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */
99
99
  withInteractiveBackgroundEvents?: boolean;
100
100
  /** Max number of generated recurring instances @default 2000 */
101
101
  recurrenceExpansionLimit?: number;
@@ -76,7 +76,7 @@ export interface ResourcesWeekViewProps extends BoxProps, StylesApiProps<Resourc
76
76
  resourceId?: string | number;
77
77
  }) => void;
78
78
  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
79
- /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick` @default false */
79
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */
80
80
  withInteractiveBackgroundEvents?: boolean;
81
81
  withDragSlotSelect?: boolean;
82
82
  onSlotDragEnd?: (data: {
@@ -84,7 +84,7 @@ export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>
84
84
  }) => void;
85
85
  /** Function to determine if event can be resized */
86
86
  canResizeEvent?: (event: ScheduleEventData) => boolean;
87
- /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day`, `week` and `month` views only – `YearView` and the `MobileMonthView` used by `layout="responsive"` on small screens do not render background events at all. @default false */
87
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Applies to `day`, `week` and `month` views only – `YearView` and the `MobileMonthView` used by `layout="responsive"` on small screens do not render background events at all. Combined with `withEventResize`, timed background events in `day` and `week` views can also be resized by dragging their edges. @default false */
88
88
  withInteractiveBackgroundEvents?: boolean;
89
89
  /** Max number of generated recurring instances per recurring series @default 2000 */
90
90
  recurrenceExpansionLimit?: number;
@@ -1,7 +1,8 @@
1
1
  import { BoxProps, ElementProps } from '@mantine/core';
2
2
  import { ScheduleEventData } from '../../types';
3
3
  import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
4
- export interface ScheduleBackgroundEventProps extends BoxProps, ElementProps<'div', 'onClick'> {
4
+ export type ScheduleBackgroundEventResizeEdge = 'top' | 'bottom' | 'start' | 'end';
5
+ export interface ScheduleBackgroundEventProps<Edge extends ScheduleBackgroundEventResizeEdge = ScheduleBackgroundEventResizeEdge> extends BoxProps, ElementProps<'div', 'onClick'> {
5
6
  /** Background event to display */
6
7
  event: ScheduleEventData;
7
8
  /** If set, the root element is a `button` instead of a `div` and the event can be clicked @default false */
@@ -12,8 +13,20 @@ export interface ScheduleBackgroundEventProps extends BoxProps, ElementProps<'di
12
13
  renderEvent?: RenderEvent;
13
14
  /** Function to customize event body */
14
15
  renderEventBody?: RenderEventBody;
16
+ /** If set, the event renders resize handles on both of its edges @default false */
17
+ withResize?: boolean;
18
+ /** Axis along which the event is resized, defines which edges render handles @default 'vertical' */
19
+ resizeAxis?: 'vertical' | 'horizontal';
20
+ /** Props passed down to both resize handles, usually a styles api props object */
21
+ resizeHandleProps?: Record<string, any>;
22
+ /** Called when resize starts on an edge */
23
+ onResizeStart?: (edge: Edge, e: React.PointerEvent) => void;
24
+ /** If set, the event is currently being resized @default false */
25
+ isResizing?: boolean;
26
+ /** Edge that is currently being dragged, only relevant when `isResizing` is set */
27
+ activeResizeEdge?: Edge | null;
15
28
  }
16
- export declare function ScheduleBackgroundEvent(props: ScheduleBackgroundEventProps): import("react").JSX.Element;
29
+ export declare function ScheduleBackgroundEvent<Edge extends ScheduleBackgroundEventResizeEdge = ScheduleBackgroundEventResizeEdge>(props: ScheduleBackgroundEventProps<Edge>): import("react").JSX.Element;
17
30
  export declare namespace ScheduleBackgroundEvent {
18
31
  var displayName: string;
19
32
  }
@@ -7,7 +7,7 @@ import { CurrentTimeIndicatorStylesNames } from '../CurrentTimeIndicator/Current
7
7
  import { RenderEvent, RenderEventBody } from '../ScheduleEvent/ScheduleEvent';
8
8
  import { CombinedScheduleHeaderStylesNames } from '../ScheduleHeader/ScheduleHeader';
9
9
  import { ViewSelectProps } from '../ScheduleHeader/ViewSelect/ViewSelect';
10
- export type WeekViewStylesNames = 'weekView' | 'weekViewRoot' | 'weekViewHeader' | 'weekViewInner' | 'weekViewAllDaySlotsEvents' | 'weekViewAllDaySlots' | 'weekViewAllDaySlotsList' | 'weekViewAllDaySlot' | 'weekViewAllDaySlotsLabel' | 'weekViewScrollArea' | 'weekViewCorner' | 'weekViewSlotLabels' | 'weekViewSlotLabel' | 'weekViewDayLabel' | 'weekViewDayWeekday' | 'weekViewDay' | 'weekViewDayNumber' | 'weekViewDaySlot' | 'weekViewDaySlots' | 'weekViewWeekLabel' | 'weekViewWeekNumber' | 'weekViewBackgroundEvent' | 'weekViewDragPreview' | CurrentTimeIndicatorStylesNames | CombinedScheduleHeaderStylesNames | AgendaViewStylesNames;
10
+ export type WeekViewStylesNames = 'weekView' | 'weekViewRoot' | 'weekViewHeader' | 'weekViewInner' | 'weekViewAllDaySlotsEvents' | 'weekViewAllDaySlots' | 'weekViewAllDaySlotsList' | 'weekViewAllDaySlot' | 'weekViewAllDaySlotsLabel' | 'weekViewScrollArea' | 'weekViewCorner' | 'weekViewSlotLabels' | 'weekViewSlotLabel' | 'weekViewDayLabel' | 'weekViewDayWeekday' | 'weekViewDay' | 'weekViewDayNumber' | 'weekViewDaySlot' | 'weekViewDaySlots' | 'weekViewWeekLabel' | 'weekViewWeekNumber' | 'weekViewBackgroundEvent' | 'weekViewBackgroundEventResizeHandle' | 'weekViewDragPreview' | CurrentTimeIndicatorStylesNames | CombinedScheduleHeaderStylesNames | AgendaViewStylesNames;
11
11
  export type WeekViewCssVariables = {
12
12
  weekView: '--week-view-radius' | '--week-view-slot-height' | '--week-view-all-day-slots-height';
13
13
  };
@@ -116,7 +116,7 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
116
116
  onAllDaySlotClick?: (day: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
117
117
  /** Called when event is clicked */
118
118
  onEventClick?: (event: ScheduleEventData, e: React.MouseEvent<HTMLButtonElement>) => void;
119
- /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick` @default false */
119
+ /** If set, background events (`display: 'background'`) can be clicked and trigger `onEventClick`. Combined with `withEventResize`, timed background events can also be resized by dragging their edges. @default false */
120
120
  withInteractiveBackgroundEvents?: boolean;
121
121
  /** If set, enables drag-to-select time slot ranges @default false */
122
122
  withDragSlotSelect?: boolean;
@@ -14,8 +14,9 @@ export interface UseEventResizeInput {
14
14
  event: ScheduleEventData;
15
15
  }) => void;
16
16
  canResizeEvent?: (event: ScheduleEventData) => boolean;
17
+ withBackgroundEvents?: boolean;
17
18
  }
18
- export declare function useEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, }: UseEventResizeInput): {
19
+ export declare function useEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, withBackgroundEvents, }: UseEventResizeInput): {
19
20
  handleResizeStart: ({ event, edge, container, originalTop, originalHeight, eventDate, pointerEvent, }: {
20
21
  event: ScheduleEventData;
21
22
  edge: ResizeEdge;
@@ -27,7 +28,7 @@ export declare function useEventResize({ enabled, mode, startTime, endTime, inte
27
28
  }) => void;
28
29
  isResizing: boolean;
29
30
  resizingEventId: string | number | null;
30
- getResizePosition: (eventId: string | number) => {
31
+ getResizePosition: (eventId: string | number, eventDate?: string) => {
31
32
  top: number;
32
33
  height: number;
33
34
  } | null;
@@ -14,8 +14,9 @@ export interface UseHorizontalEventResizeInput {
14
14
  event: ScheduleEventData;
15
15
  }) => void;
16
16
  canResizeEvent?: (event: ScheduleEventData) => boolean;
17
+ withBackgroundEvents?: boolean;
17
18
  }
18
- export declare function useHorizontalEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, }: UseHorizontalEventResizeInput): {
19
+ export declare function useHorizontalEventResize({ enabled, mode, startTime, endTime, intervalMinutes, resizeIntervalMinutes, onEventResize, canResizeEvent, withBackgroundEvents, }: UseHorizontalEventResizeInput): {
19
20
  handleResizeStart: ({ event, edge, container, originalLeft, originalWidth, eventDate, dayIndex, dayCount, pointerEvent, }: {
20
21
  event: ScheduleEventData;
21
22
  edge: ResizeEdge;
@@ -30,7 +31,7 @@ export declare function useHorizontalEventResize({ enabled, mode, startTime, end
30
31
  isResizing: boolean;
31
32
  resizingEventId: string | number | null;
32
33
  resizingEdge: ResizeEdge | null;
33
- getResizePosition: (eventId: string | number) => {
34
+ getResizePosition: (eventId: string | number, eventDate?: string) => {
34
35
  left: number;
35
36
  width: number;
36
37
  } | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine/schedule",
3
- "version": "9.6.1",
3
+ "version": "9.6.2",
4
4
  "description": "Schedule Mantine component",
5
5
  "homepage": "https://mantine.dev/",
6
6
  "license": "MIT",
@@ -35,9 +35,9 @@
35
35
  "directory": "packages/@mantine/schedule"
36
36
  },
37
37
  "peerDependencies": {
38
- "@mantine/core": "9.6.1",
39
- "@mantine/dates": "9.6.1",
40
- "@mantine/hooks": "9.6.1",
38
+ "@mantine/core": "9.6.2",
39
+ "@mantine/dates": "9.6.2",
40
+ "@mantine/hooks": "9.6.2",
41
41
  "react": "^19.2.0",
42
42
  "react-dom": "^19.2.0"
43
43
  },
package/styles.css CHANGED
@@ -984,9 +984,82 @@
984
984
  }
985
985
  }
986
986
 
987
- .m_3c5fb2d5:where([data-event-interaction], [data-slot-dragging]) .m_c5cd9a77 {
987
+ /* The resized edge repeatedly crosses the pointer, so hover feedback would flicker */
988
+
989
+ @media (hover: hover) {
990
+
991
+ .m_c5cd9a77:where([data-resizing]):hover {
992
+ background-color: var(--bg-event-bg);
993
+ }
994
+ }
995
+
996
+ @media (hover: none) {
997
+
998
+ .m_c5cd9a77:where([data-resizing]):active {
999
+ background-color: var(--bg-event-bg);
1000
+ }
1001
+ }
1002
+
1003
+ .m_cddb9413 {
1004
+ position: absolute;
1005
+ left: 50%;
1006
+ transform: translateX(-50%);
1007
+ width: 40%;
1008
+ max-width: calc(2.5rem * var(--mantine-scale));
1009
+ height: calc(0.25rem * var(--mantine-scale));
1010
+ border-radius: calc(0.125rem * var(--mantine-scale));
1011
+ cursor: ns-resize;
1012
+ pointer-events: all;
1013
+ z-index: 4;
1014
+ touch-action: none;
1015
+ background-color: var(--bg-event-color);
1016
+ opacity: 0;
1017
+ transition: opacity 100ms ease;
1018
+ }
1019
+
1020
+ .m_cddb9413::before {
1021
+ content: '';
1022
+ position: absolute;
1023
+ inset: calc(-0.25rem * var(--mantine-scale)) calc(-0.375rem * var(--mantine-scale));
1024
+ }
1025
+
1026
+ .m_cddb9413:where([data-edge='top']) {
1027
+ top: 0;
1028
+ }
1029
+
1030
+ .m_cddb9413:where([data-edge='bottom']) {
1031
+ bottom: 0;
1032
+ }
1033
+
1034
+ .m_c5cd9a77:where(:hover, [data-resizing]) .m_cddb9413 {
1035
+ opacity: 0.5;
1036
+ }
1037
+
1038
+ @media (hover: hover) {
1039
+
1040
+ .m_cddb9413:hover {
1041
+ opacity: 0.8;
1042
+ }
1043
+ }
1044
+
1045
+ @media (hover: none) {
1046
+
1047
+ .m_cddb9413:active {
1048
+ opacity: 0.8;
1049
+ }
1050
+ }
1051
+
1052
+ /* The resizing background event is the one that set `data-event-interaction`, so it must
1053
+ keep capturing pointer events. */
1054
+ .m_3c5fb2d5:where([data-event-interaction], [data-slot-dragging])
1055
+ .m_c5cd9a77:not([data-resizing]) {
988
1056
  pointer-events: none;
989
1057
  }
1058
+ .m_3c5fb2d5:where([data-event-interaction], [data-slot-dragging])
1059
+ .m_c5cd9a77:not([data-resizing]) .m_cddb9413 {
1060
+ pointer-events: none;
1061
+ opacity: 0;
1062
+ }
990
1063
 
991
1064
  .m_c6f08d70 {
992
1065
  position: relative;
@@ -1864,11 +1937,82 @@
1864
1937
  }
1865
1938
  }
1866
1939
 
1867
- .m_42b9032d:where([data-slot-dragging]) .m_41ce8f1f,
1868
- .m_6b2099af:where([data-event-interaction]) .m_41ce8f1f,
1869
- .m_6b2099af:where([data-all-day-dragging]) .m_41ce8f1f {
1940
+ /* The resized edge repeatedly crosses the pointer, so hover feedback would flicker */
1941
+
1942
+ @media (hover: hover) {
1943
+
1944
+ .m_41ce8f1f:where([data-resizing]):hover {
1945
+ background-color: var(--bg-event-bg);
1946
+ }
1947
+ }
1948
+
1949
+ @media (hover: none) {
1950
+
1951
+ .m_41ce8f1f:where([data-resizing]):active {
1952
+ background-color: var(--bg-event-bg);
1953
+ }
1954
+ }
1955
+
1956
+ .m_b20accbb {
1957
+ position: absolute;
1958
+ left: 50%;
1959
+ transform: translateX(-50%);
1960
+ width: 40%;
1961
+ max-width: calc(2.5rem * var(--mantine-scale));
1962
+ height: calc(0.25rem * var(--mantine-scale));
1963
+ border-radius: calc(0.125rem * var(--mantine-scale));
1964
+ cursor: ns-resize;
1965
+ pointer-events: all;
1966
+ z-index: 4;
1967
+ touch-action: none;
1968
+ background-color: var(--bg-event-color);
1969
+ opacity: 0;
1970
+ transition: opacity 100ms ease;
1971
+ }
1972
+
1973
+ .m_b20accbb::before {
1974
+ content: '';
1975
+ position: absolute;
1976
+ inset: calc(-0.25rem * var(--mantine-scale)) calc(-0.375rem * var(--mantine-scale));
1977
+ }
1978
+
1979
+ .m_b20accbb:where([data-edge='top']) {
1980
+ top: 0;
1981
+ }
1982
+
1983
+ .m_b20accbb:where([data-edge='bottom']) {
1984
+ bottom: 0;
1985
+ }
1986
+
1987
+ .m_41ce8f1f:where(:hover, [data-resizing]) .m_b20accbb {
1988
+ opacity: 0.5;
1989
+ }
1990
+
1991
+ @media (hover: hover) {
1992
+
1993
+ .m_b20accbb:hover {
1994
+ opacity: 0.8;
1995
+ }
1996
+ }
1997
+
1998
+ @media (hover: none) {
1999
+
2000
+ .m_b20accbb:active {
2001
+ opacity: 0.8;
2002
+ }
2003
+ }
2004
+
2005
+ /* The resizing background event is the one that set `data-event-interaction`, so it must
2006
+ keep capturing pointer events. */
2007
+ .m_42b9032d:where([data-slot-dragging]) .m_41ce8f1f:not([data-resizing]),
2008
+ .m_6b2099af:where([data-event-interaction]) .m_41ce8f1f:not([data-resizing]),
2009
+ .m_6b2099af:where([data-all-day-dragging]) .m_41ce8f1f:not([data-resizing]) {
1870
2010
  pointer-events: none;
1871
2011
  }
2012
+ .m_42b9032d:where([data-slot-dragging]) .m_41ce8f1f:not([data-resizing]) .m_b20accbb, .m_6b2099af:where([data-event-interaction]) .m_41ce8f1f:not([data-resizing]) .m_b20accbb, .m_6b2099af:where([data-all-day-dragging]) .m_41ce8f1f:not([data-resizing]) .m_b20accbb {
2013
+ pointer-events: none;
2014
+ opacity: 0;
2015
+ }
1872
2016
 
1873
2017
  .m_cd58ae46 {
1874
2018
  position: relative;
@@ -2810,6 +2954,22 @@
2810
2954
  }
2811
2955
  }
2812
2956
 
2957
+ /* The resized edge repeatedly crosses the pointer, so hover feedback would flicker */
2958
+
2959
+ @media (hover: hover) {
2960
+
2961
+ .m_9cc838bf:where([data-resizing]):hover {
2962
+ background-color: var(--bg-event-bg);
2963
+ }
2964
+ }
2965
+
2966
+ @media (hover: none) {
2967
+
2968
+ .m_9cc838bf:where([data-resizing]):active {
2969
+ background-color: var(--bg-event-bg);
2970
+ }
2971
+ }
2972
+
2813
2973
  .m_d6d6dd52 {
2814
2974
  position: absolute;
2815
2975
  inset-inline: calc(0.0625rem * var(--mantine-scale));
@@ -2871,10 +3031,46 @@
2871
3031
  pointer-events: none;
2872
3032
  }
2873
3033
 
3034
+ /* The resizing background event is the one that set `data-event-interaction`, so it must
3035
+ keep capturing pointer events. */
2874
3036
  .m_25154d8d:where([data-event-interaction], [data-slot-dragging])
2875
- .m_9cc838bf {
3037
+ .m_9cc838bf:not([data-resizing]) {
2876
3038
  pointer-events: none;
2877
3039
  }
3040
+ .m_25154d8d:where([data-event-interaction], [data-slot-dragging])
3041
+ .m_9cc838bf:not([data-resizing]) .m_97715629 {
3042
+ pointer-events: none;
3043
+ opacity: 0;
3044
+ }
3045
+
3046
+ .m_9cc838bf .m_97715629 {
3047
+ background-color: var(--bg-event-color);
3048
+ }
3049
+
3050
+ .m_9cc838bf .m_97715629:where([data-edge='start']) {
3051
+ left: 0;
3052
+ }
3053
+
3054
+ .m_9cc838bf .m_97715629:where([data-edge='end']) {
3055
+ right: 0;
3056
+ }
3057
+
3058
+ .m_9cc838bf:hover .m_97715629 {
3059
+ opacity: 0.5;
3060
+ }
3061
+
3062
+ .m_9cc838bf .m_97715629:hover {
3063
+ opacity: 0.8;
3064
+ }
3065
+
3066
+ .m_9cc838bf:where([data-resizing]) .m_97715629:where([data-active]) {
3067
+ opacity: 0.8;
3068
+ }
3069
+
3070
+ .m_9cc838bf:where([data-resizing]) .m_97715629:not([data-active]) {
3071
+ opacity: 0;
3072
+ pointer-events: none;
3073
+ }
2878
3074
 
2879
3075
  .m_25154d8d:where([data-resizing]) * {
2880
3076
  cursor: ew-resize !important;
@@ -3251,6 +3447,22 @@
3251
3447
  }
3252
3448
  }
3253
3449
 
3450
+ /* The resized edge repeatedly crosses the pointer, so hover feedback would flicker */
3451
+
3452
+ @media (hover: hover) {
3453
+
3454
+ .m_3c19323d:where([data-resizing]):hover {
3455
+ background-color: var(--bg-event-bg);
3456
+ }
3457
+ }
3458
+
3459
+ @media (hover: none) {
3460
+
3461
+ .m_3c19323d:where([data-resizing]):active {
3462
+ background-color: var(--bg-event-bg);
3463
+ }
3464
+ }
3465
+
3254
3466
  .m_682c45d0 {
3255
3467
  position: absolute;
3256
3468
  height: var(--resources-week-view-all-day-height);
@@ -3311,10 +3523,46 @@
3311
3523
  pointer-events: none;
3312
3524
  }
3313
3525
 
3526
+ /* The resizing background event is the one that set `data-event-interaction`, so it must
3527
+ keep capturing pointer events. */
3314
3528
  .m_ed4c47cf:where([data-event-interaction], [data-slot-dragging])
3315
- .m_3c19323d {
3529
+ .m_3c19323d:not([data-resizing]) {
3316
3530
  pointer-events: none;
3317
3531
  }
3532
+ .m_ed4c47cf:where([data-event-interaction], [data-slot-dragging])
3533
+ .m_3c19323d:not([data-resizing]) .m_30c8fd6b {
3534
+ pointer-events: none;
3535
+ opacity: 0;
3536
+ }
3537
+
3538
+ .m_3c19323d .m_30c8fd6b {
3539
+ background-color: var(--bg-event-color);
3540
+ }
3541
+
3542
+ .m_3c19323d .m_30c8fd6b:where([data-edge='start']) {
3543
+ left: 0;
3544
+ }
3545
+
3546
+ .m_3c19323d .m_30c8fd6b:where([data-edge='end']) {
3547
+ right: 0;
3548
+ }
3549
+
3550
+ .m_3c19323d:hover .m_30c8fd6b {
3551
+ opacity: 0.5;
3552
+ }
3553
+
3554
+ .m_3c19323d .m_30c8fd6b:hover {
3555
+ opacity: 0.8;
3556
+ }
3557
+
3558
+ .m_3c19323d:where([data-resizing]) .m_30c8fd6b:where([data-active]) {
3559
+ opacity: 0.8;
3560
+ }
3561
+
3562
+ .m_3c19323d:where([data-resizing]) .m_30c8fd6b:not([data-active]) {
3563
+ opacity: 0;
3564
+ pointer-events: none;
3565
+ }
3318
3566
 
3319
3567
  .m_ed4c47cf:where([data-resizing]) * {
3320
3568
  cursor: ew-resize !important;