Skip to content

Props Reference

The <Calendar> component accepts all fields from CalendarConfig, plus className.

PropTypeDefaultDescription
eventsCalendarEvent[]requiredEvents to display
defaultViewCalendarView"month"Initial view (uncontrolled)
defaultDateDateStringtodayInitial date (uncontrolled)
viewCalendarViewControlled view
dateDateStringControlled date
localePartial<CalendarLocale>{ locale: "en-US", weekStartsOn: 0 }Locale settings
slotsPartial<CalendarSlots>Custom component overrides
enableDnDbooleanfalseEnable drag and drop
dayStartHournumber0Hour the time grid starts (0-23)
dayEndHournumber24Hour the time grid ends (0-24)
snapDurationnumber15Snap increment in minutes for drag, resize, and slot selection
hiddenDaysnumber[][]Days of the week to hide (0=Sunday … 6=Saturday)
validRange{ start?: DateString; end?: DateString }Restrict navigable date range; prev/next buttons are disabled at bounds
highlightedDatesDateString[][]Dates to visually highlight across all views
showWeekNumbersbooleanfalseShow ISO week numbers in month view
longPressDelaynumber0Long press delay in ms for touch drag (avoids interfering with scroll)
slotClickTimestring"09:00:00"Default time used when clicking an empty day in month view
resourcesResource[][]Resources for resource views (day/week views gain one column per resource)
flexibleSlotTimeLimitsbooleanfalseAuto-expand time grid when events fall outside dayStartHour/dayEndHour
customButtonsCustomButton[][]Custom buttons injected into the toolbar
displayTimeZonestringbrowser zoneIANA zone in which times are rendered. See Timezones.
classNamestringAdditional CSS classes
CallbackSignatureDescription
onEventClick(event: CalendarEvent) => voidFired when an event is clicked
onSlotClick(dateTime: DateTimeString, extra?: { resourceId?: string }) => voidFired when an empty time slot is clicked. extra.resourceId set in resource views.
onEventDrop(event: CalendarEvent, newStart: DateTimeString, newEnd: DateTimeString, extra?: EventDropExtra) => voidFired when an event is dropped after dragging. extra.resourceId set in resource views.
onEventResize(event: CalendarEvent, newStart: DateTimeString, newEnd: DateTimeString) => voidFired when an event is resized (week/day view)
onSlotSelect(start: DateTimeString, end: DateTimeString, extra?: { resourceId?: string }) => voidFired when a time range is selected by dragging. extra.resourceId set in resource views.
onDateChange(date: DateString) => voidFired when the visible date changes (navigation)
onViewChange(view: CalendarView) => voidFired when the view changes
dragConstraint(event, newStart, newEnd) => booleanReturn false to prevent a drop
resizeConstraint(event, newStart, newEnd) => booleanReturn false to prevent a resize
selectConstraint(start, end) => booleanReturn false to prevent a slot selection
interface CalendarEvent {
id: string;
title: string;
start: DateTimeString; // "2026-03-13T09:00:00"
end: DateTimeString; // "2026-03-13T10:00:00"
allDay?: boolean;
color?: string;
timeZone?: string; // IANA zone (RFC 5545 TZID). See Timezones.
recurrence?: RecurrenceRule; // Recurring event rule
exDates?: DateString[]; // Dates to exclude from recurrence
recurringEventId?: string; // Set on expanded instances (points to parent)
originalDate?: DateString; // Original date of this recurring instance
[key: string]: unknown; // Custom metadata
}

See Recurrence for full documentation.

interface RecurrenceRule {
freq: "daily" | "weekly" | "monthly" | "yearly";
interval?: number;
byDay?: RecurrenceDay[]; // "MO" | "TU" | "WE" | "TH" | "FR" | "SA" | "SU"
byMonthDay?: number[];
bySetPos?: number[];
count?: number;
until?: string;
}
type CalendarView = "month" | "week" | "day" | "agenda" | "year";
interface CalendarLocale {
locale: string; // BCP 47: "en-US", "es-ES", "ja-JP"
weekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6;
labels?: Partial<CalendarLabels>;
}
interface CalendarLabels {
today: string;
month: string;
week: string;
day: string;
agenda: string;
allDay: string;
noEvents: string;
more: (count: number) => string;
}
type DateString = string; // "2026-03-13" (YYYY-MM-DD)
type DateTimeString = string; // "2026-03-13T09:00:00" (YYYY-MM-DDTHH:mm:ss)

See the Slots API page for detailed prop types.

interface CalendarSlots {
toolbar?: ComponentType<ToolbarSlotProps>;
event?: ComponentType<EventSlotProps>;
dayCell?: ComponentType<DayCellSlotProps>;
timeEvent?: ComponentType<TimeEventSlotProps>;
allDayEvent?: ComponentType<AllDayEventSlotProps>;
popover?: ComponentType<PopoverSlotProps>;
agendaEvent?: ComponentType<AgendaEventSlotProps>;
resourceHeader?: ComponentType<ResourceHeaderSlotProps>;
}