@mui/x-date-pickers-pro 8.0.0-alpha.12 → 8.0.0-alpha.13

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 (141) hide show
  1. package/CHANGELOG.md +299 -0
  2. package/DateRangePicker/DateRangePicker.types.d.ts +2 -2
  3. package/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +2 -2
  4. package/DesktopDateRangePicker/DesktopDateRangePicker.js +2 -2
  5. package/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +2 -2
  6. package/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  7. package/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +2 -2
  8. package/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  9. package/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  10. package/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  11. package/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +6 -4
  12. package/dateRangeViewRenderers/dateRangeViewRenderers.js +13 -8
  13. package/esm/DateRangePicker/DateRangePicker.types.d.ts +2 -2
  14. package/esm/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +2 -2
  15. package/esm/DesktopDateRangePicker/DesktopDateRangePicker.js +2 -2
  16. package/esm/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +2 -2
  17. package/esm/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  18. package/esm/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +2 -2
  19. package/esm/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  20. package/esm/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  21. package/esm/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  22. package/esm/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +6 -4
  23. package/esm/dateRangeViewRenderers/dateRangeViewRenderers.js +13 -8
  24. package/esm/hooks/index.d.ts +2 -1
  25. package/esm/hooks/useMultiInputRangeField/index.d.ts +2 -1
  26. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeField.d.ts +37 -18
  27. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeField.js +41 -50
  28. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.d.ts +11 -0
  29. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.js +25 -0
  30. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.d.ts +4 -1
  31. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js +3 -2
  32. package/esm/hooks/useMultiInputRangeField/useTextFieldProps.d.ts +30 -0
  33. package/esm/hooks/useMultiInputRangeField/useTextFieldProps.js +141 -0
  34. package/esm/index.js +1 -1
  35. package/esm/internals/hooks/models/index.d.ts +1 -1
  36. package/esm/internals/hooks/models/useRangePicker.d.ts +1 -8
  37. package/esm/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +8 -75
  38. package/esm/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +16 -4
  39. package/esm/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -47
  40. package/esm/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +17 -4
  41. package/esm/internals/hooks/useRangePosition.d.ts +1 -4
  42. package/esm/internals/hooks/useRangePosition.js +1 -18
  43. package/esm/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +3 -3
  44. package/esm/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +26 -32
  45. package/esm/internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.d.ts +1 -1
  46. package/esm/internals/utils/createMultiInputRangeField/useTextFieldProps.d.ts +12 -0
  47. package/esm/internals/utils/createMultiInputRangeField/useTextFieldProps.js +36 -0
  48. package/esm/internals/utils/date-fields-utils.d.ts +4 -1
  49. package/esm/internals/utils/date-fields-utils.js +5 -1
  50. package/esm/internals/utils/releaseInfo.js +1 -1
  51. package/esm/managers/useDateRangeManager.js +8 -1
  52. package/esm/managers/useDateTimeRangeManager.js +8 -1
  53. package/esm/managers/useTimeRangeManager.js +10 -1
  54. package/esm/models/fields.d.ts +5 -18
  55. package/hooks/index.d.ts +2 -1
  56. package/hooks/useMultiInputRangeField/index.d.ts +2 -1
  57. package/hooks/useMultiInputRangeField/useMultiInputRangeField.d.ts +37 -18
  58. package/hooks/useMultiInputRangeField/useMultiInputRangeField.js +40 -51
  59. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.d.ts +11 -0
  60. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.js +31 -0
  61. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.d.ts +4 -1
  62. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js +3 -1
  63. package/hooks/useMultiInputRangeField/useTextFieldProps.d.ts +30 -0
  64. package/hooks/useMultiInputRangeField/useTextFieldProps.js +149 -0
  65. package/index.js +1 -1
  66. package/internals/hooks/models/index.d.ts +1 -1
  67. package/internals/hooks/models/useRangePicker.d.ts +1 -8
  68. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +7 -74
  69. package/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +16 -4
  70. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -47
  71. package/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +17 -4
  72. package/internals/hooks/useRangePosition.d.ts +1 -4
  73. package/internals/hooks/useRangePosition.js +1 -18
  74. package/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +3 -3
  75. package/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +25 -31
  76. package/internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.d.ts +1 -1
  77. package/internals/utils/createMultiInputRangeField/useTextFieldProps.d.ts +12 -0
  78. package/internals/utils/createMultiInputRangeField/useTextFieldProps.js +44 -0
  79. package/internals/utils/date-fields-utils.d.ts +4 -1
  80. package/internals/utils/date-fields-utils.js +6 -1
  81. package/internals/utils/releaseInfo.js +1 -1
  82. package/managers/useDateRangeManager.js +8 -1
  83. package/managers/useDateTimeRangeManager.js +8 -1
  84. package/managers/useTimeRangeManager.js +10 -1
  85. package/models/fields.d.ts +5 -18
  86. package/modern/DateRangePicker/DateRangePicker.types.d.ts +2 -2
  87. package/modern/DateTimeRangePicker/DateTimeRangePicker.types.d.ts +2 -2
  88. package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +2 -2
  89. package/modern/DesktopDateTimeRangePicker/DesktopDateTimeRangePicker.js +2 -2
  90. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +2 -2
  91. package/modern/MobileDateTimeRangePicker/MobileDateTimeRangePicker.js +2 -2
  92. package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  93. package/modern/SingleInputDateTimeRangeField/useSingleInputDateTimeRangeField.d.ts +1 -1
  94. package/modern/SingleInputTimeRangeField/useSingleInputTimeRangeField.d.ts +1 -1
  95. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.d.ts +6 -4
  96. package/modern/dateRangeViewRenderers/dateRangeViewRenderers.js +13 -8
  97. package/modern/hooks/index.d.ts +2 -1
  98. package/modern/hooks/useMultiInputRangeField/index.d.ts +2 -1
  99. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeField.d.ts +37 -18
  100. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeField.js +41 -50
  101. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.d.ts +11 -0
  102. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldRootProps.js +25 -0
  103. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.d.ts +4 -1
  104. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldSelectedSections.js +3 -2
  105. package/modern/hooks/useMultiInputRangeField/useTextFieldProps.d.ts +30 -0
  106. package/modern/hooks/useMultiInputRangeField/useTextFieldProps.js +141 -0
  107. package/modern/index.js +1 -1
  108. package/modern/internals/hooks/models/index.d.ts +1 -1
  109. package/modern/internals/hooks/models/useRangePicker.d.ts +1 -8
  110. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.js +8 -75
  111. package/modern/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +16 -4
  112. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.js +17 -47
  113. package/modern/internals/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +17 -4
  114. package/modern/internals/hooks/useRangePosition.d.ts +1 -4
  115. package/modern/internals/hooks/useRangePosition.js +1 -18
  116. package/modern/internals/hooks/useStaticRangePicker/useStaticRangePicker.js +3 -3
  117. package/modern/internals/utils/createMultiInputRangeField/createMultiInputRangeField.js +26 -32
  118. package/modern/internals/utils/createMultiInputRangeField/createMultiInputRangeField.types.d.ts +1 -1
  119. package/modern/internals/utils/createMultiInputRangeField/useTextFieldProps.d.ts +12 -0
  120. package/modern/internals/utils/createMultiInputRangeField/useTextFieldProps.js +36 -0
  121. package/modern/internals/utils/date-fields-utils.d.ts +4 -1
  122. package/modern/internals/utils/date-fields-utils.js +5 -1
  123. package/modern/internals/utils/releaseInfo.js +1 -1
  124. package/modern/managers/useDateRangeManager.js +8 -1
  125. package/modern/managers/useDateTimeRangeManager.js +8 -1
  126. package/modern/managers/useTimeRangeManager.js +10 -1
  127. package/modern/models/fields.d.ts +5 -18
  128. package/package.json +4 -4
  129. package/tsconfig.build.tsbuildinfo +1 -1
  130. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.d.ts +0 -17
  131. package/esm/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +0 -59
  132. package/esm/internals/hooks/useEnrichedRangePickerField.d.ts +0 -70
  133. package/esm/internals/hooks/useEnrichedRangePickerField.js +0 -236
  134. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.d.ts +0 -17
  135. package/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +0 -66
  136. package/internals/hooks/useEnrichedRangePickerField.d.ts +0 -70
  137. package/internals/hooks/useEnrichedRangePickerField.js +0 -245
  138. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.d.ts +0 -17
  139. package/modern/hooks/useMultiInputRangeField/useMultiInputRangeFieldTextFieldProps.js +0 -59
  140. package/modern/internals/hooks/useEnrichedRangePickerField.d.ts +0 -70
  141. package/modern/internals/hooks/useEnrichedRangePickerField.js +0 -236
@@ -9,6 +9,11 @@ export interface DateRangeViewRendererProps<TView extends DateOrTimeViewWithMeri
9
9
  * because otherwise some unwanted props would be passed to the HTML element.
10
10
  */
11
11
  export declare const renderDateRangeViewCalendar: ({
12
+ views,
13
+ view,
14
+ onViewChange,
15
+ focusedView,
16
+ onFocusedViewChange,
12
17
  value,
13
18
  defaultValue,
14
19
  referenceDate,
@@ -40,8 +45,5 @@ export declare const renderDateRangeViewCalendar: ({
40
45
  disableDragEditing,
41
46
  displayWeekNumber,
42
47
  timezone,
43
- availableRangePositions,
44
- views,
45
- view,
46
- onViewChange
48
+ availableRangePositions
47
49
  }: DateRangeViewRendererProps<"day">) => React.JSX.Element;
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
+ import { isDatePickerView } from '@mui/x-date-pickers/internals';
2
3
  import { DateRangeCalendar } from "../DateRangeCalendar/index.js";
3
4
  import { jsx as _jsx } from "react/jsx-runtime";
4
5
  /**
@@ -6,6 +7,11 @@ import { jsx as _jsx } from "react/jsx-runtime";
6
7
  * because otherwise some unwanted props would be passed to the HTML element.
7
8
  */
8
9
  export const renderDateRangeViewCalendar = ({
10
+ views,
11
+ view,
12
+ onViewChange,
13
+ focusedView,
14
+ onFocusedViewChange,
9
15
  value,
10
16
  defaultValue,
11
17
  referenceDate,
@@ -37,11 +43,13 @@ export const renderDateRangeViewCalendar = ({
37
43
  disableDragEditing,
38
44
  displayWeekNumber,
39
45
  timezone,
40
- availableRangePositions,
41
- views,
42
- view,
43
- onViewChange
46
+ availableRangePositions
44
47
  }) => /*#__PURE__*/_jsx(DateRangeCalendar, {
48
+ view: view,
49
+ views: views,
50
+ onViewChange: onViewChange,
51
+ focusedView: focusedView && isDatePickerView(focusedView) ? focusedView : null,
52
+ onFocusedViewChange: onFocusedViewChange,
45
53
  value: value,
46
54
  defaultValue: defaultValue,
47
55
  referenceDate: referenceDate,
@@ -73,8 +81,5 @@ export const renderDateRangeViewCalendar = ({
73
81
  disableDragEditing: disableDragEditing,
74
82
  displayWeekNumber: displayWeekNumber,
75
83
  timezone: timezone,
76
- availableRangePositions: availableRangePositions,
77
- view: view,
78
- views: views,
79
- onViewChange: onViewChange
84
+ availableRangePositions: availableRangePositions
80
85
  });
@@ -1,2 +1,3 @@
1
1
  export { usePickerRangePositionContext } from "./usePickerRangePositionContext.js";
2
- export { useMultiInputRangeField as unstable_useMultiInputRangeField } from "./useMultiInputRangeField/index.js";
2
+ export { useMultiInputRangeField as unstable_useMultiInputRangeField } from "./useMultiInputRangeField/index.js";
3
+ export type { UseMultiInputRangeFieldTextFieldProps } from './useMultiInputRangeField';
@@ -1 +1,2 @@
1
- export { useMultiInputRangeField } from "./useMultiInputRangeField.js";
1
+ export { useMultiInputRangeField } from "./useMultiInputRangeField.js";
2
+ export type { UseMultiInputRangeFieldTextFieldProps } from './useMultiInputRangeField';
@@ -1,5 +1,7 @@
1
1
  import { PickerManagerEnableAccessibleFieldDOMStructure, PickerManagerFieldInternalProps, UseFieldResponse } from '@mui/x-date-pickers/internals';
2
+ import { UseTextFieldBaseForwardedProps } from "./useTextFieldProps.js";
2
3
  import { PickerAnyRangeManager } from "../../internals/models/managers.js";
4
+ import { UseMultiInputRangeFieldRootPropsReturnValue } from "./useMultiInputRangeFieldRootProps.js";
3
5
  /**
4
6
  * Basic example:
5
7
  *
@@ -12,42 +14,59 @@ import { PickerAnyRangeManager } from "../../internals/models/managers.js";
12
14
  * function MultiInputField(props) {
13
15
  * const manager = useDateRangeManager();
14
16
  * const { internalProps, forwardedProps } = useSplitFieldProps(props, 'date');
15
- * const { startDate, endDate } = useMultiInputRangeField({
17
+ * const response = useMultiInputRangeField({
16
18
  * manager,
17
19
  * internalProps,
18
- * startForwardedProps: forwardedProps,
19
- * endForwardedProps: forwardedProps,
20
+ * startTextFieldProps: {},
21
+ * endTextFieldProps: {},
22
+ * rootProps: forwardedProps,
20
23
  * });
21
24
  *
22
25
  * return (
23
- * <Box {...forwardedProps}>
24
- * <PickersTextField {...startDate} />
26
+ * <Box {...response.root}>
27
+ * <PickersTextField {...response.startTextField} />
25
28
  * <span>{' – '}</span>
26
- * <PickersTextField {...endDate} />
29
+ * <PickersTextField {...response.endTextField} />
27
30
  * </Box>
28
31
  * );
29
32
  * }
30
33
  * ```
31
34
  *
32
- * @param {UseMultiInputRangeFieldParameters<TManager, TForwardedProps>} parameters The parameters of the hook.
35
+ * @param {UseMultiInputRangeFieldParameters<TManager, TTextFieldProps>} parameters The parameters of the hook.
33
36
  * @param {TManager} parameters.manager The manager of the field.
34
37
  * @param {PickerManagerFieldInternalProps<TManager>} parameters.internalProps The internal props of the field.
35
- * @param {TForwardedProps} parameters.startForwardedProps The forwarded props of the start field.
36
- * @param {TForwardedProps} parameters.endForwardedProps The forwarded props of the end field.
37
- * @returns {UseMultiInputRangeFieldReturnValue<TManager, TForwardedProps>} The props to pass to the start and the end components.
38
+ * @param {TTextFieldProps} parameters.startForwardedProps The forwarded props of the start field.
39
+ * @param {TTextFieldProps} parameters.endForwardedProps The forwarded props of the end field.
40
+ * @returns {UseMultiInputRangeFieldReturnValue<TManager, TTextFieldProps>} The props to pass to the start and the end components.
38
41
  */
39
- export declare function useMultiInputRangeField<TManager extends PickerAnyRangeManager, TForwardedProps extends {
42
+ export declare function useMultiInputRangeField<TManager extends PickerAnyRangeManager, TTextFieldProps extends UseTextFieldBaseForwardedProps, TRootProps extends {
40
43
  [key: string]: any;
41
- }>(parameters: UseMultiInputRangeFieldParameters<TManager, TForwardedProps>): UseMultiInputRangeFieldReturnValue<TManager, TForwardedProps>;
42
- interface UseMultiInputRangeFieldParameters<TManager extends PickerAnyRangeManager, TForwardedProps extends {}> {
44
+ }>(parameters: UseMultiInputRangeFieldParameters<TManager, TTextFieldProps, TRootProps>): UseMultiInputRangeFieldReturnValue<TManager, TTextFieldProps, TRootProps>;
45
+ interface UseMultiInputRangeFieldParameters<TManager extends PickerAnyRangeManager, TTextFieldProps extends {
46
+ [key: string]: any;
47
+ }, TRootProps extends {
48
+ [key: string]: any;
49
+ }> {
43
50
  manager: TManager;
44
51
  internalProps: PickerManagerFieldInternalProps<TManager>;
45
- startForwardedProps: TForwardedProps;
46
- endForwardedProps: TForwardedProps;
52
+ rootProps: TRootProps;
53
+ startTextFieldProps: TTextFieldProps;
54
+ endTextFieldProps: TTextFieldProps;
47
55
  }
48
- interface UseMultiInputRangeFieldReturnValue<TManager extends PickerAnyRangeManager, TForwardedProps extends {}> {
49
- startDate: Omit<UseFieldResponse<PickerManagerEnableAccessibleFieldDOMStructure<TManager>, TForwardedProps>, 'clearable' | 'onClear'>;
50
- endDate: Omit<UseFieldResponse<PickerManagerEnableAccessibleFieldDOMStructure<TManager>, TForwardedProps>, 'clearable' | 'onClear'>;
56
+ interface UseMultiInputRangeFieldReturnValue<TManager extends PickerAnyRangeManager, TTextFieldProps extends {
57
+ [key: string]: any;
58
+ }, TRootProps extends {
59
+ [key: string]: any;
60
+ }> {
61
+ root: UseMultiInputRangeFieldRootPropsReturnValue<TRootProps>;
62
+ startTextField: UseMultiInputRangeFieldTextFieldProps<PickerManagerEnableAccessibleFieldDOMStructure<TManager>, TTextFieldProps>;
63
+ endTextField: UseMultiInputRangeFieldTextFieldProps<PickerManagerEnableAccessibleFieldDOMStructure<TManager>, TTextFieldProps>;
51
64
  enableAccessibleFieldDOMStructure: PickerManagerEnableAccessibleFieldDOMStructure<TManager>;
52
65
  }
66
+ export type UseMultiInputRangeFieldTextFieldProps<TEnableAccessibleFieldDOMStructure extends boolean, TForwardedProps extends UseTextFieldBaseForwardedProps> = Omit<UseFieldResponse<TEnableAccessibleFieldDOMStructure, TForwardedProps & {
67
+ onKeyDown: React.KeyboardEventHandler;
68
+ onClick: React.MouseEventHandler;
69
+ onFocus: React.FocusEventHandler;
70
+ id: string;
71
+ }>, 'onClear' | 'clearable' | 'openPickerAriaLabel'>;
53
72
  export {};
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
 
3
- import _extends from "@babel/runtime/helpers/esm/extends";
4
- import useEventCallback from '@mui/utils/useEventCallback';
5
3
  import { useControlledValueWithTimezone, useFieldInternalPropsWithDefaults } from '@mui/x-date-pickers/internals';
6
4
  import { useValidation } from '@mui/x-date-pickers/validation';
7
- import { useMultiInputRangeFieldTextFieldProps } from "./useMultiInputRangeFieldTextFieldProps.js";
5
+ import { useTextFieldProps } from "./useTextFieldProps.js";
8
6
  import { useMultiInputRangeFieldSelectedSections } from "./useMultiInputRangeFieldSelectedSections.js";
7
+ import { useMultiInputRangeFieldRootProps } from "./useMultiInputRangeFieldRootProps.js";
8
+
9
9
  /**
10
10
  * Basic example:
11
11
  *
@@ -18,36 +18,38 @@ import { useMultiInputRangeFieldSelectedSections } from "./useMultiInputRangeFie
18
18
  * function MultiInputField(props) {
19
19
  * const manager = useDateRangeManager();
20
20
  * const { internalProps, forwardedProps } = useSplitFieldProps(props, 'date');
21
- * const { startDate, endDate } = useMultiInputRangeField({
21
+ * const response = useMultiInputRangeField({
22
22
  * manager,
23
23
  * internalProps,
24
- * startForwardedProps: forwardedProps,
25
- * endForwardedProps: forwardedProps,
24
+ * startTextFieldProps: {},
25
+ * endTextFieldProps: {},
26
+ * rootProps: forwardedProps,
26
27
  * });
27
28
  *
28
29
  * return (
29
- * <Box {...forwardedProps}>
30
- * <PickersTextField {...startDate} />
30
+ * <Box {...response.root}>
31
+ * <PickersTextField {...response.startTextField} />
31
32
  * <span>{' – '}</span>
32
- * <PickersTextField {...endDate} />
33
+ * <PickersTextField {...response.endTextField} />
33
34
  * </Box>
34
35
  * );
35
36
  * }
36
37
  * ```
37
38
  *
38
- * @param {UseMultiInputRangeFieldParameters<TManager, TForwardedProps>} parameters The parameters of the hook.
39
+ * @param {UseMultiInputRangeFieldParameters<TManager, TTextFieldProps>} parameters The parameters of the hook.
39
40
  * @param {TManager} parameters.manager The manager of the field.
40
41
  * @param {PickerManagerFieldInternalProps<TManager>} parameters.internalProps The internal props of the field.
41
- * @param {TForwardedProps} parameters.startForwardedProps The forwarded props of the start field.
42
- * @param {TForwardedProps} parameters.endForwardedProps The forwarded props of the end field.
43
- * @returns {UseMultiInputRangeFieldReturnValue<TManager, TForwardedProps>} The props to pass to the start and the end components.
42
+ * @param {TTextFieldProps} parameters.startForwardedProps The forwarded props of the start field.
43
+ * @param {TTextFieldProps} parameters.endForwardedProps The forwarded props of the end field.
44
+ * @returns {UseMultiInputRangeFieldReturnValue<TManager, TTextFieldProps>} The props to pass to the start and the end components.
44
45
  */
45
46
  export function useMultiInputRangeField(parameters) {
46
47
  const {
47
48
  manager,
48
49
  internalProps,
49
- startForwardedProps,
50
- endForwardedProps
50
+ rootProps,
51
+ startTextFieldProps,
52
+ endTextFieldProps
51
53
  } = parameters;
52
54
  const internalPropsWithDefaults = useFieldInternalPropsWithDefaults({
53
55
  manager,
@@ -84,34 +86,20 @@ export function useMultiInputRangeField(parameters) {
84
86
  onChange,
85
87
  valueManager: manager.internal_valueManager
86
88
  });
87
- const {
88
- validationError,
89
- getValidationErrorForNewValue
90
- } = useValidation({
89
+ const validation = useValidation({
91
90
  props: internalPropsWithDefaults,
92
91
  value,
93
92
  timezone,
94
93
  validator: manager.validator,
95
94
  onError: internalPropsWithDefaults.onError
96
95
  });
97
- const buildChangeHandler = index => {
98
- return (newSingleValue, rawContext) => {
99
- const newRange = index === 0 ? [newSingleValue, value[1]] : [value[0], newSingleValue];
100
- const context = _extends({}, rawContext, {
101
- validationError: getValidationErrorForNewValue(newRange)
102
- });
103
- handleValueChange(newRange, context);
104
- };
105
- };
106
- const handleStartDateChange = useEventCallback(buildChangeHandler(0));
107
- const handleEndDateChange = useEventCallback(buildChangeHandler(1));
108
96
  const selectedSectionsResponse = useMultiInputRangeFieldSelectedSections({
109
97
  selectedSections,
110
98
  onSelectedSectionsChange,
111
99
  unstableStartFieldRef,
112
100
  unstableEndFieldRef
113
101
  });
114
- const sharedProps = {
102
+ const sharedInternalProps = {
115
103
  disabled,
116
104
  readOnly,
117
105
  timezone,
@@ -120,30 +108,33 @@ export function useMultiInputRangeField(parameters) {
120
108
  shouldRespectLeadingZeros,
121
109
  enableAccessibleFieldDOMStructure
122
110
  };
123
- const startDateProps = useMultiInputRangeFieldTextFieldProps({
111
+ const rootResponse = useMultiInputRangeFieldRootProps(rootProps);
112
+ const startTextFieldResponse = useTextFieldProps({
124
113
  valueType: manager.valueType,
125
- fieldProps: _extends({
126
- error: !!validationError[0]
127
- }, startForwardedProps, selectedSectionsResponse.start, sharedProps, {
128
- value: valueProp === undefined ? undefined : valueProp[0],
129
- defaultValue: defaultValue === undefined ? undefined : defaultValue[0],
130
- onChange: handleStartDateChange,
131
- autoFocus // Do not add on end field.
132
- })
114
+ position: 'start',
115
+ value,
116
+ onChange: handleValueChange,
117
+ autoFocus,
118
+ validation,
119
+ forwardedProps: startTextFieldProps,
120
+ selectedSectionProps: selectedSectionsResponse.start,
121
+ sharedInternalProps
133
122
  });
134
- const endDateProps = useMultiInputRangeFieldTextFieldProps({
123
+ const endTextFieldResponse = useTextFieldProps({
135
124
  valueType: manager.valueType,
136
- fieldProps: _extends({
137
- error: !!validationError[1]
138
- }, endForwardedProps, selectedSectionsResponse.end, sharedProps, {
139
- value: valueProp === undefined ? undefined : valueProp[1],
140
- defaultValue: defaultValue === undefined ? undefined : defaultValue[1],
141
- onChange: handleEndDateChange
142
- })
125
+ position: 'end',
126
+ value,
127
+ onChange: handleValueChange,
128
+ autoFocus,
129
+ validation,
130
+ forwardedProps: endTextFieldProps,
131
+ selectedSectionProps: selectedSectionsResponse.end,
132
+ sharedInternalProps
143
133
  });
144
134
  return {
145
- startDate: startDateProps,
146
- endDate: endDateProps,
135
+ root: rootResponse,
136
+ startTextField: startTextFieldResponse,
137
+ endTextField: endTextFieldResponse,
147
138
  enableAccessibleFieldDOMStructure
148
139
  };
149
140
  }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @ignore - internal hook.
3
+ */
4
+ export declare function useMultiInputRangeFieldRootProps<TForwardedProps extends {
5
+ [key: string]: any;
6
+ }>(forwardedProps: TForwardedProps): UseMultiInputRangeFieldRootPropsReturnValue<TForwardedProps>;
7
+ export type UseMultiInputRangeFieldRootPropsReturnValue<TForwardedProps extends {
8
+ [key: string]: any;
9
+ }> = Omit<TForwardedProps, 'onBlur'> & {
10
+ onBlur: () => void;
11
+ };
@@ -0,0 +1,25 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import useEventCallback from '@mui/utils/useEventCallback';
3
+ import { executeInTheNextEventLoopTick, getActiveElement, useNullablePickerContext, usePickerPrivateContext } from '@mui/x-date-pickers/internals';
4
+
5
+ /**
6
+ * @ignore - internal hook.
7
+ */
8
+ export function useMultiInputRangeFieldRootProps(forwardedProps) {
9
+ const pickerContext = useNullablePickerContext();
10
+ const privatePickerContext = usePickerPrivateContext();
11
+ const handleBlur = useEventCallback(() => {
12
+ if (!pickerContext || privatePickerContext.viewContainerRole !== 'tooltip') {
13
+ return;
14
+ }
15
+ executeInTheNextEventLoopTick(() => {
16
+ if (privatePickerContext.rootRefObject.current?.contains(getActiveElement(document)) || pickerContext.popupRef.current?.contains(getActiveElement(document))) {
17
+ return;
18
+ }
19
+ privatePickerContext.dismissViews();
20
+ });
21
+ });
22
+ return _extends({}, forwardedProps, {
23
+ onBlur: handleBlur
24
+ });
25
+ }
@@ -3,7 +3,7 @@ import { PickerRangeValue, PickerValue, UseFieldInternalProps } from '@mui/x-dat
3
3
  import { FieldRef, FieldSelectedSections } from '@mui/x-date-pickers/models';
4
4
  import { MultiInputFieldRefs } from "../../models/index.js";
5
5
  interface UseMultiInputRangeFieldSelectedSectionsParameters extends Pick<UseFieldInternalProps<PickerRangeValue, any, any>, 'selectedSections' | 'onSelectedSectionsChange'>, MultiInputFieldRefs {}
6
- interface UseMultiInputFieldSelectedSectionsResponseItem {
6
+ export interface UseMultiInputFieldSelectedSectionsResponseItem {
7
7
  unstableFieldRef?: React.Ref<FieldRef<PickerValue>>;
8
8
  selectedSections: FieldSelectedSections;
9
9
  onSelectedSectionsChange: (newSelectedSections: FieldSelectedSections) => void;
@@ -12,5 +12,8 @@ interface UseMultiInputFieldSelectedSectionsResponse {
12
12
  start: UseMultiInputFieldSelectedSectionsResponseItem;
13
13
  end: UseMultiInputFieldSelectedSectionsResponseItem;
14
14
  }
15
+ /**
16
+ * @ignore - internal hook.
17
+ */
15
18
  export declare const useMultiInputRangeFieldSelectedSections: (parameters: UseMultiInputRangeFieldSelectedSectionsParameters) => UseMultiInputFieldSelectedSectionsResponse;
16
19
  export {};
@@ -1,8 +1,9 @@
1
- 'use client';
2
-
3
1
  import * as React from 'react';
4
2
  import useForkRef from '@mui/utils/useForkRef';
5
3
  import useEventCallback from '@mui/utils/useEventCallback';
4
+ /**
5
+ * @ignore - internal hook.
6
+ */
6
7
  export const useMultiInputRangeFieldSelectedSections = parameters => {
7
8
  const unstableEndFieldRef = React.useRef(null);
8
9
  const handleUnstableEndFieldRef = useForkRef(parameters.unstableEndFieldRef, unstableEndFieldRef);
@@ -0,0 +1,30 @@
1
+ import * as React from 'react';
2
+ import { UseValidationReturnValue } from '@mui/x-date-pickers/validation';
3
+ import { PickerValueType } from '@mui/x-date-pickers/models';
4
+ import { FieldChangeHandler, PickerManagerEnableAccessibleFieldDOMStructure, PickerManagerError, PickerRangeValue, PickerValue, RangePosition, UseFieldInternalProps } from '@mui/x-date-pickers/internals';
5
+ import { PickerAnyRangeManager } from "../../internals/models/managers.js";
6
+ import { UseMultiInputFieldSelectedSectionsResponseItem } from "./useMultiInputRangeFieldSelectedSections.js";
7
+ import type { UseMultiInputRangeFieldTextFieldProps } from './useMultiInputRangeField';
8
+ /**
9
+ * @ignore - internal hook.
10
+ */
11
+ export declare function useTextFieldProps<TManager extends PickerAnyRangeManager, TForwardedProps extends UseTextFieldBaseForwardedProps>(parameters: UseTextFieldPropsParameters<TManager, TForwardedProps>): UseMultiInputRangeFieldTextFieldProps<PickerManagerEnableAccessibleFieldDOMStructure<TManager>, TForwardedProps>;
12
+ interface UseTextFieldPropsParameters<TManager extends PickerAnyRangeManager, TForwardedProps extends UseTextFieldBaseForwardedProps> {
13
+ valueType: PickerValueType;
14
+ value: PickerRangeValue;
15
+ onChange: FieldChangeHandler<PickerRangeValue, PickerManagerError<TManager>>;
16
+ autoFocus: boolean | undefined;
17
+ forwardedProps: TForwardedProps;
18
+ sharedInternalProps: UseTextFieldSharedInternalProps<TManager>;
19
+ selectedSectionProps: UseMultiInputFieldSelectedSectionsResponseItem;
20
+ position: RangePosition;
21
+ validation: UseValidationReturnValue<PickerRangeValue, PickerManagerError<TManager>>;
22
+ }
23
+ export interface UseTextFieldBaseForwardedProps {
24
+ onKeyDown?: React.KeyboardEventHandler;
25
+ onClick?: React.MouseEventHandler;
26
+ onFocus?: React.FocusEventHandler;
27
+ [key: string]: any;
28
+ }
29
+ interface UseTextFieldSharedInternalProps<TManager extends PickerAnyRangeManager> extends Pick<UseFieldInternalProps<PickerValue, PickerManagerEnableAccessibleFieldDOMStructure<TManager>, PickerManagerError<TManager>>, 'enableAccessibleFieldDOMStructure' | 'disabled' | 'readOnly' | 'timezone' | 'format' | 'formatDensity' | 'shouldRespectLeadingZeros'> {}
30
+ export {};
@@ -0,0 +1,141 @@
1
+ import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
+ import _extends from "@babel/runtime/helpers/esm/extends";
3
+ const _excluded = ["clearable", "onClear", "openPickerAriaLabel"];
4
+ import * as React from 'react';
5
+ import useEventCallback from '@mui/utils/useEventCallback';
6
+ import { useDateManager, useDateTimeManager, useTimeManager } from '@mui/x-date-pickers/managers';
7
+ import { useSplitFieldProps } from '@mui/x-date-pickers/hooks';
8
+ import { useField, useFieldInternalPropsWithDefaults, useNullableFieldPrivateContext, useNullablePickerContext, usePickerPrivateContext } from '@mui/x-date-pickers/internals';
9
+ import { useNullablePickerRangePositionContext } from "../../internals/hooks/useNullablePickerRangePositionContext.js";
10
+ /**
11
+ * @ignore - internal hook.
12
+ */
13
+ export function useTextFieldProps(parameters) {
14
+ const pickerContext = useNullablePickerContext();
15
+ const fieldPrivateContext = useNullableFieldPrivateContext();
16
+ const pickerPrivateContext = usePickerPrivateContext();
17
+ const rangePositionContext = useNullablePickerRangePositionContext();
18
+ const rangePosition = rangePositionContext?.rangePosition ?? 'start';
19
+ const setRangePosition = rangePositionContext?.setRangePosition;
20
+ const previousRangePosition = React.useRef(rangePosition);
21
+ const {
22
+ forwardedProps,
23
+ sharedInternalProps,
24
+ selectedSectionProps,
25
+ valueType,
26
+ position,
27
+ value,
28
+ onChange,
29
+ autoFocus,
30
+ validation
31
+ } = parameters;
32
+ let useManager;
33
+ switch (valueType) {
34
+ case 'date':
35
+ {
36
+ useManager = useDateManager;
37
+ break;
38
+ }
39
+ case 'time':
40
+ {
41
+ useManager = useTimeManager;
42
+ break;
43
+ }
44
+ case 'date-time':
45
+ {
46
+ useManager = useDateTimeManager;
47
+ break;
48
+ }
49
+ default:
50
+ {
51
+ throw new Error(`Unknown valueType: ${valueType}`);
52
+ }
53
+ }
54
+ const manager = useManager({
55
+ enableAccessibleFieldDOMStructure: sharedInternalProps.enableAccessibleFieldDOMStructure
56
+ });
57
+ const openPickerIfPossible = event => {
58
+ if (!pickerContext) {
59
+ return;
60
+ }
61
+ setRangePosition?.(position);
62
+ if (pickerContext.triggerStatus === 'enabled') {
63
+ event.preventDefault();
64
+ pickerContext.setOpen(true);
65
+ }
66
+ };
67
+ const handleKeyDown = useEventCallback(event => {
68
+ if (event.key === 'Enter' || event.key === ' ') {
69
+ openPickerIfPossible(event);
70
+ }
71
+ });
72
+
73
+ // Registering `onClick` listener on the root element as well to correctly handle cases where user is clicking on `label`
74
+ // which has `pointer-events: none` and due to DOM structure the `input` does not catch the click event
75
+ const handleClick = useEventCallback(event => {
76
+ openPickerIfPossible(event);
77
+ });
78
+ const handleFocus = useEventCallback(event => {
79
+ forwardedProps.onFocus?.(event);
80
+ if (pickerContext?.open) {
81
+ setRangePosition?.(position);
82
+ if (previousRangePosition.current !== position && pickerContext.initialView) {
83
+ pickerContext.setView?.(pickerContext.initialView);
84
+ }
85
+ }
86
+ });
87
+ const handleChange = useEventCallback((newSingleValue, rawContext) => {
88
+ const newRange = position === 'start' ? [newSingleValue, value[1]] : [value[0], newSingleValue];
89
+ const context = _extends({}, rawContext, {
90
+ validationError: validation.getValidationErrorForNewValue(newRange)
91
+ });
92
+ onChange(newRange, context);
93
+ });
94
+ const allProps = _extends({
95
+ value: position === 'start' ? value[0] : value[1],
96
+ error: position === 'start' ? !!validation.validationError[0] : !!validation.validationError[1],
97
+ id: `${pickerPrivateContext.labelId}-${position}`,
98
+ autoFocus: position === 'start' ? autoFocus : undefined
99
+ }, forwardedProps, sharedInternalProps, selectedSectionProps, {
100
+ onClick: handleClick,
101
+ onFocus: handleFocus,
102
+ onKeyDown: handleKeyDown,
103
+ onChange: handleChange
104
+ });
105
+ const splittedProps = useSplitFieldProps(allProps, valueType);
106
+ const internalPropsWithDefaults = useFieldInternalPropsWithDefaults({
107
+ manager,
108
+ internalProps: splittedProps.internalProps,
109
+ skipContextFieldRefAssignment: rangePosition !== position
110
+ });
111
+ const _ref = useField({
112
+ forwardedProps: splittedProps.forwardedProps,
113
+ internalProps: internalPropsWithDefaults,
114
+ valueManager: manager.internal_valueManager,
115
+ fieldValueManager: manager.internal_fieldValueManager,
116
+ validator: manager.validator,
117
+ valueType: manager.valueType,
118
+ // TODO v8: Add a real aria label before moving the opening logic to the field on range pickers.
119
+ getOpenPickerButtonAriaLabel: () => ''
120
+ }),
121
+ fieldResponse = _objectWithoutPropertiesLoose(_ref, _excluded);
122
+ React.useEffect(() => {
123
+ if (!pickerContext?.open || pickerContext?.variant === 'mobile') {
124
+ return;
125
+ }
126
+ fieldPrivateContext?.fieldRef.current?.focusField();
127
+ if (!fieldPrivateContext?.fieldRef.current || pickerContext.view === pickerContext.initialView) {
128
+ // could happen when the user is switching between the inputs
129
+ previousRangePosition.current = rangePosition;
130
+ return;
131
+ }
132
+
133
+ // bring back focus to the field
134
+ // currentView is present on DateTimeRangePicker
135
+ fieldPrivateContext?.fieldRef.current.setSelectedSections(
136
+ // use the current view or `0` when the range position has just been swapped
137
+ previousRangePosition.current === rangePosition ? pickerContext.view : 0);
138
+ previousRangePosition.current = rangePosition;
139
+ }, [rangePosition, pickerContext?.open, pickerContext?.variant, pickerContext?.initialView, pickerContext?.view, fieldPrivateContext?.fieldRef]);
140
+ return fieldResponse;
141
+ }
package/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers-pro v8.0.0-alpha.12
2
+ * @mui/x-date-pickers-pro v8.0.0-alpha.13
3
3
  *
4
4
  * @license MUI X Commercial
5
5
  * This source code is licensed under the commercial license found in the
@@ -1 +1 @@
1
- export type { UseRangePickerSlots, UseRangePickerSlotProps, RangeOnlyPickerProps, UseRangePickerProps, UseRangePickerParams } from './useRangePicker';
1
+ export type { RangeOnlyPickerProps, UseRangePickerProps, UseRangePickerParams } from './useRangePicker';
@@ -1,13 +1,6 @@
1
- import { UsePickerParams, BasePickerProps, ExportedBaseToolbarProps, UsePickerViewsProps, UsePickerValueNonStaticProps, UsePickerProviderNonStaticProps, DateOrTimeViewWithMeridiem, ExportedBaseTabsProps, PickerRangeValue } from '@mui/x-date-pickers/internals';
2
- import { ExportedPickersLayoutSlots, ExportedPickersLayoutSlotProps } from '@mui/x-date-pickers/PickersLayout';
1
+ import { UsePickerParams, BasePickerProps, UsePickerViewsProps, UsePickerValueNonStaticProps, UsePickerProviderNonStaticProps, DateOrTimeViewWithMeridiem, PickerRangeValue } from '@mui/x-date-pickers/internals';
3
2
  import { BaseRangeNonStaticPickerProps } from "../../models/index.js";
4
3
  import { UseRangePositionProps } from "../useRangePosition.js";
5
- import { RangePickerFieldSlots, RangePickerFieldSlotProps } from "../useEnrichedRangePickerField.js";
6
- export interface UseRangePickerSlots extends ExportedPickersLayoutSlots<PickerRangeValue>, RangePickerFieldSlots {}
7
- export interface UseRangePickerSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedPickersLayoutSlotProps<PickerRangeValue>, RangePickerFieldSlotProps<TEnableAccessibleFieldDOMStructure> {
8
- tabs?: ExportedBaseTabsProps;
9
- toolbar?: ExportedBaseToolbarProps;
10
- }
11
4
  export interface RangeOnlyPickerProps extends UsePickerValueNonStaticProps, UsePickerProviderNonStaticProps, BaseRangeNonStaticPickerProps, UseRangePositionProps {}
12
5
  export interface UseRangePickerProps<TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<any, TView, any>> extends RangeOnlyPickerProps, BasePickerProps<PickerRangeValue, TView, TError, TExternalProps> {}
13
6
  export interface UseRangePickerParams<TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UseRangePickerProps<TView, any, TExternalProps>> extends Pick<UsePickerParams<PickerRangeValue, TView, TExternalProps>, 'valueManager' | 'valueType' | 'validator' | 'rendererInterceptor' | 'ref'> {