MonthView
Standalone schedule month view component
Source
LLM docs
Docs
Package
Usage
MonthView displays events in a calendar month grid. It shows event badges in each day cell with support for drag and drop.
With week numbers
Set withWeekNumbers to display week numbers in the first column.
Without week days
Set withWeekDays={false} to hide the weekday names row.
Hide weekend days
Set withWeekendDays={false} to hide weekend days. The grid shrinks to the
remaining columns and events that span hidden days are clipped to the visible
days. The days that are considered weekend are controlled by the weekendDays
prop (or DatesProvider, [0, 6] by
default).
First day of week
Set firstDayOfWeek to control which day starts the week.
Weekday format
Use weekdayFormat prop to customize weekday names.
Consistent weeks
Set consistentWeeks={false} to only show weeks that have days in the current month.
Highlight today
Set highlightToday={false} to disable highlighting the current day.
Without outside days
Set withOutsideDays={false} to hide days from adjacent months.
Radius
Use radius prop to customize the border radius of events.
Without header
Set withHeader={false} to hide the header controls.
Custom header
You can build a custom header using ScheduleHeader compound components combined with your own controls.
Set withHeader={false} on the view and compose the header externally.
Max events per day
Use maxEventsPerDay prop to control how many events are visible per day before the "+more"
indicator appears. The value is clamped between 1 and 10. Day cell height adjusts automatically.
Many events
When a day has many events, the component shows a "+N more" indicator.
Drag and drop
Enable drag and drop to move events between days.
To reject a drop based on where the event lands – for example to prevent double booking – use
preventEventOverlap and canDropEvent, see drop validation.
Month view has no drag ghost, so a rejected drop is only reported through onEventPlacementRejected.
External drag and drop
Use onExternalEventDrop to allow dragging items from outside the component into
the schedule. External items must set data in dataTransfer during their onDragStart.
The callback receives the DataTransfer object and the drop target datetime.
Drag to schedule
Team Offsite
Release Day
All Hands
Bidirectional drag and drop
Combine onExternalEventDrop with withEventsDragAndDrop to drag items both into and out of
the schedule. When an event is dragged, the schedule sets application/json data with { eventId }
in dataTransfer. Read it in your drop zone to identify the event.
Unscheduled
Team Offsite
Release Day
All Hands
Full event customization
Use renderEvent prop to fully customize event rendering. The function receives the event
as the first argument and the props of the event root element (including children) as the second
argument. Use it to wrap events in HoverCard, Tooltip or other components.
Timed events
Use renderEvent to visually differentiate all-day and timed events. All-day events render as
regular colored bars, while timed events display as a colored dot with the start time and title.
Recurring events
MonthView automatically expands recurring events for the visible month. See Recurring events guide for full documentation.
Background events
Set display="background" on an event to render it as a full-width, semi-transparent block
behind regular events. By default it cannot be clicked, dragged, or resized. Background events
span the full height of the day cell in the month view.
Interactive background events
Set withInteractiveBackgroundEvents prop to make background events clickable. onEventClick
is called with the background event, use event.display === 'background' to tell it apart
from regular events.
An interactive background event covers the day cells underneath it: clicks and drag-to-select in its range go to the event. Background events still cannot be dragged or resized.
Last clicked: nothing yet
Agenda view
Set withAgenda prop to display an "Agenda" button in the header. When clicked, it opens
an AgendaView showing events for the current month as a list.
Static mode
Set mode="static" to disable all interactions.
Localization
Use locale prop to set the dayjs locale for date formatting.
Combine it with labels prop to translate all UI text.
Create and update events
Set withDragSlotSelect prop to allow users to drag across day cells to select a date range.
When the drag ends, onSlotDragEnd is called with the range start and end dates.
Combine it with onDayClick and onEventClick to create and edit events.
Responsive styles
MonthView uses @container queries for responsive styles. The component automatically adjusts its layout based on the container width, hiding labels and reducing padding on smaller screens. Container queries are supported in all modern browsers.
Accessibility
Focus management
- Only the first day is included in the tab order, all other days can be reached with arrow keys
- Outside days can be focused with arrow keys when
withOutsideDaysistrue - Disabled days are skipped during keyboard navigation
Keyboard interactions
Note that the following events will only trigger if focus is on a day control.
Day labels
Each day button has an aria-label attribute with the full date in the format "Month Day, Year" (e.g., "November 15, 2025").