Event data shapes and callback payloads for @mantine/schedule
All @mantine/schedule components accept events through the events prop. Each event is typed as ScheduleEventData and can be one of three shapes:
All three variants share a common set of base fields described in ScheduleEventBase .
ScheduleEventBase defines the fields that every event has, regardless of its shape.
start and end accept either a Date instance or a string in YYYY-MM-DD HH:mm:ss format (the DateTimeStringValue type used by all Mantine date components).
A one-off event without recurrence. This is the most common shape:
A source event for a recurring series. Adds a recurrence field with an RFC 5545 recurrence rule:
The recurrence object has the following shape:
See the Recurring events guide for more details on recurrence rules and series expansion.
An override event replaces a single generated occurrence from a series:
Use the payload field to attach arbitrary data to events. The payload is not used internally by the library – it is meant for application-specific data that you can access in callbacks ( onEventClick , onEventDrop , etc.) and in custom event renderers ( renderEventBody ):
EventPayload itself is just Record<PropertyKey, any> – you typically pass your own payload type as a generic argument to ScheduleEventData<MyPayload> .
When a recurring series is expanded for the visible date range, each generated event includes a recurringInstance metadata object. This object is added by the library – you do not set it yourself, but you can read it in callbacks and custom renderers to distinguish generated occurrences from regular events:
Example of reading the metadata in onEventClick :
All event callbacks accept structured data describing what the user interacted with. The following sections document the exact payload received by each callback.
Called when an event is clicked in any view:
Called when an event is dropped after a drag (requires withEventsDragAndDrop ):
Called when an event is resized by dragging its top or bottom edge (requires withEventResize ):
The payload has the same shape as onEventDrop , including the caveat about eventId for generated recurring instances.
Called when an event drag starts or ends:
onEventDragEnd is called both for successful drops and for cancelled drags – use onEventDrop if you need the new position.
Called when a time slot is clicked in DayView or WeekView :
Called when the all-day slot is clicked in DayView or WeekView :
Called when a day is clicked in MonthView or YearView :
Called when a slot range is selected by dragging across time slots or day cells (requires withDragSlotSelect ):
Called when an item is dragged from outside the schedule and dropped onto a slot:
Permission callbacks – return false to prevent dragging or resizing for a specific event:
Event data and callback payloads use the following string formats consistently:
These types are shared across @mantine/dates and @mantine/schedule and are exported from both packages.