Migration from v5 to v6
This guide describes the changes needed to migrate the Date & Time Pickers from v5 to v6.
Start using the alpha release
In package.json, change the version of the date pickers package to next.
-"@mui/x-date-pickers": "latest",
+"@mui/x-date-pickers": "next",
Using next ensures that it will always use the latest v6 alpha release, but you can also use a fixed version, like 6.0.0-alpha.0.
Breaking changes
Since v6 is a major release, it contains some changes that affect the public API. These changes were done for consistency, improve stability and make room for new features. Below are described the steps you need to make to migrate from v5 to v6.
Update the format of the value prop
Previously, it was possible to provide any format that your date management library was able to parse.
For instance, you could pass value={new Date()} when using AdapterDayjs.
This behavior brought a lot of confusion.
In v6, the format expected by the value prop is the same as for any other prop holding a date.
Here is the syntax to initialize a date picker at the current date for each adapter:
// Date-fns
<DatePicker value={new Date()} />;
// Dayjs
import dayjs from 'dayjs';
<DatePicker value={dayjs()} />;
// Moment
import moment from 'moment';
<DatePicker value={moment()} />;
// Luxon
import { DateTime } from 'luxon';
<DatePicker value={DateTime.now()} />;
Rename the LeftArrowButton slot
The component slot LeftArrowButton has been renamed PreviousIconButton on all pickers:
<DatePicker
components={{
- LeftArrowButton: CustomButton,
+ PreviousIconButton: CustomButton,
}}
componentsProps={{
- leftArrowButton: {},
+ previousIconButton: {},
}}
/>
Rename the RightArrowButton slot
The component slot RightArrowButton has been renamed NextIconButton on all pickers:
<DatePicker
components={{
- RightArrowButton: CustomButton,
+ NextIconButton: CustomButton,
}}
componentsProps={{
- rightArrowButton: {},
+ nextIconButton: {},
}}
/>
Replace the DialogProps prop
The DialogProps prop has been replaced by a dialog component props on all responsive and mobile pickers:
<DatePicker
- DialogProps={{ backgroundColor: 'red' }}
+ componentsProps={{ dialog: { backgroundColor: 'red }}}
/>
Replace the PaperProps prop
The PaperProps prop has been replaced by a desktopPaper component props on all responsive and desktop pickers:
<DatePicker
- PaperProps={{ backgroundColor: 'red' }}
+ componentsProps={{ desktopPaper: { backgroundColor: 'red }}}
/>
Replace the PopperProps prop
The PopperProps prop has been replaced by a popper component props on all responsive and desktop pickers:
<DatePicker
- PopperProps={{ onClick: handleClick }}
+ componentsProps={{ popper: { onClick: handleClick }}}
/>
Replace the TransitionComponent prop
The TransitionComponent prop has been replaced by a DesktopTransition component slot on all responsive and desktop pickers:
<DatePicker
- TransitionComponent={Fade}
+ components={{ DesktopTransition: Fade }}
/>
Replace the TrapFocusProps prop
The TrapFocusProps prop has been replaced by a desktopTrapFocus component props on all responsive and desktop pickers:
<DatePicker
- TrapFocusProps={{ isEnabled: () => false }}
+ componentsProps={{ desktopTrapFocus: { isEnabled: () => false }}}
/>
Replace the renderDay prop
The renderDay prop has been replaced by a Day component slot on all date, date time and date range pickers:
<DatePicker
- renderDay={(_, dayProps) => <CustomDay {...dayProps} />}
+ components={{ Day: CustomDay }}
/>
Rename the localization props
The props used to set the text displayed in the pickers have been replaced by keys inside the localeText prop:
| Removed prop | Property in the new localText prop |
|---|---|
endText |
end |
getClockLabelText |
clockLabelText |
getHoursClockNumberText |
hoursClockNumberText |
getMinutesClockNumberText |
minutesClockNumberText |
getSecondsClockNumberText |
secondsClockNumberText |
getViewSwitchingButtonText |
calendarViewSwitchingButtonAriaLabel |
leftArrowButtonText |
openPreviousView (or previousMonth when the button changes the visible month) |
rightArrowButtonText |
openNextView (or nextMonth when the button changes the visible month) |
startText |
start |
For instance if you want to replace the startText / endText
<DateRangePicker
- startText="From"
- endText="To"
+ localeText={{
+ start: 'From',
+ end: 'To',
+ }}
/>
Rename the locale prop on LocalizationProvider
The locale prop of the LocalizationProvider component have been renamed adapterLcoale:
<LocalizationProvider
dateAdapter={AdapterDayjs}
- locale="fr"
+ adapterLocale="fr"
>
{children}
</LocalizationProvider
Rename the view components
The view components allowing to pick a time, a date or parts of a date without an input have been renamed to better fit their usage:
-<CalendarPicker {...props} />
+<DateCalendar {...props} />
-<DayPicker {...props} />
+<DayCalendar {...props} />
-<CalendarPickerSkeleton {...props} />
+<DayCalendarSkeleton {...props} />
-<MonthPicker {...props} />
+<MonthCalendar {...props} />
-<YearPicker {...props} />
+<YearCalendar {...props} />
-<ClockPicker {...props} />
+<TimeClock {...props} />
Component names in the theme have changed as well:
-MuiCalendarPicker: {
+MuiDateCalendar: {
-MuiDayPicker: {
+MuiDayCalendar: {
-MuiCalendarPickerSkeleton: {
+MuiDayCalendarSkeleton: {
-MuiMonthPicker: {
+MuiMonthCalendar: {
-MuiYearPicker: {
+MuiYearCalendar: {
-MuiClockPicker: {
+MuiTimeClock: {
Rename date prop to value on view components
The date prop has been renamed value on MonthCalendar, YearCalendar, TimeClock and DateCalendar (components renamed in previous section):
-<MonthPicker date={dayjs()} onChange={handleMonthChange} />
+<MonthCalendar value={dayjs()} onChange={handleMonthChange} />
-<YearPicker date={dayjs()} onChange={handleYearChange} />
+<YearCalendar value={dayjs()} onChange={handleYearChange} />
-<ClockPicker date={dayjs()} onChange={handleTimeChange} />
+<TimeClock value={dayjs()} onChange={handleTimeChange} />
-<CalendarPicker date={dayjs()} onChange={handleDateChange} />
+<DateCalendar value={dayjs()} onChange={handleDateChange} />
Rename remaining private components
Previously we had 4 component names with Private prefix in order to avoid breaking changes in v5.
These components were renamed:
PrivatePickersMonth->MuiPickersMonthPrivatePickersSlideTransition->MuiPickersSlideTransitionPrivatePickersToolbarText->MuiPickersToolbarTextPrivatePickersYear->MuiPickersYear
Manual style overriding will need to use updated classes:
-.PrivatePickersMonth-root {
+.MuiPickersMonth-root {
-.PrivatePickersSlideTransition-root {
+.MuiPickersSlideTransition-root {
-.PrivatePickersToolbarText-root {
+.MuiPickersToolbarText-root {
-.PrivatePickersYear-root {
+.MuiPickersYear-root {
Component name changes are also reflected in themeAugmentation:
const theme = createTheme({
components: {
- PrivatePickersMonth: {
+ MuiPickersMonth: {
// overrides
},
- PrivatePickersSlideTransition: {
+ MuiPickersSlideTransition: {
// overrides
},
- PrivatePickersToolbarText: {
+ MuiPickersToolbarText: {
// overrides
},
- PrivatePickersYear: {
+ MuiPickersYear: {
// overrides
},
},
});