@mui/x-date-pickers 8.0.0-alpha.5 → 8.0.0-alpha.6

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 (105) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/DatePicker/DatePickerToolbar.d.ts +1 -2
  3. package/DatePicker/DatePickerToolbar.js +6 -17
  4. package/DateTimePicker/DateTimePicker.types.d.ts +2 -2
  5. package/DateTimePicker/DateTimePickerTabs.d.ts +2 -5
  6. package/DateTimePicker/DateTimePickerTabs.js +6 -13
  7. package/DateTimePicker/DateTimePickerToolbar.d.ts +8 -4
  8. package/DateTimePicker/DateTimePickerToolbar.js +13 -24
  9. package/DateTimePicker/shared.d.ts +2 -2
  10. package/DesktopDatePicker/DesktopDatePicker.types.d.ts +2 -3
  11. package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +2 -2
  12. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +1 -2
  13. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -11
  14. package/DesktopTimePicker/DesktopTimePicker.types.d.ts +2 -2
  15. package/MobileDatePicker/MobileDatePicker.types.d.ts +2 -3
  16. package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +4 -4
  17. package/MobileTimePicker/MobileTimePicker.types.d.ts +4 -4
  18. package/PickersActionBar/PickersActionBar.d.ts +0 -4
  19. package/PickersActionBar/PickersActionBar.js +12 -13
  20. package/PickersLayout/PickersLayout.d.ts +2 -2
  21. package/PickersLayout/PickersLayout.js +1 -11
  22. package/PickersLayout/PickersLayout.types.d.ts +12 -14
  23. package/PickersLayout/usePickerLayout.d.ts +2 -2
  24. package/PickersLayout/usePickerLayout.js +3 -18
  25. package/StaticDatePicker/StaticDatePicker.types.d.ts +2 -3
  26. package/StaticDateTimePicker/StaticDateTimePicker.types.d.ts +2 -2
  27. package/StaticTimePicker/StaticTimePicker.types.d.ts +2 -2
  28. package/TimePicker/TimePicker.types.d.ts +2 -2
  29. package/TimePicker/TimePickerToolbar.d.ts +2 -2
  30. package/TimePicker/TimePickerToolbar.js +6 -20
  31. package/hooks/index.d.ts +1 -0
  32. package/hooks/index.js +2 -1
  33. package/hooks/usePickerActionsContext.d.ts +5 -0
  34. package/hooks/usePickerActionsContext.js +16 -0
  35. package/hooks/usePickerContext.d.ts +3 -1
  36. package/hooks/usePickerContext.js +0 -1
  37. package/index.js +1 -1
  38. package/internals/components/PickerProvider.d.ts +11 -6
  39. package/internals/components/PickerProvider.js +12 -6
  40. package/internals/components/PickersModalDialog.d.ts +1 -3
  41. package/internals/components/PickersModalDialog.js +9 -3
  42. package/internals/components/PickersPopper.d.ts +1 -3
  43. package/internals/components/PickersPopper.js +11 -6
  44. package/internals/components/PickersToolbar.d.ts +3 -3
  45. package/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -9
  46. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +5 -5
  47. package/internals/hooks/useMobilePicker/useMobilePicker.js +8 -7
  48. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +5 -5
  49. package/internals/hooks/usePicker/usePicker.js +1 -3
  50. package/internals/hooks/usePicker/usePicker.types.d.ts +2 -2
  51. package/internals/hooks/usePicker/usePickerProvider.js +5 -4
  52. package/internals/hooks/usePicker/usePickerValue.js +46 -64
  53. package/internals/hooks/usePicker/usePickerValue.types.d.ts +38 -17
  54. package/internals/hooks/usePicker/usePickerViews.d.ts +15 -4
  55. package/internals/hooks/usePicker/usePickerViews.js +9 -7
  56. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +4 -4
  57. package/internals/index.d.ts +4 -4
  58. package/internals/index.js +1 -1
  59. package/internals/models/props/tabs.d.ts +0 -13
  60. package/internals/models/props/toolbar.d.ts +1 -16
  61. package/modern/DatePicker/DatePickerToolbar.js +6 -17
  62. package/modern/DateTimePicker/DateTimePickerTabs.js +6 -13
  63. package/modern/DateTimePicker/DateTimePickerToolbar.js +13 -24
  64. package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -11
  65. package/modern/PickersActionBar/PickersActionBar.js +12 -13
  66. package/modern/PickersLayout/PickersLayout.js +1 -11
  67. package/modern/PickersLayout/usePickerLayout.js +3 -18
  68. package/modern/TimePicker/TimePickerToolbar.js +6 -20
  69. package/modern/hooks/index.js +2 -1
  70. package/modern/hooks/usePickerActionsContext.js +16 -0
  71. package/modern/hooks/usePickerContext.js +0 -1
  72. package/modern/index.js +1 -1
  73. package/modern/internals/components/PickerProvider.js +12 -6
  74. package/modern/internals/components/PickersModalDialog.js +9 -3
  75. package/modern/internals/components/PickersPopper.js +11 -6
  76. package/modern/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -9
  77. package/modern/internals/hooks/useMobilePicker/useMobilePicker.js +8 -7
  78. package/modern/internals/hooks/usePicker/usePicker.js +1 -3
  79. package/modern/internals/hooks/usePicker/usePickerProvider.js +5 -4
  80. package/modern/internals/hooks/usePicker/usePickerValue.js +46 -64
  81. package/modern/internals/hooks/usePicker/usePickerViews.js +9 -7
  82. package/modern/internals/index.js +1 -1
  83. package/node/DatePicker/DatePickerToolbar.js +6 -17
  84. package/node/DateTimePicker/DateTimePickerTabs.js +6 -13
  85. package/node/DateTimePicker/DateTimePickerToolbar.js +14 -25
  86. package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +1 -11
  87. package/node/PickersActionBar/PickersActionBar.js +12 -13
  88. package/node/PickersLayout/PickersLayout.js +1 -11
  89. package/node/PickersLayout/usePickerLayout.js +3 -18
  90. package/node/TimePicker/TimePickerToolbar.js +6 -20
  91. package/node/hooks/index.js +8 -1
  92. package/node/hooks/usePickerActionsContext.js +22 -0
  93. package/node/index.js +1 -1
  94. package/node/internals/components/PickerProvider.js +13 -7
  95. package/node/internals/components/PickersModalDialog.js +9 -3
  96. package/node/internals/components/PickersPopper.js +11 -6
  97. package/node/internals/hooks/useDesktopPicker/useDesktopPicker.js +9 -9
  98. package/node/internals/hooks/useMobilePicker/useMobilePicker.js +8 -7
  99. package/node/internals/hooks/usePicker/usePicker.js +1 -3
  100. package/node/internals/hooks/usePicker/usePickerProvider.js +5 -4
  101. package/node/internals/hooks/usePicker/usePickerValue.js +46 -64
  102. package/node/internals/hooks/usePicker/usePickerViews.js +9 -7
  103. package/node/internals/index.js +2 -2
  104. package/package.json +2 -2
  105. package/themeAugmentation/props.d.ts +2 -3
@@ -52,8 +52,6 @@ export const useDesktopPicker = _ref => {
52
52
  const labelId = useId();
53
53
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
54
54
  const {
55
- open,
56
- actions,
57
55
  hasUIView,
58
56
  layoutProps,
59
57
  providerProps,
@@ -85,7 +83,11 @@ export const useDesktopPicker = _ref => {
85
83
  externalSlotProps: innerSlotProps?.openPickerButton,
86
84
  additionalProps: {
87
85
  disabled: disabled || readOnly,
88
- onClick: open ? actions.onClose : actions.onOpen,
86
+ // This direct access to `providerProps` will go away in https://github.com/mui/mui-x/pull/15671
87
+ onClick: event => {
88
+ event.preventDefault();
89
+ providerProps.contextValue.setOpen(prevOpen => !prevOpen);
90
+ },
89
91
  'aria-label': getOpenDialogAriaText(pickerFieldProps.value),
90
92
  edge: inputAdornmentProps.position
91
93
  },
@@ -121,7 +123,7 @@ export const useDesktopPicker = _ref => {
121
123
  sx,
122
124
  label,
123
125
  name,
124
- focused: open ? true : undefined
126
+ focused: providerProps.contextValue.open ? true : undefined
125
127
  }, isToolbarHidden && {
126
128
  id: labelId
127
129
  }, !!inputRef && {
@@ -170,12 +172,10 @@ export const useDesktopPicker = _ref => {
170
172
  slots: slotsForField,
171
173
  slotProps: slotProps,
172
174
  unstableFieldRef: handleFieldRef
173
- })), /*#__PURE__*/_jsx(PickersPopper, _extends({
175
+ })), /*#__PURE__*/_jsx(PickersPopper, {
174
176
  role: "dialog",
175
177
  placement: "bottom-start",
176
- anchorEl: containerRef.current
177
- }, actions, {
178
- open: open,
178
+ anchorEl: containerRef.current,
179
179
  slots: slots,
180
180
  slotProps: slotProps,
181
181
  shouldRestoreFocus: shouldRestoreFocus,
@@ -185,7 +185,7 @@ export const useDesktopPicker = _ref => {
185
185
  slotProps: slotProps,
186
186
  children: renderCurrentView()
187
187
  }))
188
- }))]
188
+ })]
189
189
  }));
190
190
  return {
191
191
  renderPicker
@@ -14,7 +14,7 @@ import { DateOrTimeViewWithMeridiem, PickerValue } from '../../models';
14
14
  import { UseClearableFieldSlots, UseClearableFieldSlotProps } from '../../../hooks/useClearableField';
15
15
  import { PickersTextFieldProps } from '../../../PickersTextField';
16
16
  import { UsePickerProviderNonStaticProps } from '../usePicker/usePickerProvider';
17
- export interface UseDesktopPickerSlots<TView extends DateOrTimeViewWithMeridiem> extends Pick<PickersPopperSlots, 'desktopPaper' | 'desktopTransition' | 'desktopTrapFocus' | 'popper'>, ExportedPickersLayoutSlots<PickerValue, TView>, UseClearableFieldSlots {
17
+ export interface UseDesktopPickerSlots extends Pick<PickersPopperSlots, 'desktopPaper' | 'desktopTransition' | 'desktopTrapFocus' | 'popper'>, ExportedPickersLayoutSlots<PickerValue>, UseClearableFieldSlots {
18
18
  /**
19
19
  * Component used to enter the date with the keyboard.
20
20
  */
@@ -39,9 +39,9 @@ export interface UseDesktopPickerSlots<TView extends DateOrTimeViewWithMeridiem>
39
39
  */
40
40
  openPickerIcon: React.ElementType;
41
41
  }
42
- export interface UseDesktopPickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseDesktopPickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<PickerValue, TView>, 'toolbar'> {
42
+ export interface UseDesktopPickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseDesktopPickerSlotProps<TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<PickerValue>, 'toolbar'> {
43
43
  }
44
- export interface ExportedUseDesktopPickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends PickersPopperSlotProps, ExportedPickersLayoutSlotProps<PickerValue, TView>, UseClearableFieldSlotProps {
44
+ export interface ExportedUseDesktopPickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends PickersPopperSlotProps, ExportedPickersLayoutSlotProps<PickerValue>, UseClearableFieldSlotProps {
45
45
  field?: SlotComponentPropsFromProps<PickerFieldSlotProps<PickerValue, TEnableAccessibleFieldDOMStructure>, {}, PickerOwnerState>;
46
46
  textField?: SlotComponentPropsFromProps<PickersTextFieldProps | TextFieldProps, {}, FieldOwnerState>;
47
47
  inputAdornment?: SlotComponentPropsFromProps<InputAdornmentProps, {}, PickerOwnerState>;
@@ -60,12 +60,12 @@ export interface UseDesktopPickerProps<TView extends DateOrTimeViewWithMeridiem,
60
60
  * Overridable component slots.
61
61
  * @default {}
62
62
  */
63
- slots: UseDesktopPickerSlots<TView>;
63
+ slots: UseDesktopPickerSlots;
64
64
  /**
65
65
  * The props used for each component slot.
66
66
  * @default {}
67
67
  */
68
- slotProps?: UseDesktopPickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>;
68
+ slotProps?: UseDesktopPickerSlotProps<TEnableAccessibleFieldDOMStructure>;
69
69
  }
70
70
  export interface UseDesktopPickerParams<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseDesktopPickerProps<TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>> extends Pick<UsePickerParams<PickerValue, TView, TExternalProps, {}>, 'valueManager' | 'valueType' | 'validator' | 'rendererInterceptor'> {
71
71
  props: TExternalProps;
@@ -46,8 +46,6 @@ export const useMobilePicker = _ref => {
46
46
  const labelId = useId();
47
47
  const isToolbarHidden = innerSlotProps?.toolbar?.hidden ?? false;
48
48
  const {
49
- open,
50
- actions,
51
49
  layoutProps,
52
50
  providerProps,
53
51
  renderCurrentView,
@@ -86,8 +84,12 @@ export const useMobilePicker = _ref => {
86
84
  }, isToolbarHidden && {
87
85
  id: labelId
88
86
  }, !(disabled || readOnly) && {
89
- onClick: actions.onOpen,
90
- onKeyDown: onSpaceOrEnter(actions.onOpen)
87
+ // These direct access to `providerProps` will go away in https://github.com/mui/mui-x/pull/15671
88
+ onClick: event => {
89
+ event.preventDefault();
90
+ providerProps.contextValue.setOpen(true);
91
+ },
92
+ onKeyDown: onSpaceOrEnter(() => providerProps.contextValue.setOpen(true))
91
93
  }, !!inputRef && {
92
94
  inputRef
93
95
  }),
@@ -124,8 +126,7 @@ export const useMobilePicker = _ref => {
124
126
  slots: slotsForField,
125
127
  slotProps: slotProps,
126
128
  unstableFieldRef: handleFieldRef
127
- })), /*#__PURE__*/_jsx(PickersModalDialog, _extends({}, actions, {
128
- open: open,
129
+ })), /*#__PURE__*/_jsx(PickersModalDialog, {
129
130
  slots: slots,
130
131
  slotProps: slotProps,
131
132
  children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps?.layout, {
@@ -133,7 +134,7 @@ export const useMobilePicker = _ref => {
133
134
  slotProps: slotProps,
134
135
  children: renderCurrentView()
135
136
  }))
136
- }))]
137
+ })]
137
138
  }));
138
139
  return {
139
140
  renderPicker
@@ -11,7 +11,7 @@ import { UsePickerViewsProps } from '../usePicker/usePickerViews';
11
11
  import { DateOrTimeViewWithMeridiem, PickerValue } from '../../models';
12
12
  import { PickersTextFieldProps } from '../../../PickersTextField';
13
13
  import { UsePickerProviderNonStaticProps } from '../usePicker/usePickerProvider';
14
- export interface UseMobilePickerSlots<TView extends DateOrTimeViewWithMeridiem> extends PickersModalDialogSlots, ExportedPickersLayoutSlots<PickerValue, TView> {
14
+ export interface UseMobilePickerSlots extends PickersModalDialogSlots, ExportedPickersLayoutSlots<PickerValue> {
15
15
  /**
16
16
  * Component used to enter the date with the keyboard.
17
17
  */
@@ -22,11 +22,11 @@ export interface UseMobilePickerSlots<TView extends DateOrTimeViewWithMeridiem>
22
22
  */
23
23
  textField?: React.ElementType;
24
24
  }
25
- export interface ExportedUseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends PickersModalDialogSlotProps, ExportedPickersLayoutSlotProps<PickerValue, TView> {
25
+ export interface ExportedUseMobilePickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends PickersModalDialogSlotProps, ExportedPickersLayoutSlotProps<PickerValue> {
26
26
  field?: SlotComponentPropsFromProps<PickerFieldSlotProps<PickerValue, TEnableAccessibleFieldDOMStructure>, {}, PickerOwnerState>;
27
27
  textField?: SlotComponentPropsFromProps<PickersTextFieldProps | TextFieldProps, {}, FieldOwnerState>;
28
28
  }
29
- export interface UseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseMobilePickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<PickerValue, TView>, 'toolbar'> {
29
+ export interface UseMobilePickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseMobilePickerSlotProps<TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<PickerValue>, 'toolbar'> {
30
30
  }
31
31
  export interface MobileOnlyPickerProps extends BaseNonStaticPickerProps, BaseNonRangeNonStaticPickerProps, UsePickerValueNonStaticProps, UsePickerProviderNonStaticProps {
32
32
  }
@@ -35,12 +35,12 @@ export interface UseMobilePickerProps<TView extends DateOrTimeViewWithMeridiem,
35
35
  * Overridable component slots.
36
36
  * @default {}
37
37
  */
38
- slots: UseMobilePickerSlots<TView>;
38
+ slots: UseMobilePickerSlots;
39
39
  /**
40
40
  * The props used for each component slot.
41
41
  * @default {}
42
42
  */
43
- slotProps?: UseMobilePickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>;
43
+ slotProps?: UseMobilePickerSlotProps<TEnableAccessibleFieldDOMStructure>;
44
44
  }
45
45
  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'> {
46
46
  props: TExternalProps;
@@ -45,15 +45,13 @@ export const usePicker = ({
45
45
  });
46
46
  return {
47
47
  // Picker value
48
- open: pickerValueResponse.open,
49
- actions: pickerValueResponse.actions,
50
48
  fieldProps: pickerValueResponse.fieldProps,
51
49
  // Picker views
52
50
  renderCurrentView: pickerViewsResponse.renderCurrentView,
53
51
  hasUIView: pickerViewsResponse.provider.hasUIView,
54
52
  shouldRestoreFocus: pickerViewsResponse.shouldRestoreFocus,
55
53
  // Picker layout
56
- layoutProps: _extends({}, pickerViewsResponse.layoutProps, pickerValueResponse.layoutProps),
54
+ layoutProps: _extends({}, pickerValueResponse.layoutProps),
57
55
  // Picker provider
58
56
  providerProps,
59
57
  // Picker owner state
@@ -13,9 +13,9 @@ export interface UsePickerProps<TValue extends PickerValidValue, TView extends D
13
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, TView>, 'localeText'> {
14
14
  props: TExternalProps;
15
15
  }
16
- export interface UsePickerResponse<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError> extends Pick<UsePickerValueResponse<TValue, TError>, 'open' | 'actions' | 'fieldProps'>, Pick<UsePickerViewsResponse<TView>, 'shouldRestoreFocus' | 'renderCurrentView'> {
16
+ export interface UsePickerResponse<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError> extends Pick<UsePickerValueResponse<TValue, TError>, 'fieldProps'>, Pick<UsePickerViewsResponse<TView>, 'shouldRestoreFocus' | 'renderCurrentView'> {
17
17
  ownerState: PickerOwnerState;
18
18
  providerProps: UsePickerProviderReturnValue;
19
- layoutProps: UsePickerValueResponse<TValue, TError>['layoutProps'] & UsePickerViewsResponse<TView>['layoutProps'];
19
+ layoutProps: UsePickerValueResponse<TValue, TError>['layoutProps'];
20
20
  hasUIView: boolean;
21
21
  }
@@ -53,18 +53,19 @@ export function usePickerProvider(parameters) {
53
53
  pickerOrientation: orientation,
54
54
  pickerVariant: variant
55
55
  }), [utils, valueManager, paramsFromUsePickerValue.value, paramsFromUsePickerValue.contextValue.open, orientation, variant, props.disabled, props.readOnly]);
56
- const contextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.contextValue, {
56
+ const contextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.contextValue, paramsFromUsePickerViews.contextValue, {
57
57
  disabled: props.disabled ?? false,
58
58
  readOnly: props.readOnly ?? false,
59
59
  variant,
60
60
  orientation
61
- }), [paramsFromUsePickerValue.contextValue, variant, orientation, props.disabled, props.readOnly]);
62
- const privateContextValue = React.useMemo(() => ({
61
+ }), [paramsFromUsePickerValue.contextValue, paramsFromUsePickerViews.contextValue, variant, orientation, props.disabled, props.readOnly]);
62
+ const privateContextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.privateContextValue, {
63
63
  ownerState
64
- }), [ownerState]);
64
+ }), [paramsFromUsePickerValue, ownerState]);
65
65
  return {
66
66
  localeText,
67
67
  contextValue,
68
+ actionsContextValue: paramsFromUsePickerValue.actionsContextValue,
68
69
  privateContextValue
69
70
  };
70
71
  }
@@ -251,49 +251,6 @@ export const usePickerValue = ({
251
251
  hasBeenModifiedSinceMount: true
252
252
  }));
253
253
  }
254
- const handleClear = useEventCallback(() => {
255
- updateDate({
256
- value: valueManager.emptyValue,
257
- name: 'setValueFromAction',
258
- pickerAction: 'clear'
259
- });
260
- });
261
- const handleAccept = useEventCallback(() => {
262
- updateDate({
263
- value: dateState.lastPublishedValue,
264
- name: 'setValueFromAction',
265
- pickerAction: 'accept'
266
- });
267
- });
268
- const handleDismiss = useEventCallback(() => {
269
- updateDate({
270
- value: dateState.lastPublishedValue,
271
- name: 'setValueFromAction',
272
- pickerAction: 'dismiss'
273
- });
274
- });
275
- const handleCancel = useEventCallback(() => {
276
- updateDate({
277
- value: dateState.lastCommittedValue,
278
- name: 'setValueFromAction',
279
- pickerAction: 'cancel'
280
- });
281
- });
282
- const handleSetToday = useEventCallback(() => {
283
- updateDate({
284
- value: valueManager.getTodayValue(utils, timezone, valueType),
285
- name: 'setValueFromAction',
286
- pickerAction: 'today'
287
- });
288
- });
289
- const handleOpen = useEventCallback(event => {
290
- event.preventDefault();
291
- setOpen(true);
292
- });
293
- const handleClose = useEventCallback(event => {
294
- event?.preventDefault();
295
- setOpen(false);
296
- });
297
254
  const handleChange = useEventCallback((newValue, selectionState = 'partial') => updateDate({
298
255
  name: 'setValueFromView',
299
256
  value: newValue,
@@ -310,15 +267,6 @@ export const usePickerValue = ({
310
267
  value: newValue,
311
268
  context
312
269
  }));
313
- const actions = {
314
- onClear: handleClear,
315
- onAccept: handleAccept,
316
- onDismiss: handleDismiss,
317
- onCancel: handleCancel,
318
- onSetToday: handleSetToday,
319
- onOpen: handleOpen,
320
- onClose: handleClose
321
- };
322
270
  const fieldResponse = {
323
271
  value: dateState.draft,
324
272
  onChange: handleChangeFromField
@@ -327,8 +275,8 @@ export const usePickerValue = ({
327
275
  const viewResponse = {
328
276
  value: valueWithoutError,
329
277
  onChange: handleChange,
330
- onClose: handleClose,
331
- open
278
+ open,
279
+ setOpen
332
280
  };
333
281
  const isValid = testedValue => {
334
282
  const error = validator({
@@ -339,28 +287,62 @@ export const usePickerValue = ({
339
287
  });
340
288
  return !valueManager.hasError(error);
341
289
  };
342
- const layoutResponse = _extends({}, actions, {
290
+ const layoutResponse = {
343
291
  value: valueWithoutError,
344
292
  onChange: handleChange,
345
293
  onSelectShortcut: handleSelectShortcut,
346
294
  isValid
295
+ };
296
+ const clearValue = useEventCallback(() => updateDate({
297
+ value: valueManager.emptyValue,
298
+ name: 'setValueFromAction',
299
+ pickerAction: 'clear'
300
+ }));
301
+ const setValueToToday = useEventCallback(() => updateDate({
302
+ value: valueManager.getTodayValue(utils, timezone, valueType),
303
+ name: 'setValueFromAction',
304
+ pickerAction: 'today'
305
+ }));
306
+ const acceptValueChanges = useEventCallback(() => updateDate({
307
+ value: dateState.lastPublishedValue,
308
+ name: 'setValueFromAction',
309
+ pickerAction: 'accept'
310
+ }));
311
+ const cancelValueChanges = useEventCallback(() => updateDate({
312
+ value: dateState.lastCommittedValue,
313
+ name: 'setValueFromAction',
314
+ pickerAction: 'cancel'
315
+ }));
316
+ const dismissViews = useEventCallback(() => {
317
+ updateDate({
318
+ value: dateState.lastPublishedValue,
319
+ name: 'setValueFromAction',
320
+ pickerAction: 'dismiss'
321
+ });
347
322
  });
348
- const contextValue = React.useMemo(() => {
349
- return {
350
- open,
351
- setOpen
352
- };
353
- }, [open, setOpen]);
323
+ const actionsContextValue = React.useMemo(() => ({
324
+ setOpen,
325
+ clearValue,
326
+ setValueToToday,
327
+ acceptValueChanges,
328
+ cancelValueChanges
329
+ }), [setOpen, clearValue, setValueToToday, acceptValueChanges, cancelValueChanges]);
330
+ const contextValue = React.useMemo(() => _extends({}, actionsContextValue, {
331
+ open
332
+ }), [actionsContextValue, open]);
333
+ const privateContextValue = React.useMemo(() => ({
334
+ dismissViews
335
+ }), [dismissViews]);
354
336
  const providerParams = {
355
337
  value: valueWithoutError,
356
- contextValue
338
+ contextValue,
339
+ actionsContextValue,
340
+ privateContextValue
357
341
  };
358
342
  return {
359
- open,
360
343
  fieldProps: fieldResponse,
361
344
  viewProps: viewResponse,
362
345
  layoutProps: layoutResponse,
363
- actions,
364
346
  provider: providerParams
365
347
  };
366
348
  };
@@ -237,15 +237,6 @@ export interface UsePickerValueParams<TValue extends PickerValidValue, TExternal
237
237
  variant: PickerVariant;
238
238
  validator: Validator<TValue, InferError<TExternalProps>, TExternalProps>;
239
239
  }
240
- export interface UsePickerValueActions {
241
- onAccept: () => void;
242
- onClear: () => void;
243
- onDismiss: () => void;
244
- onCancel: () => void;
245
- onSetToday: () => void;
246
- onOpen: (event: React.UIEvent) => void;
247
- onClose: (event?: React.UIEvent) => void;
248
- }
249
240
  export type UsePickerValueFieldResponse<TValue extends PickerValidValue, TError> = Required<Pick<UseFieldInternalProps<TValue, any, TError>, 'value' | 'onChange'>>;
250
241
  /**
251
242
  * Props passed to `usePickerViews`.
@@ -254,12 +245,12 @@ export interface UsePickerValueViewsResponse<TValue extends PickerValidValue> {
254
245
  value: TValue;
255
246
  onChange: (value: TValue, selectionState?: PickerSelectionState) => void;
256
247
  open: boolean;
257
- onClose: (event?: React.MouseEvent) => void;
248
+ setOpen: React.Dispatch<React.SetStateAction<boolean>>;
258
249
  }
259
250
  /**
260
251
  * Props passed to `usePickerLayoutProps`.
261
252
  */
262
- export interface UsePickerValueLayoutResponse<TValue extends PickerValidValue> extends UsePickerValueActions {
253
+ export interface UsePickerValueLayoutResponse<TValue extends PickerValidValue> {
263
254
  value: TValue;
264
255
  onChange: (newValue: TValue) => void;
265
256
  onSelectShortcut: (newValue: TValue, changeImportance: PickerShortcutChangeImportance, shortcut: PickersShortcutsItemContext) => void;
@@ -271,18 +262,24 @@ export interface UsePickerValueLayoutResponse<TValue extends PickerValidValue> e
271
262
  export interface UsePickerValueProviderParams<TValue extends PickerValidValue> {
272
263
  value: TValue;
273
264
  contextValue: UsePickerValueContextValue;
265
+ actionsContextValue: UsePickerValueActionsContextValue;
266
+ privateContextValue: UsePickerValuePrivateContextValue;
274
267
  }
275
268
  export interface UsePickerValueResponse<TValue extends PickerValidValue, TError> {
276
- open: boolean;
277
- actions: UsePickerValueActions;
278
269
  viewProps: UsePickerValueViewsResponse<TValue>;
279
270
  fieldProps: UsePickerValueFieldResponse<TValue, TError>;
280
271
  layoutProps: UsePickerValueLayoutResponse<TValue>;
281
272
  provider: UsePickerValueProviderParams<TValue>;
282
273
  }
283
- export interface UsePickerValueContextValue {
274
+ export interface UsePickerValueContextValue extends UsePickerValueActionsContextValue {
275
+ /**
276
+ * `true` if the picker is open, `false` otherwise.
277
+ */
278
+ open: boolean;
279
+ }
280
+ export interface UsePickerValueActionsContextValue {
284
281
  /**
285
- * Sets the current open state of the Picker.
282
+ * Set the current open state of the Picker.
286
283
  * ```ts
287
284
  * setOpen(true); // Opens the picker.
288
285
  * setOpen(false); // Closes the picker.
@@ -293,7 +290,31 @@ export interface UsePickerValueContextValue {
293
290
  */
294
291
  setOpen: React.Dispatch<React.SetStateAction<boolean>>;
295
292
  /**
296
- * `true` if the picker is open, `false` otherwise.
293
+ * Set the current value of the picker to be empty.
294
+ * The value will be `null` on single pickers and `[null, null]` on range pickers.
297
295
  */
298
- open: boolean;
296
+ clearValue: () => void;
297
+ /**
298
+ * Set the current value of the picker to be the current date.
299
+ * The value will be `today` on single pickers and `[today, today]` on range pickers.
300
+ * With `today` being the current date, with its time set to `00:00:00` on Date Pickers and its time set to the current time on Time and Date Pickers.
301
+ */
302
+ setValueToToday: () => void;
303
+ /**
304
+ * Accept the current value of the picker.
305
+ * Will call `onAccept` if defined.
306
+ * If the picker is re-opened, this value will be the one used to initialize the views.
307
+ */
308
+ acceptValueChanges: () => void;
309
+ /**
310
+ * Cancel the changes made to the current value of the picker.
311
+ * The value will be reset to the last accepted value.
312
+ */
313
+ cancelValueChanges: () => void;
314
+ }
315
+ export interface UsePickerValuePrivateContextValue {
316
+ /**
317
+ * Closes the picker and accepts the current value if it is not equal to the last accepted value.
318
+ */
319
+ dismissViews: () => void;
299
320
  }
@@ -7,7 +7,7 @@ import { DateOrTimeViewWithMeridiem, PickerRangeValue, PickerValidValue, PickerV
7
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 extends PickerValidValue, 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 & Pick<UsePickerValueViewsResponse<TValue>, 'value' | 'onChange'> & {
11
11
  view: TView;
12
12
  views: readonly TView[];
13
13
  focusedView: TView | null;
@@ -65,17 +65,28 @@ export interface UsePickerViewParams<TValue extends PickerValidValue, TView exte
65
65
  export interface UsePickerViewsResponse<TView extends DateOrTimeViewWithMeridiem> {
66
66
  renderCurrentView: () => React.ReactNode;
67
67
  shouldRestoreFocus: () => boolean;
68
- layoutProps: UsePickerViewsLayoutResponse<TView>;
69
68
  provider: UsePickerViewsProviderParams<TView>;
70
69
  }
71
- export interface UsePickerViewsLayoutResponse<TView extends DateOrTimeViewWithMeridiem> {
70
+ export interface UsePickerViewsContextValue<TView extends DateOrTimeViewWithMeridiem> {
71
+ /**
72
+ * Available views.
73
+ */
74
+ views: readonly TView[];
75
+ /**
76
+ * View currently rendered.
77
+ */
72
78
  view: TView | null;
79
+ /**
80
+ * Callback called when the view to render changes
81
+ * @template TView
82
+ * @param {TView} view The view to render
83
+ */
73
84
  onViewChange: (view: TView) => void;
74
- views: readonly TView[];
75
85
  }
76
86
  export interface UsePickerViewsProviderParams<TView extends DateOrTimeViewWithMeridiem> {
77
87
  hasUIView: boolean;
78
88
  views: readonly TView[];
89
+ contextValue: UsePickerViewsContextValue<TView>;
79
90
  }
80
91
  /**
81
92
  * Manage the views of all the pickers:
@@ -31,8 +31,9 @@ export const usePickerViews = ({
31
31
  }) => {
32
32
  const {
33
33
  onChange,
34
+ value,
34
35
  open,
35
- onClose
36
+ setOpen
36
37
  } = propsFromPickerValue;
37
38
  const {
38
39
  view: inView,
@@ -92,7 +93,7 @@ export const usePickerViews = ({
92
93
  useEnhancedEffect(() => {
93
94
  // Handle case of `DateTimePicker` without time renderers
94
95
  if (currentViewMode === 'field' && open) {
95
- onClose();
96
+ setOpen(false);
96
97
  setTimeout(() => {
97
98
  fieldRef?.current?.setSelectedSections(view);
98
99
  // focusing the input before the range selection is done
@@ -123,18 +124,18 @@ export const usePickerViews = ({
123
124
  setFocusedView(newView, true);
124
125
  }, [open]); // eslint-disable-line react-hooks/exhaustive-deps
125
126
 
126
- const layoutProps = {
127
+ const contextValue = React.useMemo(() => ({
127
128
  views,
128
129
  view: popperView,
129
130
  onViewChange: setView
130
- };
131
+ }), [views, popperView, setView]);
131
132
  const providerParams = {
132
133
  hasUIView,
133
- views
134
+ views,
135
+ contextValue
134
136
  };
135
137
  return {
136
138
  shouldRestoreFocus,
137
- layoutProps,
138
139
  provider: providerParams,
139
140
  renderCurrentView: () => {
140
141
  if (popperView == null) {
@@ -144,9 +145,10 @@ export const usePickerViews = ({
144
145
  if (renderer == null) {
145
146
  return null;
146
147
  }
147
- const rendererProps = _extends({}, propsToForwardToView, additionalViewProps, propsFromPickerValue, {
148
+ const rendererProps = _extends({}, propsToForwardToView, additionalViewProps, {
148
149
  views,
149
150
  timezone,
151
+ value,
150
152
  onChange: setValueAndGoToNextView,
151
153
  view: popperView,
152
154
  onViewChange: setView,
@@ -4,9 +4,9 @@ import { BasePickerProps } from '../../models/props/basePickerProps';
4
4
  import { UsePickerParams } from '../usePicker';
5
5
  import { UsePickerViewsProps } from '../usePicker/usePickerViews';
6
6
  import { DateOrTimeViewWithMeridiem, PickerValue } from '../../models';
7
- export interface UseStaticPickerSlots<TView extends DateOrTimeViewWithMeridiem> extends ExportedPickersLayoutSlots<PickerValue, TView> {
7
+ export interface UseStaticPickerSlots extends ExportedPickersLayoutSlots<PickerValue> {
8
8
  }
9
- export interface UseStaticPickerSlotProps<TView extends DateOrTimeViewWithMeridiem> extends ExportedPickersLayoutSlotProps<PickerValue, TView> {
9
+ export interface UseStaticPickerSlotProps extends ExportedPickersLayoutSlotProps<PickerValue> {
10
10
  }
11
11
  export interface StaticOnlyPickerProps {
12
12
  /**
@@ -31,12 +31,12 @@ export interface UseStaticPickerProps<TView extends DateOrTimeViewWithMeridiem,
31
31
  * Overridable component slots.
32
32
  * @default {}
33
33
  */
34
- slots?: UseStaticPickerSlots<TView>;
34
+ slots?: UseStaticPickerSlots;
35
35
  /**
36
36
  * The props used for each component slot.
37
37
  * @default {}
38
38
  */
39
- slotProps?: UseStaticPickerSlotProps<TView>;
39
+ slotProps?: UseStaticPickerSlotProps;
40
40
  }
41
41
  export interface UseStaticPickerParams<TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UseStaticPickerProps<TView, any, TExternalProps>> extends Pick<UsePickerParams<PickerValue, TView, TExternalProps, {}>, 'valueManager' | 'valueType' | 'validator'> {
42
42
  props: TExternalProps;
@@ -29,8 +29,8 @@ export type { UseFieldInternalProps, UseFieldParams, UseFieldResponse, FieldValu
29
29
  export { useFieldOwnerState } from './hooks/useFieldOwnerState';
30
30
  export type { MobileOnlyPickerProps } from './hooks/useMobilePicker';
31
31
  export { usePicker } from './hooks/usePicker';
32
- export type { UsePickerResponse, UsePickerParams, UsePickerProps, UsePickerValueFieldResponse, PickerViewsRendererProps, } from './hooks/usePicker';
33
- export type { UsePickerValueNonStaticProps, PickerValueManager, PickerSelectionState, } from './hooks/usePicker/usePickerValue.types';
32
+ export type { UsePickerParams, UsePickerProps, UsePickerValueFieldResponse, PickerViewsRendererProps, } from './hooks/usePicker';
33
+ export type { UsePickerValueContextValue, UsePickerValueNonStaticProps, PickerValueManager, PickerSelectionState, } from './hooks/usePicker/usePickerValue.types';
34
34
  export type { PickerViewRendererLookup, PickerViewRenderer, UsePickerViewsProps, } from './hooks/usePicker/usePickerViews';
35
35
  export type { UsePickerProviderNonStaticProps } from './hooks/usePicker/usePickerProvider';
36
36
  export { usePickerPrivateContext } from './hooks/usePickerPrivateContext';
@@ -46,7 +46,7 @@ export type { RangePosition } from './models/pickers';
46
46
  export type { BaseSingleInputFieldProps, FieldRangeSection } from './models/fields';
47
47
  export type { BasePickerProps, BasePickerInputProps, BaseNonStaticPickerProps, } from './models/props/basePickerProps';
48
48
  export type { BaseClockProps, DesktopOnlyTimePickerProps, AmPmProps } from './models/props/time';
49
- export type { BaseTabsProps, ExportedBaseTabsProps } from './models/props/tabs';
49
+ export type { ExportedBaseTabsProps } from './models/props/tabs';
50
50
  export type { BaseToolbarProps, ExportedBaseToolbarProps } from './models/props/toolbar';
51
51
  export type { FormProps } from './models/formProps';
52
52
  export type { PickerVariant, TimeViewWithMeridiem, DateOrTimeViewWithMeridiem, } from './models/common';
@@ -65,4 +65,4 @@ export type { DayCalendarProps, DayCalendarSlots, DayCalendarSlotProps, Exported
65
65
  export type { ExportedDateCalendarProps } from '../DateCalendar/DateCalendar.types';
66
66
  export { useCalendarState } from '../DateCalendar/useCalendarState';
67
67
  export { isInternalTimeView, isTimeView } from './utils/time-utils';
68
- export { DateTimePickerToolbarForceDesktopVariant } from '../DateTimePicker/DateTimePickerToolbar';
68
+ export { DateTimePickerToolbarOverrideContext } from '../DateTimePicker/DateTimePickerToolbar';
@@ -31,4 +31,4 @@ export { applyDefaultViewProps } from "./utils/views.js";
31
31
  export { DayCalendar } from "../DateCalendar/DayCalendar.js";
32
32
  export { useCalendarState } from "../DateCalendar/useCalendarState.js";
33
33
  export { isInternalTimeView, isTimeView } from "./utils/time-utils.js";
34
- export { DateTimePickerToolbarForceDesktopVariant } from "../DateTimePicker/DateTimePickerToolbar.js";
34
+ export { DateTimePickerToolbarOverrideContext } from "../DateTimePicker/DateTimePickerToolbar.js";
@@ -1,18 +1,5 @@
1
1
  import { SxProps } from '@mui/system';
2
2
  import { Theme } from '@mui/material/styles';
3
- import { DateOrTimeViewWithMeridiem } from '../common';
4
- export interface BaseTabsProps<TView extends DateOrTimeViewWithMeridiem> {
5
- /**
6
- * Currently visible picker view.
7
- */
8
- view: TView;
9
- /**
10
- * Callback called when a tab is clicked.
11
- * @template TView
12
- * @param {TView} view The view to open
13
- */
14
- onViewChange: (view: TView) => void;
15
- }
16
3
  export interface ExportedBaseTabsProps {
17
4
  className?: string;
18
5
  /**