@mantine/schedule 9.0.0-alpha.6 → 9.0.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 (53) hide show
  1. package/README.md +2 -2
  2. package/cjs/components/DayView/DayView.cjs +27 -7
  3. package/cjs/components/DayView/DayView.cjs.map +1 -1
  4. package/cjs/components/MobileMonthView/MobileMonthView.cjs +1 -10
  5. package/cjs/components/MobileMonthView/MobileMonthView.cjs.map +1 -1
  6. package/cjs/components/MobileMonthView/MobileMonthView.module.cjs +2 -1
  7. package/cjs/components/MobileMonthView/MobileMonthView.module.cjs.map +1 -1
  8. package/cjs/components/MonthView/MonthView.cjs +1 -1
  9. package/cjs/components/MonthView/MonthView.cjs.map +1 -1
  10. package/cjs/components/Schedule/Schedule.cjs.map +1 -1
  11. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs +2 -2
  12. package/cjs/components/ScheduleHeader/HeaderControl/HeaderControl.cjs.map +1 -1
  13. package/cjs/components/WeekView/WeekView.cjs +17 -4
  14. package/cjs/components/WeekView/WeekView.cjs.map +1 -1
  15. package/cjs/components/WeekView/WeekViewDay.cjs +14 -3
  16. package/cjs/components/WeekView/WeekViewDay.cjs.map +1 -1
  17. package/cjs/components/YearView/YearView.cjs +1 -1
  18. package/cjs/components/YearView/YearView.cjs.map +1 -1
  19. package/cjs/hooks/use-drag-drop-handlers.cjs +6 -1
  20. package/cjs/hooks/use-drag-drop-handlers.cjs.map +1 -1
  21. package/cjs/hooks/use-event-resize.cjs +7 -2
  22. package/cjs/hooks/use-event-resize.cjs.map +1 -1
  23. package/esm/components/DayView/DayView.mjs +27 -7
  24. package/esm/components/DayView/DayView.mjs.map +1 -1
  25. package/esm/components/MobileMonthView/MobileMonthView.mjs +1 -10
  26. package/esm/components/MobileMonthView/MobileMonthView.mjs.map +1 -1
  27. package/esm/components/MobileMonthView/MobileMonthView.module.mjs +2 -1
  28. package/esm/components/MobileMonthView/MobileMonthView.module.mjs.map +1 -1
  29. package/esm/components/MonthView/MonthView.mjs +1 -1
  30. package/esm/components/MonthView/MonthView.mjs.map +1 -1
  31. package/esm/components/Schedule/Schedule.mjs.map +1 -1
  32. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs +2 -2
  33. package/esm/components/ScheduleHeader/HeaderControl/HeaderControl.mjs.map +1 -1
  34. package/esm/components/WeekView/WeekView.mjs +17 -4
  35. package/esm/components/WeekView/WeekView.mjs.map +1 -1
  36. package/esm/components/WeekView/WeekViewDay.mjs +14 -3
  37. package/esm/components/WeekView/WeekViewDay.mjs.map +1 -1
  38. package/esm/components/YearView/YearView.mjs +1 -1
  39. package/esm/components/YearView/YearView.mjs.map +1 -1
  40. package/esm/hooks/use-drag-drop-handlers.mjs +6 -1
  41. package/esm/hooks/use-drag-drop-handlers.mjs.map +1 -1
  42. package/esm/hooks/use-event-resize.mjs +7 -2
  43. package/esm/hooks/use-event-resize.mjs.map +1 -1
  44. package/lib/components/DayView/DayView.d.ts +22 -3
  45. package/lib/components/MonthView/MonthView.d.ts +6 -1
  46. package/lib/components/Schedule/Schedule.d.ts +17 -3
  47. package/lib/components/WeekView/WeekView.d.ts +22 -3
  48. package/lib/components/WeekView/WeekViewDay.d.ts +7 -2
  49. package/lib/hooks/use-drag-drop-handlers.d.ts +6 -1
  50. package/lib/hooks/use-event-resize.d.ts +15 -2
  51. package/package.json +4 -4
  52. package/styles.css +12 -0
  53. package/styles.layer.css +12 -0
@@ -69,7 +69,12 @@ export interface MonthViewProps extends BoxProps, StylesApiProps<MonthViewFactor
69
69
  /** If true, events can be dragged and dropped @default false */
70
70
  withEventsDragAndDrop?: boolean;
71
71
  /** Called when event is dropped on new date */
72
- onEventDrop?: (eventId: string | number, newStart: DateTimeStringValue, newEnd: DateTimeStringValue, event: ScheduleEventData) => void;
72
+ onEventDrop?: (data: {
73
+ eventId: string | number;
74
+ newStart: DateTimeStringValue;
75
+ newEnd: DateTimeStringValue;
76
+ event: ScheduleEventData;
77
+ }) => void;
73
78
  /** Function to determine if event can be dragged */
74
79
  canDragEvent?: (event: ScheduleEventData) => boolean;
75
80
  /** Called when any event drag starts */
@@ -38,7 +38,12 @@ export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>
38
38
  /** Enable drag and drop for events @default false */
39
39
  withEventsDragAndDrop?: boolean;
40
40
  /** Called when event is dropped */
41
- onEventDrop?: (eventId: string | number, newStart: DateTimeStringValue, newEnd: DateTimeStringValue, event: ScheduleEventData) => void;
41
+ onEventDrop?: (data: {
42
+ eventId: string | number;
43
+ newStart: DateTimeStringValue;
44
+ newEnd: DateTimeStringValue;
45
+ event: ScheduleEventData;
46
+ }) => void;
42
47
  /** Function to determine if event can be dragged */
43
48
  canDragEvent?: (event: ScheduleEventData) => boolean;
44
49
  /** Called when any event drag starts */
@@ -46,7 +51,11 @@ export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>
46
51
  /** Called when any event drag ends */
47
52
  onEventDragEnd?: () => void;
48
53
  /** Called when time slot is clicked in DayView/WeekView */
49
- onTimeSlotClick?: (slotStart: DateTimeStringValue, slotEnd: DateTimeStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
54
+ onTimeSlotClick?: (data: {
55
+ slotStart: DateTimeStringValue;
56
+ slotEnd: DateTimeStringValue;
57
+ nativeEvent: React.MouseEvent<HTMLButtonElement>;
58
+ }) => void;
50
59
  /** Called when all-day slot is clicked in DayView/WeekView */
51
60
  onAllDaySlotClick?: (date: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
52
61
  /** Called when day is clicked in MonthView */
@@ -67,7 +76,12 @@ export interface ScheduleProps extends BoxProps, StylesApiProps<ScheduleFactory>
67
76
  /** If true, events can be resized by dragging their edges @default false */
68
77
  withEventResize?: boolean;
69
78
  /** Called when event is resized */
70
- onEventResize?: (eventId: string | number, newStart: DateTimeStringValue, newEnd: DateTimeStringValue, event: ScheduleEventData) => void;
79
+ onEventResize?: (data: {
80
+ eventId: string | number;
81
+ newStart: DateTimeStringValue;
82
+ newEnd: DateTimeStringValue;
83
+ event: ScheduleEventData;
84
+ }) => void;
71
85
  /** Function to determine if event can be resized */
72
86
  canResizeEvent?: (event: ScheduleEventData) => boolean;
73
87
  /** Max number of generated recurring instances per recurring series @default 2000 */
@@ -80,7 +80,12 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
80
80
  /** If true, events can be dragged and dropped @default false */
81
81
  withEventsDragAndDrop?: boolean;
82
82
  /** Called when event is dropped at new time */
83
- onEventDrop?: (eventId: string | number, newStart: DateTimeStringValue, newEnd: DateTimeStringValue, event: ScheduleEventData) => void;
83
+ onEventDrop?: (data: {
84
+ eventId: string | number;
85
+ newStart: DateTimeStringValue;
86
+ newEnd: DateTimeStringValue;
87
+ event: ScheduleEventData;
88
+ }) => void;
84
89
  /** Function to determine if event can be dragged */
85
90
  canDragEvent?: (event: ScheduleEventData) => boolean;
86
91
  /** Called when any event drag starts */
@@ -88,7 +93,11 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
88
93
  /** Called when any event drag ends */
89
94
  onEventDragEnd?: () => void;
90
95
  /** Called when time slot is clicked */
91
- onTimeSlotClick?: (slotStart: DateTimeStringValue, slotEnd: DateTimeStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
96
+ onTimeSlotClick?: (data: {
97
+ slotStart: DateTimeStringValue;
98
+ slotEnd: DateTimeStringValue;
99
+ nativeEvent: React.MouseEvent<HTMLButtonElement>;
100
+ }) => void;
92
101
  /** Called when all-day slot is clicked */
93
102
  onAllDaySlotClick?: (day: DateStringValue, event: React.MouseEvent<HTMLButtonElement>) => void;
94
103
  /** Called when event is clicked */
@@ -111,11 +120,21 @@ export interface WeekViewProps extends BoxProps, StylesApiProps<WeekViewFactory>
111
120
  /** If true, events can be resized by dragging their edges @default false */
112
121
  withEventResize?: boolean;
113
122
  /** Called when event is resized */
114
- onEventResize?: (eventId: string | number, newStart: DateTimeStringValue, newEnd: DateTimeStringValue, event: ScheduleEventData) => void;
123
+ onEventResize?: (data: {
124
+ eventId: string | number;
125
+ newStart: DateTimeStringValue;
126
+ newEnd: DateTimeStringValue;
127
+ event: ScheduleEventData;
128
+ }) => void;
115
129
  /** Function to determine if event can be resized */
116
130
  canResizeEvent?: (event: ScheduleEventData) => boolean;
117
131
  /** Max number of generated recurring instances per recurring series @default 2000 */
118
132
  recurrenceExpansionLimit?: number;
133
+ /** Function to get additional props for each time slot. Receives slot start and end datetime strings. Returned props are spread onto the slot element. Event handlers returned by this function are composed with internal handlers (e.g. onClick) rather than overriding them. */
134
+ getTimeSlotProps?: (data: {
135
+ start: DateTimeStringValue;
136
+ end: DateTimeStringValue;
137
+ }) => Record<string, any> | undefined;
119
138
  }
120
139
  export type WeekViewFactory = Factory<{
121
140
  props: WeekViewProps;
@@ -1,6 +1,6 @@
1
1
  import { GetStylesApi } from '@mantine/core';
2
2
  import { ScheduleLabelsOverride } from '../../labels';
3
- import { DateStringValue, DayOfWeek, ScheduleMode } from '../../types';
3
+ import { DateStringValue, DateTimeStringValue, DayOfWeek, ScheduleMode } from '../../types';
4
4
  import { DayTimeInterval } from '../../utils';
5
5
  import type { WeekViewControlsRef } from './handle-week-view-key-down';
6
6
  import type { WeekViewFactory } from './WeekView';
@@ -56,5 +56,10 @@ export interface WeekViewDayProps {
56
56
  isSlotDragSelected?: (index: number, group: string) => boolean;
57
57
  /** Ref callback for the day slots container */
58
58
  daySlotsContainerRef?: (node: HTMLDivElement | null) => void;
59
+ /** Function to get additional props for each time slot */
60
+ getTimeSlotProps?: (data: {
61
+ start: DateTimeStringValue;
62
+ end: DateTimeStringValue;
63
+ }) => Record<string, any> | undefined;
59
64
  }
60
- export declare function WeekViewDay({ day, dayIndex, slots, getStyles, weekendDays, children, labels, highlightBusinessHours, businessHours, withEventsDragAndDrop, onDaySlotsDragOver, onDaySlotsDragLeave, onDaySlotsDrop, onSlotClick, dropTargetSlotIndex, mode, slotsRef, firstSlotIndex, onSlotKeyDown, onFirstSlotArrowUp, withDragSlotSelect, onSlotPointerDown, isSlotDragSelected, daySlotsContainerRef, }: WeekViewDayProps): import("react/jsx-runtime").JSX.Element;
65
+ export declare function WeekViewDay({ day, dayIndex, slots, getStyles, weekendDays, children, labels, highlightBusinessHours, businessHours, withEventsDragAndDrop, onDaySlotsDragOver, onDaySlotsDragLeave, onDaySlotsDrop, onSlotClick, dropTargetSlotIndex, mode, slotsRef, firstSlotIndex, onSlotKeyDown, onFirstSlotArrowUp, withDragSlotSelect, onSlotPointerDown, isSlotDragSelected, daySlotsContainerRef, getTimeSlotProps, }: WeekViewDayProps): import("react/jsx-runtime").JSX.Element;
@@ -6,7 +6,12 @@ export interface UseDragDropHandlersOptions<T = any> {
6
6
  /** Schedule interaction mode */
7
7
  mode: ScheduleMode;
8
8
  /** Called when event is dropped at new location */
9
- onEventDrop?: (eventId: string | number, newStart: DateTimeStringValue, newEnd: DateTimeStringValue, event: ScheduleEventData) => void;
9
+ onEventDrop?: (data: {
10
+ eventId: string | number;
11
+ newStart: DateTimeStringValue;
12
+ newEnd: DateTimeStringValue;
13
+ event: ScheduleEventData;
14
+ }) => void;
10
15
  /** Function to determine if event can be dragged */
11
16
  canDragEvent?: (event: ScheduleEventData) => boolean;
12
17
  /** Called when any event drag starts */
@@ -6,11 +6,24 @@ export interface UseEventResizeInput {
6
6
  startTime: string;
7
7
  endTime: string;
8
8
  intervalMinutes: number;
9
- onEventResize?: (eventId: string | number, newStart: DateTimeStringValue, newEnd: DateTimeStringValue, event: ScheduleEventData) => void;
9
+ onEventResize?: (data: {
10
+ eventId: string | number;
11
+ newStart: DateTimeStringValue;
12
+ newEnd: DateTimeStringValue;
13
+ event: ScheduleEventData;
14
+ }) => void;
10
15
  canResizeEvent?: (event: ScheduleEventData) => boolean;
11
16
  }
12
17
  export declare function useEventResize({ enabled, mode, startTime, endTime, intervalMinutes, onEventResize, canResizeEvent, }: UseEventResizeInput): {
13
- handleResizeStart: (event: ScheduleEventData, edge: ResizeEdge, container: HTMLElement, originalTop: number, originalHeight: number, eventDate: string, pointerEvent: React.PointerEvent) => void;
18
+ handleResizeStart: ({ event, edge, container, originalTop, originalHeight, eventDate, pointerEvent, }: {
19
+ event: ScheduleEventData;
20
+ edge: ResizeEdge;
21
+ container: HTMLElement;
22
+ originalTop: number;
23
+ originalHeight: number;
24
+ eventDate: string;
25
+ pointerEvent: React.PointerEvent;
26
+ }) => void;
14
27
  isResizing: boolean;
15
28
  resizingEventId: string | number | null;
16
29
  getResizePosition: (eventId: string | number) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine/schedule",
3
- "version": "9.0.0-alpha.6",
3
+ "version": "9.0.0",
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.0.0-alpha.6",
39
- "@mantine/dates": "9.0.0-alpha.6",
40
- "@mantine/hooks": "9.0.0-alpha.6",
38
+ "@mantine/core": "9.0.0",
39
+ "@mantine/dates": "9.0.0",
40
+ "@mantine/hooks": "9.0.0",
41
41
  "react": "^19.2.0",
42
42
  "react-dom": "^19.2.0"
43
43
  },
package/styles.css CHANGED
@@ -804,6 +804,8 @@
804
804
 
805
805
  .m_7b47db0e {
806
806
  user-select: none;
807
+ font-weight: var(--mantine-font-weight-semibold);
808
+ text-transform: capitalize;
807
809
  }
808
810
 
809
811
  .m_a20935f7 {
@@ -1007,6 +1009,8 @@
1007
1009
 
1008
1010
  .m_9a1cef3f {
1009
1011
  margin-bottom: var(--mantine-spacing-sm);
1012
+ font-weight: var(--mantine-font-weight-semibold);
1013
+ text-transform: capitalize;
1010
1014
  }
1011
1015
 
1012
1016
  .m_16b7da81 {
@@ -1054,6 +1058,14 @@
1054
1058
 
1055
1059
  .m_ea7c78ee {
1056
1060
  margin-top: calc(0.125rem * var(--mantine-scale));
1061
+ font-size: var(--mantine-font-size-xs);
1062
+ color: var(--mantine-color-dimmed);
1063
+ }
1064
+
1065
+ .m_bbac00f3 {
1066
+ color: var(--mantine-color-dimmed);
1067
+ text-align: center;
1068
+ padding-block: var(--mantine-spacing-xl);
1057
1069
  }
1058
1070
 
1059
1071
  .m_8eceba9d {
package/styles.layer.css CHANGED
@@ -804,6 +804,8 @@
804
804
 
805
805
  .m_7b47db0e {
806
806
  user-select: none;
807
+ font-weight: var(--mantine-font-weight-semibold);
808
+ text-transform: capitalize;
807
809
  }
808
810
 
809
811
  .m_a20935f7 {
@@ -1007,6 +1009,8 @@
1007
1009
 
1008
1010
  .m_9a1cef3f {
1009
1011
  margin-bottom: var(--mantine-spacing-sm);
1012
+ font-weight: var(--mantine-font-weight-semibold);
1013
+ text-transform: capitalize;
1010
1014
  }
1011
1015
 
1012
1016
  .m_16b7da81 {
@@ -1054,6 +1058,14 @@
1054
1058
 
1055
1059
  .m_ea7c78ee {
1056
1060
  margin-top: calc(0.125rem * var(--mantine-scale));
1061
+ font-size: var(--mantine-font-size-xs);
1062
+ color: var(--mantine-color-dimmed);
1063
+ }
1064
+
1065
+ .m_bbac00f3 {
1066
+ color: var(--mantine-color-dimmed);
1067
+ text-align: center;
1068
+ padding-block: var(--mantine-spacing-xl);
1057
1069
  }
1058
1070
 
1059
1071
  .m_8eceba9d {