@mui/x-date-pickers 8.5.3 → 8.7.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/CHANGELOG.md +210 -0
- package/DateCalendar/DateCalendar.js +16 -16
- package/DateCalendar/DayCalendar.js +48 -48
- package/DateCalendar/useCalendarState.js +25 -25
- package/DateCalendar/useIsDateDisabled.js +2 -2
- package/DatePicker/DatePickerToolbar.js +7 -9
- package/DateTimeField/DateTimeField.js +1 -1
- package/DateTimePicker/DateTimePicker.js +1 -1
- package/DateTimePicker/DateTimePickerToolbar.js +12 -13
- package/DateTimePicker/shared.js +3 -3
- package/DesktopDatePicker/DesktopDatePicker.js +3 -3
- package/DesktopDateTimePicker/DesktopDateTimePicker.js +4 -4
- package/DesktopTimePicker/DesktopTimePicker.js +4 -4
- package/DigitalClock/DigitalClock.d.ts +1 -1
- package/DigitalClock/DigitalClock.js +16 -16
- package/LocalizationProvider/LocalizationProvider.d.ts +9 -3
- package/LocalizationProvider/LocalizationProvider.js +28 -19
- package/MobileDatePicker/MobileDatePicker.js +3 -3
- package/MobileDateTimePicker/MobileDateTimePicker.js +4 -4
- package/MobileTimePicker/MobileTimePicker.js +4 -4
- package/MonthCalendar/MonthCalendar.js +19 -18
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +32 -32
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.d.ts +4 -4
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +7 -7
- package/PickerDay2/PickerDay2.js +3 -3
- package/PickersActionBar/PickersActionBar.d.ts +2 -2
- package/PickersActionBar/PickersActionBar.js +2 -2
- package/PickersCalendarHeader/PickersCalendarHeader.js +7 -8
- package/PickersDay/PickersDay.js +3 -3
- package/PickersDay/usePickerDayOwnerState.js +5 -5
- package/PickersTextField/PickersInputBase/PickersInputBase.js +1 -0
- package/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
- package/StaticTimePicker/StaticTimePicker.js +1 -1
- package/TimeClock/Clock.js +8 -9
- package/TimeClock/ClockNumbers.d.ts +3 -3
- package/TimeClock/ClockNumbers.js +5 -5
- package/TimeClock/TimeClock.js +29 -29
- package/TimeField/TimeField.js +1 -1
- package/TimePicker/TimePicker.js +1 -1
- package/TimePicker/TimePickerToolbar.js +7 -9
- package/TimePicker/shared.js +3 -3
- package/YearCalendar/YearCalendar.js +19 -18
- package/esm/DateCalendar/DateCalendar.js +16 -16
- package/esm/DateCalendar/DayCalendar.js +48 -48
- package/esm/DateCalendar/useCalendarState.js +25 -25
- package/esm/DateCalendar/useIsDateDisabled.js +2 -2
- package/esm/DatePicker/DatePickerToolbar.js +6 -8
- package/esm/DateTimeField/DateTimeField.js +1 -1
- package/esm/DateTimePicker/DateTimePicker.js +1 -1
- package/esm/DateTimePicker/DateTimePickerToolbar.js +11 -12
- package/esm/DateTimePicker/shared.js +3 -3
- package/esm/DesktopDatePicker/DesktopDatePicker.js +3 -3
- package/esm/DesktopDateTimePicker/DesktopDateTimePicker.js +4 -4
- package/esm/DesktopTimePicker/DesktopTimePicker.js +4 -4
- package/esm/DigitalClock/DigitalClock.d.ts +1 -1
- package/esm/DigitalClock/DigitalClock.js +16 -16
- package/esm/LocalizationProvider/LocalizationProvider.d.ts +9 -3
- package/esm/LocalizationProvider/LocalizationProvider.js +27 -18
- package/esm/MobileDatePicker/MobileDatePicker.js +3 -3
- package/esm/MobileDateTimePicker/MobileDateTimePicker.js +4 -4
- package/esm/MobileTimePicker/MobileTimePicker.js +4 -4
- package/esm/MonthCalendar/MonthCalendar.js +20 -19
- package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.js +32 -32
- package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.d.ts +4 -4
- package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +7 -7
- package/esm/PickerDay2/PickerDay2.js +3 -3
- package/esm/PickersActionBar/PickersActionBar.d.ts +2 -2
- package/esm/PickersActionBar/PickersActionBar.js +2 -2
- package/esm/PickersCalendarHeader/PickersCalendarHeader.js +6 -7
- package/esm/PickersDay/PickersDay.js +3 -3
- package/esm/PickersDay/usePickerDayOwnerState.js +5 -5
- package/esm/PickersTextField/PickersInputBase/PickersInputBase.js +2 -0
- package/esm/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
- package/esm/StaticTimePicker/StaticTimePicker.js +1 -1
- package/esm/TimeClock/Clock.js +7 -8
- package/esm/TimeClock/ClockNumbers.d.ts +3 -3
- package/esm/TimeClock/ClockNumbers.js +5 -5
- package/esm/TimeClock/TimeClock.js +29 -29
- package/esm/TimeField/TimeField.js +1 -1
- package/esm/TimePicker/TimePicker.js +1 -1
- package/esm/TimePicker/TimePickerToolbar.js +6 -8
- package/esm/TimePicker/shared.js +3 -3
- package/esm/YearCalendar/YearCalendar.js +20 -19
- package/esm/hooks/index.d.ts +2 -1
- package/esm/hooks/index.js +2 -1
- package/esm/hooks/useParsedFormat.js +6 -6
- package/esm/hooks/usePickerAdapter.d.ts +7 -0
- package/esm/hooks/usePickerAdapter.js +20 -0
- package/esm/hooks/usePickerTranslations.js +1 -1
- package/esm/index.js +1 -1
- package/esm/internals/components/PickerFieldUI.js +2 -0
- package/esm/internals/components/PickerPopper/PickerPopper.js +2 -0
- package/esm/internals/components/PickerProvider.js +2 -0
- package/esm/internals/components/pickersToolbarClasses.d.ts +1 -1
- package/esm/internals/demo/DemoContainer.d.ts +2 -3
- package/esm/internals/demo/DemoContainer.js +3 -2
- package/esm/internals/hooks/date-helpers-hooks.js +16 -16
- package/esm/internals/hooks/useClockReferenceDate.d.ts +2 -2
- package/esm/internals/hooks/useClockReferenceDate.js +5 -5
- package/esm/internals/hooks/useControlledValue.d.ts +2 -2
- package/esm/internals/hooks/useControlledValue.js +8 -7
- package/esm/internals/hooks/useField/buildSectionsFromFormat.d.ts +1 -1
- package/esm/internals/hooks/useField/buildSectionsFromFormat.js +17 -17
- package/esm/internals/hooks/useField/useField.types.d.ts +4 -4
- package/esm/internals/hooks/useField/useField.utils.d.ts +10 -10
- package/esm/internals/hooks/useField/useField.utils.js +69 -69
- package/esm/internals/hooks/useField/useFieldCharacterEditing.js +11 -11
- package/esm/internals/hooks/useField/useFieldRootHandleKeyDown.js +7 -7
- package/esm/internals/hooks/useField/useFieldSectionContentProps.js +15 -16
- package/esm/internals/hooks/useField/useFieldState.js +24 -24
- package/esm/internals/hooks/useField/useFieldV6TextField.js +2 -0
- package/esm/internals/hooks/useField/useFieldV7TextField.js +2 -0
- package/esm/internals/hooks/useNullableFieldPrivateContext.js +2 -0
- package/esm/internals/hooks/usePicker/hooks/useOrientation.js +2 -0
- package/esm/internals/hooks/usePicker/hooks/useValueAndOpenStates.js +8 -6
- package/esm/internals/hooks/usePicker/usePicker.js +7 -6
- package/esm/internals/hooks/usePicker/usePicker.types.d.ts +3 -3
- package/esm/internals/hooks/useUtils.d.ts +1 -8
- package/esm/internals/hooks/useUtils.js +3 -19
- package/esm/internals/hooks/useViews.js +2 -0
- package/esm/internals/index.d.ts +2 -1
- package/esm/internals/index.js +2 -1
- package/esm/internals/models/manager.d.ts +17 -17
- package/esm/internals/models/props/time.d.ts +1 -1
- package/esm/internals/utils/date-time-utils.d.ts +1 -1
- package/esm/internals/utils/date-time-utils.js +5 -5
- package/esm/internals/utils/date-utils.d.ts +11 -11
- package/esm/internals/utils/date-utils.js +34 -34
- package/esm/internals/utils/getDefaultReferenceDate.d.ts +2 -2
- package/esm/internals/utils/getDefaultReferenceDate.js +16 -16
- package/esm/internals/utils/time-utils.d.ts +5 -5
- package/esm/internals/utils/time-utils.js +12 -12
- package/esm/internals/utils/valueManagers.js +4 -4
- package/esm/managers/useDateManager.js +12 -12
- package/esm/managers/useDateTimeManager.js +13 -13
- package/esm/managers/useTimeManager.js +9 -10
- package/esm/validation/useValidation.d.ts +2 -3
- package/esm/validation/useValidation.js +2 -2
- package/esm/validation/validateDate.js +6 -6
- package/esm/validation/validateTime.js +6 -6
- package/hooks/index.d.ts +2 -1
- package/hooks/index.js +8 -1
- package/hooks/useParsedFormat.js +6 -6
- package/hooks/usePickerAdapter.d.ts +7 -0
- package/hooks/usePickerAdapter.js +29 -0
- package/hooks/usePickerTranslations.js +2 -2
- package/index.js +1 -1
- package/internals/components/PickerFieldUI.js +1 -0
- package/internals/components/PickerPopper/PickerPopper.js +1 -0
- package/internals/components/PickerProvider.js +1 -0
- package/internals/components/pickersToolbarClasses.d.ts +1 -1
- package/internals/demo/DemoContainer.d.ts +2 -3
- package/internals/demo/DemoContainer.js +3 -2
- package/internals/hooks/date-helpers-hooks.js +16 -16
- package/internals/hooks/useClockReferenceDate.d.ts +2 -2
- package/internals/hooks/useClockReferenceDate.js +5 -5
- package/internals/hooks/useControlledValue.d.ts +2 -2
- package/internals/hooks/useControlledValue.js +7 -7
- package/internals/hooks/useField/buildSectionsFromFormat.d.ts +1 -1
- package/internals/hooks/useField/buildSectionsFromFormat.js +17 -17
- package/internals/hooks/useField/useField.types.d.ts +4 -4
- package/internals/hooks/useField/useField.utils.d.ts +10 -10
- package/internals/hooks/useField/useField.utils.js +69 -69
- package/internals/hooks/useField/useFieldCharacterEditing.js +11 -11
- package/internals/hooks/useField/useFieldRootHandleKeyDown.js +7 -7
- package/internals/hooks/useField/useFieldSectionContentProps.js +14 -15
- package/internals/hooks/useField/useFieldState.js +24 -25
- package/internals/hooks/useField/useFieldV6TextField.js +1 -0
- package/internals/hooks/useField/useFieldV7TextField.js +1 -0
- package/internals/hooks/useNullableFieldPrivateContext.js +1 -0
- package/internals/hooks/usePicker/hooks/useOrientation.js +1 -0
- package/internals/hooks/usePicker/hooks/useValueAndOpenStates.js +7 -6
- package/internals/hooks/usePicker/usePicker.js +6 -6
- package/internals/hooks/usePicker/usePicker.types.d.ts +3 -3
- package/internals/hooks/useUtils.d.ts +1 -8
- package/internals/hooks/useUtils.js +5 -24
- package/internals/hooks/useViews.js +1 -0
- package/internals/index.d.ts +2 -1
- package/internals/index.js +2 -7
- package/internals/models/manager.d.ts +17 -17
- package/internals/models/props/time.d.ts +1 -1
- package/internals/utils/date-time-utils.d.ts +1 -1
- package/internals/utils/date-time-utils.js +5 -5
- package/internals/utils/date-utils.d.ts +11 -11
- package/internals/utils/date-utils.js +34 -34
- package/internals/utils/getDefaultReferenceDate.d.ts +2 -2
- package/internals/utils/getDefaultReferenceDate.js +16 -16
- package/internals/utils/time-utils.d.ts +5 -5
- package/internals/utils/time-utils.js +12 -12
- package/internals/utils/valueManagers.js +4 -4
- package/managers/useDateManager.js +12 -12
- package/managers/useDateTimeManager.js +13 -13
- package/managers/useTimeManager.js +10 -11
- package/package.json +2 -2
- package/validation/useValidation.d.ts +2 -3
- package/validation/useValidation.js +2 -2
- package/validation/validateDate.js +6 -6
- package/validation/validateTime.js +6 -6
|
@@ -5,8 +5,8 @@ import * as React from 'react';
|
|
|
5
5
|
import { applyDefaultDate } from "../internals/utils/date-utils.js";
|
|
6
6
|
import { singleItemFieldValueManager, singleItemValueManager } from "../internals/utils/valueManagers.js";
|
|
7
7
|
import { validateDateTime } from "../validation/index.js";
|
|
8
|
-
import { useDefaultDates
|
|
9
|
-
import { usePickerTranslations } from "../hooks/
|
|
8
|
+
import { useDefaultDates } from "../internals/hooks/useUtils.js";
|
|
9
|
+
import { usePickerAdapter, usePickerTranslations } from "../hooks/index.js";
|
|
10
10
|
export function useDateTimeManager(parameters = {}) {
|
|
11
11
|
const {
|
|
12
12
|
enableAccessibleFieldDOMStructure = true
|
|
@@ -22,32 +22,32 @@ export function useDateTimeManager(parameters = {}) {
|
|
|
22
22
|
}), [enableAccessibleFieldDOMStructure]);
|
|
23
23
|
}
|
|
24
24
|
function useOpenPickerButtonAriaLabel(value) {
|
|
25
|
-
const
|
|
25
|
+
const adapter = usePickerAdapter();
|
|
26
26
|
const translations = usePickerTranslations();
|
|
27
27
|
return React.useMemo(() => {
|
|
28
|
-
const formattedValue =
|
|
28
|
+
const formattedValue = adapter.isValid(value) ? adapter.format(value, 'fullDate') : null;
|
|
29
29
|
return translations.openDatePickerDialogue(formattedValue);
|
|
30
|
-
}, [value, translations,
|
|
30
|
+
}, [value, translations, adapter]);
|
|
31
31
|
}
|
|
32
32
|
function useApplyDefaultValuesToDateTimeFieldInternalProps(internalProps) {
|
|
33
|
-
const
|
|
33
|
+
const adapter = usePickerAdapter();
|
|
34
34
|
const validationProps = useApplyDefaultValuesToDateTimeValidationProps(internalProps);
|
|
35
|
-
const ampm = React.useMemo(() => internalProps.ampm ??
|
|
35
|
+
const ampm = React.useMemo(() => internalProps.ampm ?? adapter.is12HourCycleInCurrentLocale(), [internalProps.ampm, adapter]);
|
|
36
36
|
return React.useMemo(() => _extends({}, internalProps, validationProps, {
|
|
37
|
-
format: internalProps.format ?? (ampm ?
|
|
38
|
-
}), [internalProps, validationProps, ampm,
|
|
37
|
+
format: internalProps.format ?? (ampm ? adapter.formats.keyboardDateTime12h : adapter.formats.keyboardDateTime24h)
|
|
38
|
+
}), [internalProps, validationProps, ampm, adapter]);
|
|
39
39
|
}
|
|
40
40
|
export function useApplyDefaultValuesToDateTimeValidationProps(props) {
|
|
41
|
-
const
|
|
41
|
+
const adapter = usePickerAdapter();
|
|
42
42
|
const defaultDates = useDefaultDates();
|
|
43
43
|
return React.useMemo(() => ({
|
|
44
44
|
disablePast: props.disablePast ?? false,
|
|
45
45
|
disableFuture: props.disableFuture ?? false,
|
|
46
46
|
// TODO: Explore if we can remove it from the public API
|
|
47
47
|
disableIgnoringDatePartForTimeValidation: !!props.minDateTime || !!props.maxDateTime || !!props.disableFuture || !!props.disablePast,
|
|
48
|
-
minDate: applyDefaultDate(
|
|
49
|
-
maxDate: applyDefaultDate(
|
|
48
|
+
minDate: applyDefaultDate(adapter, props.minDateTime ?? props.minDate, defaultDates.minDate),
|
|
49
|
+
maxDate: applyDefaultDate(adapter, props.maxDateTime ?? props.maxDate, defaultDates.maxDate),
|
|
50
50
|
minTime: props.minDateTime ?? props.minTime,
|
|
51
51
|
maxTime: props.maxDateTime ?? props.maxTime
|
|
52
|
-
}), [props.minDateTime, props.maxDateTime, props.minTime, props.maxTime, props.minDate, props.maxDate, props.disableFuture, props.disablePast,
|
|
52
|
+
}), [props.minDateTime, props.maxDateTime, props.minTime, props.maxTime, props.minDate, props.maxDate, props.disableFuture, props.disablePast, adapter, defaultDates]);
|
|
53
53
|
}
|
|
@@ -4,8 +4,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import { singleItemFieldValueManager, singleItemValueManager } from "../internals/utils/valueManagers.js";
|
|
6
6
|
import { validateTime } from "../validation/index.js";
|
|
7
|
-
import {
|
|
8
|
-
import { usePickerTranslations } from "../hooks/usePickerTranslations.js";
|
|
7
|
+
import { usePickerAdapter, usePickerTranslations } from "../hooks/index.js";
|
|
9
8
|
export function useTimeManager(parameters = {}) {
|
|
10
9
|
const {
|
|
11
10
|
enableAccessibleFieldDOMStructure = true,
|
|
@@ -23,22 +22,22 @@ export function useTimeManager(parameters = {}) {
|
|
|
23
22
|
}
|
|
24
23
|
function createUseOpenPickerButtonAriaLabel(ampm) {
|
|
25
24
|
return function useOpenPickerButtonAriaLabel(value) {
|
|
26
|
-
const
|
|
25
|
+
const adapter = usePickerAdapter();
|
|
27
26
|
const translations = usePickerTranslations();
|
|
28
27
|
return React.useMemo(() => {
|
|
29
|
-
const formatKey = ampm ??
|
|
30
|
-
const formattedValue =
|
|
28
|
+
const formatKey = ampm ?? adapter.is12HourCycleInCurrentLocale() ? 'fullTime12h' : 'fullTime24h';
|
|
29
|
+
const formattedValue = adapter.isValid(value) ? adapter.format(value, formatKey) : null;
|
|
31
30
|
return translations.openTimePickerDialogue(formattedValue);
|
|
32
|
-
}, [value, translations,
|
|
31
|
+
}, [value, translations, adapter]);
|
|
33
32
|
};
|
|
34
33
|
}
|
|
35
34
|
function useApplyDefaultValuesToTimeFieldInternalProps(internalProps) {
|
|
36
|
-
const
|
|
35
|
+
const adapter = usePickerAdapter();
|
|
37
36
|
const validationProps = useApplyDefaultValuesToTimeValidationProps(internalProps);
|
|
38
|
-
const ampm = React.useMemo(() => internalProps.ampm ??
|
|
37
|
+
const ampm = React.useMemo(() => internalProps.ampm ?? adapter.is12HourCycleInCurrentLocale(), [internalProps.ampm, adapter]);
|
|
39
38
|
return React.useMemo(() => _extends({}, internalProps, validationProps, {
|
|
40
|
-
format: internalProps.format ?? (ampm ?
|
|
41
|
-
}), [internalProps, validationProps, ampm,
|
|
39
|
+
format: internalProps.format ?? (ampm ? adapter.formats.fullTime12h : adapter.formats.fullTime24h)
|
|
40
|
+
}), [internalProps, validationProps, ampm, adapter]);
|
|
42
41
|
}
|
|
43
42
|
export function useApplyDefaultValuesToTimeValidationProps(props) {
|
|
44
43
|
return React.useMemo(() => ({
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { OnErrorProps, PickersTimezone } from "../models/index.js";
|
|
1
|
+
import { MuiPickersAdapter, OnErrorProps, PickersTimezone } from "../models/index.js";
|
|
3
2
|
import type { PickerValueManager } from "../internals/models/index.js";
|
|
4
3
|
import { PickerValidValue } from "../internals/models/index.js";
|
|
5
4
|
export type Validator<TValue extends PickerValidValue, TError, TValidationProps> = {
|
|
6
5
|
(params: {
|
|
7
|
-
adapter:
|
|
6
|
+
adapter: MuiPickersAdapter;
|
|
8
7
|
value: TValue;
|
|
9
8
|
timezone: PickersTimezone;
|
|
10
9
|
props: TValidationProps;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
5
|
-
import {
|
|
5
|
+
import { usePickerAdapter } from "../hooks/index.js";
|
|
6
6
|
/**
|
|
7
7
|
* Utility hook to check if a given value is valid based on the provided validation props.
|
|
8
8
|
* @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value.
|
|
@@ -22,7 +22,7 @@ export function useValidation(options) {
|
|
|
22
22
|
timezone,
|
|
23
23
|
onError
|
|
24
24
|
} = options;
|
|
25
|
-
const adapter =
|
|
25
|
+
const adapter = usePickerAdapter();
|
|
26
26
|
const previousValidationErrorRef = React.useRef(validator.valueManager.defaultErrorState);
|
|
27
27
|
const validationError = validator({
|
|
28
28
|
adapter,
|
|
@@ -30,9 +30,9 @@ export const validateDate = ({
|
|
|
30
30
|
minDate,
|
|
31
31
|
maxDate
|
|
32
32
|
} = props;
|
|
33
|
-
const now = adapter.
|
|
33
|
+
const now = adapter.date(undefined, timezone);
|
|
34
34
|
switch (true) {
|
|
35
|
-
case !adapter.
|
|
35
|
+
case !adapter.isValid(value):
|
|
36
36
|
return 'invalidDate';
|
|
37
37
|
case Boolean(shouldDisableDate && shouldDisableDate(value)):
|
|
38
38
|
return 'shouldDisableDate';
|
|
@@ -40,13 +40,13 @@ export const validateDate = ({
|
|
|
40
40
|
return 'shouldDisableMonth';
|
|
41
41
|
case Boolean(shouldDisableYear && shouldDisableYear(value)):
|
|
42
42
|
return 'shouldDisableYear';
|
|
43
|
-
case Boolean(disableFuture && adapter.
|
|
43
|
+
case Boolean(disableFuture && adapter.isAfterDay(value, now)):
|
|
44
44
|
return 'disableFuture';
|
|
45
|
-
case Boolean(disablePast && adapter.
|
|
45
|
+
case Boolean(disablePast && adapter.isBeforeDay(value, now)):
|
|
46
46
|
return 'disablePast';
|
|
47
|
-
case Boolean(minDate && adapter.
|
|
47
|
+
case Boolean(minDate && adapter.isBeforeDay(value, minDate)):
|
|
48
48
|
return 'minDate';
|
|
49
|
-
case Boolean(maxDate && adapter.
|
|
49
|
+
case Boolean(maxDate && adapter.isAfterDay(value, maxDate)):
|
|
50
50
|
return 'maxDate';
|
|
51
51
|
default:
|
|
52
52
|
return null;
|
|
@@ -31,18 +31,18 @@ export const validateTime = ({
|
|
|
31
31
|
disablePast,
|
|
32
32
|
disableFuture
|
|
33
33
|
} = props;
|
|
34
|
-
const now = adapter.
|
|
35
|
-
const isAfter = createIsAfterIgnoreDatePart(disableIgnoringDatePartForTimeValidation, adapter
|
|
34
|
+
const now = adapter.date(undefined, timezone);
|
|
35
|
+
const isAfter = createIsAfterIgnoreDatePart(disableIgnoringDatePartForTimeValidation, adapter);
|
|
36
36
|
switch (true) {
|
|
37
|
-
case !adapter.
|
|
37
|
+
case !adapter.isValid(value):
|
|
38
38
|
return 'invalidDate';
|
|
39
39
|
case Boolean(minTime && isAfter(minTime, value)):
|
|
40
40
|
return 'minTime';
|
|
41
41
|
case Boolean(maxTime && isAfter(value, maxTime)):
|
|
42
42
|
return 'maxTime';
|
|
43
|
-
case Boolean(disableFuture && adapter.
|
|
43
|
+
case Boolean(disableFuture && adapter.isAfter(value, now)):
|
|
44
44
|
return 'disableFuture';
|
|
45
|
-
case Boolean(disablePast && adapter.
|
|
45
|
+
case Boolean(disablePast && adapter.isBefore(value, now)):
|
|
46
46
|
return 'disablePast';
|
|
47
47
|
case Boolean(shouldDisableTime && shouldDisableTime(value, 'hours')):
|
|
48
48
|
return 'shouldDisableTime-hours';
|
|
@@ -50,7 +50,7 @@ export const validateTime = ({
|
|
|
50
50
|
return 'shouldDisableTime-minutes';
|
|
51
51
|
case Boolean(shouldDisableTime && shouldDisableTime(value, 'seconds')):
|
|
52
52
|
return 'shouldDisableTime-seconds';
|
|
53
|
-
case Boolean(minutesStep && adapter.
|
|
53
|
+
case Boolean(minutesStep && adapter.getMinutes(value) % minutesStep !== 0):
|
|
54
54
|
return 'minutesStep';
|
|
55
55
|
default:
|
|
56
56
|
return null;
|
package/hooks/index.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export { useSplitFieldProps } from "./useSplitFieldProps.js";
|
|
|
3
3
|
export { useParsedFormat } from "./useParsedFormat.js";
|
|
4
4
|
export { usePickerContext } from "./usePickerContext.js";
|
|
5
5
|
export { usePickerActionsContext } from "./usePickerActionsContext.js";
|
|
6
|
-
export { useIsValidValue } from "./useIsValidValue.js";
|
|
6
|
+
export { useIsValidValue } from "./useIsValidValue.js";
|
|
7
|
+
export { usePickerAdapter } from "./usePickerAdapter.js";
|
package/hooks/index.js
CHANGED
|
@@ -21,6 +21,12 @@ Object.defineProperty(exports, "usePickerActionsContext", {
|
|
|
21
21
|
return _usePickerActionsContext.usePickerActionsContext;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
+
Object.defineProperty(exports, "usePickerAdapter", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _usePickerAdapter.usePickerAdapter;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
24
30
|
Object.defineProperty(exports, "usePickerContext", {
|
|
25
31
|
enumerable: true,
|
|
26
32
|
get: function () {
|
|
@@ -44,4 +50,5 @@ var _useSplitFieldProps = require("./useSplitFieldProps");
|
|
|
44
50
|
var _useParsedFormat = require("./useParsedFormat");
|
|
45
51
|
var _usePickerContext = require("./usePickerContext");
|
|
46
52
|
var _usePickerActionsContext = require("./usePickerActionsContext");
|
|
47
|
-
var _useIsValidValue = require("./useIsValidValue");
|
|
53
|
+
var _useIsValidValue = require("./useIsValidValue");
|
|
54
|
+
var _usePickerAdapter = require("./usePickerAdapter");
|
package/hooks/useParsedFormat.js
CHANGED
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.useParsedFormat = void 0;
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _RtlProvider = require("@mui/system/RtlProvider");
|
|
11
|
-
var
|
|
11
|
+
var _usePickerAdapter = require("./usePickerAdapter");
|
|
12
12
|
var _buildSectionsFromFormat = require("../internals/hooks/useField/buildSectionsFromFormat");
|
|
13
13
|
var _useField = require("../internals/hooks/useField/useField.utils");
|
|
14
14
|
var _usePickerTranslations = require("./usePickerTranslations");
|
|
@@ -22,16 +22,16 @@ var _useNullablePickerContext = require("../internals/hooks/useNullablePickerCon
|
|
|
22
22
|
*/
|
|
23
23
|
const useParsedFormat = (parameters = {}) => {
|
|
24
24
|
const pickerContext = (0, _useNullablePickerContext.useNullablePickerContext)();
|
|
25
|
-
const
|
|
25
|
+
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
|
|
26
26
|
const isRtl = (0, _RtlProvider.useRtl)();
|
|
27
27
|
const translations = (0, _usePickerTranslations.usePickerTranslations)();
|
|
28
|
-
const localizedDigits = React.useMemo(() => (0, _useField.getLocalizedDigits)(
|
|
28
|
+
const localizedDigits = React.useMemo(() => (0, _useField.getLocalizedDigits)(adapter), [adapter]);
|
|
29
29
|
const {
|
|
30
|
-
format = pickerContext?.fieldFormat ??
|
|
30
|
+
format = pickerContext?.fieldFormat ?? adapter.formats.fullDate
|
|
31
31
|
} = parameters;
|
|
32
32
|
return React.useMemo(() => {
|
|
33
33
|
const sections = (0, _buildSectionsFromFormat.buildSectionsFromFormat)({
|
|
34
|
-
|
|
34
|
+
adapter,
|
|
35
35
|
format,
|
|
36
36
|
formatDensity: 'dense',
|
|
37
37
|
isRtl,
|
|
@@ -43,6 +43,6 @@ const useParsedFormat = (parameters = {}) => {
|
|
|
43
43
|
enableAccessibleFieldDOMStructure: false
|
|
44
44
|
});
|
|
45
45
|
return sections.map(section => `${section.startSeparator}${section.placeholder}${section.endSeparator}`).join('');
|
|
46
|
-
}, [
|
|
46
|
+
}, [adapter, isRtl, translations, localizedDigits, format]);
|
|
47
47
|
};
|
|
48
48
|
exports.useParsedFormat = useParsedFormat;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { PickersAdapterContextValue } from "../LocalizationProvider/LocalizationProvider.js";
|
|
2
|
+
import { PickersLocaleText } from "../locales/utils/pickersLocaleTextApi.js";
|
|
3
|
+
export declare const useLocalizationContext: () => UseLocalizationContextReturnValue;
|
|
4
|
+
export interface UseLocalizationContextReturnValue extends Omit<PickersAdapterContextValue, 'localeText'> {
|
|
5
|
+
localeText: PickersLocaleText;
|
|
6
|
+
}
|
|
7
|
+
export declare const usePickerAdapter: () => import("@mui/x-date-pickers/models").MuiPickersAdapter<any>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
exports.usePickerAdapter = exports.useLocalizationContext = void 0;
|
|
10
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _enUS = require("../locales/enUS");
|
|
13
|
+
var _LocalizationProvider = require("../LocalizationProvider/LocalizationProvider");
|
|
14
|
+
const useLocalizationContext = () => {
|
|
15
|
+
const localization = React.useContext(_LocalizationProvider.PickerAdapterContext);
|
|
16
|
+
if (localization === null) {
|
|
17
|
+
throw new Error(['MUI X: Can not find the date and time pickers localization context.', 'It looks like you forgot to wrap your component in LocalizationProvider.', 'This can also happen if you are bundling multiple versions of the `@mui/x-date-pickers` package'].join('\n'));
|
|
18
|
+
}
|
|
19
|
+
if (localization.adapter === null) {
|
|
20
|
+
throw new Error(['MUI X: Can not find the date and time pickers adapter from its localization context.', 'It looks like you forgot to pass a `dateAdapter` to your LocalizationProvider.'].join('\n'));
|
|
21
|
+
}
|
|
22
|
+
const localeText = React.useMemo(() => (0, _extends2.default)({}, _enUS.DEFAULT_LOCALE, localization.localeText), [localization.localeText]);
|
|
23
|
+
return React.useMemo(() => (0, _extends2.default)({}, localization, {
|
|
24
|
+
localeText
|
|
25
|
+
}), [localization, localeText]);
|
|
26
|
+
};
|
|
27
|
+
exports.useLocalizationContext = useLocalizationContext;
|
|
28
|
+
const usePickerAdapter = () => useLocalizationContext().adapter;
|
|
29
|
+
exports.usePickerAdapter = usePickerAdapter;
|
|
@@ -5,6 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.usePickerTranslations = void 0;
|
|
8
|
-
var
|
|
9
|
-
const usePickerTranslations = () => (0,
|
|
8
|
+
var _usePickerAdapter = require("./usePickerAdapter");
|
|
9
|
+
const usePickerTranslations = () => (0, _usePickerAdapter.useLocalizationContext)().localeText;
|
|
10
10
|
exports.usePickerTranslations = usePickerTranslations;
|
package/index.js
CHANGED
|
@@ -8,4 +8,4 @@ export interface PickersToolbarClasses {
|
|
|
8
8
|
}
|
|
9
9
|
export type PickersToolbarClassKey = keyof PickersToolbarClasses;
|
|
10
10
|
export declare function getPickersToolbarUtilityClass(slot: string): string;
|
|
11
|
-
export declare const pickersToolbarClasses: Record<"root" | "
|
|
11
|
+
export declare const pickersToolbarClasses: Record<"root" | "title" | "content", string>;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { StackProps } from '@mui/material/Stack';
|
|
2
3
|
import { SxProps, Theme } from '@mui/material/styles';
|
|
3
4
|
interface DemoGridProps {
|
|
4
5
|
children: React.ReactNode;
|
|
5
6
|
components: string[];
|
|
6
7
|
sx?: SxProps<Theme>;
|
|
7
8
|
}
|
|
8
|
-
interface DemoItemProps {
|
|
9
|
+
interface DemoItemProps extends Omit<StackProps, 'component'> {
|
|
9
10
|
label?: React.ReactNode;
|
|
10
11
|
component?: string;
|
|
11
|
-
children: React.ReactNode;
|
|
12
|
-
sx?: SxProps<Theme>;
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
14
|
* WARNING: This is an internal component used in documentation to achieve a desired layout.
|
|
@@ -50,7 +50,8 @@ function DemoItem(props) {
|
|
|
50
50
|
label,
|
|
51
51
|
children,
|
|
52
52
|
component,
|
|
53
|
-
sx: sxProp
|
|
53
|
+
sx: sxProp,
|
|
54
|
+
alignItems = 'stretch'
|
|
54
55
|
} = props;
|
|
55
56
|
let spacing;
|
|
56
57
|
let sx = sxProp;
|
|
@@ -66,7 +67,7 @@ function DemoItem(props) {
|
|
|
66
67
|
}
|
|
67
68
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Stack.default, {
|
|
68
69
|
direction: "column",
|
|
69
|
-
alignItems:
|
|
70
|
+
alignItems: alignItems,
|
|
70
71
|
spacing: spacing,
|
|
71
72
|
sx: sx,
|
|
72
73
|
children: [label && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typography.default, {
|
|
@@ -8,40 +8,40 @@ exports.useMeridiemMode = useMeridiemMode;
|
|
|
8
8
|
exports.useNextMonthDisabled = useNextMonthDisabled;
|
|
9
9
|
exports.usePreviousMonthDisabled = usePreviousMonthDisabled;
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
|
-
var _useUtils = require("./useUtils");
|
|
12
11
|
var _timeUtils = require("../utils/time-utils");
|
|
12
|
+
var _usePickerAdapter = require("../../hooks/usePickerAdapter");
|
|
13
13
|
function useNextMonthDisabled(month, {
|
|
14
14
|
disableFuture,
|
|
15
15
|
maxDate,
|
|
16
16
|
timezone
|
|
17
17
|
}) {
|
|
18
|
-
const
|
|
18
|
+
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
|
|
19
19
|
return React.useMemo(() => {
|
|
20
|
-
const now =
|
|
21
|
-
const lastEnabledMonth =
|
|
22
|
-
return !
|
|
23
|
-
}, [disableFuture, maxDate, month,
|
|
20
|
+
const now = adapter.date(undefined, timezone);
|
|
21
|
+
const lastEnabledMonth = adapter.startOfMonth(disableFuture && adapter.isBefore(now, maxDate) ? now : maxDate);
|
|
22
|
+
return !adapter.isAfter(lastEnabledMonth, month);
|
|
23
|
+
}, [disableFuture, maxDate, month, adapter, timezone]);
|
|
24
24
|
}
|
|
25
25
|
function usePreviousMonthDisabled(month, {
|
|
26
26
|
disablePast,
|
|
27
27
|
minDate,
|
|
28
28
|
timezone
|
|
29
29
|
}) {
|
|
30
|
-
const
|
|
30
|
+
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
|
|
31
31
|
return React.useMemo(() => {
|
|
32
|
-
const now =
|
|
33
|
-
const firstEnabledMonth =
|
|
34
|
-
return !
|
|
35
|
-
}, [disablePast, minDate, month,
|
|
32
|
+
const now = adapter.date(undefined, timezone);
|
|
33
|
+
const firstEnabledMonth = adapter.startOfMonth(disablePast && adapter.isAfter(now, minDate) ? now : minDate);
|
|
34
|
+
return !adapter.isBefore(firstEnabledMonth, month);
|
|
35
|
+
}, [disablePast, minDate, month, adapter, timezone]);
|
|
36
36
|
}
|
|
37
37
|
function useMeridiemMode(date, ampm, onChange, selectionState) {
|
|
38
|
-
const
|
|
39
|
-
const cleanDate = React.useMemo(() => !
|
|
40
|
-
const meridiemMode = (0, _timeUtils.getMeridiem)(cleanDate,
|
|
38
|
+
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
|
|
39
|
+
const cleanDate = React.useMemo(() => !adapter.isValid(date) ? null : date, [adapter, date]);
|
|
40
|
+
const meridiemMode = (0, _timeUtils.getMeridiem)(cleanDate, adapter);
|
|
41
41
|
const handleMeridiemChange = React.useCallback(mode => {
|
|
42
|
-
const timeWithMeridiem = cleanDate == null ? null : (0, _timeUtils.convertToMeridiem)(cleanDate, mode, Boolean(ampm),
|
|
42
|
+
const timeWithMeridiem = cleanDate == null ? null : (0, _timeUtils.convertToMeridiem)(cleanDate, mode, Boolean(ampm), adapter);
|
|
43
43
|
onChange(timeWithMeridiem, selectionState ?? 'partial');
|
|
44
|
-
}, [ampm, cleanDate, onChange, selectionState,
|
|
44
|
+
}, [ampm, cleanDate, onChange, selectionState, adapter]);
|
|
45
45
|
return {
|
|
46
46
|
meridiemMode,
|
|
47
47
|
handleMeridiemChange
|
|
@@ -3,13 +3,13 @@ import { PickerValue } from "../models/index.js";
|
|
|
3
3
|
export declare const useClockReferenceDate: <TProps extends {}>({
|
|
4
4
|
value,
|
|
5
5
|
referenceDate: referenceDateProp,
|
|
6
|
-
|
|
6
|
+
adapter,
|
|
7
7
|
props,
|
|
8
8
|
timezone
|
|
9
9
|
}: {
|
|
10
10
|
value: PickerValue;
|
|
11
11
|
referenceDate: PickerValidDate | undefined;
|
|
12
|
-
|
|
12
|
+
adapter: MuiPickersAdapter;
|
|
13
13
|
props: TProps;
|
|
14
14
|
timezone: PickersTimezone;
|
|
15
15
|
}) => PickerValidDate;
|
|
@@ -12,21 +12,21 @@ var _getDefaultReferenceDate = require("../utils/getDefaultReferenceDate");
|
|
|
12
12
|
const useClockReferenceDate = ({
|
|
13
13
|
value,
|
|
14
14
|
referenceDate: referenceDateProp,
|
|
15
|
-
|
|
15
|
+
adapter,
|
|
16
16
|
props,
|
|
17
17
|
timezone
|
|
18
18
|
}) => {
|
|
19
19
|
const referenceDate = React.useMemo(() => _valueManagers.singleItemValueManager.getInitialReferenceValue({
|
|
20
20
|
value,
|
|
21
|
-
|
|
21
|
+
adapter,
|
|
22
22
|
props,
|
|
23
23
|
referenceDate: referenceDateProp,
|
|
24
24
|
granularity: _getDefaultReferenceDate.SECTION_TYPE_GRANULARITY.day,
|
|
25
25
|
timezone,
|
|
26
|
-
getTodayDate: () => (0, _dateUtils.getTodayDate)(
|
|
26
|
+
getTodayDate: () => (0, _dateUtils.getTodayDate)(adapter, timezone, 'date')
|
|
27
27
|
}),
|
|
28
|
-
// We
|
|
29
|
-
[] // eslint-disable-line react-hooks/exhaustive-deps
|
|
28
|
+
// We want the `referenceDate` to update on prop and `timezone` change (https://github.com/mui/mui-x/issues/10804)
|
|
29
|
+
[referenceDateProp, timezone] // eslint-disable-line react-hooks/exhaustive-deps
|
|
30
30
|
);
|
|
31
31
|
return value ?? referenceDate;
|
|
32
32
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PickerValueManager } from "../models/index.js";
|
|
1
|
+
import type { PickerRangeValue, PickerValueManager } from "../models/index.js";
|
|
2
2
|
import { PickersTimezone, PickerValidDate } from "../../models/index.js";
|
|
3
3
|
import { PickerValidValue } from "../models/index.js";
|
|
4
4
|
/**
|
|
@@ -28,7 +28,7 @@ interface UseValueWithTimezoneParameters<TValue extends PickerValidValue, TChang
|
|
|
28
28
|
* It does not need to have its default value.
|
|
29
29
|
* This is only used to determine the timezone to use when `props.value` and `props.defaultValue` are not defined.
|
|
30
30
|
*/
|
|
31
|
-
referenceDate
|
|
31
|
+
referenceDate?: TValue extends PickerRangeValue ? TValue | PickerValidDate : PickerValidDate;
|
|
32
32
|
onChange: TChange | undefined;
|
|
33
33
|
valueManager: PickerValueManager<TValue, any>;
|
|
34
34
|
}
|
|
@@ -9,7 +9,7 @@ exports.useControlledValue = void 0;
|
|
|
9
9
|
var React = _interopRequireWildcard(require("react"));
|
|
10
10
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
11
11
|
var _useControlled = _interopRequireDefault(require("@mui/utils/useControlled"));
|
|
12
|
-
var
|
|
12
|
+
var _usePickerAdapter = require("../../hooks/usePickerAdapter");
|
|
13
13
|
/**
|
|
14
14
|
* Hooks controlling the value while making sure that:
|
|
15
15
|
* - The value returned by `onChange` always have the timezone of `props.value` or `props.defaultValue` if defined
|
|
@@ -24,19 +24,19 @@ const useControlledValue = ({
|
|
|
24
24
|
onChange: onChangeProp,
|
|
25
25
|
valueManager
|
|
26
26
|
}) => {
|
|
27
|
-
const
|
|
27
|
+
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
|
|
28
28
|
const [valueWithInputTimezone, setValue] = (0, _useControlled.default)({
|
|
29
29
|
name,
|
|
30
30
|
state: 'value',
|
|
31
31
|
controlled: valueProp,
|
|
32
32
|
default: defaultValue ?? valueManager.emptyValue
|
|
33
33
|
});
|
|
34
|
-
const inputTimezone = React.useMemo(() => valueManager.getTimezone(
|
|
34
|
+
const inputTimezone = React.useMemo(() => valueManager.getTimezone(adapter, valueWithInputTimezone), [adapter, valueManager, valueWithInputTimezone]);
|
|
35
35
|
const setInputTimezone = (0, _useEventCallback.default)(newValue => {
|
|
36
36
|
if (inputTimezone == null) {
|
|
37
37
|
return newValue;
|
|
38
38
|
}
|
|
39
|
-
return valueManager.setTimezone(
|
|
39
|
+
return valueManager.setTimezone(adapter, inputTimezone, newValue);
|
|
40
40
|
});
|
|
41
41
|
const timezoneToRender = React.useMemo(() => {
|
|
42
42
|
if (timezoneProp) {
|
|
@@ -46,11 +46,11 @@ const useControlledValue = ({
|
|
|
46
46
|
return inputTimezone;
|
|
47
47
|
}
|
|
48
48
|
if (referenceDate) {
|
|
49
|
-
return
|
|
49
|
+
return adapter.getTimezone(Array.isArray(referenceDate) ? referenceDate[0] : referenceDate);
|
|
50
50
|
}
|
|
51
51
|
return 'default';
|
|
52
|
-
}, [timezoneProp, inputTimezone, referenceDate,
|
|
53
|
-
const valueWithTimezoneToRender = React.useMemo(() => valueManager.setTimezone(
|
|
52
|
+
}, [timezoneProp, inputTimezone, referenceDate, adapter]);
|
|
53
|
+
const valueWithTimezoneToRender = React.useMemo(() => valueManager.setTimezone(adapter, timezoneToRender, valueWithInputTimezone), [valueManager, adapter, timezoneToRender, valueWithInputTimezone]);
|
|
54
54
|
const handleValueChange = (0, _useEventCallback.default)((newValue, ...otherParams) => {
|
|
55
55
|
const newValueWithInputTimezone = setInputTimezone(newValue);
|
|
56
56
|
setValue(newValueWithInputTimezone);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FieldSection, MuiPickersAdapter, PickerValidDate } from "../../../models/index.js";
|
|
2
2
|
import { PickersLocaleText } from "../../../locales/index.js";
|
|
3
3
|
interface BuildSectionsFromFormatParameters {
|
|
4
|
-
|
|
4
|
+
adapter: MuiPickersAdapter;
|
|
5
5
|
format: string;
|
|
6
6
|
formatDensity: 'dense' | 'spacious';
|
|
7
7
|
isRtl: boolean;
|