@mui/x-date-pickers 8.0.0-alpha.1 → 8.0.0-alpha.3

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 (165) hide show
  1. package/AdapterMoment/AdapterMoment.js +10 -0
  2. package/CHANGELOG.md +330 -7
  3. package/DateCalendar/DateCalendar.types.d.ts +2 -1
  4. package/DateCalendar/PickersFadeTransitionGroup.js +4 -6
  5. package/DateCalendar/PickersSlideTransition.js +12 -5
  6. package/DateCalendar/useCalendarState.d.ts +6 -4
  7. package/DateField/DateField.js +5 -4
  8. package/DateField/DateField.types.d.ts +10 -9
  9. package/DatePicker/DatePicker.types.d.ts +3 -3
  10. package/DatePicker/DatePickerToolbar.d.ts +3 -2
  11. package/DatePicker/shared.d.ts +6 -5
  12. package/DateTimeField/DateTimeField.js +5 -4
  13. package/DateTimeField/DateTimeField.types.d.ts +10 -10
  14. package/DateTimePicker/DateTimePicker.types.d.ts +3 -3
  15. package/DateTimePicker/DateTimePickerTabs.js +8 -6
  16. package/DateTimePicker/DateTimePickerToolbar.d.ts +2 -3
  17. package/DateTimePicker/shared.d.ts +6 -6
  18. package/DayCalendarSkeleton/DayCalendarSkeleton.js +10 -19
  19. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +2 -1
  20. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +10 -21
  21. package/MultiSectionDigitalClock/MultiSectionDigitalClock.types.d.ts +6 -6
  22. package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.d.ts +4 -4
  23. package/PickersActionBar/PickersActionBar.js +8 -1
  24. package/PickersCalendarHeader/PickersCalendarHeader.js +8 -7
  25. package/PickersCalendarHeader/PickersCalendarHeader.types.d.ts +3 -4
  26. package/PickersLayout/PickersLayout.d.ts +7 -5
  27. package/PickersLayout/PickersLayout.js +22 -27
  28. package/PickersLayout/PickersLayout.types.d.ts +14 -15
  29. package/PickersLayout/usePickerLayout.d.ts +5 -4
  30. package/PickersLayout/usePickerLayout.js +19 -12
  31. package/PickersShortcuts/PickersShortcuts.d.ts +7 -6
  32. package/PickersShortcuts/PickersShortcuts.js +8 -1
  33. package/README.md +7 -4
  34. package/TimeField/TimeField.js +5 -4
  35. package/TimeField/TimeField.types.d.ts +10 -10
  36. package/TimePicker/TimePicker.types.d.ts +3 -3
  37. package/TimePicker/TimePickerToolbar.d.ts +2 -3
  38. package/TimePicker/shared.d.ts +6 -6
  39. package/hooks/useParsedFormat.d.ts +2 -2
  40. package/hooks/useParsedFormat.js +1 -1
  41. package/index.js +1 -1
  42. package/internals/components/PickerProvider.d.ts +2 -15
  43. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -10
  44. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.ts +11 -8
  45. package/internals/components/PickersToolbar.d.ts +3 -3
  46. package/internals/hooks/useClockReferenceDate.d.ts +2 -1
  47. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +14 -14
  48. package/internals/hooks/useField/useField.d.ts +3 -3
  49. package/internals/hooks/useField/useField.types.d.ts +45 -45
  50. package/internals/hooks/useField/useField.utils.d.ts +4 -3
  51. package/internals/hooks/useField/useFieldCharacterEditing.d.ts +6 -5
  52. package/internals/hooks/useField/useFieldState.d.ts +9 -8
  53. package/internals/hooks/useField/useFieldState.js +0 -1
  54. package/internals/hooks/useField/useFieldV6TextField.d.ts +4 -3
  55. package/internals/hooks/useFieldOwnerState.d.ts +6 -0
  56. package/internals/hooks/useFieldOwnerState.js +12 -0
  57. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +11 -11
  58. package/internals/hooks/useOpenState.d.ts +3 -2
  59. package/internals/hooks/useOpenState.js +10 -9
  60. package/internals/hooks/usePicker/usePicker.d.ts +3 -3
  61. package/internals/hooks/usePicker/usePicker.js +4 -10
  62. package/internals/hooks/usePicker/usePicker.types.d.ts +7 -7
  63. package/internals/hooks/usePicker/usePickerProvider.d.ts +5 -6
  64. package/internals/hooks/usePicker/usePickerProvider.js +8 -10
  65. package/internals/hooks/usePicker/usePickerValue.d.ts +3 -2
  66. package/internals/hooks/usePicker/usePickerValue.js +22 -12
  67. package/internals/hooks/usePicker/usePickerValue.types.d.ts +51 -24
  68. package/internals/hooks/usePicker/usePickerViews.d.ts +10 -10
  69. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +5 -6
  70. package/internals/hooks/useValueWithTimezone.d.ts +5 -4
  71. package/internals/hooks/useViews.d.ts +5 -5
  72. package/internals/index.d.ts +4 -2
  73. package/internals/index.js +1 -0
  74. package/internals/models/fields.d.ts +6 -1
  75. package/internals/models/pickers.d.ts +1 -0
  76. package/internals/models/pickers.js +1 -0
  77. package/internals/models/props/basePickerProps.d.ts +4 -3
  78. package/internals/models/props/time.d.ts +2 -1
  79. package/internals/models/props/toolbar.d.ts +2 -1
  80. package/internals/models/value.d.ts +9 -0
  81. package/internals/utils/date-utils.d.ts +1 -1
  82. package/internals/utils/valueManagers.d.ts +4 -3
  83. package/locales/nlNL.js +7 -7
  84. package/models/adapters.d.ts +4 -4
  85. package/models/fields.d.ts +19 -5
  86. package/models/validation.d.ts +2 -1
  87. package/modern/AdapterMoment/AdapterMoment.js +10 -0
  88. package/modern/DateCalendar/PickersFadeTransitionGroup.js +4 -6
  89. package/modern/DateCalendar/PickersSlideTransition.js +12 -5
  90. package/modern/DateField/DateField.js +5 -4
  91. package/modern/DateTimeField/DateTimeField.js +5 -4
  92. package/modern/DateTimePicker/DateTimePickerTabs.js +8 -6
  93. package/modern/DayCalendarSkeleton/DayCalendarSkeleton.js +10 -19
  94. package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +10 -21
  95. package/modern/PickersActionBar/PickersActionBar.js +8 -1
  96. package/modern/PickersCalendarHeader/PickersCalendarHeader.js +8 -7
  97. package/modern/PickersLayout/PickersLayout.js +22 -27
  98. package/modern/PickersLayout/usePickerLayout.js +19 -12
  99. package/modern/PickersShortcuts/PickersShortcuts.js +8 -1
  100. package/modern/TimeField/TimeField.js +5 -4
  101. package/modern/hooks/useParsedFormat.js +1 -1
  102. package/modern/index.js +1 -1
  103. package/modern/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -10
  104. package/modern/internals/hooks/useField/useFieldState.js +0 -1
  105. package/modern/internals/hooks/useFieldOwnerState.js +12 -0
  106. package/modern/internals/hooks/useOpenState.js +10 -9
  107. package/modern/internals/hooks/usePicker/usePicker.js +4 -10
  108. package/modern/internals/hooks/usePicker/usePickerProvider.js +8 -10
  109. package/modern/internals/hooks/usePicker/usePickerValue.js +22 -12
  110. package/modern/internals/index.js +1 -0
  111. package/modern/internals/models/pickers.js +1 -0
  112. package/modern/locales/nlNL.js +7 -7
  113. package/modern/validation/useValidation.js +1 -1
  114. package/modern/validation/validateDate.js +8 -0
  115. package/modern/validation/validateDateTime.js +8 -0
  116. package/modern/validation/validateTime.js +8 -0
  117. package/node/AdapterMoment/AdapterMoment.js +10 -0
  118. package/node/DateCalendar/PickersFadeTransitionGroup.js +4 -6
  119. package/node/DateCalendar/PickersSlideTransition.js +12 -5
  120. package/node/DateField/DateField.js +5 -4
  121. package/node/DateTimeField/DateTimeField.js +5 -4
  122. package/node/DateTimePicker/DateTimePickerTabs.js +8 -6
  123. package/node/DayCalendarSkeleton/DayCalendarSkeleton.js +10 -19
  124. package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +11 -22
  125. package/node/PickersActionBar/PickersActionBar.js +8 -1
  126. package/node/PickersCalendarHeader/PickersCalendarHeader.js +8 -7
  127. package/node/PickersLayout/PickersLayout.js +22 -27
  128. package/node/PickersLayout/usePickerLayout.js +19 -12
  129. package/node/PickersShortcuts/PickersShortcuts.js +8 -1
  130. package/node/TimeField/TimeField.js +5 -4
  131. package/node/hooks/useParsedFormat.js +1 -1
  132. package/node/index.js +1 -1
  133. package/node/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -10
  134. package/node/internals/hooks/useField/useFieldState.js +0 -1
  135. package/node/internals/hooks/useFieldOwnerState.js +20 -0
  136. package/node/internals/hooks/useOpenState.js +10 -9
  137. package/node/internals/hooks/usePicker/usePicker.js +5 -10
  138. package/node/internals/hooks/usePicker/usePickerProvider.js +9 -11
  139. package/node/internals/hooks/usePicker/usePickerValue.js +22 -11
  140. package/node/internals/index.js +7 -0
  141. package/node/internals/models/pickers.js +5 -0
  142. package/node/locales/nlNL.js +7 -7
  143. package/node/validation/useValidation.js +1 -1
  144. package/node/validation/validateDate.js +8 -0
  145. package/node/validation/validateDateTime.js +8 -0
  146. package/node/validation/validateTime.js +8 -0
  147. package/package.json +2 -2
  148. package/themeAugmentation/overrides.d.ts +1 -1
  149. package/themeAugmentation/props.d.ts +3 -2
  150. package/validation/useValidation.d.ts +7 -6
  151. package/validation/useValidation.js +1 -1
  152. package/validation/validateDate.d.ts +12 -3
  153. package/validation/validateDate.js +8 -0
  154. package/validation/validateDateTime.d.ts +12 -4
  155. package/validation/validateDateTime.js +8 -0
  156. package/validation/validateTime.d.ts +12 -3
  157. package/validation/validateTime.js +8 -0
  158. package/internals/hooks/useIsLandscape.d.ts +0 -4
  159. package/internals/hooks/useIsLandscape.js +0 -35
  160. package/internals/hooks/usePicker/usePickerLayoutProps.d.ts +0 -32
  161. package/internals/hooks/usePicker/usePickerLayoutProps.js +0 -31
  162. package/modern/internals/hooks/useIsLandscape.js +0 -35
  163. package/modern/internals/hooks/usePicker/usePickerLayoutProps.js +0 -31
  164. package/node/internals/hooks/useIsLandscape.js +0 -43
  165. package/node/internals/hooks/usePicker/usePickerLayoutProps.js +0 -38
@@ -1,16 +1,16 @@
1
1
  import * as React from 'react';
2
- import TextField from '@mui/material/TextField';
3
- import { SlotComponentProps } from '@mui/utils';
2
+ import type { TextFieldProps } from '@mui/material/TextField';
4
3
  import { MakeRequired, SlotComponentPropsFromProps } from '@mui/x-internals/types';
5
4
  import { BaseNonStaticPickerProps, BasePickerProps, BaseNonRangeNonStaticPickerProps } from '../../models/props/basePickerProps';
6
5
  import { PickersModalDialogSlots, PickersModalDialogSlotProps } from '../../components/PickersModalDialog';
7
6
  import { UsePickerParams } from '../usePicker';
8
- import { FieldSection, PickerFieldSlotProps, PickerOwnerState, PickerValidDate } from '../../../models';
7
+ import { FieldOwnerState, PickerFieldSlotProps, PickerOwnerState, PickerValidDate } from '../../../models';
9
8
  import { ExportedPickersLayoutSlots, ExportedPickersLayoutSlotProps, PickersLayoutSlotProps } from '../../../PickersLayout/PickersLayout.types';
10
9
  import { UsePickerValueNonStaticProps } from '../usePicker/usePickerValue.types';
11
10
  import { UsePickerViewsNonStaticProps, UsePickerViewsProps } from '../usePicker/usePickerViews';
12
- import { DateOrTimeViewWithMeridiem } from '../../models';
13
- export interface UseMobilePickerSlots<TView extends DateOrTimeViewWithMeridiem> extends PickersModalDialogSlots, ExportedPickersLayoutSlots<PickerValidDate | null, TView> {
11
+ import { DateOrTimeViewWithMeridiem, PickerValue } from '../../models';
12
+ import { PickersTextFieldProps } from '../../../PickersTextField';
13
+ export interface UseMobilePickerSlots<TView extends DateOrTimeViewWithMeridiem> extends PickersModalDialogSlots, ExportedPickersLayoutSlots<PickerValue, TView> {
14
14
  /**
15
15
  * Component used to enter the date with the keyboard.
16
16
  */
@@ -21,15 +21,15 @@ export interface UseMobilePickerSlots<TView extends DateOrTimeViewWithMeridiem>
21
21
  */
22
22
  textField?: React.ElementType;
23
23
  }
24
- export interface ExportedUseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends PickersModalDialogSlotProps, ExportedPickersLayoutSlotProps<PickerValidDate | null, TView> {
25
- field?: SlotComponentPropsFromProps<PickerFieldSlotProps<PickerValidDate | null, FieldSection, TEnableAccessibleFieldDOMStructure>, {}, PickerOwnerState>;
26
- textField?: SlotComponentProps<typeof TextField, {}, Record<string, any>>;
24
+ export interface ExportedUseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends PickersModalDialogSlotProps, ExportedPickersLayoutSlotProps<PickerValue, TView> {
25
+ field?: SlotComponentPropsFromProps<PickerFieldSlotProps<PickerValue, TEnableAccessibleFieldDOMStructure>, {}, PickerOwnerState>;
26
+ textField?: SlotComponentPropsFromProps<PickersTextFieldProps | TextFieldProps, {}, FieldOwnerState>;
27
27
  }
28
- export interface UseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseMobilePickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<PickerValidDate | null, TView>, 'toolbar'> {
28
+ export interface UseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseMobilePickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<PickerValue, TView>, 'toolbar'> {
29
29
  }
30
30
  export interface MobileOnlyPickerProps extends BaseNonStaticPickerProps, BaseNonRangeNonStaticPickerProps, UsePickerValueNonStaticProps, UsePickerViewsNonStaticProps {
31
31
  }
32
- export interface UseMobilePickerProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, TExternalProps extends UsePickerViewsProps<any, TView, any, any>> extends BasePickerProps<PickerValidDate | null, TView, TError, TExternalProps, {}>, MakeRequired<MobileOnlyPickerProps, 'format'> {
32
+ export interface UseMobilePickerProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, TExternalProps extends UsePickerViewsProps<any, TView, any, any>> extends BasePickerProps<PickerValue, TView, TError, TExternalProps, {}>, MakeRequired<MobileOnlyPickerProps, 'format'> {
33
33
  /**
34
34
  * Overridable component slots.
35
35
  * @default {}
@@ -41,7 +41,7 @@ export interface UseMobilePickerProps<TView extends DateOrTimeViewWithMeridiem,
41
41
  */
42
42
  slotProps?: UseMobilePickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>;
43
43
  }
44
- export interface UseMobilePickerParams<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseMobilePickerProps<TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>> extends Pick<UsePickerParams<PickerValidDate | null, TView, FieldSection, TExternalProps, {}>, 'valueManager' | 'valueType' | 'validator'> {
44
+ export interface UseMobilePickerParams<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseMobilePickerProps<TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>> extends Pick<UsePickerParams<PickerValue, TView, TExternalProps, {}>, 'valueManager' | 'valueType' | 'validator'> {
45
45
  props: TExternalProps;
46
46
  getOpenDialogAriaText: (date: PickerValidDate | null) => string;
47
47
  }
@@ -1,9 +1,10 @@
1
+ import * as React from 'react';
1
2
  export interface OpenStateProps {
2
3
  open?: boolean;
3
4
  onOpen?: () => void;
4
5
  onClose?: () => void;
5
6
  }
6
7
  export declare const useOpenState: ({ open, onOpen, onClose }: OpenStateProps) => {
7
- isOpen: boolean;
8
- setIsOpen: (newIsOpen: boolean) => void;
8
+ open: boolean;
9
+ setOpen: (action: React.SetStateAction<boolean>) => void;
9
10
  };
@@ -5,7 +5,7 @@ export const useOpenState = ({
5
5
  onClose
6
6
  }) => {
7
7
  const isControllingOpenProp = React.useRef(typeof open === 'boolean').current;
8
- const [openState, setIsOpenState] = React.useState(false);
8
+ const [openState, setOpenState] = React.useState(false);
9
9
 
10
10
  // It is required to update inner state in useEffect in order to avoid situation when
11
11
  // Our component is not mounted yet, but `open` state is set to `true` (for example initially opened)
@@ -14,22 +14,23 @@ export const useOpenState = ({
14
14
  if (typeof open !== 'boolean') {
15
15
  throw new Error('You must not mix controlling and uncontrolled mode for `open` prop');
16
16
  }
17
- setIsOpenState(open);
17
+ setOpenState(open);
18
18
  }
19
19
  }, [isControllingOpenProp, open]);
20
- const setIsOpen = React.useCallback(newIsOpen => {
20
+ const setOpen = React.useCallback(action => {
21
+ const newOpen = typeof action === 'function' ? action(openState) : action;
21
22
  if (!isControllingOpenProp) {
22
- setIsOpenState(newIsOpen);
23
+ setOpenState(newOpen);
23
24
  }
24
- if (newIsOpen && onOpen) {
25
+ if (newOpen && onOpen) {
25
26
  onOpen();
26
27
  }
27
- if (!newIsOpen && onClose) {
28
+ if (!newOpen && onClose) {
28
29
  onClose();
29
30
  }
30
- }, [isControllingOpenProp, onOpen, onClose]);
31
+ }, [isControllingOpenProp, onOpen, onClose, openState]);
31
32
  return {
32
- isOpen: openState,
33
- setIsOpen
33
+ open: openState,
34
+ setOpen
34
35
  };
35
36
  };
@@ -1,4 +1,4 @@
1
1
  import { UsePickerParams, UsePickerProps, UsePickerResponse } from './usePicker.types';
2
- import { FieldSection, InferError } from '../../../models';
3
- import { DateOrTimeViewWithMeridiem } from '../../models';
4
- export declare const usePicker: <TValue, TView extends DateOrTimeViewWithMeridiem, TSection extends FieldSection, TExternalProps extends UsePickerProps<TValue, TView, any, any, any>, TAdditionalProps extends {}>({ props, valueManager, valueType, variant, additionalViewProps, validator, autoFocusView, rendererInterceptor, fieldRef, localeText, }: UsePickerParams<TValue, TView, TSection, TExternalProps, TAdditionalProps>) => UsePickerResponse<TValue, TView, TSection, InferError<TExternalProps>>;
2
+ import { InferError } from '../../../models';
3
+ import { DateOrTimeViewWithMeridiem, PickerValidValue } from '../../models';
4
+ export declare const usePicker: <TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any, any>, TAdditionalProps extends {}>({ props, valueManager, valueType, variant, additionalViewProps, validator, autoFocusView, rendererInterceptor, fieldRef, localeText, }: UsePickerParams<TValue, TView, TExternalProps, TAdditionalProps>) => UsePickerResponse<TValue, TView, InferError<TExternalProps>>;
@@ -1,7 +1,7 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
1
2
  import { warnOnce } from '@mui/x-internals/warning';
2
3
  import { usePickerValue } from "./usePickerValue.js";
3
4
  import { usePickerViews } from "./usePickerViews.js";
4
- import { usePickerLayoutProps } from "./usePickerLayoutProps.js";
5
5
  import { usePickerProvider } from "./usePickerProvider.js";
6
6
  export const usePicker = ({
7
7
  props,
@@ -35,19 +35,13 @@ export const usePicker = ({
35
35
  propsFromPickerValue: pickerValueResponse.viewProps,
36
36
  rendererInterceptor
37
37
  });
38
- const pickerLayoutResponse = usePickerLayoutProps({
39
- props,
40
- variant,
41
- propsFromPickerValue: pickerValueResponse.layoutProps,
42
- propsFromPickerViews: pickerViewsResponse.layoutProps
43
- });
44
38
  const providerProps = usePickerProvider({
45
39
  props,
46
- pickerValueResponse,
47
40
  localeText,
48
41
  valueManager,
49
42
  variant,
50
- views: pickerViewsResponse.views
43
+ views: pickerViewsResponse.views,
44
+ paramsFromUsePickerValue: pickerValueResponse.provider
51
45
  });
52
46
  return {
53
47
  // Picker value
@@ -59,7 +53,7 @@ export const usePicker = ({
59
53
  hasUIView: pickerViewsResponse.hasUIView,
60
54
  shouldRestoreFocus: pickerViewsResponse.shouldRestoreFocus,
61
55
  // Picker layout
62
- layoutProps: pickerLayoutResponse.layoutProps,
56
+ layoutProps: _extends({}, pickerViewsResponse.layoutProps, pickerValueResponse.layoutProps),
63
57
  // Picker provider
64
58
  providerProps,
65
59
  // Picker owner state
@@ -1,20 +1,20 @@
1
1
  import { UsePickerValueParams, UsePickerValueProps, UsePickerValueBaseProps, UsePickerValueResponse } from './usePickerValue.types';
2
2
  import { UsePickerViewsProps, UsePickerViewParams, UsePickerViewsResponse, UsePickerViewsBaseProps } from './usePickerViews';
3
- import { UsePickerLayoutPropsResponse } from './usePickerLayoutProps';
4
- import { FieldSection, PickerOwnerState } from '../../../models';
5
- import { DateOrTimeViewWithMeridiem } from '../../models';
3
+ import { PickerOwnerState } from '../../../models';
4
+ import { DateOrTimeViewWithMeridiem, PickerValidValue } from '../../models';
6
5
  import { UsePickerProviderParameters, UsePickerProviderProps, UsePickerProviderReturnValue } from './usePickerProvider';
7
6
  /**
8
7
  * Props common to all picker headless implementations.
9
8
  */
10
- export interface UsePickerBaseProps<TValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerValueBaseProps<TValue, TError>, UsePickerViewsBaseProps<TValue, TView, TExternalProps, TAdditionalProps>, UsePickerProviderProps {
9
+ export interface UsePickerBaseProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerValueBaseProps<TValue, TError>, UsePickerViewsBaseProps<TValue, TView, TExternalProps, TAdditionalProps>, UsePickerProviderProps {
11
10
  }
12
- export interface UsePickerProps<TValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerValueProps<TValue, TError>, UsePickerViewsProps<TValue, TView, TExternalProps, TAdditionalProps>, UsePickerProviderProps {
11
+ export interface UsePickerProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerValueProps<TValue, TError>, UsePickerViewsProps<TValue, TView, TExternalProps, TAdditionalProps>, UsePickerProviderProps {
13
12
  }
14
- export interface UsePickerParams<TValue, TView extends DateOrTimeViewWithMeridiem, TSection extends FieldSection, TExternalProps extends UsePickerProps<TValue, TView, any, any, any>, TAdditionalProps extends {}> extends Pick<UsePickerValueParams<TValue, TExternalProps>, 'valueManager' | 'valueType' | 'variant' | 'validator'>, Pick<UsePickerViewParams<TValue, TView, TSection, TExternalProps, TAdditionalProps>, 'additionalViewProps' | 'autoFocusView' | 'rendererInterceptor' | 'fieldRef'>, Pick<UsePickerProviderParameters<TValue>, 'localeText'> {
13
+ export interface UsePickerParams<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any, any>, TAdditionalProps extends {}> extends Pick<UsePickerValueParams<TValue, TExternalProps>, 'valueManager' | 'valueType' | 'variant' | 'validator'>, Pick<UsePickerViewParams<TValue, TView, TExternalProps, TAdditionalProps>, 'additionalViewProps' | 'autoFocusView' | 'rendererInterceptor' | 'fieldRef'>, Pick<UsePickerProviderParameters<TValue>, 'localeText'> {
15
14
  props: TExternalProps;
16
15
  }
17
- export interface UsePickerResponse<TValue, TView extends DateOrTimeViewWithMeridiem, TSection extends FieldSection, TError> extends Omit<UsePickerValueResponse<TValue, TSection, TError>, 'viewProps' | 'layoutProps'>, Omit<UsePickerViewsResponse<TView>, 'layoutProps' | 'views'>, UsePickerLayoutPropsResponse<TValue, TView> {
16
+ export interface UsePickerResponse<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError> extends Pick<UsePickerValueResponse<TValue, TError>, 'open' | 'actions' | 'fieldProps'>, Omit<UsePickerViewsResponse<TView>, 'layoutProps' | 'views'> {
18
17
  ownerState: PickerOwnerState;
19
18
  providerProps: UsePickerProviderReturnValue;
19
+ layoutProps: UsePickerValueResponse<TValue, TError>['layoutProps'] & UsePickerViewsResponse<TView>['layoutProps'];
20
20
  }
@@ -1,16 +1,15 @@
1
- import { FieldSection } from '../../../models';
2
- import { PickerValueManager, UsePickerValueResponse } from './usePickerValue.types';
1
+ import { PickerValueManager, UsePickerValueProviderParams } from './usePickerValue.types';
3
2
  import { PickerProviderProps } from '../../components/PickerProvider';
4
3
  import type { UsePickerProps } from './usePicker.types';
5
- import { DateOrTimeViewWithMeridiem, FormProps, PickerOrientation, PickerVariant } from '../../models';
4
+ import { DateOrTimeViewWithMeridiem, FormProps, PickerOrientation, PickerValidValue, PickerVariant } from '../../models';
6
5
  export declare const usePickerOrientation: (views: readonly DateOrTimeViewWithMeridiem[], customOrientation: PickerOrientation | undefined) => PickerOrientation;
7
- export declare function usePickerProvider<TValue>(parameters: UsePickerProviderParameters<TValue>): UsePickerProviderReturnValue;
8
- export interface UsePickerProviderParameters<TValue> extends Pick<PickerProviderProps, 'localeText'> {
6
+ export declare function usePickerProvider<TValue extends PickerValidValue>(parameters: UsePickerProviderParameters<TValue>): UsePickerProviderReturnValue;
7
+ export interface UsePickerProviderParameters<TValue extends PickerValidValue> extends Pick<PickerProviderProps, 'localeText'> {
9
8
  props: UsePickerProps<TValue, any, any, any, any>;
10
- pickerValueResponse: UsePickerValueResponse<TValue, FieldSection, any>;
11
9
  valueManager: PickerValueManager<TValue, any>;
12
10
  variant: PickerVariant;
13
11
  views: readonly DateOrTimeViewWithMeridiem[];
12
+ paramsFromUsePickerValue: UsePickerValueProviderParams<TValue>;
14
13
  }
15
14
  export interface UsePickerProviderReturnValue extends Omit<PickerProviderProps, 'children'> {
16
15
  }
@@ -1,3 +1,4 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
1
2
  import * as React from 'react';
2
3
  import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
3
4
  import { useUtils } from "../useUtils.js";
@@ -36,31 +37,28 @@ export const usePickerOrientation = (views, customOrientation) => {
36
37
  export function usePickerProvider(parameters) {
37
38
  const {
38
39
  props,
39
- pickerValueResponse,
40
40
  valueManager,
41
41
  localeText,
42
42
  variant,
43
- views
43
+ views,
44
+ paramsFromUsePickerValue
44
45
  } = parameters;
45
46
  const utils = useUtils();
46
47
  const orientation = usePickerOrientation(views, props.orientation);
47
48
  const ownerState = React.useMemo(() => ({
48
- isPickerValueEmpty: valueManager.areValuesEqual(utils, pickerValueResponse.viewProps.value, valueManager.emptyValue),
49
- isPickerOpen: pickerValueResponse.open,
49
+ isPickerValueEmpty: valueManager.areValuesEqual(utils, paramsFromUsePickerValue.value, valueManager.emptyValue),
50
+ isPickerOpen: paramsFromUsePickerValue.contextValue.open,
50
51
  isPickerDisabled: props.disabled ?? false,
51
52
  isPickerReadOnly: props.readOnly ?? false,
52
53
  pickerOrientation: orientation,
53
54
  pickerVariant: variant
54
- }), [utils, valueManager, pickerValueResponse.viewProps.value, pickerValueResponse.open, orientation, variant, props.disabled, props.readOnly]);
55
- const contextValue = React.useMemo(() => ({
56
- onOpen: pickerValueResponse.actions.onOpen,
57
- onClose: pickerValueResponse.actions.onClose,
58
- open: pickerValueResponse.open,
55
+ }), [utils, valueManager, paramsFromUsePickerValue.value, paramsFromUsePickerValue.contextValue.open, orientation, variant, props.disabled, props.readOnly]);
56
+ const contextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.contextValue, {
59
57
  disabled: props.disabled ?? false,
60
58
  readOnly: props.readOnly ?? false,
61
59
  variant,
62
60
  orientation
63
- }), [pickerValueResponse.actions.onOpen, pickerValueResponse.actions.onClose, pickerValueResponse.open, variant, orientation, props.disabled, props.readOnly]);
61
+ }), [paramsFromUsePickerValue.contextValue, variant, orientation, props.disabled, props.readOnly]);
64
62
  const privateContextValue = React.useMemo(() => ({
65
63
  ownerState
66
64
  }), [ownerState]);
@@ -1,6 +1,7 @@
1
- import { FieldSection, InferError } from '../../../models';
1
+ import { InferError } from '../../../models';
2
2
  import { UsePickerValueProps, UsePickerValueParams, UsePickerValueResponse } from './usePickerValue.types';
3
+ import { PickerValidValue } from '../../models';
3
4
  /**
4
5
  * Manage the value lifecycle of all the pickers.
5
6
  */
6
- export declare const usePickerValue: <TValue, TSection extends FieldSection, TExternalProps extends UsePickerValueProps<TValue, any>>({ props, valueManager, valueType, variant, validator, }: UsePickerValueParams<TValue, TExternalProps>) => UsePickerValueResponse<TValue, TSection, InferError<TExternalProps>>;
7
+ export declare const usePickerValue: <TValue extends PickerValidValue, TExternalProps extends UsePickerValueProps<TValue, any>>({ props, valueManager, valueType, variant, validator, }: UsePickerValueParams<TValue, TExternalProps>) => UsePickerValueResponse<TValue, InferError<TExternalProps>>;
@@ -5,7 +5,6 @@ import { useOpenState } from "../useOpenState.js";
5
5
  import { useLocalizationContext, useUtils } from "../useUtils.js";
6
6
  import { useValidation } from "../../../validation/index.js";
7
7
  import { useValueWithTimezone } from "../useValueWithTimezone.js";
8
-
9
8
  /**
10
9
  * Decide if the new value should be published
11
10
  * The published value will be passed to `onChange` if defined.
@@ -151,8 +150,8 @@ export const usePickerValue = ({
151
150
  const utils = useUtils();
152
151
  const adapter = useLocalizationContext();
153
152
  const {
154
- isOpen,
155
- setIsOpen
153
+ open,
154
+ setOpen
156
155
  } = useOpenState(props);
157
156
  const {
158
157
  timezone,
@@ -238,7 +237,7 @@ export const usePickerValue = ({
238
237
  onAccept(action.value, getContext());
239
238
  }
240
239
  if (shouldClose) {
241
- setIsOpen(false);
240
+ setOpen(false);
242
241
  }
243
242
  });
244
243
  if (dateState.lastControlledValue !== inValueWithoutRenderTimezone) {
@@ -289,11 +288,11 @@ export const usePickerValue = ({
289
288
  });
290
289
  const handleOpen = useEventCallback(event => {
291
290
  event.preventDefault();
292
- setIsOpen(true);
291
+ setOpen(true);
293
292
  });
294
293
  const handleClose = useEventCallback(event => {
295
294
  event?.preventDefault();
296
- setIsOpen(false);
295
+ setOpen(false);
297
296
  });
298
297
  const handleChange = useEventCallback((newValue, selectionState = 'partial') => updateDate({
299
298
  name: 'setValueFromView',
@@ -324,12 +323,12 @@ export const usePickerValue = ({
324
323
  value: dateState.draft,
325
324
  onChange: handleChangeFromField
326
325
  };
327
- const viewValue = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
326
+ const valueWithoutError = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
328
327
  const viewResponse = {
329
- value: viewValue,
328
+ value: valueWithoutError,
330
329
  onChange: handleChange,
331
330
  onClose: handleClose,
332
- open: isOpen
331
+ open
333
332
  };
334
333
  const isValid = testedValue => {
335
334
  const error = validator({
@@ -341,16 +340,27 @@ export const usePickerValue = ({
341
340
  return !valueManager.hasError(error);
342
341
  };
343
342
  const layoutResponse = _extends({}, actions, {
344
- value: viewValue,
343
+ value: valueWithoutError,
345
344
  onChange: handleChange,
346
345
  onSelectShortcut: handleSelectShortcut,
347
346
  isValid
348
347
  });
348
+ const contextValue = React.useMemo(() => {
349
+ return {
350
+ open,
351
+ setOpen
352
+ };
353
+ }, [open, setOpen]);
354
+ const providerParams = {
355
+ value: valueWithoutError,
356
+ contextValue
357
+ };
349
358
  return {
350
- open: isOpen,
359
+ open,
351
360
  fieldProps: fieldResponse,
352
361
  viewProps: viewResponse,
353
362
  layoutProps: layoutResponse,
354
- actions
363
+ actions,
364
+ provider: providerParams
355
365
  };
356
366
  };
@@ -1,13 +1,15 @@
1
+ import * as React from 'react';
1
2
  import { FieldChangeHandlerContext, UseFieldInternalProps } from '../useField';
2
3
  import { Validator } from '../../../validation';
3
4
  import { PickerVariant } from '../../models/common';
4
- import { FieldSection, TimezoneProps, MuiPickersAdapter, PickersTimezone, PickerChangeHandlerContext, PickerValidDate, OnErrorProps, InferError, PickerValueType } from '../../../models';
5
+ import { TimezoneProps, MuiPickersAdapter, PickersTimezone, PickerChangeHandlerContext, PickerValidDate, OnErrorProps, InferError, PickerValueType } from '../../../models';
5
6
  import { GetDefaultReferenceDateProps } from '../../utils/getDefaultReferenceDate';
6
7
  import { PickerShortcutChangeImportance, PickersShortcutsItemContext } from '../../../PickersShortcuts';
7
- export interface PickerValueManager<TValue, TError> {
8
+ import { InferNonNullablePickerValue, PickerValidValue } from '../../models';
9
+ export interface PickerValueManager<TValue extends PickerValidValue, TError> {
8
10
  /**
9
11
  * Determines if two values are equal.
10
- * @template TValue
12
+ * @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.
11
13
  * @param {MuiPickersAdapter} utils The adapter.
12
14
  * @param {TValue} valueLeft The first value to compare.
13
15
  * @param {TValue} valueRight The second value to compare.
@@ -20,7 +22,7 @@ export interface PickerValueManager<TValue, TError> {
20
22
  emptyValue: TValue;
21
23
  /**
22
24
  * Method returning the value to set when clicking the "Today" button
23
- * @template TValue
25
+ * @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.
24
26
  * @param {MuiPickersAdapter} utils The adapter.
25
27
  * @param {PickersTimezone} timezone The current timezone.
26
28
  * @param {PickerValueType} valueType The type of the value being edited.
@@ -28,7 +30,7 @@ export interface PickerValueManager<TValue, TError> {
28
30
  */
29
31
  getTodayValue: (utils: MuiPickersAdapter, timezone: PickersTimezone, valueType: PickerValueType) => TValue;
30
32
  /**
31
- * @template TValue
33
+ * @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.
32
34
  * Method returning the reference value to use when mounting the component.
33
35
  * @param {object} params The params of the method.
34
36
  * @param {PickerValidDate | undefined} params.referenceDate The referenceDate provided by the user.
@@ -48,10 +50,10 @@ export interface PickerValueManager<TValue, TError> {
48
50
  granularity: number;
49
51
  timezone: PickersTimezone;
50
52
  getTodayDate?: () => PickerValidDate;
51
- }) => TValue;
53
+ }) => InferNonNullablePickerValue<TValue>;
52
54
  /**
53
55
  * Method parsing the input value to replace all invalid dates by `null`.
54
- * @template TValue
56
+ * @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.
55
57
  * @param {MuiPickersAdapter} utils The adapter.
56
58
  * @param {TValue} value The value to parse.
57
59
  * @returns {TValue} The value without invalid date.
@@ -59,7 +61,7 @@ export interface PickerValueManager<TValue, TError> {
59
61
  cleanValue: (utils: MuiPickersAdapter, value: TValue) => TValue;
60
62
  /**
61
63
  * Generates the new value, given the previous value and the new proposed value.
62
- * @template TValue
64
+ * @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.
63
65
  * @param {MuiPickersAdapter} utils The adapter.
64
66
  * @param {TValue} lastValidDateValue The last valid value.
65
67
  * @param {TValue} value The proposed value.
@@ -88,7 +90,7 @@ export interface PickerValueManager<TValue, TError> {
88
90
  /**
89
91
  * Return the timezone of the date inside a value.
90
92
  * Throw an error on range picker if both values don't have the same timezone.
91
- @template TValue
93
+ * @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.
92
94
  @param {MuiPickersAdapter} utils The utils to manipulate the date.
93
95
  @param {TValue} value The current value.
94
96
  @returns {string | null} The timezone of the current value.
@@ -96,7 +98,7 @@ export interface PickerValueManager<TValue, TError> {
96
98
  getTimezone: (utils: MuiPickersAdapter, value: TValue) => string | null;
97
99
  /**
98
100
  * Change the timezone of the dates inside a value.
99
- @template TValue
101
+ * @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.
100
102
  @param {MuiPickersAdapter} utils The utils to manipulate the date.
101
103
  @param {PickersTimezone} timezone The current timezone.
102
104
  @param {TValue} value The value to convert.
@@ -105,19 +107,19 @@ export interface PickerValueManager<TValue, TError> {
105
107
  setTimezone: (utils: MuiPickersAdapter, timezone: PickersTimezone, value: TValue) => TValue;
106
108
  }
107
109
  export type PickerSelectionState = 'partial' | 'shallow' | 'finish';
108
- export interface UsePickerValueState<TValue> {
110
+ export interface UsePickerValueState<TValue extends PickerValidValue> {
109
111
  /**
110
112
  * Date displayed on the views and the field.
111
113
  * It is updated whenever the user modifies something.
112
114
  */
113
115
  draft: TValue;
114
116
  /**
115
- * Last value published (e.g: the last value for which `shouldPublishValue` returned `true`).
117
+ * Last value published (the last value for which `shouldPublishValue` returned `true`).
116
118
  * If `onChange` is defined, it's the value that was passed on the last call to this callback.
117
119
  */
118
120
  lastPublishedValue: TValue;
119
121
  /**
120
- * Last value committed (e.g: the last value for which `shouldCommitValue` returned `true`).
122
+ * Last value committed (the last value for which `shouldCommitValue` returned `true`).
121
123
  * If `onAccept` is defined, it's the value that was passed on the last call to this callback.
122
124
  */
123
125
  lastCommittedValue: TValue;
@@ -135,12 +137,12 @@ export interface UsePickerValueState<TValue> {
135
137
  */
136
138
  hasBeenModifiedSinceMount: boolean;
137
139
  }
138
- export interface PickerValueUpdaterParams<TValue, TError> {
140
+ export interface PickerValueUpdaterParams<TValue extends PickerValidValue, TError> {
139
141
  action: PickerValueUpdateAction<TValue, TError>;
140
142
  dateState: UsePickerValueState<TValue>;
141
143
  /**
142
144
  * Check if the new draft value has changed compared to some given value.
143
- * @template TValue
145
+ * @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.
144
146
  * @param {TValue} comparisonValue The value to compare the new draft value with.
145
147
  * @returns {boolean} `true` if the new draft value is equal to the comparison value.
146
148
  */
@@ -148,7 +150,7 @@ export interface PickerValueUpdaterParams<TValue, TError> {
148
150
  isControlled: boolean;
149
151
  closeOnSelect: boolean;
150
152
  }
151
- export type PickerValueUpdateAction<TValue, TError> = {
153
+ export type PickerValueUpdateAction<TValue extends PickerValidValue, TError> = {
152
154
  name: 'setValueFromView';
153
155
  value: TValue;
154
156
  selectionState: PickerSelectionState;
@@ -169,7 +171,7 @@ export type PickerValueUpdateAction<TValue, TError> = {
169
171
  /**
170
172
  * Props used to handle the value that are common to all pickers.
171
173
  */
172
- export interface UsePickerValueBaseProps<TValue, TError> extends OnErrorProps<TValue, TError> {
174
+ export interface UsePickerValueBaseProps<TValue extends PickerValidValue, TError> extends OnErrorProps<TValue, TError> {
173
175
  /**
174
176
  * The selected value.
175
177
  * Used when the component is controlled.
@@ -225,10 +227,10 @@ export interface UsePickerValueNonStaticProps {
225
227
  /**
226
228
  * Props used to handle the value of the pickers.
227
229
  */
228
- export interface UsePickerValueProps<TValue, TError> extends UsePickerValueBaseProps<TValue, TError>, UsePickerValueNonStaticProps, TimezoneProps {
230
+ export interface UsePickerValueProps<TValue extends PickerValidValue, TError> extends UsePickerValueBaseProps<TValue, TError>, UsePickerValueNonStaticProps, TimezoneProps {
229
231
  referenceDate?: PickerValidDate;
230
232
  }
231
- export interface UsePickerValueParams<TValue, TExternalProps extends UsePickerValueProps<TValue, any>> {
233
+ export interface UsePickerValueParams<TValue extends PickerValidValue, TExternalProps extends UsePickerValueProps<TValue, any>> {
232
234
  props: TExternalProps;
233
235
  valueManager: PickerValueManager<TValue, InferError<TExternalProps>>;
234
236
  valueType: PickerValueType;
@@ -244,11 +246,11 @@ export interface UsePickerValueActions {
244
246
  onOpen: (event: React.UIEvent) => void;
245
247
  onClose: (event?: React.UIEvent) => void;
246
248
  }
247
- export type UsePickerValueFieldResponse<TValue, TSection extends FieldSection, TError> = Required<Pick<UseFieldInternalProps<TValue, TSection, any, TError>, 'value' | 'onChange'>>;
249
+ export type UsePickerValueFieldResponse<TValue extends PickerValidValue, TError> = Required<Pick<UseFieldInternalProps<TValue, any, TError>, 'value' | 'onChange'>>;
248
250
  /**
249
251
  * Props passed to `usePickerViews`.
250
252
  */
251
- export interface UsePickerValueViewsResponse<TValue> {
253
+ export interface UsePickerValueViewsResponse<TValue extends PickerValidValue> {
252
254
  value: TValue;
253
255
  onChange: (value: TValue, selectionState?: PickerSelectionState) => void;
254
256
  open: boolean;
@@ -257,16 +259,41 @@ export interface UsePickerValueViewsResponse<TValue> {
257
259
  /**
258
260
  * Props passed to `usePickerLayoutProps`.
259
261
  */
260
- export interface UsePickerValueLayoutResponse<TValue> extends UsePickerValueActions {
262
+ export interface UsePickerValueLayoutResponse<TValue extends PickerValidValue> extends UsePickerValueActions {
261
263
  value: TValue;
262
264
  onChange: (newValue: TValue) => void;
263
265
  onSelectShortcut: (newValue: TValue, changeImportance: PickerShortcutChangeImportance, shortcut: PickersShortcutsItemContext) => void;
264
266
  isValid: (value: TValue) => boolean;
265
267
  }
266
- export interface UsePickerValueResponse<TValue, TSection extends FieldSection, TError> {
268
+ /**
269
+ * Params passed to `usePickerProvider`.
270
+ */
271
+ export interface UsePickerValueProviderParams<TValue extends PickerValidValue> {
272
+ value: TValue;
273
+ contextValue: UsePickerValueContextValue;
274
+ }
275
+ export interface UsePickerValueResponse<TValue extends PickerValidValue, TError> {
267
276
  open: boolean;
268
277
  actions: UsePickerValueActions;
269
278
  viewProps: UsePickerValueViewsResponse<TValue>;
270
- fieldProps: UsePickerValueFieldResponse<TValue, TSection, TError>;
279
+ fieldProps: UsePickerValueFieldResponse<TValue, TError>;
271
280
  layoutProps: UsePickerValueLayoutResponse<TValue>;
281
+ provider: UsePickerValueProviderParams<TValue>;
282
+ }
283
+ export interface UsePickerValueContextValue {
284
+ /**
285
+ * Sets the current open state of the Picker.
286
+ * ```ts
287
+ * setOpen(true); // Opens the picker.
288
+ * setOpen(false); // Closes the picker.
289
+ * setOpen((prevOpen) => !prevOpen); // Toggles the open state.
290
+ * ```
291
+ * @param {React.SetStateAction<boolean>} action The new open state of the Picker.
292
+ * It can be a function that will receive the current open state.
293
+ */
294
+ setOpen: React.Dispatch<React.SetStateAction<boolean>>;
295
+ /**
296
+ * `true` if the picker is open, `false` otherwise.
297
+ */
298
+ open: boolean;
272
299
  }
@@ -3,11 +3,11 @@ import { SxProps } from '@mui/system';
3
3
  import { Theme } from '@mui/material/styles';
4
4
  import { UseViewsOptions } from '../useViews';
5
5
  import type { UsePickerValueViewsResponse } from './usePickerValue.types';
6
- import { DateOrTimeViewWithMeridiem } from '../../models';
7
- import { FieldRef, FieldSection, PickerValidDate, TimezoneProps } from '../../../models';
6
+ import { DateOrTimeViewWithMeridiem, PickerRangeValue, PickerValidValue, PickerValue } from '../../models';
7
+ import { FieldRef, PickerValidDate, TimezoneProps } from '../../../models';
8
8
  interface PickerViewsRendererBaseExternalProps<TView extends DateOrTimeViewWithMeridiem> extends Omit<UsePickerViewsProps<any, TView, any, any>, 'openTo' | 'viewRenderers'> {
9
9
  }
10
- export type PickerViewsRendererProps<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = Omit<TExternalProps, 'className' | 'sx'> & TAdditionalProps & UsePickerValueViewsResponse<TValue> & {
10
+ export type PickerViewsRendererProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = Omit<TExternalProps, 'className' | 'sx'> & TAdditionalProps & UsePickerValueViewsResponse<TValue> & {
11
11
  view: TView;
12
12
  views: readonly TView[];
13
13
  focusedView: TView | null;
@@ -15,14 +15,14 @@ export type PickerViewsRendererProps<TValue, TView extends DateOrTimeViewWithMer
15
15
  showViewSwitcher: boolean;
16
16
  timeViewsCount: number;
17
17
  };
18
- export type PickerViewRenderer<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = (props: PickerViewsRendererProps<TValue, TView, TExternalProps, TAdditionalProps>) => React.ReactNode;
19
- export type PickerViewRendererLookup<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<any>, TAdditionalProps extends {}> = {
18
+ export type PickerViewRenderer<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = (props: PickerViewsRendererProps<TValue, TView, TExternalProps, TAdditionalProps>) => React.ReactNode;
19
+ export type PickerViewRendererLookup<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<any>, TAdditionalProps extends {}> = {
20
20
  [K in TView]: PickerViewRenderer<TValue, K, TExternalProps, TAdditionalProps> | null;
21
21
  };
22
22
  /**
23
23
  * Props used to handle the views that are common to all pickers.
24
24
  */
25
- export interface UsePickerViewsBaseProps<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends Omit<UseViewsOptions<any, TView>, 'onChange' | 'onFocusedViewChange' | 'focusedView'>, TimezoneProps {
25
+ export interface UsePickerViewsBaseProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends Omit<UseViewsOptions<any, TView>, 'onChange' | 'onFocusedViewChange' | 'focusedView'>, TimezoneProps {
26
26
  /**
27
27
  * If `null`, the section will only have field editing.
28
28
  * If `undefined`, internally defined view will be used.
@@ -52,16 +52,16 @@ export interface UsePickerViewsNonStaticProps {
52
52
  /**
53
53
  * Props used to handle the value of the pickers.
54
54
  */
55
- export interface UsePickerViewsProps<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerViewsBaseProps<TValue, TView, TExternalProps, TAdditionalProps> {
55
+ export interface UsePickerViewsProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerViewsBaseProps<TValue, TView, TExternalProps, TAdditionalProps> {
56
56
  className?: string;
57
57
  sx?: SxProps<Theme>;
58
58
  }
59
- export interface UsePickerViewParams<TValue, TView extends DateOrTimeViewWithMeridiem, TSection extends FieldSection, TExternalProps extends UsePickerViewsProps<TValue, TView, TExternalProps, TAdditionalProps>, TAdditionalProps extends {}> {
59
+ export interface UsePickerViewParams<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, TExternalProps, TAdditionalProps>, TAdditionalProps extends {}> {
60
60
  props: TExternalProps;
61
61
  propsFromPickerValue: UsePickerValueViewsResponse<TValue>;
62
62
  additionalViewProps: TAdditionalProps;
63
63
  autoFocusView: boolean;
64
- fieldRef: React.RefObject<FieldRef<TSection>> | undefined;
64
+ fieldRef: React.RefObject<FieldRef<PickerValue> | FieldRef<PickerRangeValue>> | undefined;
65
65
  /**
66
66
  * A function that intercepts the regular picker rendering.
67
67
  * Can be used to consume the provided `viewRenderers` and render a custom component wrapping them.
@@ -93,5 +93,5 @@ export interface UsePickerViewsLayoutResponse<TView extends DateOrTimeViewWithMe
93
93
  * - Handles the switch between UI views and field views
94
94
  * - Handles the focus management when switching views
95
95
  */
96
- export declare const usePickerViews: <TValue, TView extends DateOrTimeViewWithMeridiem, TSection extends FieldSection, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}>({ props, propsFromPickerValue, additionalViewProps, autoFocusView, rendererInterceptor, fieldRef, }: UsePickerViewParams<TValue, TView, TSection, TExternalProps, TAdditionalProps>) => UsePickerViewsResponse<TView>;
96
+ export declare const usePickerViews: <TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}>({ props, propsFromPickerValue, additionalViewProps, autoFocusView, rendererInterceptor, fieldRef, }: UsePickerViewParams<TValue, TView, TExternalProps, TAdditionalProps>) => UsePickerViewsResponse<TView>;
97
97
  export {};