@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
@@ -1,24 +1,16 @@
1
1
  import * as React from 'react';
2
- import { UseFieldResponse, FormProps, PickerValue, PickerRangeValue } from '@mui/x-date-pickers/internals';
2
+ import { PickerValue, PickerRangeValue } from '@mui/x-date-pickers/internals';
3
3
  import { FieldRef, PickerFieldSlotProps } from '@mui/x-date-pickers/models';
4
+ import type { UseMultiInputRangeFieldTextFieldProps } from '../hooks/useMultiInputRangeField';
4
5
  export type { FieldRangeSection } from '@mui/x-date-pickers/internals';
5
6
  export type FieldType = 'single-input' | 'multi-input';
6
7
  /**
7
8
  * Props the `textField` slot of the multi input field can receive when used inside a picker.
8
9
  */
9
- export interface MultiInputFieldSlotTextFieldProps extends FormProps {
10
+ export type MultiInputFieldSlotTextFieldProps<TEnableAccessibleFieldDOMStructure extends boolean = true> = UseMultiInputRangeFieldTextFieldProps<TEnableAccessibleFieldDOMStructure, {
10
11
  label?: React.ReactNode;
11
- id?: string;
12
- onKeyDown?: React.KeyboardEventHandler;
13
- onClick?: React.MouseEventHandler;
14
- onFocus?: React.FocusEventHandler;
15
12
  focused?: boolean;
16
- InputProps?: {
17
- ref?: React.Ref<any>;
18
- endAdornment?: React.ReactNode;
19
- startAdornment?: React.ReactNode;
20
- };
21
- }
13
+ }>;
22
14
  /**
23
15
  * Props the `root` slot of the multi input field can receive when used inside a picker.
24
16
  */
@@ -39,9 +31,4 @@ export interface RangeFieldSeparatorProps {
39
31
  /**
40
32
  * Props the `slotProps.field` of a range picker component can receive.
41
33
  */
42
- export type PickerRangeFieldSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> = PickerFieldSlotProps<PickerRangeValue, TEnableAccessibleFieldDOMStructure> & RangeFieldSeparatorProps;
43
- /**
44
- * Props the text field receives when used with a multi input picker.
45
- * Only contains what the MUI components are passing to the text field, not what users can pass using the `props.slotProps.textField`.
46
- */
47
- export type BaseMultiInputPickersTextFieldProps<TEnableAccessibleFieldDOMStructure extends boolean> = Omit<UseFieldResponse<TEnableAccessibleFieldDOMStructure, MultiInputFieldSlotTextFieldProps>, 'slots' | 'slotProps' | 'clearable' | 'onClear' | 'openPickerButtonPosition' | 'clearButtonPosition' | 'openPickerAriaLabel'>;
34
+ export type PickerRangeFieldSlotProps<TEnableAccessibleFieldDOMStructure extends boolean> = PickerFieldSlotProps<PickerRangeValue, TEnableAccessibleFieldDOMStructure> & RangeFieldSeparatorProps;
package/hooks/index.d.ts CHANGED
@@ -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,17 +1,15 @@
1
1
  "use strict";
2
2
  'use client';
3
3
 
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.useMultiInputRangeField = useMultiInputRangeField;
9
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
11
8
  var _internals = require("@mui/x-date-pickers/internals");
12
9
  var _validation = require("@mui/x-date-pickers/validation");
13
- var _useMultiInputRangeFieldTextFieldProps = require("./useMultiInputRangeFieldTextFieldProps");
10
+ var _useTextFieldProps = require("./useTextFieldProps");
14
11
  var _useMultiInputRangeFieldSelectedSections = require("./useMultiInputRangeFieldSelectedSections");
12
+ var _useMultiInputRangeFieldRootProps = require("./useMultiInputRangeFieldRootProps");
15
13
  /**
16
14
  * Basic example:
17
15
  *
@@ -24,36 +22,38 @@ var _useMultiInputRangeFieldSelectedSections = require("./useMultiInputRangeFiel
24
22
  * function MultiInputField(props) {
25
23
  * const manager = useDateRangeManager();
26
24
  * const { internalProps, forwardedProps } = useSplitFieldProps(props, 'date');
27
- * const { startDate, endDate } = useMultiInputRangeField({
25
+ * const response = useMultiInputRangeField({
28
26
  * manager,
29
27
  * internalProps,
30
- * startForwardedProps: forwardedProps,
31
- * endForwardedProps: forwardedProps,
28
+ * startTextFieldProps: {},
29
+ * endTextFieldProps: {},
30
+ * rootProps: forwardedProps,
32
31
  * });
33
32
  *
34
33
  * return (
35
- * <Box {...forwardedProps}>
36
- * <PickersTextField {...startDate} />
34
+ * <Box {...response.root}>
35
+ * <PickersTextField {...response.startTextField} />
37
36
  * <span>{' – '}</span>
38
- * <PickersTextField {...endDate} />
37
+ * <PickersTextField {...response.endTextField} />
39
38
  * </Box>
40
39
  * );
41
40
  * }
42
41
  * ```
43
42
  *
44
- * @param {UseMultiInputRangeFieldParameters<TManager, TForwardedProps>} parameters The parameters of the hook.
43
+ * @param {UseMultiInputRangeFieldParameters<TManager, TTextFieldProps>} parameters The parameters of the hook.
45
44
  * @param {TManager} parameters.manager The manager of the field.
46
45
  * @param {PickerManagerFieldInternalProps<TManager>} parameters.internalProps The internal props of the field.
47
- * @param {TForwardedProps} parameters.startForwardedProps The forwarded props of the start field.
48
- * @param {TForwardedProps} parameters.endForwardedProps The forwarded props of the end field.
49
- * @returns {UseMultiInputRangeFieldReturnValue<TManager, TForwardedProps>} The props to pass to the start and the end components.
46
+ * @param {TTextFieldProps} parameters.startForwardedProps The forwarded props of the start field.
47
+ * @param {TTextFieldProps} parameters.endForwardedProps The forwarded props of the end field.
48
+ * @returns {UseMultiInputRangeFieldReturnValue<TManager, TTextFieldProps>} The props to pass to the start and the end components.
50
49
  */
51
50
  function useMultiInputRangeField(parameters) {
52
51
  const {
53
52
  manager,
54
53
  internalProps,
55
- startForwardedProps,
56
- endForwardedProps
54
+ rootProps,
55
+ startTextFieldProps,
56
+ endTextFieldProps
57
57
  } = parameters;
58
58
  const internalPropsWithDefaults = (0, _internals.useFieldInternalPropsWithDefaults)({
59
59
  manager,
@@ -90,34 +90,20 @@ function useMultiInputRangeField(parameters) {
90
90
  onChange,
91
91
  valueManager: manager.internal_valueManager
92
92
  });
93
- const {
94
- validationError,
95
- getValidationErrorForNewValue
96
- } = (0, _validation.useValidation)({
93
+ const validation = (0, _validation.useValidation)({
97
94
  props: internalPropsWithDefaults,
98
95
  value,
99
96
  timezone,
100
97
  validator: manager.validator,
101
98
  onError: internalPropsWithDefaults.onError
102
99
  });
103
- const buildChangeHandler = index => {
104
- return (newSingleValue, rawContext) => {
105
- const newRange = index === 0 ? [newSingleValue, value[1]] : [value[0], newSingleValue];
106
- const context = (0, _extends2.default)({}, rawContext, {
107
- validationError: getValidationErrorForNewValue(newRange)
108
- });
109
- handleValueChange(newRange, context);
110
- };
111
- };
112
- const handleStartDateChange = (0, _useEventCallback.default)(buildChangeHandler(0));
113
- const handleEndDateChange = (0, _useEventCallback.default)(buildChangeHandler(1));
114
100
  const selectedSectionsResponse = (0, _useMultiInputRangeFieldSelectedSections.useMultiInputRangeFieldSelectedSections)({
115
101
  selectedSections,
116
102
  onSelectedSectionsChange,
117
103
  unstableStartFieldRef,
118
104
  unstableEndFieldRef
119
105
  });
120
- const sharedProps = {
106
+ const sharedInternalProps = {
121
107
  disabled,
122
108
  readOnly,
123
109
  timezone,
@@ -126,30 +112,33 @@ function useMultiInputRangeField(parameters) {
126
112
  shouldRespectLeadingZeros,
127
113
  enableAccessibleFieldDOMStructure
128
114
  };
129
- const startDateProps = (0, _useMultiInputRangeFieldTextFieldProps.useMultiInputRangeFieldTextFieldProps)({
115
+ const rootResponse = (0, _useMultiInputRangeFieldRootProps.useMultiInputRangeFieldRootProps)(rootProps);
116
+ const startTextFieldResponse = (0, _useTextFieldProps.useTextFieldProps)({
130
117
  valueType: manager.valueType,
131
- fieldProps: (0, _extends2.default)({
132
- error: !!validationError[0]
133
- }, startForwardedProps, selectedSectionsResponse.start, sharedProps, {
134
- value: valueProp === undefined ? undefined : valueProp[0],
135
- defaultValue: defaultValue === undefined ? undefined : defaultValue[0],
136
- onChange: handleStartDateChange,
137
- autoFocus // Do not add on end field.
138
- })
118
+ position: 'start',
119
+ value,
120
+ onChange: handleValueChange,
121
+ autoFocus,
122
+ validation,
123
+ forwardedProps: startTextFieldProps,
124
+ selectedSectionProps: selectedSectionsResponse.start,
125
+ sharedInternalProps
139
126
  });
140
- const endDateProps = (0, _useMultiInputRangeFieldTextFieldProps.useMultiInputRangeFieldTextFieldProps)({
127
+ const endTextFieldResponse = (0, _useTextFieldProps.useTextFieldProps)({
141
128
  valueType: manager.valueType,
142
- fieldProps: (0, _extends2.default)({
143
- error: !!validationError[1]
144
- }, endForwardedProps, selectedSectionsResponse.end, sharedProps, {
145
- value: valueProp === undefined ? undefined : valueProp[1],
146
- defaultValue: defaultValue === undefined ? undefined : defaultValue[1],
147
- onChange: handleEndDateChange
148
- })
129
+ position: 'end',
130
+ value,
131
+ onChange: handleValueChange,
132
+ autoFocus,
133
+ validation,
134
+ forwardedProps: endTextFieldProps,
135
+ selectedSectionProps: selectedSectionsResponse.end,
136
+ sharedInternalProps
149
137
  });
150
138
  return {
151
- startDate: startDateProps,
152
- endDate: endDateProps,
139
+ root: rootResponse,
140
+ startTextField: startTextFieldResponse,
141
+ endTextField: endTextFieldResponse,
153
142
  enableAccessibleFieldDOMStructure
154
143
  };
155
144
  }
@@ -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,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useMultiInputRangeFieldRootProps = useMultiInputRangeFieldRootProps;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
10
+ var _internals = require("@mui/x-date-pickers/internals");
11
+ /**
12
+ * @ignore - internal hook.
13
+ */
14
+ function useMultiInputRangeFieldRootProps(forwardedProps) {
15
+ const pickerContext = (0, _internals.useNullablePickerContext)();
16
+ const privatePickerContext = (0, _internals.usePickerPrivateContext)();
17
+ const handleBlur = (0, _useEventCallback.default)(() => {
18
+ if (!pickerContext || privatePickerContext.viewContainerRole !== 'tooltip') {
19
+ return;
20
+ }
21
+ (0, _internals.executeInTheNextEventLoopTick)(() => {
22
+ if (privatePickerContext.rootRefObject.current?.contains((0, _internals.getActiveElement)(document)) || pickerContext.popupRef.current?.contains((0, _internals.getActiveElement)(document))) {
23
+ return;
24
+ }
25
+ privatePickerContext.dismissViews();
26
+ });
27
+ });
28
+ return (0, _extends2.default)({}, forwardedProps, {
29
+ onBlur: handleBlur
30
+ });
31
+ }
@@ -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,5 +1,4 @@
1
1
  "use strict";
2
- 'use client';
3
2
 
4
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
4
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
@@ -10,6 +9,9 @@ exports.useMultiInputRangeFieldSelectedSections = void 0;
10
9
  var React = _interopRequireWildcard(require("react"));
11
10
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
12
11
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
12
+ /**
13
+ * @ignore - internal hook.
14
+ */
13
15
  const useMultiInputRangeFieldSelectedSections = parameters => {
14
16
  const unstableEndFieldRef = React.useRef(null);
15
17
  const handleUnstableEndFieldRef = (0, _useForkRef.default)(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,149 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.useTextFieldProps = useTextFieldProps;
9
+ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var React = _interopRequireWildcard(require("react"));
12
+ var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
13
+ var _managers = require("@mui/x-date-pickers/managers");
14
+ var _hooks = require("@mui/x-date-pickers/hooks");
15
+ var _internals = require("@mui/x-date-pickers/internals");
16
+ var _useNullablePickerRangePositionContext = require("../../internals/hooks/useNullablePickerRangePositionContext");
17
+ const _excluded = ["clearable", "onClear", "openPickerAriaLabel"];
18
+ /**
19
+ * @ignore - internal hook.
20
+ */
21
+ function useTextFieldProps(parameters) {
22
+ const pickerContext = (0, _internals.useNullablePickerContext)();
23
+ const fieldPrivateContext = (0, _internals.useNullableFieldPrivateContext)();
24
+ const pickerPrivateContext = (0, _internals.usePickerPrivateContext)();
25
+ const rangePositionContext = (0, _useNullablePickerRangePositionContext.useNullablePickerRangePositionContext)();
26
+ const rangePosition = rangePositionContext?.rangePosition ?? 'start';
27
+ const setRangePosition = rangePositionContext?.setRangePosition;
28
+ const previousRangePosition = React.useRef(rangePosition);
29
+ const {
30
+ forwardedProps,
31
+ sharedInternalProps,
32
+ selectedSectionProps,
33
+ valueType,
34
+ position,
35
+ value,
36
+ onChange,
37
+ autoFocus,
38
+ validation
39
+ } = parameters;
40
+ let useManager;
41
+ switch (valueType) {
42
+ case 'date':
43
+ {
44
+ useManager = _managers.useDateManager;
45
+ break;
46
+ }
47
+ case 'time':
48
+ {
49
+ useManager = _managers.useTimeManager;
50
+ break;
51
+ }
52
+ case 'date-time':
53
+ {
54
+ useManager = _managers.useDateTimeManager;
55
+ break;
56
+ }
57
+ default:
58
+ {
59
+ throw new Error(`Unknown valueType: ${valueType}`);
60
+ }
61
+ }
62
+ const manager = useManager({
63
+ enableAccessibleFieldDOMStructure: sharedInternalProps.enableAccessibleFieldDOMStructure
64
+ });
65
+ const openPickerIfPossible = event => {
66
+ if (!pickerContext) {
67
+ return;
68
+ }
69
+ setRangePosition?.(position);
70
+ if (pickerContext.triggerStatus === 'enabled') {
71
+ event.preventDefault();
72
+ pickerContext.setOpen(true);
73
+ }
74
+ };
75
+ const handleKeyDown = (0, _useEventCallback.default)(event => {
76
+ if (event.key === 'Enter' || event.key === ' ') {
77
+ openPickerIfPossible(event);
78
+ }
79
+ });
80
+
81
+ // Registering `onClick` listener on the root element as well to correctly handle cases where user is clicking on `label`
82
+ // which has `pointer-events: none` and due to DOM structure the `input` does not catch the click event
83
+ const handleClick = (0, _useEventCallback.default)(event => {
84
+ openPickerIfPossible(event);
85
+ });
86
+ const handleFocus = (0, _useEventCallback.default)(event => {
87
+ forwardedProps.onFocus?.(event);
88
+ if (pickerContext?.open) {
89
+ setRangePosition?.(position);
90
+ if (previousRangePosition.current !== position && pickerContext.initialView) {
91
+ pickerContext.setView?.(pickerContext.initialView);
92
+ }
93
+ }
94
+ });
95
+ const handleChange = (0, _useEventCallback.default)((newSingleValue, rawContext) => {
96
+ const newRange = position === 'start' ? [newSingleValue, value[1]] : [value[0], newSingleValue];
97
+ const context = (0, _extends2.default)({}, rawContext, {
98
+ validationError: validation.getValidationErrorForNewValue(newRange)
99
+ });
100
+ onChange(newRange, context);
101
+ });
102
+ const allProps = (0, _extends2.default)({
103
+ value: position === 'start' ? value[0] : value[1],
104
+ error: position === 'start' ? !!validation.validationError[0] : !!validation.validationError[1],
105
+ id: `${pickerPrivateContext.labelId}-${position}`,
106
+ autoFocus: position === 'start' ? autoFocus : undefined
107
+ }, forwardedProps, sharedInternalProps, selectedSectionProps, {
108
+ onClick: handleClick,
109
+ onFocus: handleFocus,
110
+ onKeyDown: handleKeyDown,
111
+ onChange: handleChange
112
+ });
113
+ const splittedProps = (0, _hooks.useSplitFieldProps)(allProps, valueType);
114
+ const internalPropsWithDefaults = (0, _internals.useFieldInternalPropsWithDefaults)({
115
+ manager,
116
+ internalProps: splittedProps.internalProps,
117
+ skipContextFieldRefAssignment: rangePosition !== position
118
+ });
119
+ const _ref = (0, _internals.useField)({
120
+ forwardedProps: splittedProps.forwardedProps,
121
+ internalProps: internalPropsWithDefaults,
122
+ valueManager: manager.internal_valueManager,
123
+ fieldValueManager: manager.internal_fieldValueManager,
124
+ validator: manager.validator,
125
+ valueType: manager.valueType,
126
+ // TODO v8: Add a real aria label before moving the opening logic to the field on range pickers.
127
+ getOpenPickerButtonAriaLabel: () => ''
128
+ }),
129
+ fieldResponse = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
130
+ React.useEffect(() => {
131
+ if (!pickerContext?.open || pickerContext?.variant === 'mobile') {
132
+ return;
133
+ }
134
+ fieldPrivateContext?.fieldRef.current?.focusField();
135
+ if (!fieldPrivateContext?.fieldRef.current || pickerContext.view === pickerContext.initialView) {
136
+ // could happen when the user is switching between the inputs
137
+ previousRangePosition.current = rangePosition;
138
+ return;
139
+ }
140
+
141
+ // bring back focus to the field
142
+ // currentView is present on DateTimeRangePicker
143
+ fieldPrivateContext?.fieldRef.current.setSelectedSections(
144
+ // use the current view or `0` when the range position has just been swapped
145
+ previousRangePosition.current === rangePosition ? pickerContext.view : 0);
146
+ previousRangePosition.current = rangePosition;
147
+ }, [rangePosition, pickerContext?.open, pickerContext?.variant, pickerContext?.initialView, pickerContext?.view, fieldPrivateContext?.fieldRef]);
148
+ return fieldResponse;
149
+ }
package/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'> {