@mantine-vue/schedule 2.1.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 (104) hide show
  1. package/README.md +21 -0
  2. package/cjs/index.cjs +4198 -0
  3. package/cjs/index.cjs.map +1 -0
  4. package/esm/index.mjs +4106 -0
  5. package/esm/index.mjs.map +1 -0
  6. package/lib/component-props.d.ts +265 -0
  7. package/lib/components/CurrentTimeIndicator/CurrentTimeIndicator.d.ts +114 -0
  8. package/lib/components/CurrentTimeIndicator/index.d.ts +1 -0
  9. package/lib/components/DayView/DayView.d.ts +212 -0
  10. package/lib/components/DayView/get-day-view-events/get-day-positioned-events.d.ts +15 -0
  11. package/lib/components/DayView/get-day-view-events/get-day-view-events.d.ts +15 -0
  12. package/lib/components/DayView/index.d.ts +3 -0
  13. package/lib/components/DragContext/DragContext.d.ts +11 -0
  14. package/lib/components/DragContext/index.d.ts +1 -0
  15. package/lib/components/MobileMonthView/MobileMonthView.d.ts +171 -0
  16. package/lib/components/MobileMonthView/get-mobile-month-view-events.d.ts +8 -0
  17. package/lib/components/MobileMonthView/index.d.ts +1 -0
  18. package/lib/components/MonthView/MonthView.d.ts +174 -0
  19. package/lib/components/MonthView/get-month-view-events/add-event-to-day-groups.d.ts +14 -0
  20. package/lib/components/MonthView/get-month-view-events/calculate-event-position-in-week.d.ts +18 -0
  21. package/lib/components/MonthView/get-month-view-events/find-available-row.d.ts +10 -0
  22. package/lib/components/MonthView/get-month-view-events/get-month-positioned-events.d.ts +31 -0
  23. package/lib/components/MonthView/get-month-view-events/get-month-view-events.d.ts +16 -0
  24. package/lib/components/MonthView/get-month-view-events/get-weeks-in-range.d.ts +13 -0
  25. package/lib/components/MonthView/get-renderable-month-event-segments.d.ts +16 -0
  26. package/lib/components/MonthView/index.d.ts +4 -0
  27. package/lib/components/MoreEvents/MoreEvents.d.ts +65 -0
  28. package/lib/components/MoreEvents/index.d.ts +1 -0
  29. package/lib/components/Schedule/Schedule.d.ts +134 -0
  30. package/lib/components/Schedule/index.d.ts +1 -0
  31. package/lib/components/ScheduleEvent/ScheduleEvent.d.ts +88 -0
  32. package/lib/components/ScheduleEvent/index.d.ts +1 -0
  33. package/lib/components/ScheduleHeader/HeaderControl/index.d.ts +2 -0
  34. package/lib/components/ScheduleHeader/MonthYearSelect/index.d.ts +2 -0
  35. package/lib/components/ScheduleHeader/ScheduleHeader.d.ts +364 -0
  36. package/lib/components/ScheduleHeader/ScheduleHeaderBase.d.ts +72 -0
  37. package/lib/components/ScheduleHeader/ViewSelect/index.d.ts +2 -0
  38. package/lib/components/ScheduleHeader/index.d.ts +2 -0
  39. package/lib/components/WeekView/WeekView.d.ts +294 -0
  40. package/lib/components/WeekView/get-week-label/get-week-label.d.ts +13 -0
  41. package/lib/components/WeekView/get-week-view-events/assign-event-rows.d.ts +2 -0
  42. package/lib/components/WeekView/get-week-view-events/calculate-all-day-event-offset.d.ts +11 -0
  43. package/lib/components/WeekView/get-week-view-events/calculate-all-day-event-width.d.ts +12 -0
  44. package/lib/components/WeekView/get-week-view-events/calculate-event-days.d.ts +9 -0
  45. package/lib/components/WeekView/get-week-view-events/calculate-regular-event-overlaps.d.ts +2 -0
  46. package/lib/components/WeekView/get-week-view-events/filter-week-view-events.d.ts +14 -0
  47. package/lib/components/WeekView/get-week-view-events/find-available-column.d.ts +9 -0
  48. package/lib/components/WeekView/get-week-view-events/get-event-end-date.d.ts +3 -0
  49. package/lib/components/WeekView/get-week-view-events/get-hanging-status.d.ts +9 -0
  50. package/lib/components/WeekView/get-week-view-events/get-week-positioned-events.d.ts +26 -0
  51. package/lib/components/WeekView/get-week-view-events/get-week-view-events.d.ts +7 -0
  52. package/lib/components/WeekView/index.d.ts +4 -0
  53. package/lib/components/YearView/YearView.d.ts +151 -0
  54. package/lib/components/YearView/get-year-view-events/get-year-view-events.d.ts +8 -0
  55. package/lib/components/YearView/index.d.ts +1 -0
  56. package/lib/components/keyboard-navigation.d.ts +7 -0
  57. package/lib/components/shared.d.ts +161 -0
  58. package/lib/components/use-slot-drag-select.d.ts +28 -0
  59. package/lib/hooks/use-event-resize.d.ts +31 -0
  60. package/lib/index.d.mts +15 -0
  61. package/lib/index.d.ts +15 -0
  62. package/lib/labels.d.ts +25 -0
  63. package/lib/test-utils.d.ts +7 -0
  64. package/lib/types.d.ts +141 -0
  65. package/lib/utils/calculate-drop-time/calculate-drop-time.d.ts +22 -0
  66. package/lib/utils/calculate-month-drop-date/calculate-month-drop-date.d.ts +14 -0
  67. package/lib/utils/clamp-interval-minutes/clamp-interval-minutes.d.ts +2 -0
  68. package/lib/utils/expand-recurring-events/expand-recurring-events.d.ts +10 -0
  69. package/lib/utils/format-date/format-date.d.ts +8 -0
  70. package/lib/utils/get-business-hours-mod/get-business-hours-mod.d.ts +26 -0
  71. package/lib/utils/get-current-time-position/get-current-time-position.d.ts +10 -0
  72. package/lib/utils/get-day-position/get-day-position.d.ts +17 -0
  73. package/lib/utils/get-day-time-intervals/get-day-time-intervals.d.ts +19 -0
  74. package/lib/utils/get-end-of-week/get-end-of-week.d.ts +3 -0
  75. package/lib/utils/get-month-days/get-month-days.d.ts +8 -0
  76. package/lib/utils/get-month-range/get-month-range.d.ts +13 -0
  77. package/lib/utils/get-months-by-quarter/get-months-by-quarter.d.ts +2 -0
  78. package/lib/utils/get-months-list/get-months-list.d.ts +11 -0
  79. package/lib/utils/get-start-of-week/get-start-of-week.d.ts +7 -0
  80. package/lib/utils/get-visible-events/get-visible-events.d.ts +9 -0
  81. package/lib/utils/get-week-days/get-week-days.d.ts +13 -0
  82. package/lib/utils/get-week-number/get-week-number.d.ts +2 -0
  83. package/lib/utils/get-weekdays-names/get-weekdays-names.d.ts +9 -0
  84. package/lib/utils/get-years-list/get-years-list.d.ts +6 -0
  85. package/lib/utils/index.d.ts +41 -0
  86. package/lib/utils/is-after-min-date/is-after-min-date.d.ts +2 -0
  87. package/lib/utils/is-all-day-event/is-all-day-event.d.ts +7 -0
  88. package/lib/utils/is-before-max-date/is-before-max-date.d.ts +2 -0
  89. package/lib/utils/is-event-in-time-range/is-event-in-time-range.d.ts +8 -0
  90. package/lib/utils/is-events-overlap/is-events-overlap.d.ts +3 -0
  91. package/lib/utils/is-in-time-range/is-in-time-range.d.ts +9 -0
  92. package/lib/utils/is-multiday-event/is-multiday-event.d.ts +2 -0
  93. package/lib/utils/is-same-month/is-same-month.d.ts +2 -0
  94. package/lib/utils/is-within-week/is-within-week.d.ts +8 -0
  95. package/lib/utils/next-week/next-week.d.ts +2 -0
  96. package/lib/utils/parse-time-string/parse-time-string.d.ts +6 -0
  97. package/lib/utils/previous-week/previous-week.d.ts +2 -0
  98. package/lib/utils/sort-events/sort-events.d.ts +3 -0
  99. package/lib/utils/to-date-string/to-date-string.d.ts +2 -0
  100. package/lib/utils/to-time-string/to-time-string.d.ts +2 -0
  101. package/lib/utils/validate-event/validate-event.d.ts +2 -0
  102. package/package.json +53 -0
  103. package/styles.css +2087 -0
  104. package/styles.layer.css +2089 -0
@@ -0,0 +1,161 @@
1
+ import dayjs from 'dayjs';
2
+ import { type CSSProperties, type PropType, type VNodeChild } from 'vue';
3
+ import type { BaseViewProps, EventDropData, NativeButtonProps, RenderEvent, RenderEventBody, TimeSlotClickData } from '../component-props';
4
+ import type { AnyDateValue, DateLabelFormat, DateStringValue, DateTimeStringValue, ScheduleEventData, ScheduleMode, ScheduleViewLevel } from '../types';
5
+ import type { BusinessHoursValue } from '../utils';
6
+ export declare const baseViewProps: {
7
+ date: {
8
+ type: PropType<Date | DateStringValue>;
9
+ required: boolean;
10
+ };
11
+ onDateChange: PropType<(date: DateStringValue) => void>;
12
+ events: PropType<ScheduleEventData[]>;
13
+ locale: StringConstructor;
14
+ radius: PropType<string | number>;
15
+ labels: ObjectConstructor;
16
+ mode: {
17
+ type: PropType<ScheduleMode>;
18
+ default: string;
19
+ };
20
+ withHeader: {
21
+ type: BooleanConstructor;
22
+ default: boolean;
23
+ };
24
+ onViewChange: PropType<(view: ScheduleViewLevel) => void>;
25
+ previousControlProps: PropType<NativeButtonProps>;
26
+ nextControlProps: PropType<NativeButtonProps>;
27
+ todayControlProps: PropType<NativeButtonProps>;
28
+ viewSelectProps: ObjectConstructor;
29
+ renderEventBody: PropType<RenderEventBody>;
30
+ renderEvent: PropType<RenderEvent>;
31
+ onEventClick: PropType<(event: ScheduleEventData, nativeEvent: MouseEvent) => void>;
32
+ recurrenceExpansionLimit: {
33
+ type: NumberConstructor;
34
+ default: number;
35
+ };
36
+ };
37
+ export declare const timeViewProps: {
38
+ startTime: {
39
+ type: StringConstructor;
40
+ default: string;
41
+ };
42
+ endTime: {
43
+ type: StringConstructor;
44
+ default: string;
45
+ };
46
+ intervalMinutes: {
47
+ type: NumberConstructor;
48
+ default: number;
49
+ };
50
+ slotLabelFormat: {
51
+ type: PropType<DateLabelFormat>;
52
+ default: string;
53
+ };
54
+ withCurrentTimeIndicator: {
55
+ type: BooleanConstructor;
56
+ default: undefined;
57
+ };
58
+ withCurrentTimeBubble: {
59
+ type: BooleanConstructor;
60
+ default: boolean;
61
+ };
62
+ getCurrentTime: PropType<() => AnyDateValue>;
63
+ slotHeight: {
64
+ type: PropType<CSSProperties["height"]>;
65
+ default: number;
66
+ };
67
+ highlightBusinessHours: BooleanConstructor;
68
+ businessHours: PropType<BusinessHoursValue>;
69
+ withEventsDragAndDrop: BooleanConstructor;
70
+ onEventDrop: PropType<(data: EventDropData) => void>;
71
+ canDragEvent: PropType<(event: ScheduleEventData) => boolean>;
72
+ onEventDragStart: PropType<(event: ScheduleEventData) => void>;
73
+ onEventDragEnd: PropType<() => void>;
74
+ onTimeSlotClick: PropType<(data: TimeSlotClickData) => void>;
75
+ onAllDaySlotClick: PropType<(date: DateStringValue, nativeEvent: MouseEvent) => void>;
76
+ withDragSlotSelect: BooleanConstructor;
77
+ onSlotDragEnd: FunctionConstructor;
78
+ startScrollTime: StringConstructor;
79
+ onExternalEventDrop: FunctionConstructor;
80
+ withEventResize: BooleanConstructor;
81
+ onEventResize: PropType<(data: EventDropData) => void>;
82
+ canResizeEvent: PropType<(event: ScheduleEventData) => boolean>;
83
+ date: {
84
+ type: PropType<Date | DateStringValue>;
85
+ required: boolean;
86
+ };
87
+ onDateChange: PropType<(date: DateStringValue) => void>;
88
+ events: PropType<ScheduleEventData[]>;
89
+ locale: StringConstructor;
90
+ radius: PropType<string | number>;
91
+ labels: ObjectConstructor;
92
+ mode: {
93
+ type: PropType<ScheduleMode>;
94
+ default: string;
95
+ };
96
+ withHeader: {
97
+ type: BooleanConstructor;
98
+ default: boolean;
99
+ };
100
+ onViewChange: PropType<(view: ScheduleViewLevel) => void>;
101
+ previousControlProps: PropType<NativeButtonProps>;
102
+ nextControlProps: PropType<NativeButtonProps>;
103
+ todayControlProps: PropType<NativeButtonProps>;
104
+ viewSelectProps: ObjectConstructor;
105
+ renderEventBody: PropType<RenderEventBody>;
106
+ renderEvent: PropType<RenderEvent>;
107
+ onEventClick: PropType<(event: ScheduleEventData, nativeEvent: MouseEvent) => void>;
108
+ recurrenceExpansionLimit: {
109
+ type: NumberConstructor;
110
+ default: number;
111
+ };
112
+ };
113
+ export declare function resolveScheduleRadius(radius: string | number | undefined): string | undefined;
114
+ export declare function getExpandedEvents(events: ScheduleEventData[] | undefined, rangeStart: Date | string, rangeEnd: Date | string, expansionLimit: number): ScheduleEventData[];
115
+ export declare function formatLabel(date: Date | string, locale: string | undefined, format: DateLabelFormat): string;
116
+ /** Scoped slots that mirror the `renderEvent` / `renderEventBody` props. */
117
+ export interface EventSlots {
118
+ eventBody?: (props: {
119
+ event: ScheduleEventData;
120
+ }) => VNodeChild;
121
+ event?: (props: Record<string, unknown> & {
122
+ event: ScheduleEventData;
123
+ }) => VNodeChild;
124
+ }
125
+ /**
126
+ * Build the slots object forwarded to a child component, omitting undefined entries.
127
+ * Returns a `Record<string, unknown>` (possibly empty) so it satisfies Vue's `RawSlots`
128
+ * type when passed as the third argument to `h()`.
129
+ */
130
+ export declare function forwardEventSlots(slots: EventSlots | undefined): Record<string, unknown>;
131
+ export declare function eventNode(event: ScheduleEventData, props: Pick<BaseViewProps, 'mode' | 'renderEvent' | 'renderEventBody' | 'onEventClick'> & {
132
+ withEventsDragAndDrop?: boolean;
133
+ canDragEvent?: (event: ScheduleEventData) => boolean;
134
+ onEventDragStart?: (event: ScheduleEventData) => void;
135
+ onEventDragEnd?: () => void;
136
+ }, extra?: Record<string, unknown>, slots?: EventSlots): VNodeChild;
137
+ export declare function getDropEvent(events: ScheduleEventData[] | undefined, transfer: DataTransfer | null): ScheduleEventData | undefined;
138
+ export declare function getTimeSlotDropTarget({ nativeEvent, container, intervals, date, }: {
139
+ nativeEvent: DragEvent;
140
+ container: HTMLElement;
141
+ intervals: Array<{
142
+ startTime: string;
143
+ }>;
144
+ date: string;
145
+ }): {
146
+ slotIndex: number;
147
+ target: DateTimeStringValue;
148
+ } | undefined;
149
+ export declare function moveEventTo(event: ScheduleEventData, newStart: dayjs.ConfigType): {
150
+ eventId: string | number;
151
+ newStart: DateTimeStringValue;
152
+ newEnd: DateTimeStringValue;
153
+ event: ScheduleEventData;
154
+ };
155
+ export declare function moveEventToAllDay(event: ScheduleEventData, date: dayjs.ConfigType): {
156
+ eventId: string | number;
157
+ newStart: DateTimeStringValue;
158
+ newEnd: DateTimeStringValue;
159
+ event: ScheduleEventData;
160
+ };
161
+ export declare function todayString(): string;
@@ -0,0 +1,28 @@
1
+ import { type Ref } from 'vue';
2
+ interface SelectedRange {
3
+ group: string;
4
+ start: number;
5
+ end: number;
6
+ }
7
+ export interface UseSlotDragSelectInput {
8
+ /** Whether slot drag selection is enabled */
9
+ enabled: () => boolean;
10
+ /** Called with the selected range once a multi-slot drag finishes */
11
+ onDragEnd?: () => ((startIndex: number, endIndex: number, group: string) => void) | undefined;
12
+ }
13
+ export interface SlotDragSelect {
14
+ /** Begin a slot selection at the given index/group */
15
+ handleSlotPointerDown: (event: PointerEvent, index: number, group: string) => void;
16
+ /** Whether the slot at index within group is currently selected */
17
+ isSlotSelected: (index: number, group: string) => boolean;
18
+ /** Whether a slot drag selection is currently in progress */
19
+ isDragging: () => boolean;
20
+ }
21
+ /**
22
+ * Composable that provides unified slot drag-selection for Day, Week and Month views.
23
+ * tracks a selected range as the pointer
24
+ * moves across elements carrying `data-drag-slot-index` / `data-drag-slot-group`.
25
+ */
26
+ export declare function useSlotDragSelect(input: UseSlotDragSelectInput): SlotDragSelect;
27
+ export type SelectedRangeRef = Ref<SelectedRange | null>;
28
+ export {};
@@ -0,0 +1,31 @@
1
+ import type { EventDropData } from '../component-props';
2
+ import type { ScheduleEventData, ScheduleMode } from '../types';
3
+ type ResizeEdge = 'top' | 'bottom';
4
+ interface HandleResizeStartInput {
5
+ event: ScheduleEventData;
6
+ edge: ResizeEdge;
7
+ container: HTMLElement;
8
+ originalTop: number;
9
+ originalHeight: number;
10
+ eventDate: string;
11
+ pointerEvent: PointerEvent;
12
+ }
13
+ export interface UseEventResizeInput {
14
+ enabled: () => boolean;
15
+ mode: () => ScheduleMode;
16
+ startTime: () => string;
17
+ endTime: () => string;
18
+ intervalMinutes: () => number;
19
+ onEventResize: () => ((data: EventDropData) => void) | undefined;
20
+ canResizeEvent: () => ((event: ScheduleEventData) => boolean) | undefined;
21
+ }
22
+ export declare function useEventResize(input: UseEventResizeInput): {
23
+ handleResizeStart: ({ event, edge, container, originalTop, originalHeight, eventDate, pointerEvent, }: HandleResizeStartInput) => void;
24
+ getResizePosition: (eventId: string | number) => {
25
+ top: number;
26
+ height: number;
27
+ } | null;
28
+ isResizableEvent: (event: ScheduleEventData) => boolean;
29
+ wasResizing: () => boolean;
30
+ };
31
+ export {};
@@ -0,0 +1,15 @@
1
+ export * from './types';
2
+ export type { ScheduleLabels, ScheduleLabelsOverride } from './labels';
3
+ export { DEFAULT_SCHEDULE_LABELS, getLabel } from './labels';
4
+ export * from './utils';
5
+ export * from './components/Schedule';
6
+ export * from './components/DayView';
7
+ export * from './components/WeekView';
8
+ export * from './components/MonthView';
9
+ export * from './components/YearView';
10
+ export * from './components/ScheduleEvent';
11
+ export * from './components/ScheduleHeader';
12
+ export * from './components/CurrentTimeIndicator';
13
+ export * from './components/MoreEvents';
14
+ export * from './components/MobileMonthView';
15
+ export * from './components/DragContext';
package/lib/index.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ export * from './types';
2
+ export type { ScheduleLabels, ScheduleLabelsOverride } from './labels';
3
+ export { DEFAULT_SCHEDULE_LABELS, getLabel } from './labels';
4
+ export * from './utils';
5
+ export * from './components/Schedule';
6
+ export * from './components/DayView';
7
+ export * from './components/WeekView';
8
+ export * from './components/MonthView';
9
+ export * from './components/YearView';
10
+ export * from './components/ScheduleEvent';
11
+ export * from './components/ScheduleHeader';
12
+ export * from './components/CurrentTimeIndicator';
13
+ export * from './components/MoreEvents';
14
+ export * from './components/MobileMonthView';
15
+ export * from './components/DragContext';
@@ -0,0 +1,25 @@
1
+ export interface ScheduleLabels {
2
+ day: string;
3
+ week: string;
4
+ month: string;
5
+ year: string;
6
+ allDay: string;
7
+ weekday: string;
8
+ timeSlot: string;
9
+ today: string;
10
+ next: string;
11
+ previous: string;
12
+ more: string;
13
+ selectMonth: string;
14
+ selectYear: string;
15
+ switchToDayView: string;
16
+ switchToWeekView: string;
17
+ switchToMonthView: string;
18
+ switchToYearView: string;
19
+ viewSelectLabel: string;
20
+ noEvents: string;
21
+ moreLabel: (hiddenEventsCount: number) => string;
22
+ }
23
+ export declare const DEFAULT_SCHEDULE_LABELS: ScheduleLabels;
24
+ export type ScheduleLabelsOverride = Partial<ScheduleLabels>;
25
+ export declare function getLabel<K extends keyof ScheduleLabels>(key: K, override?: ScheduleLabelsOverride): ScheduleLabels[K];
@@ -0,0 +1,7 @@
1
+ import { ScheduleEventData } from './types';
2
+ declare function createEvent(input?: Partial<ScheduleEventData>): ScheduleEventData;
3
+ export declare const testUtils: {
4
+ testDate: string;
5
+ createEvent: typeof createEvent;
6
+ };
7
+ export {};
package/lib/types.d.ts ADDED
@@ -0,0 +1,141 @@
1
+ import dayjs from 'dayjs';
2
+ import type { MantineColor } from '@mantine-vue/core';
3
+ /** Date value type used by internal package utils */
4
+ export type AnyDateValue = DateStringValue | Date | dayjs.Dayjs;
5
+ /** Date value used by all Mantine components, format: `YYYY-MM-DD` */
6
+ export type DateStringValue = string;
7
+ /** DateTime value used by all Mantine components, format: `YYYY-MM-DD HH:mm:ss` */
8
+ export type DateTimeStringValue = string;
9
+ /** Day of the week, 0 – Sunday, 1 – Monday, etc. */
10
+ export type DayOfWeek = 0 | 1 | 2 | 3 | 4 | 5 | 6;
11
+ /** string – dayjs format, callback function – custom formatter */
12
+ export type DateLabelFormat = string | ((date: DateStringValue) => string);
13
+ /** View level used by Schedule component */
14
+ export type ScheduleViewLevel = 'day' | 'week' | 'month' | 'year';
15
+ /** Interaction mode used by Schedule components */
16
+ export type ScheduleMode = 'static' | 'default';
17
+ /** Payload type for ScheduleEventData, defined in user application */
18
+ export type EventPayload = Record<PropertyKey, unknown>;
19
+ /** RFC 5545 recurrence data */
20
+ export interface ScheduleRecurrenceData {
21
+ /** Recurrence rule string, for example: `FREQ=WEEKLY;BYDAY=MO,WE` */
22
+ rrule: string;
23
+ /** Exception datetimes in `YYYY-MM-DD HH:mm:ss` or valid date string format */
24
+ exdate?: DateTimeStringValue[];
25
+ /** Optional explicit series start datetime */
26
+ dtstart?: DateTimeStringValue;
27
+ }
28
+ /** Metadata attached to generated recurring instances */
29
+ export interface RecurringInstanceMeta {
30
+ /** If true, event is generated from recurrence rule */
31
+ isRecurringInstance: boolean;
32
+ /** Parent series event id */
33
+ recurringEventId: string | number;
34
+ /** Original occurrence datetime key */
35
+ recurrenceId: DateTimeStringValue;
36
+ /** Original occurrence dates before any drag/drop updates */
37
+ originalStart: DateTimeStringValue;
38
+ originalEnd: DateTimeStringValue;
39
+ }
40
+ interface ScheduleEventBase<Payload extends EventPayload = EventPayload> {
41
+ /** Unique event id, used for key and identification */
42
+ id: string | number;
43
+ /** Event title, displayed in month, week and day views */
44
+ title: string;
45
+ /** Event start date/time */
46
+ start: Date | DateTimeStringValue;
47
+ /** Event end date/time */
48
+ end: Date | DateTimeStringValue;
49
+ /** Event background color. Key of `theme.colors` or any valid CSS color. */
50
+ color: MantineColor;
51
+ /** Event variant, default is `'light'` */
52
+ variant?: 'filled' | 'light';
53
+ /** Event display mode. Background events render as full-width, non-interactive blocks behind regular events. @default 'default' */
54
+ display?: 'default' | 'background';
55
+ /** Additional event data, defined by the user, not used internally by the library */
56
+ payload?: Payload;
57
+ }
58
+ /** One-off event without recurrence */
59
+ export interface ScheduleSingleEventData<Payload extends EventPayload = EventPayload> extends ScheduleEventBase<Payload> {
60
+ recurrence?: never;
61
+ recurringEventId?: never;
62
+ recurrenceId?: never;
63
+ }
64
+ /** Recurring series source event */
65
+ export interface ScheduleRecurringSeriesEventData<Payload extends EventPayload = EventPayload> extends ScheduleEventBase<Payload> {
66
+ /** Recurrence definition for the event series */
67
+ recurrence: ScheduleRecurrenceData;
68
+ recurringEventId?: never;
69
+ recurrenceId?: never;
70
+ }
71
+ /** Override for one specific recurring occurrence */
72
+ export interface ScheduleRecurringOverrideEventData<Payload extends EventPayload = EventPayload> extends ScheduleEventBase<Payload> {
73
+ recurrence?: never;
74
+ /** Parent recurring series id */
75
+ recurringEventId: string | number;
76
+ /** Occurrence id (`YYYY-MM-DD HH:mm:ss`) */
77
+ recurrenceId: DateTimeStringValue;
78
+ }
79
+ interface ScheduleEventRuntimeMeta {
80
+ /** Metadata for generated recurring instances */
81
+ recurringInstance?: RecurringInstanceMeta;
82
+ }
83
+ /** Event data object passed to all `@mantine/schedule` components */
84
+ export type ScheduleEventData<Payload extends EventPayload = EventPayload> = (ScheduleSingleEventData<Payload> & ScheduleEventRuntimeMeta) | (ScheduleRecurringSeriesEventData<Payload> & ScheduleEventRuntimeMeta) | (ScheduleRecurringOverrideEventData<Payload> & ScheduleEventRuntimeMeta);
85
+ export interface DayEventPositionData {
86
+ /** All day events */
87
+ allDay: boolean;
88
+ /** Event top position in %, represents start time */
89
+ top: number;
90
+ /** Event height in %, represents duration (end time - start time) */
91
+ height: number;
92
+ /** Event width in %, represents event size in overlap group */
93
+ width: number;
94
+ /** Event left offset in %, represents event position in overlap group */
95
+ offset: number;
96
+ /** Number of events in the overlap group */
97
+ overlaps: number;
98
+ /** Column index in the overlap group, 1-based */
99
+ column: number;
100
+ }
101
+ /** Event data with calculated position for day view */
102
+ export type DayPositionedEventData<Payload extends EventPayload = EventPayload> = ScheduleEventData<Payload> & {
103
+ position: DayEventPositionData;
104
+ };
105
+ export interface WeekEventPositionData extends DayEventPositionData {
106
+ /** Week offset in %, represents event start position from the first day of the week (for regular events only) */
107
+ weekOffset?: number;
108
+ /** Row index for all-day events, used for vertical stacking */
109
+ row: number;
110
+ /** Indicates if the event hangs from the start, end, both or none of the week */
111
+ hanging: 'start' | 'end' | 'both' | 'none';
112
+ }
113
+ /** Event data with calculated position for week view */
114
+ export type WeekPositionedEventData<Payload extends EventPayload = EventPayload> = ScheduleEventData<Payload> & {
115
+ position: WeekEventPositionData;
116
+ };
117
+ export interface MonthEventPositionData {
118
+ /** Start offset % from the start of the week (inset-inline-start) */
119
+ startOffset: number;
120
+ /** Event width in % */
121
+ width: number;
122
+ /** Week index in the month, 0-based */
123
+ weekIndex: number;
124
+ /** Event row index in the week, 0-based */
125
+ row: number;
126
+ /** Indicates if the event hangs from the start, end, both or none of the week */
127
+ hanging: 'start' | 'end' | 'both' | 'none';
128
+ }
129
+ /** Event data with calculated position for month view */
130
+ export type MonthPositionedEventData<Payload extends EventPayload = EventPayload> = ScheduleEventData<Payload> & {
131
+ position: MonthEventPositionData;
132
+ };
133
+ export interface DropTarget {
134
+ /** Target date in YYYY-MM-DD format */
135
+ date: DateStringValue;
136
+ /** Target time in HH:mm:ss format (for DayView/WeekView) */
137
+ time?: string;
138
+ /** Target slot index (for DayView/WeekView) */
139
+ slotIndex?: number;
140
+ }
141
+ export {};
@@ -0,0 +1,22 @@
1
+ import { AnyDateValue, ScheduleEventData } from '../../types';
2
+ export interface CalculateDropTimeInput {
3
+ /** The event being dragged */
4
+ draggedEvent: ScheduleEventData;
5
+ /** Target date where event will be dropped */
6
+ targetDate: AnyDateValue;
7
+ /** Target time slot start time in HH:mm:ss format */
8
+ targetSlotTime: string;
9
+ /** Mouse Y position relative to the slot */
10
+ mouseYOffset?: number;
11
+ /** Height of one slot in pixels */
12
+ slotHeight?: number;
13
+ /** Minutes per slot */
14
+ intervalMinutes?: number;
15
+ }
16
+ export interface CalculateDropTimeResult {
17
+ /** New start date/time for the event */
18
+ start: Date;
19
+ /** New end date/time for the event */
20
+ end: Date;
21
+ }
22
+ export declare function calculateDropTime({ draggedEvent, targetDate, targetSlotTime, mouseYOffset, slotHeight, intervalMinutes, }: CalculateDropTimeInput): CalculateDropTimeResult;
@@ -0,0 +1,14 @@
1
+ import { DateStringValue, ScheduleEventData } from '../../types';
2
+ export interface CalculateMonthDropDateInput {
3
+ /** The event being dragged */
4
+ draggedEvent: ScheduleEventData;
5
+ /** The target day where the event is being dropped */
6
+ targetDay: DateStringValue;
7
+ }
8
+ export interface CalculateMonthDropDateResult {
9
+ /** New start date for the event */
10
+ start: Date;
11
+ /** New end date for the event */
12
+ end: Date;
13
+ }
14
+ export declare function calculateMonthDropDate({ draggedEvent, targetDay, }: CalculateMonthDropDateInput): CalculateMonthDropDateResult;
@@ -0,0 +1,2 @@
1
+ /** Clamp interval minutes to valid values (1-60) and ensure it divides evenly into 60 */
2
+ export declare function clampIntervalMinutes(intervalMinutes: number): number;
@@ -0,0 +1,10 @@
1
+ import { ScheduleEventData } from '../../types';
2
+ interface ExpandRecurringEventsInput {
3
+ events: ScheduleEventData[] | undefined;
4
+ rangeStart: Date | string;
5
+ rangeEnd: Date | string;
6
+ expansionLimit?: number;
7
+ }
8
+ declare const DEFAULT_EXPANSION_LIMIT = 2000;
9
+ export declare function expandRecurringEvents({ events, rangeStart, rangeEnd, expansionLimit, }: ExpandRecurringEventsInput): ScheduleEventData[];
10
+ export { DEFAULT_EXPANSION_LIMIT };
@@ -0,0 +1,8 @@
1
+ import dayjs from 'dayjs';
2
+ import { DateLabelFormat } from '../../types';
3
+ export interface FormatDateInput {
4
+ locale: string;
5
+ date: string | Date | dayjs.Dayjs;
6
+ format: DateLabelFormat;
7
+ }
8
+ export declare function formatDate({ locale, date, format }: FormatDateInput): string;
@@ -0,0 +1,26 @@
1
+ import { DayOfWeek } from '../../types';
2
+ /** Business hours range in `HH:mm:ss` format */
3
+ export type BusinessHoursRange = [string, string];
4
+ /** Per-day business hours map keyed by day of the week (0 – Sunday, 6 – Saturday). `null` marks a day as fully outside business hours. */
5
+ export type BusinessHoursPerDay = Partial<Record<DayOfWeek, BusinessHoursRange | null>>;
6
+ /** Business hours value – tuple applies to every day, record configures business hours per day */
7
+ export type BusinessHoursValue = BusinessHoursRange | BusinessHoursPerDay;
8
+ export interface GetBusinessHoursModInput {
9
+ time: string;
10
+ businessHours?: BusinessHoursValue;
11
+ highlightBusinessHours?: boolean;
12
+ dayOfWeek?: DayOfWeek;
13
+ }
14
+ export interface BusinessHoursMod {
15
+ 'business-hours': boolean;
16
+ 'non-business-hours': boolean;
17
+ }
18
+ /**
19
+ * Determines if a given time is within business hours and returns modifier object
20
+ * @param time - Time string in HH:mm:ss format
21
+ * @param businessHours - Tuple of [start, end] times in HH:mm:ss format, or per-day record keyed by day of the week
22
+ * @param highlightBusinessHours - Whether to highlight business hours
23
+ * @param dayOfWeek - Day of the week (0 – Sunday, 6 – Saturday), used to resolve per-day business hours
24
+ * @returns Modifier object for styling business/non-business hours
25
+ */
26
+ export declare function getBusinessHoursMod({ time, businessHours, highlightBusinessHours, dayOfWeek, }: GetBusinessHoursModInput): BusinessHoursMod;
@@ -0,0 +1,10 @@
1
+ import { AnyDateValue } from '../../types';
2
+ interface GetCurrentTimePositionInput {
3
+ startTime?: string;
4
+ endTime?: string;
5
+ now?: AnyDateValue;
6
+ /** Number of minutes per time slot. Used to align the indicator to whole slots when `endTime` does not divide evenly. */
7
+ intervalMinutes?: number;
8
+ }
9
+ export declare function getCurrentTimePosition(input?: GetCurrentTimePositionInput): number;
10
+ export {};
@@ -0,0 +1,17 @@
1
+ import { ScheduleEventData } from '../../types';
2
+ interface GetDayPositionInput {
3
+ /** Event data to calculate position for */
4
+ event: ScheduleEventData;
5
+ /** Start time boundary for the day in HH:mm:ss format, `00:00:00` by default */
6
+ startTime?: string;
7
+ /** End time boundary for the day in HH:mm:ss format, `23:59:59` by default */
8
+ endTime?: string;
9
+ /** Number of minutes per time slot, `60` by default. Used to align the canvas to whole slots when `endTime` does not divide evenly. */
10
+ intervalMinutes?: number;
11
+ }
12
+ /** Calculates day position within given start and end time boundaries. Returns top and height in percentages. */
13
+ export declare function getDayPosition({ event, startTime, endTime, intervalMinutes, }: GetDayPositionInput): {
14
+ top: number;
15
+ height: number;
16
+ };
17
+ export {};
@@ -0,0 +1,19 @@
1
+ export interface DayTimeInterval {
2
+ /** Start time of the interval in HH:mm:ss format */
3
+ startTime: string;
4
+ /** End time of the interval in HH:mm:ss format */
5
+ endTime: string;
6
+ /** Duration of the interval in seconds */
7
+ duration: number;
8
+ /** Indicates if the interval starts at the beginning of an hour */
9
+ isHourStart: boolean;
10
+ }
11
+ export interface GetDayTimeIntervalsInput {
12
+ /** Start time in HH:mm:ss format */
13
+ startTime: string;
14
+ /** End time in HH:mm:ss format, end of the day by default */
15
+ endTime?: string;
16
+ /** Interval in minutes, 60 by default */
17
+ intervalMinutes?: number;
18
+ }
19
+ export declare function getDayTimeIntervals({ startTime, endTime, intervalMinutes: _intervalMinutes, }: GetDayTimeIntervalsInput): DayTimeInterval[];
@@ -0,0 +1,3 @@
1
+ import dayjs from 'dayjs';
2
+ import { AnyDateValue, DayOfWeek } from '../../types';
3
+ export declare function getEndOfWeek(date: AnyDateValue, firstDayOfWeek?: DayOfWeek): string | dayjs.Dayjs;
@@ -0,0 +1,8 @@
1
+ import { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';
2
+ interface GetMonthDaysInput {
3
+ month: AnyDateValue;
4
+ firstDayOfWeek: DayOfWeek | undefined;
5
+ consistentWeeks: boolean | undefined;
6
+ }
7
+ export declare function getMonthDays({ month, firstDayOfWeek, consistentWeeks, }: GetMonthDaysInput): DateStringValue[][];
8
+ export {};
@@ -0,0 +1,13 @@
1
+ import { AnyDateValue, DayOfWeek } from '../../types';
2
+ interface GetMonthRangeInput {
3
+ month: AnyDateValue;
4
+ withOutsideDays: boolean | undefined;
5
+ consistentWeeks: boolean | undefined;
6
+ firstDayOfWeek: DayOfWeek;
7
+ }
8
+ /** Returns start and end dates as displayed in MonthView */
9
+ export declare function getMonthRange({ month, withOutsideDays, consistentWeeks, firstDayOfWeek, }: GetMonthRangeInput): {
10
+ start: string;
11
+ end: string;
12
+ };
13
+ export {};
@@ -0,0 +1,2 @@
1
+ import { AnyDateValue } from '../../types';
2
+ export declare function getMonthsByQuarter(year: AnyDateValue): string[][];
@@ -0,0 +1,11 @@
1
+ import { DateLabelFormat } from '../../types';
2
+ interface GetMonthsListInput {
3
+ locale: string;
4
+ format: DateLabelFormat;
5
+ }
6
+ interface MonthData {
7
+ month: number;
8
+ name: string;
9
+ }
10
+ export declare function getMonthsList({ locale, format }: GetMonthsListInput): MonthData[];
11
+ export {};
@@ -0,0 +1,7 @@
1
+ import { AnyDateValue, DayOfWeek } from '../../types';
2
+ interface GetStartOfWeekInput {
3
+ date: AnyDateValue;
4
+ firstDayOfWeek?: DayOfWeek;
5
+ }
6
+ export declare function getStartOfWeek({ date, firstDayOfWeek }: GetStartOfWeekInput): string;
7
+ export {};
@@ -0,0 +1,9 @@
1
+ interface GetVisibleEventsInput {
2
+ maxEvents: number;
3
+ totalEvents: number;
4
+ }
5
+ export declare function getVisibleEvents({ maxEvents, totalEvents }: GetVisibleEventsInput): {
6
+ visibleEventsCount: number;
7
+ hiddenEventsCount: number;
8
+ };
9
+ export {};
@@ -0,0 +1,13 @@
1
+ import { AnyDateValue, DateStringValue, DayOfWeek } from '../../types';
2
+ export interface GetWeekDaysInput {
3
+ /** Week to generate days for */
4
+ week: AnyDateValue;
5
+ /** Indices of weekend days, 0-6, where 0 is Sunday and 6 is Saturday. The default value is defined by `DatesProvider`. */
6
+ weekendDays?: DayOfWeek[];
7
+ /** If set to false, weekend days are hidden @default true */
8
+ withWeekendDays?: boolean;
9
+ /** Number 0-6, where 0 – Sunday and 6 – Saturday @default 1 */
10
+ firstDayOfWeek?: DayOfWeek;
11
+ }
12
+ /** Returns a list of days in a given week */
13
+ export declare function getWeekDays({ week, weekendDays, withWeekendDays, firstDayOfWeek, }: GetWeekDaysInput): DateStringValue[];
@@ -0,0 +1,2 @@
1
+ import { AnyDateValue } from '../../types';
2
+ export declare function getWeekNumber(week: AnyDateValue | AnyDateValue[]): number;