CatalystOne Design System
Released 2026-08-19
Major release with 2 breaking changes, 17 new features and 21 fixes.
Calendar also dropped its direct dependencies on @fullcalendar/core, daygrid, interaction, multimonth, resource and resource-timeline v6 in favour of @fullcalendar/react and @fullcalendar/react-scheduler v7. Apps that import @fullcalendar v6 packages directly must upgrade them too. With weekNumberPosition='column', the week-number column is hidden in the most compact layout.
Calendar moved to FullCalendar v7 and its re-exported FullCalendar types were renamed: DayCellContentArg -> DayCellInfo, DayHeaderContentArg -> DayHeaderInfo, EventContentArg -> EventDisplayInfo, DatesSetArg -> DatesSetInfo, EventDropArg -> EventDropInfo, EventClickArg -> EventClickInfo, DateClickArg -> DateClickInfo, ResourceLabelContentArg -> ResourceCellInfo, and the ref type FullCalendar -> CalendarRef (still exposes getApi()). CalendarApi, EventInput, FormatterInput, EventImpl, ResourceApi, ResourceInput and Duration keep their names.
Mechanical change, safe to apply automatically.
Before:
import { type EventClickArg, type FullCalendar } from '@catalystone/calendar'
const calendarRef = useRef<FullCalendar>(null)
const handleEventClick = ({ event }: EventClickArg) => openEvent(event.id)
After:
import { type EventClickInfo, type CalendarRef } from '@catalystone/calendar'
const calendarRef = useRef<CalendarRef>(null)
const handleEventClick = ({ event }: EventClickInfo) => openEvent(event.id)
The CoreCalendar and BaseOptionsRefined type exports were removed. EmployeeCalendarTimelineView timelineViewOptions is now typed as Partial<CalendarOptions> instead of BaseOptionsRefined. Use CalendarApi (via ref.getApi()) instead of CoreCalendar.
Before:
import { type BaseOptionsRefined } from '@catalystone/calendar'
const timelineOptions: BaseOptionsRefined = { slotMinWidth: 60 }
After:
import { type EmployeeCalendarTimelineViewProps } from '@catalystone/calendar'
const timelineOptions: EmployeeCalendarTimelineViewProps['timelineViewOptions'] = { slotMinWidth: 60 }
Event colours follow FullCalendar v7: on event objects (EventInput) backgroundColor, borderColor and textColor are gone. Use color for the event fill and contrastColor for the text/icon colour on top of it. Note that color changes meaning if it was used for text before. Calendar-level eventBackgroundColor/eventTextColor are likewise replaced by eventColor/eventContrastColor.
Before:
const events: EventInput[] = [
{ id: '1', title: 'Vacation', start: '2026-08-03', backgroundColor: '#2e7d32', textColor: '#fff' }
]
After:
const events: EventInput[] = [
{ id: '1', title: 'Vacation', start: '2026-08-03', color: '#2e7d32', contrastColor: '#fff' }
]
CalendarProps extends FullCalendar's CalendarOptions, so v7 option renames apply to props passed to Calendar and EmployeeCalendarTimelineView (and to view options): slotLabelContent -> slotHeaderContent, slotLabelFormat -> slotHeaderFormat, resourceLabelContent -> resourceCellContent, resourceAreaWidth -> resourceColumnsWidth, resourceAreaHeaderContent -> resourceColumnHeaderContent, weekNumberContent -> inlineWeekNumberContent, weekNumberDidMount -> inlineWeekNumberDidMount. dayCellContent no longer exists (the closest v7 hook is dayCellTopContent); check other FullCalendar options against the v7 docs.
Before:
<EmployeeCalendarTimelineView
resources={resources}
events={events}
resourceLabelContent={renderResourceLabel}
/>
After:
<EmployeeCalendarTimelineView
resources={resources}
events={events}
resourceCellContent={renderResourceLabel}
/>
With FullCalendar v7's React connector, content hooks (eventContent, dayHeaderContent, slotHeaderContent, ...) render their return value directly as React. The v6 workaround of returning a thunk ((arg) => () => <Jsx />) so hooks inside the content could run is no longer needed; return JSX directly.
Before:
<Calendar eventContent={(arg) => () => <EventChip event={arg.event} />} />
After:
<Calendar eventContent={(arg) => <EventChip event={arg.event} />} />
No consumer action required: this release note repeats the @catalystone/axios-interceptors removal (commit 8ac6bea) that first shipped in 36.0.3. See the 36.0.3 migration 36-0-3-axios-interceptors-moved-out.