@mui/x-date-pickers 6.7.0 → 6.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AdapterDayjs/AdapterDayjs.d.ts +5 -1
- package/AdapterDayjs/AdapterDayjs.js +42 -15
- package/AdapterLuxon/AdapterLuxon.d.ts +1 -0
- package/AdapterLuxon/AdapterLuxon.js +12 -5
- package/AdapterMoment/AdapterMoment.js +18 -9
- package/CHANGELOG.md +145 -5541
- package/DateCalendar/DateCalendar.js +49 -21
- package/DateCalendar/DateCalendar.types.d.ts +8 -3
- package/DateCalendar/DayCalendar.d.ts +3 -1
- package/DateCalendar/DayCalendar.js +24 -17
- package/DateCalendar/PickersCalendarHeader.js +6 -3
- package/DateCalendar/useCalendarState.d.ts +5 -3
- package/DateCalendar/useCalendarState.js +41 -17
- package/DateCalendar/useIsDateDisabled.d.ts +1 -1
- package/DateCalendar/useIsDateDisabled.js +5 -3
- package/DateField/DateField.js +9 -1
- package/DatePicker/DatePicker.js +9 -1
- package/DateTimeField/DateTimeField.js +9 -1
- package/DateTimePicker/DateTimePicker.js +9 -1
- package/DesktopDatePicker/DesktopDatePicker.js +9 -1
- package/DesktopDateTimePicker/DesktopDateTimePicker.js +9 -1
- package/DesktopTimePicker/DesktopTimePicker.js +8 -0
- package/DigitalClock/DigitalClock.js +28 -15
- package/MobileDatePicker/MobileDatePicker.js +9 -1
- package/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
- package/MobileTimePicker/MobileTimePicker.js +8 -0
- package/MonthCalendar/MonthCalendar.js +57 -24
- package/MonthCalendar/MonthCalendar.types.d.ts +8 -2
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +28 -15
- package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -1
- package/PickersLayout/PickersLayout.js +1 -0
- package/PickersLayout/usePickerLayout.js +4 -3
- package/PickersShortcuts/PickersShortcuts.d.ts +12 -2
- package/PickersShortcuts/PickersShortcuts.js +10 -2
- package/PickersShortcuts/index.d.ts +1 -1
- package/StaticDatePicker/StaticDatePicker.js +9 -1
- package/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
- package/StaticTimePicker/StaticTimePicker.js +8 -0
- package/TimeClock/TimeClock.js +27 -15
- package/TimeField/TimeField.js +9 -1
- package/TimePicker/TimePicker.js +8 -0
- package/YearCalendar/YearCalendar.js +55 -22
- package/YearCalendar/YearCalendar.types.d.ts +8 -2
- package/dateTimeViewRenderers/dateTimeViewRenderers.d.ts +1 -1
- package/dateTimeViewRenderers/dateTimeViewRenderers.js +5 -2
- package/dateViewRenderers/dateViewRenderers.d.ts +1 -1
- package/dateViewRenderers/dateViewRenderers.js +4 -2
- package/index.js +1 -1
- package/internals/hooks/date-helpers-hooks.d.ts +4 -2
- package/internals/hooks/date-helpers-hooks.js +8 -6
- package/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
- package/internals/hooks/useField/useField.d.ts +3 -1
- package/internals/hooks/useField/useField.js +23 -7
- package/internals/hooks/useField/useField.types.d.ts +6 -4
- package/internals/hooks/useField/useField.utils.d.ts +13 -11
- package/internals/hooks/useField/useField.utils.js +55 -43
- package/internals/hooks/useField/useFieldCharacterEditing.d.ts +3 -2
- package/internals/hooks/useField/useFieldCharacterEditing.js +6 -5
- package/internals/hooks/useField/useFieldState.d.ts +1 -0
- package/internals/hooks/useField/useFieldState.js +33 -23
- package/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
- package/internals/hooks/usePicker/usePickerValue.js +45 -9
- package/internals/hooks/usePicker/usePickerValue.types.d.ts +22 -6
- package/internals/hooks/usePicker/usePickerViews.d.ts +2 -1
- package/internals/hooks/usePicker/usePickerViews.js +7 -2
- package/internals/hooks/useUtils.d.ts +3 -2
- package/internals/hooks/useUtils.js +5 -2
- package/internals/hooks/useValueWithTimezone.d.ts +33 -0
- package/internals/hooks/useValueWithTimezone.js +69 -0
- package/internals/index.d.ts +1 -0
- package/internals/index.js +1 -0
- package/internals/models/props/clock.d.ts +2 -2
- package/internals/utils/date-utils.d.ts +4 -4
- package/internals/utils/date-utils.js +4 -12
- package/internals/utils/fields.js +1 -1
- package/internals/utils/getDefaultReferenceDate.d.ts +12 -3
- package/internals/utils/getDefaultReferenceDate.js +4 -4
- package/internals/utils/validation/extractValidationProps.d.ts +1 -1
- package/internals/utils/validation/validateDate.d.ts +3 -2
- package/internals/utils/validation/validateDate.js +14 -6
- package/internals/utils/validation/validateTime.d.ts +3 -2
- package/internals/utils/validation/validateTime.js +8 -8
- package/internals/utils/valueManagers.js +2 -1
- package/legacy/AdapterDayjs/AdapterDayjs.js +45 -16
- package/legacy/AdapterLuxon/AdapterLuxon.js +13 -6
- package/legacy/AdapterMoment/AdapterMoment.js +18 -9
- package/legacy/DateCalendar/DateCalendar.js +47 -24
- package/legacy/DateCalendar/DayCalendar.js +24 -17
- package/legacy/DateCalendar/PickersCalendarHeader.js +6 -3
- package/legacy/DateCalendar/useCalendarState.js +40 -17
- package/legacy/DateCalendar/useIsDateDisabled.js +5 -3
- package/legacy/DateField/DateField.js +9 -1
- package/legacy/DatePicker/DatePicker.js +9 -1
- package/legacy/DateTimeField/DateTimeField.js +9 -1
- package/legacy/DateTimePicker/DateTimePicker.js +9 -1
- package/legacy/DesktopDatePicker/DesktopDatePicker.js +9 -1
- package/legacy/DesktopDateTimePicker/DesktopDateTimePicker.js +9 -1
- package/legacy/DesktopTimePicker/DesktopTimePicker.js +8 -0
- package/legacy/DigitalClock/DigitalClock.js +26 -16
- package/legacy/MobileDatePicker/MobileDatePicker.js +9 -1
- package/legacy/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
- package/legacy/MobileTimePicker/MobileTimePicker.js +8 -0
- package/legacy/MonthCalendar/MonthCalendar.js +61 -32
- package/legacy/MultiSectionDigitalClock/MultiSectionDigitalClock.js +27 -16
- package/legacy/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -1
- package/legacy/PickersLayout/PickersLayout.js +1 -0
- package/legacy/PickersLayout/usePickerLayout.js +3 -2
- package/legacy/PickersShortcuts/PickersShortcuts.js +10 -2
- package/legacy/StaticDatePicker/StaticDatePicker.js +9 -1
- package/legacy/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
- package/legacy/StaticTimePicker/StaticTimePicker.js +8 -0
- package/legacy/TimeClock/TimeClock.js +25 -18
- package/legacy/TimeField/TimeField.js +9 -1
- package/legacy/TimePicker/TimePicker.js +8 -0
- package/legacy/YearCalendar/YearCalendar.js +59 -30
- package/legacy/dateTimeViewRenderers/dateTimeViewRenderers.js +5 -2
- package/legacy/dateViewRenderers/dateViewRenderers.js +4 -2
- package/legacy/index.js +1 -1
- package/legacy/internals/hooks/date-helpers-hooks.js +8 -6
- package/legacy/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
- package/legacy/internals/hooks/useField/useField.js +22 -6
- package/legacy/internals/hooks/useField/useField.utils.js +56 -44
- package/legacy/internals/hooks/useField/useFieldCharacterEditing.js +6 -5
- package/legacy/internals/hooks/useField/useFieldState.js +42 -33
- package/legacy/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
- package/legacy/internals/hooks/usePicker/usePickerValue.js +46 -9
- package/legacy/internals/hooks/usePicker/usePickerViews.js +7 -2
- package/legacy/internals/hooks/useUtils.js +5 -2
- package/legacy/internals/hooks/useValueWithTimezone.js +81 -0
- package/legacy/internals/index.js +1 -0
- package/legacy/internals/utils/date-utils.js +5 -13
- package/legacy/internals/utils/fields.js +1 -1
- package/legacy/internals/utils/getDefaultReferenceDate.js +4 -4
- package/legacy/internals/utils/validation/validateDate.js +12 -6
- package/legacy/internals/utils/validation/validateTime.js +8 -8
- package/legacy/internals/utils/valueManagers.js +3 -0
- package/legacy/locales/csCZ.js +2 -2
- package/legacy/locales/elGR.js +93 -0
- package/legacy/locales/index.js +1 -0
- package/legacy/tests/describeAdapters/describeAdapters.js +3 -1
- package/legacy/tests/describeGregorianAdapter/testCalculations.js +69 -27
- package/legacy/tests/describeJalaliAdapter/testCalculations.js +21 -0
- package/legacy/timeViewRenderers/timeViewRenderers.js +12 -6
- package/locales/csCZ.js +2 -2
- package/locales/elGR.d.ts +53 -0
- package/locales/elGR.js +57 -0
- package/locales/index.d.ts +1 -0
- package/locales/index.js +1 -0
- package/models/adapters.d.ts +2 -2
- package/models/timezone.d.ts +10 -0
- package/modern/AdapterDayjs/AdapterDayjs.js +41 -15
- package/modern/AdapterLuxon/AdapterLuxon.js +12 -4
- package/modern/AdapterMoment/AdapterMoment.js +18 -9
- package/modern/DateCalendar/DateCalendar.js +49 -21
- package/modern/DateCalendar/DayCalendar.js +24 -17
- package/modern/DateCalendar/PickersCalendarHeader.js +6 -3
- package/modern/DateCalendar/useCalendarState.js +41 -16
- package/modern/DateCalendar/useIsDateDisabled.js +5 -3
- package/modern/DateField/DateField.js +9 -1
- package/modern/DatePicker/DatePicker.js +9 -1
- package/modern/DateTimeField/DateTimeField.js +9 -1
- package/modern/DateTimePicker/DateTimePicker.js +9 -1
- package/modern/DesktopDatePicker/DesktopDatePicker.js +9 -1
- package/modern/DesktopDateTimePicker/DesktopDateTimePicker.js +9 -1
- package/modern/DesktopTimePicker/DesktopTimePicker.js +8 -0
- package/modern/DigitalClock/DigitalClock.js +28 -15
- package/modern/MobileDatePicker/MobileDatePicker.js +9 -1
- package/modern/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
- package/modern/MobileTimePicker/MobileTimePicker.js +8 -0
- package/modern/MonthCalendar/MonthCalendar.js +57 -24
- package/modern/MultiSectionDigitalClock/MultiSectionDigitalClock.js +28 -15
- package/modern/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -1
- package/modern/PickersLayout/PickersLayout.js +1 -0
- package/modern/PickersLayout/usePickerLayout.js +4 -3
- package/modern/PickersShortcuts/PickersShortcuts.js +10 -2
- package/modern/StaticDatePicker/StaticDatePicker.js +9 -1
- package/modern/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
- package/modern/StaticTimePicker/StaticTimePicker.js +8 -0
- package/modern/TimeClock/TimeClock.js +27 -15
- package/modern/TimeField/TimeField.js +9 -1
- package/modern/TimePicker/TimePicker.js +8 -0
- package/modern/YearCalendar/YearCalendar.js +55 -22
- package/modern/dateTimeViewRenderers/dateTimeViewRenderers.js +5 -2
- package/modern/dateViewRenderers/dateViewRenderers.js +4 -2
- package/modern/index.js +1 -1
- package/modern/internals/hooks/date-helpers-hooks.js +8 -6
- package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
- package/modern/internals/hooks/useField/useField.js +23 -7
- package/modern/internals/hooks/useField/useField.utils.js +55 -43
- package/modern/internals/hooks/useField/useFieldCharacterEditing.js +6 -5
- package/modern/internals/hooks/useField/useFieldState.js +33 -22
- package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
- package/modern/internals/hooks/usePicker/usePickerValue.js +45 -9
- package/modern/internals/hooks/usePicker/usePickerViews.js +7 -2
- package/modern/internals/hooks/useUtils.js +5 -2
- package/modern/internals/hooks/useValueWithTimezone.js +68 -0
- package/modern/internals/index.js +1 -0
- package/modern/internals/utils/date-utils.js +4 -12
- package/modern/internals/utils/fields.js +1 -1
- package/modern/internals/utils/getDefaultReferenceDate.js +4 -4
- package/modern/internals/utils/validation/validateDate.js +14 -6
- package/modern/internals/utils/validation/validateTime.js +8 -8
- package/modern/internals/utils/valueManagers.js +2 -1
- package/modern/locales/csCZ.js +2 -2
- package/modern/locales/elGR.js +57 -0
- package/modern/locales/index.js +1 -0
- package/modern/tests/describeAdapters/describeAdapters.js +3 -1
- package/modern/tests/describeGregorianAdapter/testCalculations.js +69 -27
- package/modern/tests/describeJalaliAdapter/testCalculations.js +21 -0
- package/modern/timeViewRenderers/timeViewRenderers.js +12 -6
- package/node/AdapterDayjs/AdapterDayjs.js +41 -15
- package/node/AdapterLuxon/AdapterLuxon.js +12 -4
- package/node/AdapterMoment/AdapterMoment.js +18 -9
- package/node/DateCalendar/DateCalendar.js +48 -20
- package/node/DateCalendar/DayCalendar.js +24 -17
- package/node/DateCalendar/PickersCalendarHeader.js +6 -3
- package/node/DateCalendar/useCalendarState.js +41 -16
- package/node/DateCalendar/useIsDateDisabled.js +5 -3
- package/node/DateField/DateField.js +9 -1
- package/node/DatePicker/DatePicker.js +9 -1
- package/node/DateTimeField/DateTimeField.js +9 -1
- package/node/DateTimePicker/DateTimePicker.js +9 -1
- package/node/DesktopDatePicker/DesktopDatePicker.js +9 -1
- package/node/DesktopDateTimePicker/DesktopDateTimePicker.js +9 -1
- package/node/DesktopTimePicker/DesktopTimePicker.js +8 -0
- package/node/DigitalClock/DigitalClock.js +28 -15
- package/node/MobileDatePicker/MobileDatePicker.js +9 -1
- package/node/MobileDateTimePicker/MobileDateTimePicker.js +9 -1
- package/node/MobileTimePicker/MobileTimePicker.js +8 -0
- package/node/MonthCalendar/MonthCalendar.js +57 -24
- package/node/MultiSectionDigitalClock/MultiSectionDigitalClock.js +28 -15
- package/node/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +1 -1
- package/node/PickersLayout/PickersLayout.js +1 -0
- package/node/PickersLayout/usePickerLayout.js +4 -3
- package/node/PickersShortcuts/PickersShortcuts.js +10 -2
- package/node/StaticDatePicker/StaticDatePicker.js +9 -1
- package/node/StaticDateTimePicker/StaticDateTimePicker.js +9 -1
- package/node/StaticTimePicker/StaticTimePicker.js +8 -0
- package/node/TimeClock/TimeClock.js +26 -14
- package/node/TimeField/TimeField.js +9 -1
- package/node/TimePicker/TimePicker.js +8 -0
- package/node/YearCalendar/YearCalendar.js +55 -22
- package/node/dateTimeViewRenderers/dateTimeViewRenderers.js +5 -2
- package/node/dateViewRenderers/dateViewRenderers.js +4 -2
- package/node/index.js +1 -1
- package/node/internals/hooks/date-helpers-hooks.js +8 -6
- package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +2 -0
- package/node/internals/hooks/useField/useField.js +23 -7
- package/node/internals/hooks/useField/useField.utils.js +55 -43
- package/node/internals/hooks/useField/useFieldCharacterEditing.js +6 -5
- package/node/internals/hooks/useField/useFieldState.js +33 -22
- package/node/internals/hooks/useMobilePicker/useMobilePicker.js +2 -0
- package/node/internals/hooks/usePicker/usePickerValue.js +44 -9
- package/node/internals/hooks/usePicker/usePickerViews.js +7 -2
- package/node/internals/hooks/useUtils.js +5 -2
- package/node/internals/hooks/useValueWithTimezone.js +79 -0
- package/node/internals/index.js +7 -0
- package/node/internals/utils/date-utils.js +5 -14
- package/node/internals/utils/fields.js +1 -1
- package/node/internals/utils/getDefaultReferenceDate.js +5 -4
- package/node/internals/utils/validation/validateDate.js +14 -6
- package/node/internals/utils/validation/validateTime.js +8 -8
- package/node/internals/utils/valueManagers.js +2 -1
- package/node/locales/csCZ.js +2 -2
- package/node/locales/elGR.js +64 -0
- package/node/locales/index.js +11 -0
- package/node/tests/describeAdapters/describeAdapters.js +3 -1
- package/node/tests/describeGregorianAdapter/testCalculations.js +69 -27
- package/node/tests/describeJalaliAdapter/testCalculations.js +21 -0
- package/node/timeViewRenderers/timeViewRenderers.js +12 -6
- package/package.json +2 -2
- package/tests/describeAdapters/describeAdapters.js +3 -1
- package/tests/describeGregorianAdapter/testCalculations.js +69 -27
- package/tests/describeJalaliAdapter/testCalculations.js +21 -0
- package/timeViewRenderers/timeViewRenderers.d.ts +3 -3
- package/timeViewRenderers/timeViewRenderers.js +12 -6
|
@@ -191,9 +191,27 @@ class AdapterDayjs {
|
|
|
191
191
|
const comparingInValueTimezone = this.setTimezone(comparing, this.getTimezone(value));
|
|
192
192
|
return value.format(comparisonTemplate) === comparingInValueTimezone.format(comparisonTemplate);
|
|
193
193
|
};
|
|
194
|
+
/**
|
|
195
|
+
* Replace "default" by undefined before passing it to `dayjs
|
|
196
|
+
*/
|
|
197
|
+
this.cleanTimezone = timezone => timezone === 'default' ? undefined : timezone;
|
|
194
198
|
this.createSystemDate = value => {
|
|
195
199
|
// TODO v7: Stop using `this.rawDayJsInstance` (drop the `instance` param on the adapters)
|
|
196
|
-
|
|
200
|
+
/* istanbul ignore next */
|
|
201
|
+
if (this.rawDayJsInstance) {
|
|
202
|
+
return this.rawDayJsInstance(value);
|
|
203
|
+
}
|
|
204
|
+
if (this.hasUTCPlugin() && this.hasTimezonePlugin()) {
|
|
205
|
+
const timezone = _dayjs.default.tz.guess();
|
|
206
|
+
|
|
207
|
+
// We can't change the system timezone in the tests
|
|
208
|
+
/* istanbul ignore next */
|
|
209
|
+
if (timezone !== 'UTC') {
|
|
210
|
+
return _dayjs.default.tz(value, timezone);
|
|
211
|
+
}
|
|
212
|
+
return (0, _dayjs.default)(value);
|
|
213
|
+
}
|
|
214
|
+
return (0, _dayjs.default)(value);
|
|
197
215
|
};
|
|
198
216
|
this.createUTCDate = value => {
|
|
199
217
|
/* istanbul ignore next */
|
|
@@ -212,9 +230,8 @@ class AdapterDayjs {
|
|
|
212
230
|
if (!this.hasTimezonePlugin()) {
|
|
213
231
|
throw new Error(MISSING_TIMEZONE_PLUGIN);
|
|
214
232
|
}
|
|
215
|
-
const cleanTimezone = timezone === 'default' ? undefined : timezone;
|
|
216
233
|
const keepLocalTime = value !== undefined && !value.endsWith('Z');
|
|
217
|
-
return (0, _dayjs.default)(value).tz(cleanTimezone, keepLocalTime);
|
|
234
|
+
return (0, _dayjs.default)(value).tz(this.cleanTimezone(timezone), keepLocalTime);
|
|
218
235
|
};
|
|
219
236
|
this.getLocaleFormats = () => {
|
|
220
237
|
const locales = _dayjs.default.Ls;
|
|
@@ -271,11 +288,12 @@ class AdapterDayjs {
|
|
|
271
288
|
}
|
|
272
289
|
return value.utc();
|
|
273
290
|
}
|
|
291
|
+
|
|
292
|
+
// We know that we have the UTC plugin.
|
|
293
|
+
// Otherwise, the value timezone would always equal "system".
|
|
294
|
+
// And it would be caught by the first "if" of this method.
|
|
274
295
|
if (timezone === 'system') {
|
|
275
|
-
|
|
276
|
-
return value.local();
|
|
277
|
-
}
|
|
278
|
-
return value;
|
|
296
|
+
return value.local();
|
|
279
297
|
}
|
|
280
298
|
if (!this.hasTimezonePlugin()) {
|
|
281
299
|
if (timezone === 'default') {
|
|
@@ -285,8 +303,7 @@ class AdapterDayjs {
|
|
|
285
303
|
/* istanbul ignore next */
|
|
286
304
|
throw new Error(MISSING_TIMEZONE_PLUGIN);
|
|
287
305
|
}
|
|
288
|
-
|
|
289
|
-
return _dayjs.default.tz(value, cleanZone);
|
|
306
|
+
return _dayjs.default.tz(value, this.cleanTimezone(timezone));
|
|
290
307
|
};
|
|
291
308
|
this.toJsDate = value => {
|
|
292
309
|
return value.toDate();
|
|
@@ -345,7 +362,7 @@ class AdapterDayjs {
|
|
|
345
362
|
if (value === null && comparing === null) {
|
|
346
363
|
return true;
|
|
347
364
|
}
|
|
348
|
-
return this.dayjs(value).
|
|
365
|
+
return this.dayjs(value).toDate().getTime() === this.dayjs(comparing).toDate().getTime();
|
|
349
366
|
};
|
|
350
367
|
this.isSameYear = (value, comparing) => {
|
|
351
368
|
return this.isSame(value, comparing, 'YYYY');
|
|
@@ -505,9 +522,10 @@ class AdapterDayjs {
|
|
|
505
522
|
return [0, 1, 2, 3, 4, 5, 6].map(diff => this.formatByString(start.add(diff, 'day'), 'dd'));
|
|
506
523
|
};
|
|
507
524
|
this.getWeekArray = value => {
|
|
508
|
-
const
|
|
509
|
-
const
|
|
510
|
-
const
|
|
525
|
+
const timezone = this.getTimezone(value);
|
|
526
|
+
const cleanValue = this.setLocaleToValue(value);
|
|
527
|
+
const start = cleanValue.startOf('month').startOf('week');
|
|
528
|
+
const end = cleanValue.endOf('month').endOf('week');
|
|
511
529
|
let count = 0;
|
|
512
530
|
let current = start;
|
|
513
531
|
const nestedWeeks = [];
|
|
@@ -516,6 +534,14 @@ class AdapterDayjs {
|
|
|
516
534
|
nestedWeeks[weekNumber] = nestedWeeks[weekNumber] || [];
|
|
517
535
|
nestedWeeks[weekNumber].push(current);
|
|
518
536
|
current = current.add(1, 'day');
|
|
537
|
+
|
|
538
|
+
// If the new day does not have the same offset as the old one (when switching to summer day time for example),
|
|
539
|
+
// Then dayjs will not automatically adjust the offset (moment does)
|
|
540
|
+
// We have to parse again the value to make sure the `fixOffset` method is applied
|
|
541
|
+
// See https://github.com/iamkun/dayjs/blob/b3624de619d6e734cd0ffdbbd3502185041c1b60/src/plugin/timezone/index.js#L72
|
|
542
|
+
if (this.hasTimezonePlugin() && timezone !== 'UTC' && timezone !== 'system') {
|
|
543
|
+
current = current.tz(this.cleanTimezone(timezone), true);
|
|
544
|
+
}
|
|
519
545
|
count += 1;
|
|
520
546
|
}
|
|
521
547
|
return nestedWeeks;
|
|
@@ -537,8 +563,8 @@ class AdapterDayjs {
|
|
|
537
563
|
this.getMeridiemText = ampm => {
|
|
538
564
|
return ampm === 'am' ? 'AM' : 'PM';
|
|
539
565
|
};
|
|
540
|
-
this.rawDayJsInstance = instance
|
|
541
|
-
this.dayjs = withLocale(this.rawDayJsInstance, _locale);
|
|
566
|
+
this.rawDayJsInstance = instance;
|
|
567
|
+
this.dayjs = withLocale(this.rawDayJsInstance ?? _dayjs.default, _locale);
|
|
542
568
|
this.locale = _locale;
|
|
543
569
|
this.formats = (0, _extends2.default)({}, defaultFormats, formats);
|
|
544
570
|
_dayjs.default.extend(_weekOfYear.default);
|
|
@@ -186,6 +186,13 @@ class AdapterLuxon {
|
|
|
186
186
|
end: "'"
|
|
187
187
|
};
|
|
188
188
|
this.formatTokenMap = formatTokenMap;
|
|
189
|
+
this.setLocaleToValue = value => {
|
|
190
|
+
const expectedLocale = this.getCurrentLocaleCode();
|
|
191
|
+
if (expectedLocale === value.locale) {
|
|
192
|
+
return value;
|
|
193
|
+
}
|
|
194
|
+
return value.setLocale(expectedLocale);
|
|
195
|
+
};
|
|
189
196
|
this.date = value => {
|
|
190
197
|
if (typeof value === 'undefined') {
|
|
191
198
|
return _luxon.DateTime.local();
|
|
@@ -231,7 +238,7 @@ class AdapterLuxon {
|
|
|
231
238
|
if (value.zone.type === 'system') {
|
|
232
239
|
return 'system';
|
|
233
240
|
}
|
|
234
|
-
return value.zoneName
|
|
241
|
+
return value.zoneName;
|
|
235
242
|
};
|
|
236
243
|
this.setTimezone = (value, timezone) => {
|
|
237
244
|
if (!value.zone.equals(_luxon.Info.normalizeZone(timezone))) {
|
|
@@ -246,7 +253,7 @@ class AdapterLuxon {
|
|
|
246
253
|
return _luxon.DateTime.fromISO(isoString);
|
|
247
254
|
};
|
|
248
255
|
this.toISO = value => {
|
|
249
|
-
return value.toISO({
|
|
256
|
+
return value.toUTC().toISO({
|
|
250
257
|
format: 'extended'
|
|
251
258
|
});
|
|
252
259
|
};
|
|
@@ -528,11 +535,12 @@ class AdapterLuxon {
|
|
|
528
535
|
});
|
|
529
536
|
};
|
|
530
537
|
this.getWeekArray = value => {
|
|
538
|
+
const cleanValue = this.setLocaleToValue(value);
|
|
531
539
|
const {
|
|
532
540
|
days
|
|
533
|
-
} =
|
|
541
|
+
} = cleanValue.endOf('month').endOf('week').diff(cleanValue.startOf('month').startOf('week'), 'days').toObject();
|
|
534
542
|
const weeks = [];
|
|
535
|
-
new Array(Math.round(days)).fill(0).map((_, i) => i).map(day =>
|
|
543
|
+
new Array(Math.round(days)).fill(0).map((_, i) => i).map(day => cleanValue.startOf('month').startOf('week').plus({
|
|
536
544
|
days: day
|
|
537
545
|
})).forEach((v, i) => {
|
|
538
546
|
if (i === 0 || i % 7 === 0 && i > 6) {
|
|
@@ -14,7 +14,11 @@ const formatTokenMap = {
|
|
|
14
14
|
// Year
|
|
15
15
|
Y: 'year',
|
|
16
16
|
YY: 'year',
|
|
17
|
-
YYYY:
|
|
17
|
+
YYYY: {
|
|
18
|
+
sectionType: 'year',
|
|
19
|
+
contentType: 'digit',
|
|
20
|
+
maxLength: 4
|
|
21
|
+
},
|
|
18
22
|
// Month
|
|
19
23
|
M: {
|
|
20
24
|
sectionType: 'month',
|
|
@@ -240,6 +244,9 @@ class AdapterMoment {
|
|
|
240
244
|
return zone ?? this.moment.defaultZone?.name ?? 'system';
|
|
241
245
|
};
|
|
242
246
|
this.setTimezone = (value, timezone) => {
|
|
247
|
+
if (this.getTimezone(value) === timezone) {
|
|
248
|
+
return value;
|
|
249
|
+
}
|
|
243
250
|
if (timezone === 'UTC') {
|
|
244
251
|
return value.clone().utc();
|
|
245
252
|
}
|
|
@@ -247,16 +254,18 @@ class AdapterMoment {
|
|
|
247
254
|
return value.clone().local();
|
|
248
255
|
}
|
|
249
256
|
if (!this.hasTimezonePlugin()) {
|
|
250
|
-
if (timezone === 'default') {
|
|
251
|
-
return value;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
257
|
/* istanbul ignore next */
|
|
255
|
-
|
|
258
|
+
if (timezone !== 'default') {
|
|
259
|
+
throw new Error(MISSING_TIMEZONE_PLUGIN);
|
|
260
|
+
}
|
|
261
|
+
return value;
|
|
256
262
|
}
|
|
257
263
|
const cleanZone = timezone === 'default' ?
|
|
258
264
|
// @ts-ignore
|
|
259
265
|
this.moment.defaultZone?.name ?? 'system' : timezone;
|
|
266
|
+
if (cleanZone === 'system') {
|
|
267
|
+
return value.clone().local();
|
|
268
|
+
}
|
|
260
269
|
const newValue = value.clone();
|
|
261
270
|
newValue.tz(cleanZone);
|
|
262
271
|
return newValue;
|
|
@@ -470,9 +479,9 @@ class AdapterMoment {
|
|
|
470
479
|
return _moment.default.weekdaysShort(true);
|
|
471
480
|
};
|
|
472
481
|
this.getWeekArray = value => {
|
|
473
|
-
const
|
|
474
|
-
const start =
|
|
475
|
-
const end =
|
|
482
|
+
const cleanValue = this.setLocaleToValue(value);
|
|
483
|
+
const start = cleanValue.clone().startOf('month').startOf('week');
|
|
484
|
+
const end = cleanValue.clone().endOf('month').endOf('week');
|
|
476
485
|
let count = 0;
|
|
477
486
|
let current = start;
|
|
478
487
|
const nestedWeeks = [];
|
|
@@ -24,8 +24,10 @@ var _dateUtils = require("../internals/utils/date-utils");
|
|
|
24
24
|
var _PickerViewRoot = require("../internals/components/PickerViewRoot");
|
|
25
25
|
var _defaultReduceAnimations = require("../internals/utils/defaultReduceAnimations");
|
|
26
26
|
var _dateCalendarClasses = require("./dateCalendarClasses");
|
|
27
|
+
var _useValueWithTimezone = require("../internals/hooks/useValueWithTimezone");
|
|
28
|
+
var _valueManagers = require("../internals/utils/valueManagers");
|
|
27
29
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
28
|
-
const _excluded = ["autoFocus", "onViewChange", "value", "defaultValue", "disableFuture", "disablePast", "defaultCalendarMonth", "onChange", "onYearChange", "onMonthChange", "reduceAnimations", "shouldDisableDate", "shouldDisableMonth", "shouldDisableYear", "view", "views", "openTo", "className", "disabled", "readOnly", "minDate", "maxDate", "disableHighlightToday", "focusedView", "onFocusedViewChange", "showDaysOutsideCurrentMonth", "fixedWeekNumber", "dayOfWeekFormatter", "components", "componentsProps", "slots", "slotProps", "loading", "renderLoading", "displayWeekNumber", "yearsPerRow", "monthsPerRow"];
|
|
30
|
+
const _excluded = ["autoFocus", "onViewChange", "value", "defaultValue", "referenceDate", "disableFuture", "disablePast", "defaultCalendarMonth", "onChange", "onYearChange", "onMonthChange", "reduceAnimations", "shouldDisableDate", "shouldDisableMonth", "shouldDisableYear", "view", "views", "openTo", "className", "disabled", "readOnly", "minDate", "maxDate", "disableHighlightToday", "focusedView", "onFocusedViewChange", "showDaysOutsideCurrentMonth", "fixedWeekNumber", "dayOfWeekFormatter", "components", "componentsProps", "slots", "slotProps", "loading", "renderLoading", "displayWeekNumber", "yearsPerRow", "monthsPerRow", "timezone"];
|
|
29
31
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
30
32
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
33
|
const useUtilityClasses = ownerState => {
|
|
@@ -92,6 +94,7 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
92
94
|
onViewChange,
|
|
93
95
|
value: valueProp,
|
|
94
96
|
defaultValue,
|
|
97
|
+
referenceDate: referenceDateProp,
|
|
95
98
|
disableFuture,
|
|
96
99
|
disablePast,
|
|
97
100
|
defaultCalendarMonth,
|
|
@@ -124,18 +127,21 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
124
127
|
renderLoading,
|
|
125
128
|
displayWeekNumber,
|
|
126
129
|
yearsPerRow,
|
|
127
|
-
monthsPerRow
|
|
130
|
+
monthsPerRow,
|
|
131
|
+
timezone: timezoneProp
|
|
128
132
|
} = props,
|
|
129
133
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
130
|
-
const
|
|
134
|
+
const {
|
|
135
|
+
value,
|
|
136
|
+
handleValueChange,
|
|
137
|
+
timezone
|
|
138
|
+
} = (0, _useValueWithTimezone.useControlledValueWithTimezone)({
|
|
131
139
|
name: 'DateCalendar',
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
setValue(newValue);
|
|
138
|
-
onChange?.(newValue, selectionState);
|
|
140
|
+
timezone: timezoneProp,
|
|
141
|
+
value: valueProp,
|
|
142
|
+
defaultValue,
|
|
143
|
+
onChange,
|
|
144
|
+
valueManager: _valueManagers.singleItemValueManager
|
|
139
145
|
});
|
|
140
146
|
const {
|
|
141
147
|
view,
|
|
@@ -155,6 +161,7 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
155
161
|
onFocusedViewChange
|
|
156
162
|
});
|
|
157
163
|
const {
|
|
164
|
+
referenceDate,
|
|
158
165
|
calendarState,
|
|
159
166
|
changeFocusedDay,
|
|
160
167
|
changeMonth,
|
|
@@ -164,13 +171,15 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
164
171
|
} = (0, _useCalendarState.useCalendarState)({
|
|
165
172
|
value,
|
|
166
173
|
defaultCalendarMonth,
|
|
174
|
+
referenceDate: referenceDateProp,
|
|
167
175
|
reduceAnimations,
|
|
168
176
|
onMonthChange,
|
|
169
177
|
minDate,
|
|
170
178
|
maxDate,
|
|
171
179
|
shouldDisableDate,
|
|
172
180
|
disablePast,
|
|
173
|
-
disableFuture
|
|
181
|
+
disableFuture,
|
|
182
|
+
timezone
|
|
174
183
|
});
|
|
175
184
|
const handleDateMonthChange = (0, _utils.unstable_useEventCallback)(newDate => {
|
|
176
185
|
const startOfMonth = utils.startOfMonth(newDate);
|
|
@@ -182,7 +191,8 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
182
191
|
maxDate: utils.isAfter(maxDate, endOfMonth) ? endOfMonth : maxDate,
|
|
183
192
|
disablePast,
|
|
184
193
|
disableFuture,
|
|
185
|
-
isDateDisabled
|
|
194
|
+
isDateDisabled,
|
|
195
|
+
timezone
|
|
186
196
|
}) : newDate;
|
|
187
197
|
if (closestEnabledDate) {
|
|
188
198
|
setValueAndGoToNextView(closestEnabledDate, 'finish');
|
|
@@ -203,7 +213,8 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
203
213
|
maxDate: utils.isAfter(maxDate, endOfYear) ? endOfYear : maxDate,
|
|
204
214
|
disablePast,
|
|
205
215
|
disableFuture,
|
|
206
|
-
isDateDisabled
|
|
216
|
+
isDateDisabled,
|
|
217
|
+
timezone
|
|
207
218
|
}) : newDate;
|
|
208
219
|
if (closestEnabledDate) {
|
|
209
220
|
setValueAndGoToNextView(closestEnabledDate, 'finish');
|
|
@@ -215,9 +226,9 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
215
226
|
changeFocusedDay(closestEnabledDate, true);
|
|
216
227
|
});
|
|
217
228
|
const handleSelectedDayChange = (0, _utils.unstable_useEventCallback)(day => {
|
|
218
|
-
if (
|
|
229
|
+
if (day) {
|
|
219
230
|
// If there is a date already selected, then we want to keep its time
|
|
220
|
-
return handleValueChange((0, _dateUtils.mergeDateAndTime)(utils, day, value), 'finish');
|
|
231
|
+
return handleValueChange((0, _dateUtils.mergeDateAndTime)(utils, day, value ?? referenceDate), 'finish');
|
|
221
232
|
}
|
|
222
233
|
return handleValueChange(day, 'finish');
|
|
223
234
|
});
|
|
@@ -242,7 +253,8 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
242
253
|
const commonViewProps = {
|
|
243
254
|
disableHighlightToday,
|
|
244
255
|
readOnly,
|
|
245
|
-
disabled
|
|
256
|
+
disabled,
|
|
257
|
+
timezone
|
|
246
258
|
};
|
|
247
259
|
const gridLabelId = `${id}-grid-label`;
|
|
248
260
|
const hasFocus = focusedView !== null;
|
|
@@ -281,7 +293,8 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
281
293
|
reduceAnimations: reduceAnimations,
|
|
282
294
|
labelId: gridLabelId,
|
|
283
295
|
slots: slots,
|
|
284
|
-
slotProps: slotProps
|
|
296
|
+
slotProps: slotProps,
|
|
297
|
+
timezone: timezone
|
|
285
298
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(DateCalendarViewTransitionContainer, {
|
|
286
299
|
reduceAnimations: reduceAnimations,
|
|
287
300
|
className: classes.viewTransitionContainer,
|
|
@@ -294,7 +307,8 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
294
307
|
shouldDisableYear: shouldDisableYear,
|
|
295
308
|
hasFocus: hasFocus,
|
|
296
309
|
onFocusedViewChange: isViewFocused => setFocusedView('year', isViewFocused),
|
|
297
|
-
yearsPerRow: yearsPerRow
|
|
310
|
+
yearsPerRow: yearsPerRow,
|
|
311
|
+
referenceDate: referenceDate
|
|
298
312
|
})), view === 'month' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_MonthCalendar.MonthCalendar, (0, _extends2.default)({}, baseDateValidationProps, commonViewProps, {
|
|
299
313
|
hasFocus: hasFocus,
|
|
300
314
|
className: className,
|
|
@@ -302,7 +316,8 @@ const DateCalendar = /*#__PURE__*/React.forwardRef(function DateCalendar(inProps
|
|
|
302
316
|
onChange: handleDateMonthChange,
|
|
303
317
|
shouldDisableMonth: shouldDisableMonth,
|
|
304
318
|
onFocusedViewChange: isViewFocused => setFocusedView('month', isViewFocused),
|
|
305
|
-
monthsPerRow: monthsPerRow
|
|
319
|
+
monthsPerRow: monthsPerRow,
|
|
320
|
+
referenceDate: referenceDate
|
|
306
321
|
})), view === 'day' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_DayCalendar.DayCalendar, (0, _extends2.default)({}, calendarState, baseDateValidationProps, commonViewProps, {
|
|
307
322
|
onMonthSwitchingAnimationEnd: onMonthSwitchingAnimationEnd,
|
|
308
323
|
onFocusedDayChange: changeFocusedDay,
|
|
@@ -365,7 +380,7 @@ process.env.NODE_ENV !== "production" ? DateCalendar.propTypes = {
|
|
|
365
380
|
*/
|
|
366
381
|
dayOfWeekFormatter: _propTypes.default.func,
|
|
367
382
|
/**
|
|
368
|
-
* Default calendar month displayed when `value
|
|
383
|
+
* Default calendar month displayed when `value` and `defaultValue` are empty.
|
|
369
384
|
*/
|
|
370
385
|
defaultCalendarMonth: _propTypes.default.any,
|
|
371
386
|
/**
|
|
@@ -474,6 +489,11 @@ process.env.NODE_ENV !== "production" ? DateCalendar.propTypes = {
|
|
|
474
489
|
* @default typeof navigator !== 'undefined' && /(android)/i.test(navigator.userAgent)
|
|
475
490
|
*/
|
|
476
491
|
reduceAnimations: _propTypes.default.bool,
|
|
492
|
+
/**
|
|
493
|
+
* The date used to generate the new value when both `value` and `defaultValue` are empty.
|
|
494
|
+
* @default The closest valid date using the validation props, except callbacks such as `shouldDisableDate`.
|
|
495
|
+
*/
|
|
496
|
+
referenceDate: _propTypes.default.any,
|
|
477
497
|
/**
|
|
478
498
|
* Component displaying when passed `loading` true.
|
|
479
499
|
* @returns {React.ReactNode} The node to render when loading.
|
|
@@ -526,6 +546,14 @@ process.env.NODE_ENV !== "production" ? DateCalendar.propTypes = {
|
|
|
526
546
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
527
547
|
*/
|
|
528
548
|
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
|
|
549
|
+
/**
|
|
550
|
+
* Choose which timezone to use for the value.
|
|
551
|
+
* Example: "default", "system", "UTC", "America/New_York".
|
|
552
|
+
* If you pass values from other timezones to some props, they will be converted to this timezone before being used.
|
|
553
|
+
* @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documention} for more details.
|
|
554
|
+
* @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise.
|
|
555
|
+
*/
|
|
556
|
+
timezone: _propTypes.default.string,
|
|
529
557
|
/**
|
|
530
558
|
* The selected value.
|
|
531
559
|
* Used when the component is controlled.
|
|
@@ -146,8 +146,6 @@ function WrappedDay(_ref) {
|
|
|
146
146
|
isViewFocused
|
|
147
147
|
} = _ref,
|
|
148
148
|
other = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
|
|
149
|
-
const utils = (0, _useUtils.useUtils)();
|
|
150
|
-
const now = (0, _useUtils.useNow)();
|
|
151
149
|
const {
|
|
152
150
|
disabled,
|
|
153
151
|
disableHighlightToday,
|
|
@@ -156,8 +154,11 @@ function WrappedDay(_ref) {
|
|
|
156
154
|
components,
|
|
157
155
|
componentsProps,
|
|
158
156
|
slots,
|
|
159
|
-
slotProps
|
|
157
|
+
slotProps,
|
|
158
|
+
timezone
|
|
160
159
|
} = parentProps;
|
|
160
|
+
const utils = (0, _useUtils.useUtils)();
|
|
161
|
+
const now = (0, _useUtils.useNow)(timezone);
|
|
161
162
|
const isFocusableDay = focusableDay !== null && utils.isSameDay(day, focusableDay);
|
|
162
163
|
const isSelected = selectedDays.some(selectedDay => utils.isSameDay(selectedDay, day));
|
|
163
164
|
const isToday = utils.isSameDay(day, now);
|
|
@@ -215,15 +216,10 @@ function WrappedDay(_ref) {
|
|
|
215
216
|
* @ignore - do not document.
|
|
216
217
|
*/
|
|
217
218
|
function DayCalendar(inProps) {
|
|
218
|
-
const now = (0, _useUtils.useNow)();
|
|
219
|
-
const utils = (0, _useUtils.useUtils)();
|
|
220
219
|
const props = (0, _styles.useThemeProps)({
|
|
221
220
|
props: inProps,
|
|
222
221
|
name: 'MuiDayCalendar'
|
|
223
222
|
});
|
|
224
|
-
const classes = useUtilityClasses(props);
|
|
225
|
-
const theme = (0, _styles.useTheme)();
|
|
226
|
-
const isRTL = theme.direction === 'rtl';
|
|
227
223
|
const {
|
|
228
224
|
onFocusedDayChange,
|
|
229
225
|
className,
|
|
@@ -253,8 +249,14 @@ function DayCalendar(inProps) {
|
|
|
253
249
|
gridLabelId,
|
|
254
250
|
displayWeekNumber,
|
|
255
251
|
fixedWeekNumber,
|
|
256
|
-
autoFocus
|
|
252
|
+
autoFocus,
|
|
253
|
+
timezone
|
|
257
254
|
} = props;
|
|
255
|
+
const now = (0, _useUtils.useNow)(timezone);
|
|
256
|
+
const utils = (0, _useUtils.useUtils)();
|
|
257
|
+
const classes = useUtilityClasses(props);
|
|
258
|
+
const theme = (0, _styles.useTheme)();
|
|
259
|
+
const isRTL = theme.direction === 'rtl';
|
|
258
260
|
const isDateDisabled = (0, _useIsDateDisabled.useIsDateDisabled)({
|
|
259
261
|
shouldDisableDate,
|
|
260
262
|
shouldDisableMonth,
|
|
@@ -262,7 +264,8 @@ function DayCalendar(inProps) {
|
|
|
262
264
|
minDate,
|
|
263
265
|
maxDate,
|
|
264
266
|
disablePast,
|
|
265
|
-
disableFuture
|
|
267
|
+
disableFuture,
|
|
268
|
+
timezone
|
|
266
269
|
});
|
|
267
270
|
const localeText = (0, _useUtils.useLocaleText)();
|
|
268
271
|
const [internalHasFocus, setInternalHasFocus] = (0, _utils2.unstable_useControlled)({
|
|
@@ -305,7 +308,8 @@ function DayCalendar(inProps) {
|
|
|
305
308
|
date: newFocusedDayDefault,
|
|
306
309
|
minDate: isRTL ? newFocusedDayDefault : utils.startOfMonth(nextAvailableMonth),
|
|
307
310
|
maxDate: isRTL ? utils.endOfMonth(nextAvailableMonth) : newFocusedDayDefault,
|
|
308
|
-
isDateDisabled
|
|
311
|
+
isDateDisabled,
|
|
312
|
+
timezone
|
|
309
313
|
});
|
|
310
314
|
focusDay(closestDayToFocus || newFocusedDayDefault);
|
|
311
315
|
event.preventDefault();
|
|
@@ -320,7 +324,8 @@ function DayCalendar(inProps) {
|
|
|
320
324
|
date: newFocusedDayDefault,
|
|
321
325
|
minDate: isRTL ? utils.startOfMonth(nextAvailableMonth) : newFocusedDayDefault,
|
|
322
326
|
maxDate: isRTL ? newFocusedDayDefault : utils.endOfMonth(nextAvailableMonth),
|
|
323
|
-
isDateDisabled
|
|
327
|
+
isDateDisabled,
|
|
328
|
+
timezone
|
|
324
329
|
});
|
|
325
330
|
focusDay(closestDayToFocus || newFocusedDayDefault);
|
|
326
331
|
event.preventDefault();
|
|
@@ -371,14 +376,16 @@ function DayCalendar(inProps) {
|
|
|
371
376
|
maxDate: endOfMonth,
|
|
372
377
|
disablePast,
|
|
373
378
|
disableFuture,
|
|
374
|
-
isDateDisabled
|
|
379
|
+
isDateDisabled,
|
|
380
|
+
timezone
|
|
375
381
|
});
|
|
376
382
|
}
|
|
377
383
|
return internalFocusedDay;
|
|
378
|
-
}, [currentMonth, disableFuture, disablePast, internalFocusedDay, isDateDisabled, utils]);
|
|
384
|
+
}, [currentMonth, disableFuture, disablePast, internalFocusedDay, isDateDisabled, utils, timezone]);
|
|
379
385
|
const weeksToDisplay = React.useMemo(() => {
|
|
380
|
-
const
|
|
381
|
-
|
|
386
|
+
const currentMonthWithTimezone = utils.setTimezone(currentMonth, timezone);
|
|
387
|
+
const toDisplay = utils.getWeekArray(currentMonthWithTimezone);
|
|
388
|
+
let nextMonth = utils.addMonths(currentMonthWithTimezone, 1);
|
|
382
389
|
while (fixedWeekNumber && toDisplay.length < fixedWeekNumber) {
|
|
383
390
|
const additionalWeeks = utils.getWeekArray(nextMonth);
|
|
384
391
|
const hasCommonWeek = utils.isSameDay(toDisplay[toDisplay.length - 1][0], additionalWeeks[0][0]);
|
|
@@ -390,7 +397,7 @@ function DayCalendar(inProps) {
|
|
|
390
397
|
nextMonth = utils.addMonths(nextMonth, 1);
|
|
391
398
|
}
|
|
392
399
|
return toDisplay;
|
|
393
|
-
}, [currentMonth, fixedWeekNumber, utils]);
|
|
400
|
+
}, [currentMonth, fixedWeekNumber, utils, timezone]);
|
|
394
401
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
395
402
|
role: "grid",
|
|
396
403
|
"aria-labelledby": gridLabelId,
|
|
@@ -122,7 +122,8 @@ function PickersCalendarHeader(inProps) {
|
|
|
122
122
|
view,
|
|
123
123
|
reduceAnimations,
|
|
124
124
|
views,
|
|
125
|
-
labelId
|
|
125
|
+
labelId,
|
|
126
|
+
timezone
|
|
126
127
|
} = props;
|
|
127
128
|
const ownerState = props;
|
|
128
129
|
const classes = useUtilityClasses(props);
|
|
@@ -150,11 +151,13 @@ function PickersCalendarHeader(inProps) {
|
|
|
150
151
|
const selectPreviousMonth = () => onMonthChange(utils.addMonths(month, -1), 'right');
|
|
151
152
|
const isNextMonthDisabled = (0, _dateHelpersHooks.useNextMonthDisabled)(month, {
|
|
152
153
|
disableFuture,
|
|
153
|
-
maxDate
|
|
154
|
+
maxDate,
|
|
155
|
+
timezone
|
|
154
156
|
});
|
|
155
157
|
const isPreviousMonthDisabled = (0, _dateHelpersHooks.usePreviousMonthDisabled)(month, {
|
|
156
158
|
disablePast,
|
|
157
|
-
minDate
|
|
159
|
+
minDate,
|
|
160
|
+
timezone
|
|
158
161
|
});
|
|
159
162
|
const handleToggleView = () => {
|
|
160
163
|
if (views.length === 1 || !onViewChange || disabled) {
|
|
@@ -10,7 +10,8 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
10
10
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
11
11
|
var _useIsDateDisabled = require("./useIsDateDisabled");
|
|
12
12
|
var _useUtils = require("../internals/hooks/useUtils");
|
|
13
|
-
var
|
|
13
|
+
var _valueManagers = require("../internals/utils/valueManagers");
|
|
14
|
+
var _getDefaultReferenceDate = require("../internals/utils/getDefaultReferenceDate");
|
|
14
15
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
16
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
17
|
const createCalendarStateReducer = (reduceAnimations, disableSwitchToMonthOnDayFocus, utils) => (state, action) => {
|
|
@@ -43,25 +44,47 @@ const createCalendarStateReducer = (reduceAnimations, disableSwitchToMonthOnDayF
|
|
|
43
44
|
}
|
|
44
45
|
};
|
|
45
46
|
exports.createCalendarStateReducer = createCalendarStateReducer;
|
|
46
|
-
const useCalendarState =
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
47
|
+
const useCalendarState = params => {
|
|
48
|
+
const {
|
|
49
|
+
value,
|
|
50
|
+
referenceDate: referenceDateProp,
|
|
51
|
+
defaultCalendarMonth,
|
|
52
|
+
disableFuture,
|
|
53
|
+
disablePast,
|
|
54
|
+
disableSwitchToMonthOnDayFocus = false,
|
|
55
|
+
maxDate,
|
|
56
|
+
minDate,
|
|
57
|
+
onMonthChange,
|
|
58
|
+
reduceAnimations,
|
|
59
|
+
shouldDisableDate,
|
|
60
|
+
timezone
|
|
61
|
+
} = params;
|
|
62
|
+
const now = (0, _useUtils.useNow)(timezone);
|
|
59
63
|
const utils = (0, _useUtils.useUtils)();
|
|
60
64
|
const reducerFn = React.useRef(createCalendarStateReducer(Boolean(reduceAnimations), disableSwitchToMonthOnDayFocus, utils)).current;
|
|
65
|
+
const referenceDate = React.useMemo(() => {
|
|
66
|
+
let externalReferenceDate = null;
|
|
67
|
+
if (referenceDateProp) {
|
|
68
|
+
externalReferenceDate = referenceDateProp;
|
|
69
|
+
} else if (defaultCalendarMonth) {
|
|
70
|
+
// For `defaultCalendarMonth`, we just want to keep the month and the year to avoid a behavior change.
|
|
71
|
+
externalReferenceDate = utils.startOfMonth(defaultCalendarMonth);
|
|
72
|
+
}
|
|
73
|
+
return _valueManagers.singleItemValueManager.getInitialReferenceValue({
|
|
74
|
+
value,
|
|
75
|
+
utils,
|
|
76
|
+
timezone,
|
|
77
|
+
props: params,
|
|
78
|
+
referenceDate: externalReferenceDate,
|
|
79
|
+
granularity: _getDefaultReferenceDate.SECTION_TYPE_GRANULARITY.day
|
|
80
|
+
});
|
|
81
|
+
}, [] // eslint-disable-line react-hooks/exhaustive-deps
|
|
82
|
+
);
|
|
83
|
+
|
|
61
84
|
const [calendarState, dispatch] = React.useReducer(reducerFn, {
|
|
62
85
|
isMonthSwitchingAnimating: false,
|
|
63
86
|
focusedDay: value || now,
|
|
64
|
-
currentMonth: utils.startOfMonth(
|
|
87
|
+
currentMonth: utils.startOfMonth(referenceDate),
|
|
65
88
|
slideDirection: 'left'
|
|
66
89
|
});
|
|
67
90
|
const handleChangeMonth = React.useCallback(payload => {
|
|
@@ -87,7 +110,8 @@ const useCalendarState = ({
|
|
|
87
110
|
minDate,
|
|
88
111
|
maxDate,
|
|
89
112
|
disableFuture,
|
|
90
|
-
disablePast
|
|
113
|
+
disablePast,
|
|
114
|
+
timezone
|
|
91
115
|
});
|
|
92
116
|
const onMonthSwitchingAnimationEnd = React.useCallback(() => {
|
|
93
117
|
dispatch({
|
|
@@ -104,6 +128,7 @@ const useCalendarState = ({
|
|
|
104
128
|
}
|
|
105
129
|
});
|
|
106
130
|
return {
|
|
131
|
+
referenceDate,
|
|
107
132
|
calendarState,
|
|
108
133
|
changeMonth,
|
|
109
134
|
changeFocusedDay,
|
|
@@ -16,7 +16,8 @@ const useIsDateDisabled = ({
|
|
|
16
16
|
minDate,
|
|
17
17
|
maxDate,
|
|
18
18
|
disableFuture,
|
|
19
|
-
disablePast
|
|
19
|
+
disablePast,
|
|
20
|
+
timezone
|
|
20
21
|
}) => {
|
|
21
22
|
const adapter = (0, _useUtils.useLocalizationContext)();
|
|
22
23
|
return React.useCallback(day => (0, _validateDate.validateDate)({
|
|
@@ -29,8 +30,9 @@ const useIsDateDisabled = ({
|
|
|
29
30
|
minDate,
|
|
30
31
|
maxDate,
|
|
31
32
|
disableFuture,
|
|
32
|
-
disablePast
|
|
33
|
+
disablePast,
|
|
34
|
+
timezone
|
|
33
35
|
}
|
|
34
|
-
}) !== null, [adapter, shouldDisableDate, shouldDisableMonth, shouldDisableYear, minDate, maxDate, disableFuture, disablePast]);
|
|
36
|
+
}) !== null, [adapter, shouldDisableDate, shouldDisableMonth, shouldDisableYear, minDate, maxDate, disableFuture, disablePast, timezone]);
|
|
35
37
|
};
|
|
36
38
|
exports.useIsDateDisabled = useIsDateDisabled;
|