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)
classNamestringAdditional CSS classes
CallbackSignatureDescription
onEventClick(event: CalendarEvent) => voidFired when an event is clicked
onSlotClick(dateTime: DateTimeString) => voidFired when an empty time slot is clicked
onEventDrop(event: CalendarEvent, newStart: DateTimeString, newEnd: DateTimeString) => voidFired when an event is dropped after dragging
onEventResize(event: CalendarEvent, newStart: DateTimeString, newEnd: DateTimeString) => voidFired when an event is resized (week/day view)
onSlotSelect(start: DateTimeString, end: DateTimeString) => voidFired when a time range is selected by dragging across empty slots
onDateChange(date: DateString) => voidFired when the visible date changes (navigation)
onViewChange(view: CalendarView) => voidFired when the view changes
interface CalendarEvent {
id: string;
title: string;
start: DateTimeString; // "2026-03-13T09:00:00"
end: DateTimeString; // "2026-03-13T10:00:00"
allDay?: boolean;
color?: string;
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";
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>;
}