@mui/x-date-pickers 8.5.2 → 8.6.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.
Files changed (186) hide show
  1. package/CHANGELOG.md +203 -11
  2. package/DateCalendar/DateCalendar.js +16 -16
  3. package/DateCalendar/DayCalendar.js +48 -48
  4. package/DateCalendar/useCalendarState.js +25 -25
  5. package/DateCalendar/useIsDateDisabled.js +2 -2
  6. package/DatePicker/DatePickerToolbar.js +7 -9
  7. package/DateTimeField/DateTimeField.js +1 -1
  8. package/DateTimePicker/DateTimePicker.js +1 -1
  9. package/DateTimePicker/DateTimePickerToolbar.js +12 -13
  10. package/DateTimePicker/shared.js +3 -3
  11. package/DesktopDatePicker/DesktopDatePicker.js +3 -3
  12. package/DesktopDateTimePicker/DesktopDateTimePicker.js +4 -4
  13. package/DesktopTimePicker/DesktopTimePicker.js +4 -4
  14. package/DigitalClock/DigitalClock.d.ts +1 -1
  15. package/DigitalClock/DigitalClock.js +16 -16
  16. package/LocalizationProvider/LocalizationProvider.d.ts +9 -3
  17. package/LocalizationProvider/LocalizationProvider.js +28 -19
  18. package/MobileDatePicker/MobileDatePicker.js +3 -3
  19. package/MobileDateTimePicker/MobileDateTimePicker.js +4 -4
  20. package/MobileTimePicker/MobileTimePicker.js +4 -4
  21. package/MonthCalendar/MonthCalendar.js +19 -18
  22. package/MultiSectionDigitalClock/MultiSectionDigitalClock.js +32 -32
  23. package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.d.ts +4 -4
  24. package/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +7 -7
  25. package/PickerDay2/PickerDay2.js +3 -3
  26. package/PickersActionBar/PickersActionBar.d.ts +2 -2
  27. package/PickersActionBar/PickersActionBar.js +2 -2
  28. package/PickersCalendarHeader/PickersCalendarHeader.js +7 -8
  29. package/PickersDay/PickersDay.js +3 -3
  30. package/PickersDay/usePickerDayOwnerState.js +5 -5
  31. package/PickersTextField/PickersFilledInput/pickersFilledInputClasses.d.ts +1 -0
  32. package/PickersTextField/PickersInput/pickersInputClasses.d.ts +1 -0
  33. package/PickersTextField/PickersInputBase/pickersInputBaseClasses.d.ts +2 -0
  34. package/PickersTextField/PickersInputBase/pickersInputBaseClasses.js +1 -1
  35. package/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.d.ts +1 -0
  36. package/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  37. package/StaticTimePicker/StaticTimePicker.js +1 -1
  38. package/TimeClock/Clock.js +8 -9
  39. package/TimeClock/ClockNumbers.d.ts +3 -3
  40. package/TimeClock/ClockNumbers.js +5 -5
  41. package/TimeClock/TimeClock.js +29 -29
  42. package/TimeField/TimeField.js +1 -1
  43. package/TimePicker/TimePicker.js +1 -1
  44. package/TimePicker/TimePickerToolbar.js +7 -9
  45. package/TimePicker/shared.js +3 -3
  46. package/YearCalendar/YearCalendar.js +19 -18
  47. package/esm/DateCalendar/DateCalendar.js +16 -16
  48. package/esm/DateCalendar/DayCalendar.js +48 -48
  49. package/esm/DateCalendar/useCalendarState.js +25 -25
  50. package/esm/DateCalendar/useIsDateDisabled.js +2 -2
  51. package/esm/DatePicker/DatePickerToolbar.js +6 -8
  52. package/esm/DateTimeField/DateTimeField.js +1 -1
  53. package/esm/DateTimePicker/DateTimePicker.js +1 -1
  54. package/esm/DateTimePicker/DateTimePickerToolbar.js +11 -12
  55. package/esm/DateTimePicker/shared.js +3 -3
  56. package/esm/DesktopDatePicker/DesktopDatePicker.js +3 -3
  57. package/esm/DesktopDateTimePicker/DesktopDateTimePicker.js +4 -4
  58. package/esm/DesktopTimePicker/DesktopTimePicker.js +4 -4
  59. package/esm/DigitalClock/DigitalClock.d.ts +1 -1
  60. package/esm/DigitalClock/DigitalClock.js +16 -16
  61. package/esm/LocalizationProvider/LocalizationProvider.d.ts +9 -3
  62. package/esm/LocalizationProvider/LocalizationProvider.js +27 -18
  63. package/esm/MobileDatePicker/MobileDatePicker.js +3 -3
  64. package/esm/MobileDateTimePicker/MobileDateTimePicker.js +4 -4
  65. package/esm/MobileTimePicker/MobileTimePicker.js +4 -4
  66. package/esm/MonthCalendar/MonthCalendar.js +20 -19
  67. package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.js +32 -32
  68. package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.d.ts +4 -4
  69. package/esm/MultiSectionDigitalClock/MultiSectionDigitalClock.utils.js +7 -7
  70. package/esm/PickerDay2/PickerDay2.js +3 -3
  71. package/esm/PickersActionBar/PickersActionBar.d.ts +2 -2
  72. package/esm/PickersActionBar/PickersActionBar.js +2 -2
  73. package/esm/PickersCalendarHeader/PickersCalendarHeader.js +6 -7
  74. package/esm/PickersDay/PickersDay.js +3 -3
  75. package/esm/PickersDay/usePickerDayOwnerState.js +5 -5
  76. package/esm/PickersTextField/PickersFilledInput/pickersFilledInputClasses.d.ts +1 -0
  77. package/esm/PickersTextField/PickersInput/pickersInputClasses.d.ts +1 -0
  78. package/esm/PickersTextField/PickersInputBase/pickersInputBaseClasses.d.ts +2 -0
  79. package/esm/PickersTextField/PickersInputBase/pickersInputBaseClasses.js +1 -1
  80. package/esm/PickersTextField/PickersOutlinedInput/pickersOutlinedInputClasses.d.ts +1 -0
  81. package/esm/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
  82. package/esm/StaticTimePicker/StaticTimePicker.js +1 -1
  83. package/esm/TimeClock/Clock.js +7 -8
  84. package/esm/TimeClock/ClockNumbers.d.ts +3 -3
  85. package/esm/TimeClock/ClockNumbers.js +5 -5
  86. package/esm/TimeClock/TimeClock.js +29 -29
  87. package/esm/TimeField/TimeField.js +1 -1
  88. package/esm/TimePicker/TimePicker.js +1 -1
  89. package/esm/TimePicker/TimePickerToolbar.js +6 -8
  90. package/esm/TimePicker/shared.js +3 -3
  91. package/esm/YearCalendar/YearCalendar.js +20 -19
  92. package/esm/hooks/index.d.ts +2 -1
  93. package/esm/hooks/index.js +2 -1
  94. package/esm/hooks/useParsedFormat.js +6 -6
  95. package/esm/hooks/usePickerAdapter.d.ts +7 -0
  96. package/esm/hooks/usePickerAdapter.js +20 -0
  97. package/esm/hooks/usePickerTranslations.js +1 -1
  98. package/esm/index.js +1 -1
  99. package/esm/internals/components/pickersToolbarClasses.d.ts +1 -1
  100. package/esm/internals/demo/DemoContainer.d.ts +2 -3
  101. package/esm/internals/demo/DemoContainer.js +3 -2
  102. package/esm/internals/hooks/date-helpers-hooks.js +16 -16
  103. package/esm/internals/hooks/useClockReferenceDate.d.ts +2 -2
  104. package/esm/internals/hooks/useClockReferenceDate.js +3 -3
  105. package/esm/internals/hooks/useControlledValue.js +8 -7
  106. package/esm/internals/hooks/useField/buildSectionsFromFormat.d.ts +1 -1
  107. package/esm/internals/hooks/useField/buildSectionsFromFormat.js +17 -17
  108. package/esm/internals/hooks/useField/useField.types.d.ts +2 -2
  109. package/esm/internals/hooks/useField/useField.utils.d.ts +10 -10
  110. package/esm/internals/hooks/useField/useField.utils.js +69 -69
  111. package/esm/internals/hooks/useField/useFieldCharacterEditing.js +11 -11
  112. package/esm/internals/hooks/useField/useFieldRootHandleKeyDown.js +7 -7
  113. package/esm/internals/hooks/useField/useFieldSectionContentProps.js +15 -16
  114. package/esm/internals/hooks/useField/useFieldState.js +22 -24
  115. package/esm/internals/hooks/usePicker/hooks/useValueAndOpenStates.js +6 -6
  116. package/esm/internals/hooks/usePicker/usePicker.js +5 -6
  117. package/esm/internals/hooks/useUtils.d.ts +1 -8
  118. package/esm/internals/hooks/useUtils.js +3 -19
  119. package/esm/internals/index.d.ts +2 -1
  120. package/esm/internals/index.js +2 -1
  121. package/esm/internals/models/manager.d.ts +14 -14
  122. package/esm/internals/models/props/time.d.ts +1 -1
  123. package/esm/internals/utils/date-time-utils.d.ts +1 -1
  124. package/esm/internals/utils/date-time-utils.js +5 -5
  125. package/esm/internals/utils/date-utils.d.ts +11 -11
  126. package/esm/internals/utils/date-utils.js +34 -34
  127. package/esm/internals/utils/getDefaultReferenceDate.d.ts +2 -2
  128. package/esm/internals/utils/getDefaultReferenceDate.js +16 -16
  129. package/esm/internals/utils/time-utils.d.ts +5 -5
  130. package/esm/internals/utils/time-utils.js +12 -12
  131. package/esm/internals/utils/valueManagers.js +4 -4
  132. package/esm/managers/useDateManager.js +12 -12
  133. package/esm/managers/useDateTimeManager.js +13 -13
  134. package/esm/managers/useTimeManager.js +9 -10
  135. package/esm/validation/useValidation.d.ts +2 -3
  136. package/esm/validation/useValidation.js +2 -2
  137. package/esm/validation/validateDate.js +6 -6
  138. package/esm/validation/validateTime.js +6 -6
  139. package/hooks/index.d.ts +2 -1
  140. package/hooks/index.js +8 -1
  141. package/hooks/useParsedFormat.js +6 -6
  142. package/hooks/usePickerAdapter.d.ts +7 -0
  143. package/hooks/usePickerAdapter.js +29 -0
  144. package/hooks/usePickerTranslations.js +2 -2
  145. package/index.js +1 -1
  146. package/internals/components/pickersToolbarClasses.d.ts +1 -1
  147. package/internals/demo/DemoContainer.d.ts +2 -3
  148. package/internals/demo/DemoContainer.js +3 -2
  149. package/internals/hooks/date-helpers-hooks.js +16 -16
  150. package/internals/hooks/useClockReferenceDate.d.ts +2 -2
  151. package/internals/hooks/useClockReferenceDate.js +3 -3
  152. package/internals/hooks/useControlledValue.js +7 -7
  153. package/internals/hooks/useField/buildSectionsFromFormat.d.ts +1 -1
  154. package/internals/hooks/useField/buildSectionsFromFormat.js +17 -17
  155. package/internals/hooks/useField/useField.types.d.ts +2 -2
  156. package/internals/hooks/useField/useField.utils.d.ts +10 -10
  157. package/internals/hooks/useField/useField.utils.js +69 -69
  158. package/internals/hooks/useField/useFieldCharacterEditing.js +11 -11
  159. package/internals/hooks/useField/useFieldRootHandleKeyDown.js +7 -7
  160. package/internals/hooks/useField/useFieldSectionContentProps.js +14 -15
  161. package/internals/hooks/useField/useFieldState.js +23 -25
  162. package/internals/hooks/usePicker/hooks/useValueAndOpenStates.js +6 -6
  163. package/internals/hooks/usePicker/usePicker.js +5 -6
  164. package/internals/hooks/useUtils.d.ts +1 -8
  165. package/internals/hooks/useUtils.js +5 -24
  166. package/internals/index.d.ts +2 -1
  167. package/internals/index.js +2 -7
  168. package/internals/models/manager.d.ts +14 -14
  169. package/internals/models/props/time.d.ts +1 -1
  170. package/internals/utils/date-time-utils.d.ts +1 -1
  171. package/internals/utils/date-time-utils.js +5 -5
  172. package/internals/utils/date-utils.d.ts +11 -11
  173. package/internals/utils/date-utils.js +34 -34
  174. package/internals/utils/getDefaultReferenceDate.d.ts +2 -2
  175. package/internals/utils/getDefaultReferenceDate.js +16 -16
  176. package/internals/utils/time-utils.d.ts +5 -5
  177. package/internals/utils/time-utils.js +12 -12
  178. package/internals/utils/valueManagers.js +4 -4
  179. package/managers/useDateManager.js +12 -12
  180. package/managers/useDateTimeManager.js +13 -13
  181. package/managers/useTimeManager.js +10 -11
  182. package/package.json +2 -2
  183. package/validation/useValidation.d.ts +2 -3
  184. package/validation/useValidation.js +2 -2
  185. package/validation/validateDate.js +6 -6
  186. package/validation/validateTime.js +6 -6
@@ -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 { useUtils } from "../internals/hooks/useUtils.js";
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 utils = useUtils();
25
+ const adapter = usePickerAdapter();
27
26
  const translations = usePickerTranslations();
28
27
  return React.useMemo(() => {
29
- const formatKey = ampm ?? utils.is12HourCycleInCurrentLocale() ? 'fullTime12h' : 'fullTime24h';
30
- const formattedValue = utils.isValid(value) ? utils.format(value, formatKey) : null;
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, utils]);
31
+ }, [value, translations, adapter]);
33
32
  };
34
33
  }
35
34
  function useApplyDefaultValuesToTimeFieldInternalProps(internalProps) {
36
- const utils = useUtils();
35
+ const adapter = usePickerAdapter();
37
36
  const validationProps = useApplyDefaultValuesToTimeValidationProps(internalProps);
38
- const ampm = React.useMemo(() => internalProps.ampm ?? utils.is12HourCycleInCurrentLocale(), [internalProps.ampm, utils]);
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 ? utils.formats.fullTime12h : utils.formats.fullTime24h)
41
- }), [internalProps, validationProps, ampm, utils]);
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 { MuiPickersAdapterContextValue } from "../LocalizationProvider/LocalizationProvider.js";
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: MuiPickersAdapterContextValue;
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 { useLocalizationContext } from "../internals/hooks/useUtils.js";
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 = useLocalizationContext();
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.utils.date(undefined, timezone);
33
+ const now = adapter.date(undefined, timezone);
34
34
  switch (true) {
35
- case !adapter.utils.isValid(value):
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.utils.isAfterDay(value, now)):
43
+ case Boolean(disableFuture && adapter.isAfterDay(value, now)):
44
44
  return 'disableFuture';
45
- case Boolean(disablePast && adapter.utils.isBeforeDay(value, now)):
45
+ case Boolean(disablePast && adapter.isBeforeDay(value, now)):
46
46
  return 'disablePast';
47
- case Boolean(minDate && adapter.utils.isBeforeDay(value, minDate)):
47
+ case Boolean(minDate && adapter.isBeforeDay(value, minDate)):
48
48
  return 'minDate';
49
- case Boolean(maxDate && adapter.utils.isAfterDay(value, maxDate)):
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.utils.date(undefined, timezone);
35
- const isAfter = createIsAfterIgnoreDatePart(disableIgnoringDatePartForTimeValidation, adapter.utils);
34
+ const now = adapter.date(undefined, timezone);
35
+ const isAfter = createIsAfterIgnoreDatePart(disableIgnoringDatePartForTimeValidation, adapter);
36
36
  switch (true) {
37
- case !adapter.utils.isValid(value):
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.utils.isAfter(value, now)):
43
+ case Boolean(disableFuture && adapter.isAfter(value, now)):
44
44
  return 'disableFuture';
45
- case Boolean(disablePast && adapter.utils.isBefore(value, now)):
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.utils.getMinutes(value) % minutesStep !== 0):
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");
@@ -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 _useUtils = require("../internals/hooks/useUtils");
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 utils = (0, _useUtils.useUtils)();
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)(utils), [utils]);
28
+ const localizedDigits = React.useMemo(() => (0, _useField.getLocalizedDigits)(adapter), [adapter]);
29
29
  const {
30
- format = pickerContext?.fieldFormat ?? utils.formats.fullDate
30
+ format = pickerContext?.fieldFormat ?? adapter.formats.fullDate
31
31
  } = parameters;
32
32
  return React.useMemo(() => {
33
33
  const sections = (0, _buildSectionsFromFormat.buildSectionsFromFormat)({
34
- utils,
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
- }, [utils, isRtl, translations, localizedDigits, format]);
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 _useUtils = require("../internals/hooks/useUtils");
9
- const usePickerTranslations = () => (0, _useUtils.useLocalizationContext)().localeText;
8
+ var _usePickerAdapter = require("./usePickerAdapter");
9
+ const usePickerTranslations = () => (0, _usePickerAdapter.useLocalizationContext)().localeText;
10
10
  exports.usePickerTranslations = usePickerTranslations;
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v8.5.2
2
+ * @mui/x-date-pickers v8.6.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -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" | "content" | "title", string>;
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: "stretch",
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 utils = (0, _useUtils.useUtils)();
18
+ const adapter = (0, _usePickerAdapter.usePickerAdapter)();
19
19
  return React.useMemo(() => {
20
- const now = utils.date(undefined, timezone);
21
- const lastEnabledMonth = utils.startOfMonth(disableFuture && utils.isBefore(now, maxDate) ? now : maxDate);
22
- return !utils.isAfter(lastEnabledMonth, month);
23
- }, [disableFuture, maxDate, month, utils, timezone]);
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 utils = (0, _useUtils.useUtils)();
30
+ const adapter = (0, _usePickerAdapter.usePickerAdapter)();
31
31
  return React.useMemo(() => {
32
- const now = utils.date(undefined, timezone);
33
- const firstEnabledMonth = utils.startOfMonth(disablePast && utils.isAfter(now, minDate) ? now : minDate);
34
- return !utils.isBefore(firstEnabledMonth, month);
35
- }, [disablePast, minDate, month, utils, timezone]);
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 utils = (0, _useUtils.useUtils)();
39
- const cleanDate = React.useMemo(() => !utils.isValid(date) ? null : date, [utils, date]);
40
- const meridiemMode = (0, _timeUtils.getMeridiem)(cleanDate, utils);
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), utils);
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, utils]);
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
- utils,
6
+ adapter,
7
7
  props,
8
8
  timezone
9
9
  }: {
10
10
  value: PickerValue;
11
11
  referenceDate: PickerValidDate | undefined;
12
- utils: MuiPickersAdapter;
12
+ adapter: MuiPickersAdapter;
13
13
  props: TProps;
14
14
  timezone: PickersTimezone;
15
15
  }) => PickerValidDate;
@@ -12,18 +12,18 @@ var _getDefaultReferenceDate = require("../utils/getDefaultReferenceDate");
12
12
  const useClockReferenceDate = ({
13
13
  value,
14
14
  referenceDate: referenceDateProp,
15
- utils,
15
+ adapter,
16
16
  props,
17
17
  timezone
18
18
  }) => {
19
19
  const referenceDate = React.useMemo(() => _valueManagers.singleItemValueManager.getInitialReferenceValue({
20
20
  value,
21
- utils,
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)(utils, timezone, 'date')
26
+ getTodayDate: () => (0, _dateUtils.getTodayDate)(adapter, timezone, 'date')
27
27
  }),
28
28
  // We only want to compute the reference date on mount.
29
29
  [] // eslint-disable-line react-hooks/exhaustive-deps
@@ -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 _useUtils = require("./useUtils");
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 utils = (0, _useUtils.useUtils)();
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(utils, valueWithInputTimezone), [utils, valueManager, valueWithInputTimezone]);
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(utils, inputTimezone, newValue);
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 utils.getTimezone(referenceDate);
49
+ return adapter.getTimezone(referenceDate);
50
50
  }
51
51
  return 'default';
52
- }, [timezoneProp, inputTimezone, referenceDate, utils]);
53
- const valueWithTimezoneToRender = React.useMemo(() => valueManager.setTimezone(utils, timezoneToRender, valueWithInputTimezone), [valueManager, utils, timezoneToRender, valueWithInputTimezone]);
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
- utils: MuiPickersAdapter;
4
+ adapter: MuiPickersAdapter;
5
5
  format: string;
6
6
  formatDensity: 'dense' | 'spacious';
7
7
  isRtl: boolean;
@@ -8,16 +8,16 @@ exports.buildSectionsFromFormat = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var _useField = require("./useField.utils");
10
10
  const expandFormat = ({
11
- utils,
11
+ adapter,
12
12
  format
13
13
  }) => {
14
14
  // Expand the provided format
15
15
  let formatExpansionOverflow = 10;
16
16
  let prevFormat = format;
17
- let nextFormat = utils.expandFormat(format);
17
+ let nextFormat = adapter.expandFormat(format);
18
18
  while (nextFormat !== prevFormat) {
19
19
  prevFormat = nextFormat;
20
- nextFormat = utils.expandFormat(prevFormat);
20
+ nextFormat = adapter.expandFormat(prevFormat);
21
21
  formatExpansionOverflow -= 1;
22
22
  if (formatExpansionOverflow < 0) {
23
23
  throw new Error('MUI X: The format expansion seems to be in an infinite loop. Please open an issue with the format passed to the component.');
@@ -26,14 +26,14 @@ const expandFormat = ({
26
26
  return nextFormat;
27
27
  };
28
28
  const getEscapedPartsFromFormat = ({
29
- utils,
29
+ adapter,
30
30
  expandedFormat
31
31
  }) => {
32
32
  const escapedParts = [];
33
33
  const {
34
34
  start: startChar,
35
35
  end: endChar
36
- } = utils.escapedCharacters;
36
+ } = adapter.escapedCharacters;
37
37
  const regExp = new RegExp(`(\\${startChar}[^\\${endChar}]*\\${endChar})+`, 'g');
38
38
  let match = null;
39
39
  // eslint-disable-next-line no-cond-assign
@@ -45,12 +45,12 @@ const getEscapedPartsFromFormat = ({
45
45
  }
46
46
  return escapedParts;
47
47
  };
48
- const getSectionPlaceholder = (utils, localeText, sectionConfig, sectionFormat) => {
48
+ const getSectionPlaceholder = (adapter, localeText, sectionConfig, sectionFormat) => {
49
49
  switch (sectionConfig.type) {
50
50
  case 'year':
51
51
  {
52
52
  return localeText.fieldYearPlaceholder({
53
- digitAmount: utils.formatByString(utils.date(undefined, 'default'), sectionFormat).length,
53
+ digitAmount: adapter.formatByString(adapter.date(undefined, 'default'), sectionFormat).length,
54
54
  format: sectionFormat
55
55
  });
56
56
  }
@@ -105,7 +105,7 @@ const getSectionPlaceholder = (utils, localeText, sectionConfig, sectionFormat)
105
105
  }
106
106
  };
107
107
  const createSection = ({
108
- utils,
108
+ adapter,
109
109
  date,
110
110
  shouldRespectLeadingZeros,
111
111
  localeText,
@@ -117,15 +117,15 @@ const createSection = ({
117
117
  if (token === '') {
118
118
  throw new Error('MUI X: Should not call `commitToken` with an empty token');
119
119
  }
120
- const sectionConfig = (0, _useField.getDateSectionConfigFromFormatToken)(utils, token);
121
- const hasLeadingZerosInFormat = (0, _useField.doesSectionFormatHaveLeadingZeros)(utils, sectionConfig.contentType, sectionConfig.type, token);
120
+ const sectionConfig = (0, _useField.getDateSectionConfigFromFormatToken)(adapter, token);
121
+ const hasLeadingZerosInFormat = (0, _useField.doesSectionFormatHaveLeadingZeros)(adapter, sectionConfig.contentType, sectionConfig.type, token);
122
122
  const hasLeadingZerosInInput = shouldRespectLeadingZeros ? hasLeadingZerosInFormat : sectionConfig.contentType === 'digit';
123
- const isValidDate = utils.isValid(date);
124
- let sectionValue = isValidDate ? utils.formatByString(date, token) : '';
123
+ const isValidDate = adapter.isValid(date);
124
+ let sectionValue = isValidDate ? adapter.formatByString(date, token) : '';
125
125
  let maxLength = null;
126
126
  if (hasLeadingZerosInInput) {
127
127
  if (hasLeadingZerosInFormat) {
128
- maxLength = sectionValue === '' ? utils.formatByString(now, token).length : sectionValue.length;
128
+ maxLength = sectionValue === '' ? adapter.formatByString(now, token).length : sectionValue.length;
129
129
  } else {
130
130
  if (sectionConfig.maxLength == null) {
131
131
  throw new Error(`MUI X: The token ${token} should have a 'maxLength' property on it's adapter`);
@@ -140,7 +140,7 @@ const createSection = ({
140
140
  format: token,
141
141
  maxLength,
142
142
  value: sectionValue,
143
- placeholder: getSectionPlaceholder(utils, localeText, sectionConfig, token),
143
+ placeholder: getSectionPlaceholder(adapter, localeText, sectionConfig, token),
144
144
  hasLeadingZerosInFormat,
145
145
  hasLeadingZerosInInput,
146
146
  startSeparator,
@@ -150,16 +150,16 @@ const createSection = ({
150
150
  };
151
151
  const buildSections = parameters => {
152
152
  const {
153
- utils,
153
+ adapter,
154
154
  expandedFormat,
155
155
  escapedParts
156
156
  } = parameters;
157
- const now = utils.date(undefined);
157
+ const now = adapter.date(undefined);
158
158
  const sections = [];
159
159
  let startSeparator = '';
160
160
 
161
161
  // This RegExp tests if the beginning of a string corresponds to a supported token
162
- const validTokens = Object.keys(utils.formatTokenMap).sort((a, b) => b.length - a.length); // Sort to put longest word first
162
+ const validTokens = Object.keys(adapter.formatTokenMap).sort((a, b) => b.length - a.length); // Sort to put longest word first
163
163
 
164
164
  const regExpFirstWordInFormat = /^([a-zA-Z]+)/;
165
165
  const regExpWordOnlyComposedOfTokens = new RegExp(`^(${validTokens.join('|')})*$`);
@@ -201,12 +201,12 @@ export interface FieldValueManager<TValue extends PickerValidValue> {
201
201
  * Update the reference value with the new value.
202
202
  * This method must make sure that no date inside the returned `referenceValue` is invalid.
203
203
  * @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.
204
- * @param {MuiPickersAdapter} utils The utils to manipulate the date.
204
+ * @param {MuiPickersAdapter} adapter The adapter to manipulate the date.
205
205
  * @param {TValue} value The new value from which we want to take all valid dates in the `referenceValue` state.
206
206
  * @param {TValue} prevReferenceValue The previous reference value. It is used as a fallback for invalid dates in the new value.
207
207
  * @returns {TValue} The new reference value with no invalid date.
208
208
  */
209
- updateReferenceValue: (utils: MuiPickersAdapter, value: TValue, prevReferenceValue: InferNonNullablePickerValue<TValue>) => InferNonNullablePickerValue<TValue>;
209
+ updateReferenceValue: (adapter: MuiPickersAdapter, value: TValue, prevReferenceValue: InferNonNullablePickerValue<TValue>) => InferNonNullablePickerValue<TValue>;
210
210
  /**
211
211
  * Extract from the given value the date that contains the given section.
212
212
  * @param {TValue} value The value to extract the date from.