React
- FIX:
<Activity>(React 19.2+, which Next.js uses to keep recent pages alive) (#8112):- A hidden calendar restarted its timers when re-rendered. Once removed, those timers kept running and kept the whole calendar in memory
- TimeGrid and DayGrid views shown again jumped back to
scrollTimeor today's row, losing the user's scroll position
- FIX: A function event source (
events: (info) => …) under a suspended<Suspense>boundary warned "Can't perform a React state update on a component that hasn't mounted yet" when its fetch resolved, and left a timer running (#8092) - FIX: Strict Mode, in development: the now indicator and today's highlight stopped updating after Strict Mode's simulated remount
Event Rendering
- FIX: DayGrid with
dayMaxEventsordayMaxEventRows:- Events hidden behind "+N more" in the last week could hang invisibly past the bottom of the grid, so the month scrolled into empty space (#7581)
- When
true, a day could hide an event behind "+N more" even when the event and the link both fit, such as showing "+2 more" alone where the first event had room - When
true, an event that didn't fit at first could only come back cut into pieces around other events, or not at all witheventSlicing: false. It can now come back whole, so some days show events they used to hide. Rarely, a day shows a later event where it used to show part of an earlier one
Headers and Titles
- FIX: DayGrid (month, multi-month): day headers that name only the weekday gave
dayHeaderContentand the other day header hooks a January 1970 date at midnight UTC, which read as the day before west of UTC.dateis now a day in view, at midnight in the calendar's time zone. Code that read it in UTC (such asgetUTCDay()) should usedowinstead (#7468, #5854) - FIX: TimeGrid: slot headers in the time axis were only as tall as their labels, so a background, border or hover style from
slotHeaderClasscovered just the top of the slot - FIX: List view:
listDayFormat: falseandlistDayAltFormat: falserendered their day headings in the default format instead of turning them off - FEATURE:
view.titleParts: the title'sIntlrange parts (type,value, andsourceofstartRange,endRangeorshared), so a custom toolbar can style parts of the title, such as a lighter year, in every locale and for ranges. Typed asDateTimeRangeFormatPartWithWeek - FEATURE:
slotHeaderContentand the other slot header hooks gettextPartsand theweekdayText,dayNumberTextandmonthTextgetters that day cells have (empty strings in the time grid's axis).dayHeaderContentandlistDayHeaderContentgetmonthTexttoo - TimeGrid: slot headers between labels have
data-timetoo, like the labeled ones
Event Settings
- FIX: Dragging an event previewed it differently from how it's handled once dropped:
- To another resource: its source's
constraint,overlapandallowwere ignored, so it could be dropped where they forbid, and the preview lost its source's colors and classes - An all-day event into TimeGrid's timed area: the preview lost its source's colors and classes
- Back into the calendar it came from: its source's settings, such as
allow, were ignored until dropped - In from outside with a
resourceId, in views without resources: it didn't take its resource's colors and classes until dropped
- To another resource: its source's
- FIX: Views without resources, such as
timeGridWeekwith resources loaded: an event added withcalendar.addEvent()and no event source didn't get its resource'seventColor,eventClassor other event settings
Resource Views
- FIX:
event.getResources()returnednullfor each resource that doesn't exist or hasn't been fetched yet. It now leaves them out (#7300) - FIX: Resource Timeline: a
resourceColumnsWidthother than a number,pxor%, such as'9.5rem', threw an error, so the view didn't render. It now warns and uses the default, 30%. A resource column'swidthin another unit warns too, and the column still grows to fill the space - FIX: Resource Timeline with
virtualization: scrolling to a resource added withcalendar.addResource(resource, true)could stop a few rows short of it. A regression in v7.1.4 - FIX:
resource.toPlainObject()left out the resource'seventColor
Accessibility
- FIX: Prev, next, today and custom toolbar buttons had
aria-pressed="false", so screen readers announced them as toggle buttons. Only view buttons have it now (#8042) - FIX: A view button alone in its toolbar group had
role="tab"with no tablist around it. It's now a toggle button witharia-pressed, like grouped view buttons
Misc
- FIX: Skeleton CSS: some structural rules, including the z-index ones that set the stacking order, weren't
!important, so without cascade layers an app's CSS could override them (though not in a Tailwind app). All are now, so the stacking order is the same in every setup, and az-*class on an element from a hook, such astableHeaderClass, has no effect - FIX: An event at a wall-clock time skipped by a daylight-saving change (given without an offset) resolves to the time after the change, but
startStr/endStrnamed the skipped time, an hour beforestart/end. Fed back intoaddEvent, the string moved the event - FIX: TypeScript:
calendar.off()required a handler, though calling it without one removes all of that name's handlers added withcalendar.on() - INTERNAL: every calendar option has a description and a link to its docs page in the source code, for AI agents and other tools that read it
- INTERNAL: a new, faster test suite on Vitest, replacing Karma