@mui/x-date-pickers-pro 6.0.0-alpha.10 → 6.0.0-alpha.11

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 (179) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/DateRangeCalendar/DateRangeCalendar.d.ts +1 -1
  3. package/DateRangeCalendar/DateRangeCalendar.js +198 -107
  4. package/DateRangeCalendar/DateRangeCalendar.types.d.ts +21 -10
  5. package/DateRangeCalendar/dateRangeCalendarClasses.d.ts +3 -1
  6. package/DateRangeCalendar/dateRangeCalendarClasses.js +1 -1
  7. package/DateRangeCalendar/useDragRange.d.ts +32 -0
  8. package/DateRangeCalendar/useDragRange.js +238 -0
  9. package/DateRangePicker/DateRangePicker.d.ts +1 -1
  10. package/DateRangePicker/DateRangePickerInput.d.ts +3 -3
  11. package/DateRangePicker/DateRangePickerInput.js +16 -16
  12. package/DateRangePicker/DateRangePickerToolbar.d.ts +2 -2
  13. package/DateRangePicker/DateRangePickerToolbar.js +6 -6
  14. package/DateRangePicker/DateRangePickerView.d.ts +3 -3
  15. package/DateRangePicker/DateRangePickerView.js +16 -16
  16. package/DateRangePicker/DateRangePickerViewDesktop.d.ts +2 -2
  17. package/DateRangePicker/DateRangePickerViewDesktop.js +3 -3
  18. package/DateRangePicker/date-range-manager.d.ts +12 -5
  19. package/DateRangePicker/date-range-manager.js +16 -7
  20. package/DateRangePicker/dateRangePickerInputClasses.d.ts +1 -1
  21. package/DateRangePicker/dateRangePickerToolbarClasses.d.ts +1 -1
  22. package/DateRangePicker/dateRangePickerViewDesktopClasses.d.ts +1 -1
  23. package/DateRangePickerDay/DateRangePickerDay.d.ts +7 -3
  24. package/DateRangePickerDay/DateRangePickerDay.js +24 -24
  25. package/DateRangePickerDay/dateRangePickerDayClasses.d.ts +3 -3
  26. package/DesktopDateRangePicker/DesktopDateRangePicker.d.ts +1 -1
  27. package/DesktopDateRangePicker/DesktopDateRangePicker.js +5 -5
  28. package/DesktopNextDateRangePicker/DesktopNextDateRangePicker.d.ts +1 -1
  29. package/DesktopNextDateRangePicker/DesktopNextDateRangePicker.js +6 -1
  30. package/DesktopNextDateRangePicker/DesktopNextDateRangePicker.types.d.ts +1 -1
  31. package/MobileDateRangePicker/MobileDateRangePicker.d.ts +1 -1
  32. package/MobileDateRangePicker/MobileDateRangePicker.js +5 -5
  33. package/MobileNextDateRangePicker/MobileNextDateRangePicker.d.ts +1 -1
  34. package/MobileNextDateRangePicker/MobileNextDateRangePicker.js +6 -1
  35. package/MobileNextDateRangePicker/MobileNextDateRangePicker.types.d.ts +1 -1
  36. package/MultiInputDateRangeField/MultiInputDateRangeField.d.ts +1 -1
  37. package/MultiInputDateRangeField/MultiInputDateRangeField.types.d.ts +4 -3
  38. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.d.ts +1 -1
  39. package/MultiInputDateTimeRangeField/MultiInputDateTimeRangeField.types.d.ts +5 -4
  40. package/MultiInputTimeRangeField/MultiInputTimeRangeField.d.ts +1 -1
  41. package/MultiInputTimeRangeField/MultiInputTimeRangeField.types.d.ts +5 -4
  42. package/NextDateRangePicker/NextDateRangePicker.d.ts +1 -1
  43. package/NextDateRangePicker/NextDateRangePicker.js +5 -0
  44. package/NextDateRangePicker/shared.d.ts +1 -1
  45. package/SingleInputDateRangeField/SingleInputDateRangeField.d.ts +1 -1
  46. package/SingleInputDateRangeField/SingleInputDateRangeField.interfaces.d.ts +2 -2
  47. package/SingleInputDateRangeField/SingleInputDateRangeField.types.d.ts +3 -3
  48. package/SingleInputDateRangeField/useSingleInputDateRangeField.d.ts +1 -1
  49. package/SingleInputDateRangeField/useSingleInputDateRangeField.js +1 -2
  50. package/StaticDateRangePicker/StaticDateRangePicker.d.ts +1 -1
  51. package/StaticDateRangePicker/StaticDateRangePicker.js +5 -5
  52. package/StaticNextDateRangePicker/StaticNextDateRangePicker.d.ts +1 -1
  53. package/StaticNextDateRangePicker/StaticNextDateRangePicker.js +8 -3
  54. package/StaticNextDateRangePicker/StaticNextDateRangePicker.types.d.ts +5 -4
  55. package/index.js +1 -1
  56. package/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +15 -7
  57. package/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.types.d.ts +7 -8
  58. package/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +15 -7
  59. package/internal/hooks/useMobileRangePicker/useMobileRangePicker.types.d.ts +7 -8
  60. package/internal/hooks/useMultiInputRangeField/useMultiInputRangeField.types.d.ts +1 -1
  61. package/internal/hooks/useRangePickerInputProps.d.ts +4 -4
  62. package/internal/hooks/useRangePickerInputProps.js +11 -11
  63. package/internal/hooks/useStaticRangePicker/index.d.ts +2 -0
  64. package/internal/hooks/useStaticRangePicker/index.js +1 -0
  65. package/internal/hooks/useStaticRangePicker/useStaticRangePicker.d.ts +10 -0
  66. package/internal/hooks/useStaticRangePicker/useStaticRangePicker.js +65 -0
  67. package/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.d.ts +29 -0
  68. package/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.js +1 -0
  69. package/internal/hooks/validation/useDateRangeValidation.d.ts +2 -3
  70. package/internal/hooks/validation/useDateRangeValidation.js +0 -1
  71. package/internal/hooks/validation/useDateTimeRangeValidation.d.ts +2 -3
  72. package/internal/hooks/validation/useDateTimeRangeValidation.js +0 -1
  73. package/internal/hooks/validation/useTimeRangeValidation.d.ts +2 -3
  74. package/internal/hooks/validation/useTimeRangeValidation.js +0 -1
  75. package/internal/models/dateRange.d.ts +2 -3
  76. package/internal/models/dateTimeRange.d.ts +2 -3
  77. package/internal/models/range.d.ts +7 -6
  78. package/internal/models/timeRange.d.ts +2 -3
  79. package/internal/utils/releaseInfo.js +1 -1
  80. package/internal/utils/valueManagers.d.ts +2 -3
  81. package/internal/utils/valueManagers.js +1 -2
  82. package/internal/utils/{views.d.ts → viewRenderers.d.ts} +1 -1
  83. package/{modern/internal/utils/views.js → internal/utils/viewRenderers.js} +10 -6
  84. package/legacy/DateRangeCalendar/DateRangeCalendar.js +159 -67
  85. package/legacy/DateRangeCalendar/dateRangeCalendarClasses.js +1 -1
  86. package/legacy/DateRangeCalendar/useDragRange.js +247 -0
  87. package/legacy/DateRangePicker/DateRangePickerInput.js +16 -16
  88. package/legacy/DateRangePicker/DateRangePickerToolbar.js +7 -7
  89. package/legacy/DateRangePicker/DateRangePickerView.js +16 -16
  90. package/legacy/DateRangePicker/DateRangePickerViewDesktop.js +3 -3
  91. package/legacy/DateRangePicker/date-range-manager.js +17 -7
  92. package/legacy/DateRangePickerDay/DateRangePickerDay.js +23 -23
  93. package/legacy/DesktopDateRangePicker/DesktopDateRangePicker.js +6 -6
  94. package/legacy/DesktopNextDateRangePicker/DesktopNextDateRangePicker.js +6 -1
  95. package/legacy/MobileDateRangePicker/MobileDateRangePicker.js +6 -6
  96. package/legacy/MobileNextDateRangePicker/MobileNextDateRangePicker.js +6 -1
  97. package/legacy/NextDateRangePicker/NextDateRangePicker.js +5 -0
  98. package/legacy/SingleInputDateRangeField/useSingleInputDateRangeField.js +1 -2
  99. package/legacy/StaticDateRangePicker/StaticDateRangePicker.js +6 -6
  100. package/legacy/StaticNextDateRangePicker/StaticNextDateRangePicker.js +9 -4
  101. package/legacy/index.js +1 -1
  102. package/legacy/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +16 -8
  103. package/legacy/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +16 -8
  104. package/legacy/internal/hooks/useRangePickerInputProps.js +11 -11
  105. package/legacy/internal/hooks/useStaticRangePicker/index.js +1 -0
  106. package/legacy/internal/hooks/useStaticRangePicker/useStaticRangePicker.js +68 -0
  107. package/legacy/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.js +1 -0
  108. package/legacy/internal/hooks/validation/useDateRangeValidation.js +0 -3
  109. package/legacy/internal/hooks/validation/useDateTimeRangeValidation.js +0 -3
  110. package/legacy/internal/hooks/validation/useTimeRangeValidation.js +0 -3
  111. package/legacy/internal/utils/releaseInfo.js +1 -1
  112. package/legacy/internal/utils/valueManagers.js +1 -2
  113. package/legacy/internal/utils/{views.js → viewRenderers.js} +10 -6
  114. package/modern/DateRangeCalendar/DateRangeCalendar.js +197 -106
  115. package/modern/DateRangeCalendar/dateRangeCalendarClasses.js +1 -1
  116. package/modern/DateRangeCalendar/useDragRange.js +237 -0
  117. package/modern/DateRangePicker/DateRangePickerInput.js +16 -16
  118. package/modern/DateRangePicker/DateRangePickerToolbar.js +6 -6
  119. package/modern/DateRangePicker/DateRangePickerView.js +16 -16
  120. package/modern/DateRangePicker/DateRangePickerViewDesktop.js +3 -3
  121. package/modern/DateRangePicker/date-range-manager.js +16 -7
  122. package/modern/DateRangePickerDay/DateRangePickerDay.js +24 -24
  123. package/modern/DesktopDateRangePicker/DesktopDateRangePicker.js +5 -5
  124. package/modern/DesktopNextDateRangePicker/DesktopNextDateRangePicker.js +6 -1
  125. package/modern/MobileDateRangePicker/MobileDateRangePicker.js +5 -5
  126. package/modern/MobileNextDateRangePicker/MobileNextDateRangePicker.js +6 -1
  127. package/modern/NextDateRangePicker/NextDateRangePicker.js +5 -0
  128. package/modern/SingleInputDateRangeField/useSingleInputDateRangeField.js +1 -2
  129. package/modern/StaticDateRangePicker/StaticDateRangePicker.js +5 -5
  130. package/modern/StaticNextDateRangePicker/StaticNextDateRangePicker.js +8 -3
  131. package/modern/index.js +1 -1
  132. package/modern/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +15 -7
  133. package/modern/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +15 -7
  134. package/modern/internal/hooks/useRangePickerInputProps.js +11 -11
  135. package/modern/internal/hooks/useStaticRangePicker/index.js +1 -0
  136. package/modern/internal/hooks/useStaticRangePicker/useStaticRangePicker.js +65 -0
  137. package/modern/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.js +1 -0
  138. package/modern/internal/hooks/validation/useDateRangeValidation.js +0 -1
  139. package/modern/internal/hooks/validation/useDateTimeRangeValidation.js +0 -1
  140. package/modern/internal/hooks/validation/useTimeRangeValidation.js +0 -1
  141. package/modern/internal/utils/releaseInfo.js +1 -1
  142. package/modern/internal/utils/valueManagers.js +1 -2
  143. package/{internal/utils/views.js → modern/internal/utils/viewRenderers.js} +10 -6
  144. package/node/DateRangeCalendar/DateRangeCalendar.js +195 -104
  145. package/node/DateRangeCalendar/dateRangeCalendarClasses.js +1 -1
  146. package/node/DateRangeCalendar/useDragRange.js +247 -0
  147. package/node/DateRangePicker/DateRangePickerInput.js +16 -16
  148. package/node/DateRangePicker/DateRangePickerToolbar.js +6 -6
  149. package/node/DateRangePicker/DateRangePickerView.js +16 -16
  150. package/node/DateRangePicker/DateRangePickerViewDesktop.js +3 -3
  151. package/node/DateRangePicker/date-range-manager.js +16 -7
  152. package/node/DateRangePickerDay/DateRangePickerDay.js +23 -23
  153. package/node/DesktopDateRangePicker/DesktopDateRangePicker.js +5 -5
  154. package/node/DesktopNextDateRangePicker/DesktopNextDateRangePicker.js +7 -2
  155. package/node/MobileDateRangePicker/MobileDateRangePicker.js +5 -5
  156. package/node/MobileNextDateRangePicker/MobileNextDateRangePicker.js +7 -2
  157. package/node/NextDateRangePicker/NextDateRangePicker.js +5 -0
  158. package/node/SingleInputDateRangeField/useSingleInputDateRangeField.js +1 -2
  159. package/node/StaticDateRangePicker/StaticDateRangePicker.js +5 -5
  160. package/node/StaticNextDateRangePicker/StaticNextDateRangePicker.js +9 -4
  161. package/node/index.js +1 -1
  162. package/node/internal/hooks/useDesktopRangePicker/useDesktopRangePicker.js +15 -7
  163. package/node/internal/hooks/useMobileRangePicker/useMobileRangePicker.js +15 -7
  164. package/node/internal/hooks/useRangePickerInputProps.js +11 -11
  165. package/node/internal/hooks/useStaticRangePicker/index.js +12 -0
  166. package/node/internal/hooks/useStaticRangePicker/useStaticRangePicker.js +75 -0
  167. package/node/internal/hooks/useStaticRangePicker/useStaticRangePicker.types.js +5 -0
  168. package/node/internal/hooks/validation/useDateRangeValidation.js +1 -3
  169. package/node/internal/hooks/validation/useDateTimeRangeValidation.js +1 -3
  170. package/node/internal/hooks/validation/useTimeRangeValidation.js +1 -3
  171. package/node/internal/utils/releaseInfo.js +1 -1
  172. package/node/internal/utils/valueManagers.js +4 -5
  173. package/node/internal/utils/{views.js → viewRenderers.js} +10 -6
  174. package/package.json +3 -3
  175. package/SingleInputDateRangeField/SingleInputDateRangeField.utils.d.ts +0 -6
  176. package/SingleInputDateRangeField/SingleInputDateRangeField.utils.js +0 -24
  177. package/legacy/SingleInputDateRangeField/SingleInputDateRangeField.utils.js +0 -26
  178. package/modern/SingleInputDateRangeField/SingleInputDateRangeField.utils.js +0 -24
  179. package/node/SingleInputDateRangeField/SingleInputDateRangeField.utils.js +0 -33
package/CHANGELOG.md CHANGED
@@ -3,6 +3,119 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 6.0.0-alpha.11
7
+
8
+ _Dec 8, 2022_
9
+
10
+ We'd like to offer a big thanks to the 7 contributors who made this release possible. Here are some highlights ✨:
11
+
12
+ - 🚀 Add dragging support for the new Date Range Picker (`NextDateRangePicker`) (#6763) @LukasTy
13
+ - ⚡️ Improve performance of the `day` view (#7066) @flaviendelangle
14
+ - ✨ Fix lazy-loading feature not working in `DataGridPremium` (#7124) @m4theushw
15
+ - 🐞 Bugfixes
16
+
17
+ ### `@mui/x-data-grid@v6.0.0-alpha.11` / `@mui/x-data-grid-pro@v6.0.0-alpha.11` / `@mui/x-data-grid-premium@v6.0.0-alpha.11`
18
+
19
+ #### Breaking changes
20
+
21
+ - The `filterPanelOperators` translation key was renamed to `filterPanelOperator` (#7062) @MBilalShafi
22
+ - The `components.Header` slot was removed. Use `components.Toolbar` slot instead (#6999) @cherniavskii
23
+
24
+ #### Changes
25
+
26
+ - [DataGrid] Fix rows not rendering properly after height change (#6892) @MBilalShafi
27
+ - [DataGrid] Remove `Header` slot (#6999) @cherniavskii
28
+ - [DataGrid] Rename `filterPanelOperators` -> `filterPanelOperator` (#7062) @MBilalShafi
29
+ - [DataGridPremium] Add support for lazy-loading (#7124) @m4theushw
30
+ - [DataGridPremium] Pass `groupId` to aggregation function (#7003) @m4theushw
31
+
32
+ ### `@mui/x-date-pickers@v6.0.0-alpha.11` / `@mui/x-date-pickers-pro@v6.0.0-alpha.11`
33
+
34
+ #### Breaking changes
35
+
36
+ - Remove the callback version of the `action` prop on the `actionBar` slot (#7038) @flaviendelangle
37
+
38
+ The `action` prop of the `actionBar` slot is no longer supporting a callback.
39
+ Instead, you can pass a callback at the slot level:
40
+
41
+ ```diff
42
+ <DatePicker
43
+ componentsProps={{
44
+ - actionBar: {
45
+ - actions: (variant) => (variant === 'desktop' ? [] : ['clear']),
46
+ - },
47
+ + actionBar: ({ wrapperVariant }) => ({
48
+ + actions: wrapperVariant === 'desktop' ? [] : ['clear'],
49
+ + }),
50
+ }}
51
+ />
52
+ ```
53
+
54
+ - The `selectedDays` prop has been removed from the `Day` component (#7066) @flaviendelangle
55
+ If you need to access it, you can control the value and pass it to the slot using `componentsProps`:
56
+
57
+ ```tsx
58
+ function CustomDay({ selectedDay, ...other }) {
59
+ // do something with 'selectedDay'
60
+ return <PickersDay {...other} />;
61
+ }
62
+ function App() {
63
+ const [value, setValue] = React.useState(null);
64
+ return (
65
+ <DatePicker
66
+ value={value}
67
+ onChange={(newValue) => setValue(newValue)}
68
+ components={{ Day: CustomDay }}
69
+ componentsProps={{
70
+ day: { selectedDay: value },
71
+ }}
72
+ />
73
+ );
74
+ }
75
+ ```
76
+
77
+ - The `currentlySelectingRangeEnd` / `setCurrentlySelectingRangeEnd` props on the Date Range Picker toolbar have been renamed to `rangePosition` / `onRangePositionChange` (#6989) @flaviendelangle
78
+
79
+ ```diff
80
+ const CustomToolbarComponent = props => (
81
+ <div>
82
+ - <button onChange={() => props.setCurrentlySelectingRangeEnd('end')}>Edit end date</button>
83
+ + <button onClick={() => props.onRangePositionChange('end')}>Edit end date</button>
84
+ - <div>Is editing end date: {props.currentlySelectingRangeEnd === 'end'}</div>
85
+ + <div>Is editing end date: {props.rangePosition === 'end'}</div>
86
+ </div>
87
+ )
88
+ <DateRangePicker
89
+ components={{
90
+ Toolbar: CustomToolbarComponent
91
+ }}
92
+ />
93
+ ```
94
+
95
+ #### Changes
96
+
97
+ - [DateRangePicker] Add dragging support to edit range (#6763) @LukasTy
98
+ - [pickers] Fix lost props on Date Range Pickers (#7092) @flaviendelangle
99
+ - [pickers] Fix toolbar on the new range pickers (#6989) @flaviendelangle
100
+ - [pickers] Improve performance of `DayCalendar` (#7066) @flaviendelangle
101
+ - [pickers] Initialize date without time when selecting year or month (#7120) @LukasTy
102
+ - [pickers] Remove the callback version of the `action` prop in the `actionBar` component slot (#7038) @flaviendelangle
103
+
104
+ ### Docs
105
+
106
+ - [docs] Add `GridCell` change in migration guide (#7087) @MBilalShafi
107
+ - [docs] Fix API page ad space regression (#7051) @oliviertassinari
108
+ - [docs] Update localization doc to use existing locale (#7102) @LukasTy
109
+
110
+ ### Core
111
+
112
+ - [core] Add codemod to move l10n translation (#7027) @alexfauquette
113
+ - [core] Add notes to remove the legacy pickers internals (#7133) @flaviendelangle
114
+ - [core] Remove `internals-fields` imports (#7119) @flaviendelangle
115
+ - [core] Remove unused code (#7094) @flaviendelangle
116
+ - [core] Sync `ApiPage.js` with monorepo (#7073) @oliviertassinari
117
+ - [test] Fix karma-mocha assertion error messages (#7054) @cherniavskii
118
+
6
119
  ## 6.0.0-alpha.10
7
120
 
8
121
  _Dec 1, 2022_
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import { DateRangeCalendarProps } from './DateRangeCalendar.types';
3
- declare type DateRangeCalendarComponent = (<TDate>(props: DateRangeCalendarProps<TDate> & React.RefAttributes<HTMLDivElement>) => JSX.Element) & {
3
+ type DateRangeCalendarComponent = (<TDate>(props: DateRangeCalendarProps<TDate> & React.RefAttributes<HTMLDivElement>) => JSX.Element) & {
4
4
  propTypes?: any;
5
5
  };
6
6
  declare const DateRangeCalendar: DateRangeCalendarComponent;
@@ -1,6 +1,7 @@
1
1
  import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
2
2
  import _extends from "@babel/runtime/helpers/esm/extends";
3
- const _excluded = ["value", "defaultValue", "onChange", "className", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "defaultCalendarMonth", "currentDatePosition", "onCurrentDatePositionChange", "calendars", "components", "componentsProps", "loading", "renderLoading", "disableHighlightToday", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber"];
3
+ const _excluded = ["value", "defaultValue", "onChange", "className", "disableFuture", "disablePast", "minDate", "maxDate", "shouldDisableDate", "reduceAnimations", "onMonthChange", "defaultCalendarMonth", "rangePosition", "onRangePositionChange", "calendars", "components", "componentsProps", "loading", "renderLoading", "disableHighlightToday", "readOnly", "disabled", "showDaysOutsideCurrentMonth", "dayOfWeekFormatter", "disableAutoMonthSwitching", "autoFocus", "fixedWeekNumber", "disableDragEditing", "displayWeekNumber"],
4
+ _excluded2 = ["isDragging", "rangeDragDay", "draggingDatePosition"];
4
5
  import * as React from 'react';
5
6
  import PropTypes from 'prop-types';
6
7
  import clsx from 'clsx';
@@ -12,11 +13,12 @@ import { unstable_composeClasses as composeClasses } from '@mui/utils';
12
13
  import { Watermark } from '@mui/x-license-pro';
13
14
  import { applyDefaultDate, DAY_MARGIN, DayCalendar, defaultReduceAnimations, PickersArrowSwitcher, PickersCalendarHeader, useCalendarState, useDefaultDates, useLocaleText, useNextMonthDisabled, usePreviousMonthDisabled, useUtils, WrapperVariantContext } from '@mui/x-date-pickers/internals';
14
15
  import { getReleaseInfo } from '../internal/utils/releaseInfo';
15
- import { getDateRangeCalendarUtilityClass } from './dateRangeCalendarClasses';
16
+ import { dateRangeCalendarClasses, getDateRangeCalendarUtilityClass } from './dateRangeCalendarClasses';
16
17
  import { isEndOfRange, isRangeValid, isStartOfRange, isWithinRange } from '../internal/utils/date-utils';
17
18
  import { calculateRangeChange, calculateRangePreview } from '../DateRangePicker/date-range-manager';
18
- import { DateRangePickerDay } from '../DateRangePickerDay';
19
+ import { DateRangePickerDay, dateRangePickerDayClasses as dayClasses } from '../DateRangePickerDay';
19
20
  import { rangeValueManager } from '../internal/utils/valueManagers';
21
+ import { useDragRange } from './useDragRange';
20
22
  import { jsx as _jsx } from "react/jsx-runtime";
21
23
  import { jsxs as _jsxs } from "react/jsx-runtime";
22
24
  const releaseInfo = getReleaseInfo();
@@ -47,12 +49,30 @@ const DateRangeCalendarArrowSwitcher = styled(PickersArrowSwitcher)({
47
49
  });
48
50
  const DAY_RANGE_SIZE = 40;
49
51
  const weeksContainerHeight = (DAY_RANGE_SIZE + DAY_MARGIN * 2) * 6;
50
- const DayCalendarForRange = styled(DayCalendar)({
52
+ const DayCalendarForRange = styled(DayCalendar)(({
53
+ theme
54
+ }) => ({
51
55
  minWidth: 312,
52
- minHeight: weeksContainerHeight
53
- });
56
+ minHeight: weeksContainerHeight,
57
+ [`&.${dateRangeCalendarClasses.dayDragging}`]: {
58
+ [`& .${dayClasses.day}`]: {
59
+ cursor: 'grabbing'
60
+ },
61
+ [`& .${dayClasses.root}:not(.${dayClasses.rangeIntervalDayHighlightStart}):not(.${dayClasses.rangeIntervalDayHighlightEnd}) .${dayClasses.day}:not(.${dayClasses.notSelectedDate})`]: {
62
+ // we can't override `PickersDay` background color here, because it's styles take precedence
63
+ opacity: 0.6
64
+ }
65
+ },
66
+ [`&:not(.${dateRangeCalendarClasses.dayDragging}) .${dayClasses.dayOutsideRangeInterval}`]: {
67
+ '@media (pointer: fine)': {
68
+ '&:hover': {
69
+ border: `1px solid ${(theme.vars || theme).palette.grey[500]}`
70
+ }
71
+ }
72
+ }
73
+ }));
54
74
  function useDateRangeCalendarDefaultizedProps(props, name) {
55
- var _themeProps$renderLoa, _themeProps$reduceAni, _props$loading, _props$disablePast, _props$disableFuture, _themeProps$calendars;
75
+ var _themeProps$renderLoa, _themeProps$reduceAni, _props$loading, _props$disablePast, _props$disableFuture, _themeProps$calendars, _themeProps$disableDr;
56
76
  const utils = useUtils();
57
77
  const defaultDates = useDefaultDates();
58
78
  const themeProps = useThemeProps({
@@ -69,16 +89,19 @@ function useDateRangeCalendarDefaultizedProps(props, name) {
69
89
  disableFuture: (_props$disableFuture = props.disableFuture) != null ? _props$disableFuture : false,
70
90
  minDate: applyDefaultDate(utils, themeProps.minDate, defaultDates.minDate),
71
91
  maxDate: applyDefaultDate(utils, themeProps.maxDate, defaultDates.maxDate),
72
- calendars: (_themeProps$calendars = themeProps.calendars) != null ? _themeProps$calendars : 2
92
+ calendars: (_themeProps$calendars = themeProps.calendars) != null ? _themeProps$calendars : 2,
93
+ disableDragEditing: (_themeProps$disableDr = themeProps.disableDragEditing) != null ? _themeProps$disableDr : false
73
94
  });
74
95
  }
75
96
  const useUtilityClasses = ownerState => {
76
97
  const {
77
- classes
98
+ classes,
99
+ isDragging
78
100
  } = ownerState;
79
101
  const slots = {
80
102
  root: ['root'],
81
- monthContainer: ['monthContainer']
103
+ monthContainer: ['monthContainer'],
104
+ dayCalendar: [isDragging && 'dayDragging']
82
105
  };
83
106
  return composeClasses(slots, getDateRangeCalendarUtilityClass, classes);
84
107
  };
@@ -86,8 +109,6 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
86
109
  const utils = useUtils();
87
110
  const localeText = useLocaleText();
88
111
  const props = useDateRangeCalendarDefaultizedProps(inProps, 'MuiDateRangeCalendar');
89
- const ownerState = props;
90
- const classes = useUtilityClasses(ownerState);
91
112
  const isMobile = React.useContext(WrapperVariantContext) === 'mobile';
92
113
  const {
93
114
  value: valueProp,
@@ -102,8 +123,8 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
102
123
  reduceAnimations,
103
124
  onMonthChange,
104
125
  defaultCalendarMonth,
105
- currentDatePosition: currentDatePositionProp,
106
- onCurrentDatePositionChange,
126
+ rangePosition: rangePositionProps,
127
+ onRangePositionChange,
107
128
  calendars,
108
129
  components,
109
130
  componentsProps,
@@ -116,7 +137,9 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
116
137
  dayOfWeekFormatter,
117
138
  disableAutoMonthSwitching,
118
139
  autoFocus,
119
- fixedWeekNumber
140
+ fixedWeekNumber,
141
+ disableDragEditing,
142
+ displayWeekNumber
120
143
  } = props,
121
144
  other = _objectWithoutPropertiesLoose(props, _excluded);
122
145
  const [value, setValue] = useControlled({
@@ -125,13 +148,78 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
125
148
  name: 'DateRangeCalendar',
126
149
  state: 'value'
127
150
  });
128
- const [currentDatePosition, setCurrentDatePosition] = useControlled({
129
- controlled: currentDatePositionProp,
151
+ const [rangePosition, setRangePosition] = useControlled({
152
+ controlled: rangePositionProps,
130
153
  default: 'start',
131
154
  name: 'DateRangeCalendar',
132
- state: 'currentDatePosition'
155
+ state: 'rangePosition'
156
+ });
157
+ const handleDatePositionChange = useEventCallback(position => {
158
+ if (rangePosition !== position) {
159
+ setRangePosition(position);
160
+ }
133
161
  });
134
- const wrappedShouldDisableDate = shouldDisableDate && (dayToTest => shouldDisableDate == null ? void 0 : shouldDisableDate(dayToTest, currentDatePosition));
162
+ const handleSelectedDayChange = useEventCallback((newDate, selectionState, allowRangeFlip = false) => {
163
+ const {
164
+ nextSelection,
165
+ newRange
166
+ } = calculateRangeChange({
167
+ newDate,
168
+ utils,
169
+ range: value,
170
+ rangePosition,
171
+ allowRangeFlip
172
+ });
173
+ setRangePosition(nextSelection);
174
+ onRangePositionChange == null ? void 0 : onRangePositionChange(nextSelection);
175
+ const isFullRangeSelected = rangePosition === 'end' && isRangeValid(utils, newRange);
176
+ setValue(newRange);
177
+ onChange == null ? void 0 : onChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
178
+ });
179
+ const handleDrop = useEventCallback(newDate => {
180
+ handleSelectedDayChange(newDate, undefined, true);
181
+ });
182
+ const shouldDisableDragEditing = disableDragEditing || disabled || readOnly;
183
+
184
+ // Range going for the start of the start day to the end of the end day.
185
+ // This makes sure that `isWithinRange` works with any time in the start and end day.
186
+ const valueDayRange = React.useMemo(() => [value[0] == null || !utils.isValid(value[0]) ? value[0] : utils.startOfDay(value[0]), value[1] == null || !utils.isValid(value[1]) ? value[1] : utils.endOfDay(value[1])], [value, utils]);
187
+ const _useDragRange = useDragRange({
188
+ disableDragEditing: shouldDisableDragEditing,
189
+ onDrop: handleDrop,
190
+ onDatePositionChange: handleDatePositionChange,
191
+ utils,
192
+ dateRange: valueDayRange
193
+ }),
194
+ {
195
+ isDragging,
196
+ rangeDragDay,
197
+ draggingDatePosition
198
+ } = _useDragRange,
199
+ dragEventHandlers = _objectWithoutPropertiesLoose(_useDragRange, _excluded2);
200
+ const ownerState = _extends({}, props, {
201
+ isDragging
202
+ });
203
+ const classes = useUtilityClasses(ownerState);
204
+ const draggingRange = React.useMemo(() => {
205
+ if (!valueDayRange[0] || !valueDayRange[1] || !rangeDragDay) {
206
+ return [null, null];
207
+ }
208
+ const newRange = calculateRangeChange({
209
+ utils,
210
+ range: valueDayRange,
211
+ newDate: rangeDragDay,
212
+ rangePosition,
213
+ allowRangeFlip: true
214
+ }).newRange;
215
+ return newRange[0] !== null && newRange[1] !== null ? [utils.startOfDay(newRange[0]), utils.endOfDay(newRange[1])] : newRange;
216
+ }, [rangePosition, rangeDragDay, utils, valueDayRange]);
217
+ const wrappedShouldDisableDate = React.useMemo(() => {
218
+ if (!shouldDisableDate) {
219
+ return undefined;
220
+ }
221
+ return dayToTest => shouldDisableDate(dayToTest, draggingDatePosition || rangePosition);
222
+ }, [shouldDisableDate, rangePosition, draggingDatePosition]);
135
223
  const {
136
224
  calendarState,
137
225
  changeFocusedDay,
@@ -153,14 +241,14 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
153
241
  const prevValue = React.useRef(null);
154
242
  React.useEffect(() => {
155
243
  var _prevValue$current, _prevValue$current2;
156
- const date = currentDatePosition === 'start' ? value[0] : value[1];
244
+ const date = rangePosition === 'start' ? value[0] : value[1];
157
245
  if (!date || !utils.isValid(date)) {
158
246
  return;
159
247
  }
160
- const prevDate = currentDatePosition === 'start' ? (_prevValue$current = prevValue.current) == null ? void 0 : _prevValue$current[0] : (_prevValue$current2 = prevValue.current) == null ? void 0 : _prevValue$current2[1];
248
+ const prevDate = rangePosition === 'start' ? (_prevValue$current = prevValue.current) == null ? void 0 : _prevValue$current[0] : (_prevValue$current2 = prevValue.current) == null ? void 0 : _prevValue$current2[1];
161
249
  prevValue.current = value;
162
250
 
163
- // The current date did not change, this call comes either from a `currentlySelectingRangeEnd` change or a change in the other date.
251
+ // The current date did not change, this call comes either from a `rangePosition` change or a change in the other date.
164
252
  // In both cases, we don't want to change the visible month(s).
165
253
  if (disableAutoMonthSwitching && prevDate && utils.isEqual(prevDate, date)) {
166
254
  return;
@@ -169,29 +257,13 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
169
257
  const currentMonthNumber = utils.getMonth(calendarState.currentMonth);
170
258
  const requestedMonthNumber = utils.getMonth(date);
171
259
  if (!utils.isSameYear(calendarState.currentMonth, date) || requestedMonthNumber < currentMonthNumber || requestedMonthNumber > currentMonthNumber + displayingMonthRange) {
172
- const newMonth = currentDatePosition === 'start' ? date :
260
+ const newMonth = rangePosition === 'start' ? date :
173
261
  // If need to focus end, scroll to the state when "end" is displaying in the last calendar
174
262
  utils.addMonths(date, -displayingMonthRange);
175
263
  changeMonth(newMonth);
176
264
  }
177
- }, [currentDatePosition, value]); // eslint-disable-line
265
+ }, [rangePosition, value]); // eslint-disable-line
178
266
 
179
- const handleSelectedDayChange = useEventCallback(newDate => {
180
- const {
181
- nextSelection,
182
- newRange
183
- } = calculateRangeChange({
184
- newDate,
185
- utils,
186
- range: value,
187
- currentlySelectingRangeEnd: currentDatePosition
188
- });
189
- setCurrentDatePosition(nextSelection);
190
- onCurrentDatePositionChange == null ? void 0 : onCurrentDatePositionChange(nextSelection);
191
- const isFullRangeSelected = currentDatePosition === 'end' && isRangeValid(utils, newRange);
192
- setValue(newRange);
193
- onChange == null ? void 0 : onChange(newRange, isFullRangeSelected ? 'finish' : 'partial');
194
- });
195
267
  const selectNextMonth = React.useCallback(() => {
196
268
  changeMonth(utils.getNextMonth(calendarState.currentMonth));
197
269
  }, [changeMonth, calendarState.currentMonth, utils]);
@@ -225,23 +297,19 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
225
297
  const CalendarTransitionProps = React.useMemo(() => ({
226
298
  onMouseLeave: () => setRangePreviewDay(null)
227
299
  }), []);
228
-
229
- // Range going for the start of the start day to the end of the end day.
230
- // This makes sure that `isWithinRange` works with any time in the start and end day.
231
- const valueDayRange = React.useMemo(() => [value[0] == null || !utils.isValid(value[0]) ? value[0] : utils.startOfDay(value[0]), value[1] == null || !utils.isValid(value[1]) ? value[1] : utils.endOfDay(value[1])], [value, utils]);
232
300
  const previewingRange = calculateRangePreview({
233
301
  utils,
234
302
  range: valueDayRange,
235
303
  newDate: rangePreviewDay,
236
- currentlySelectingRangeEnd: currentDatePosition
304
+ rangePosition
237
305
  });
238
- const handlePreviewDayChange = newPreviewRequest => {
306
+ const handleDayMouseEnter = useEventCallback((event, newPreviewRequest) => {
239
307
  if (!isWithinRange(utils, newPreviewRequest, valueDayRange)) {
240
308
  setRangePreviewDay(newPreviewRequest);
241
309
  } else {
242
310
  setRangePreviewDay(null);
243
311
  }
244
- };
312
+ });
245
313
  const componentsForDayCalendar = _extends({
246
314
  Day: DateRangePickerDay
247
315
  }, components);
@@ -251,17 +319,37 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
251
319
  const {
252
320
  day
253
321
  } = dayOwnerState;
322
+ const isSelectedStartDate = isStartOfRange(utils, day, valueDayRange);
323
+ const isSelectedEndDate = isEndOfRange(utils, day, valueDayRange);
324
+ const shouldInitDragging = !shouldDisableDragEditing && valueDayRange[0] && valueDayRange[1];
325
+ const isElementDraggable = shouldInitDragging && (isSelectedStartDate || isSelectedEndDate);
326
+ let datePosition;
327
+ if (isSelectedStartDate) {
328
+ datePosition = 'start';
329
+ } else if (isSelectedEndDate) {
330
+ datePosition = 'end';
331
+ }
332
+ const isStartOfHighlighting = isDragging ? isStartOfRange(utils, day, draggingRange) : isSelectedStartDate;
333
+ const isEndOfHighlighting = isDragging ? isEndOfRange(utils, day, draggingRange) : isSelectedEndDate;
254
334
  return _extends({
255
335
  isPreviewing: isMobile ? false : isWithinRange(utils, day, previewingRange),
256
336
  isStartOfPreviewing: isMobile ? false : isStartOfRange(utils, day, previewingRange),
257
337
  isEndOfPreviewing: isMobile ? false : isEndOfRange(utils, day, previewingRange),
258
- isHighlighting: isWithinRange(utils, day, valueDayRange),
259
- isStartOfHighlighting: isStartOfRange(utils, day, valueDayRange),
260
- isEndOfHighlighting: isEndOfRange(utils, day, valueDayRange),
261
- onMouseEnter: () => handlePreviewDayChange(day)
338
+ isHighlighting: isWithinRange(utils, day, isDragging ? draggingRange : valueDayRange),
339
+ isStartOfHighlighting,
340
+ isEndOfHighlighting: isDragging ? isEndOfRange(utils, day, draggingRange) : isSelectedEndDate,
341
+ onMouseEnter: handleDayMouseEnter,
342
+ // apply selected styling to the dragging start or end day
343
+ isVisuallySelected: dayOwnerState.selected || isDragging && (isStartOfHighlighting || isEndOfHighlighting),
344
+ 'data-position': datePosition
345
+ }, dragEventHandlers, {
346
+ draggable: isElementDraggable ? true : undefined
262
347
  }, (_resolveComponentProp = resolveComponentProps(componentsProps == null ? void 0 : componentsProps.day, dayOwnerState)) != null ? _resolveComponentProp : {});
263
348
  }
264
349
  });
350
+ const visibleMonths = React.useMemo(() => Array.from({
351
+ length: calendars
352
+ }).map((_, index) => utils.setMonth(calendarState.currentMonth, utils.getMonth(calendarState.currentMonth) + index)), [utils, calendarState.currentMonth, calendars]);
265
353
  return /*#__PURE__*/_jsxs(DateRangeCalendarRoot, _extends({
266
354
  ref: ref,
267
355
  className: clsx(className, classes.root),
@@ -270,60 +358,58 @@ const DateRangeCalendar = /*#__PURE__*/React.forwardRef(function DateRangeCalend
270
358
  children: [/*#__PURE__*/_jsx(Watermark, {
271
359
  packageName: "x-date-pickers-pro",
272
360
  releaseInfo: releaseInfo
273
- }), Array.from({
274
- length: calendars
275
- }).map((_, index) => {
276
- const monthOnIteration = utils.setMonth(calendarState.currentMonth, utils.getMonth(calendarState.currentMonth) + index);
277
- return /*#__PURE__*/_jsxs(DateRangeCalendarMonthContainer, {
278
- className: classes.monthContainer,
279
- children: [calendars === 1 ? /*#__PURE__*/_jsx(PickersCalendarHeader, {
280
- views: ['day'],
281
- openView: 'day',
282
- currentMonth: calendarState.currentMonth,
283
- onMonthChange: (newMonth, direction) => handleChangeMonth({
284
- newMonth,
285
- direction
286
- }),
287
- minDate: minDateWithDisabled,
288
- maxDate: maxDateWithDisabled,
289
- disabled: disabled,
290
- disablePast: disablePast,
291
- disableFuture: disableFuture,
292
- reduceAnimations: reduceAnimations,
293
- components: components,
294
- componentsProps: componentsProps
295
- }) : /*#__PURE__*/_jsx(DateRangeCalendarArrowSwitcher, {
296
- onGoToPrevious: selectPreviousMonth,
297
- onGoToNext: selectNextMonth,
298
- isPreviousHidden: index !== 0,
299
- isPreviousDisabled: isPreviousMonthDisabled,
300
- previousLabel: localeText.previousMonth,
301
- isNextHidden: index !== calendars - 1,
302
- isNextDisabled: isNextMonthDisabled,
303
- nextLabel: localeText.nextMonth,
304
- components: components,
305
- componentsProps: componentsProps,
306
- children: utils.format(monthOnIteration, 'monthAndYear')
307
- }), /*#__PURE__*/_jsx(DayCalendarForRange, _extends({}, calendarState, baseDateValidationProps, commonViewProps, {
308
- onMonthSwitchingAnimationEnd: onMonthSwitchingAnimationEnd,
309
- onFocusedDayChange: changeFocusedDay,
310
- reduceAnimations: reduceAnimations,
311
- selectedDays: value,
312
- onSelectedDaysChange: handleSelectedDayChange,
313
- currentMonth: monthOnIteration,
314
- TransitionProps: CalendarTransitionProps,
315
- shouldDisableDate: wrappedShouldDisableDate,
316
- showDaysOutsideCurrentMonth: showDaysOutsideCurrentMonth,
317
- dayOfWeekFormatter: dayOfWeekFormatter,
318
- loading: loading,
319
- renderLoading: renderLoading,
320
- components: componentsForDayCalendar,
321
- componentsProps: componentsPropsForDayCalendar,
322
- autoFocus: autoFocus,
323
- fixedWeekNumber: fixedWeekNumber
324
- }), index)]
325
- }, index);
326
- })]
361
+ }), visibleMonths.map((month, index) => /*#__PURE__*/_jsxs(DateRangeCalendarMonthContainer, {
362
+ className: classes.monthContainer,
363
+ children: [calendars === 1 ? /*#__PURE__*/_jsx(PickersCalendarHeader, {
364
+ views: ['day'],
365
+ openView: 'day',
366
+ currentMonth: calendarState.currentMonth,
367
+ onMonthChange: (newMonth, direction) => handleChangeMonth({
368
+ newMonth,
369
+ direction
370
+ }),
371
+ minDate: minDateWithDisabled,
372
+ maxDate: maxDateWithDisabled,
373
+ disabled: disabled,
374
+ disablePast: disablePast,
375
+ disableFuture: disableFuture,
376
+ reduceAnimations: reduceAnimations,
377
+ components: components,
378
+ componentsProps: componentsProps
379
+ }) : /*#__PURE__*/_jsx(DateRangeCalendarArrowSwitcher, {
380
+ onGoToPrevious: selectPreviousMonth,
381
+ onGoToNext: selectNextMonth,
382
+ isPreviousHidden: index !== 0,
383
+ isPreviousDisabled: isPreviousMonthDisabled,
384
+ previousLabel: localeText.previousMonth,
385
+ isNextHidden: index !== calendars - 1,
386
+ isNextDisabled: isNextMonthDisabled,
387
+ nextLabel: localeText.nextMonth,
388
+ components: components,
389
+ componentsProps: componentsProps,
390
+ children: utils.format(month, 'monthAndYear')
391
+ }), /*#__PURE__*/_jsx(DayCalendarForRange, _extends({
392
+ className: classes.dayCalendar
393
+ }, calendarState, baseDateValidationProps, commonViewProps, {
394
+ onMonthSwitchingAnimationEnd: onMonthSwitchingAnimationEnd,
395
+ onFocusedDayChange: changeFocusedDay,
396
+ reduceAnimations: reduceAnimations,
397
+ selectedDays: value,
398
+ onSelectedDaysChange: handleSelectedDayChange,
399
+ currentMonth: month,
400
+ TransitionProps: CalendarTransitionProps,
401
+ shouldDisableDate: wrappedShouldDisableDate,
402
+ showDaysOutsideCurrentMonth: showDaysOutsideCurrentMonth,
403
+ dayOfWeekFormatter: dayOfWeekFormatter,
404
+ loading: loading,
405
+ renderLoading: renderLoading,
406
+ components: componentsForDayCalendar,
407
+ componentsProps: componentsPropsForDayCalendar,
408
+ autoFocus: autoFocus,
409
+ fixedWeekNumber: fixedWeekNumber,
410
+ displayWeekNumber: displayWeekNumber
411
+ }), index)]
412
+ }, month.toString()))]
327
413
  }));
328
414
  });
329
415
  process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
@@ -349,7 +435,6 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
349
435
  * @default {}
350
436
  */
351
437
  componentsProps: PropTypes.object,
352
- currentDatePosition: PropTypes.oneOf(['end', 'start']),
353
438
  /**
354
439
  * Formats the day of week displayed in the calendar header.
355
440
  * @param {string} day The day of week provided by the adapter's method `getWeekdays`.
@@ -376,6 +461,11 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
376
461
  * @default false
377
462
  */
378
463
  disabled: PropTypes.bool,
464
+ /**
465
+ * If `true`, editing dates by dragging is disabled.
466
+ * @default false
467
+ */
468
+ disableDragEditing: PropTypes.bool,
379
469
  /**
380
470
  * If `true` disable values before the current date for date components, time for time components and both for date time components.
381
471
  * @default false
@@ -422,7 +512,6 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
422
512
  * @param {PickerSelectionState | undefined} selectionState Indicates if the date range selection is complete.
423
513
  */
424
514
  onChange: PropTypes.func,
425
- onCurrentDatePositionChange: PropTypes.func,
426
515
  /**
427
516
  * Callback firing on month change @DateIOType.
428
517
  * @template TDate
@@ -430,6 +519,8 @@ process.env.NODE_ENV !== "production" ? DateRangeCalendar.propTypes = {
430
519
  * @returns {void|Promise} -
431
520
  */
432
521
  onMonthChange: PropTypes.func,
522
+ onRangePositionChange: PropTypes.func,
523
+ rangePosition: PropTypes.oneOf(['end', 'start']),
433
524
  /**
434
525
  * Make picker read only.
435
526
  * @default false
@@ -1,11 +1,12 @@
1
1
  import * as React from 'react';
2
2
  import { SxProps } from '@mui/system';
3
+ import { SlotComponentProps } from '@mui/base';
3
4
  import { Theme } from '@mui/material/styles';
4
- import { BaseDateValidationProps, DefaultizedProps, ExportedDayCalendarProps, DayCalendarSlotsComponent, DayCalendarSlotsComponentsProps, PickersArrowSwitcherSlotsComponent, PickersArrowSwitcherSlotsComponentsProps, PickerSelectionState, PickersCalendarHeaderSlotsComponent, PickersCalendarHeaderSlotsComponentsProps } from '@mui/x-date-pickers/internals';
5
- import { DateRange, DayRangeValidationProps } from '../internal/models';
5
+ import { BaseDateValidationProps, DefaultizedProps, ExportedDayCalendarProps, DayCalendarSlotsComponent, DayCalendarSlotsComponentsProps, PickersArrowSwitcherSlotsComponent, PickersArrowSwitcherSlotsComponentsProps, PickerSelectionState, PickersCalendarHeaderSlotsComponent, PickersCalendarHeaderSlotsComponentsProps, DayCalendarProps } from '@mui/x-date-pickers/internals';
6
+ import { DateRange, RangePositionProps, DayRangeValidationProps } from '../internal/models';
6
7
  import { DateRangeCalendarClasses } from './dateRangeCalendarClasses';
7
- import { DateRangePickerDayProps } from '../DateRangePickerDay';
8
- export declare type DateRangePosition = 'start' | 'end';
8
+ import { DateRangePickerDay, DateRangePickerDayProps } from '../DateRangePickerDay';
9
+ export type DateRangePosition = 'start' | 'end';
9
10
  export interface DateRangeCalendarSlotsComponent<TDate> extends PickersArrowSwitcherSlotsComponent, Omit<DayCalendarSlotsComponent<TDate>, 'Day'>, PickersCalendarHeaderSlotsComponent {
10
11
  /**
11
12
  * Custom component for day in range pickers.
@@ -14,9 +15,13 @@ export interface DateRangeCalendarSlotsComponent<TDate> extends PickersArrowSwit
14
15
  */
15
16
  Day?: React.ElementType<DateRangePickerDayProps<TDate>>;
16
17
  }
17
- export interface DateRangeCalendarSlotsComponentsProps<TDate> extends PickersArrowSwitcherSlotsComponentsProps, Omit<DayCalendarSlotsComponentsProps<TDate>, 'Day'>, PickersCalendarHeaderSlotsComponentsProps<TDate> {
18
+ export interface DateRangeCalendarSlotsComponentsProps<TDate> extends PickersArrowSwitcherSlotsComponentsProps, Omit<DayCalendarSlotsComponentsProps<TDate>, 'day'>, PickersCalendarHeaderSlotsComponentsProps<TDate> {
19
+ day?: SlotComponentProps<typeof DateRangePickerDay, {}, DayCalendarProps<TDate> & {
20
+ day: TDate;
21
+ selected: boolean;
22
+ }>;
18
23
  }
19
- export interface DateRangeCalendarProps<TDate> extends ExportedDayCalendarProps<TDate>, BaseDateValidationProps<TDate>, DayRangeValidationProps<TDate> {
24
+ export interface DateRangeCalendarProps<TDate> extends ExportedDayCalendarProps<TDate>, BaseDateValidationProps<TDate>, DayRangeValidationProps<TDate>, Partial<RangePositionProps> {
20
25
  /**
21
26
  * The selected value.
22
27
  * Used when the component is controlled.
@@ -82,13 +87,19 @@ export interface DateRangeCalendarProps<TDate> extends ExportedDayCalendarProps<
82
87
  * @returns {void|Promise} -
83
88
  */
84
89
  onMonthChange?: (month: TDate) => void | Promise<void>;
85
- currentDatePosition?: DateRangePosition;
86
- onCurrentDatePositionChange?: (newPosition: DateRangePosition) => void;
87
90
  /**
88
91
  * The number of calendars to render.
89
92
  * @default 2
90
93
  */
91
94
  calendars?: 1 | 2 | 3;
95
+ /**
96
+ * If `true`, editing dates by dragging is disabled.
97
+ * @default false
98
+ */
99
+ disableDragEditing?: boolean;
100
+ }
101
+ export interface DateRangeCalendarOwnerState<TDate> extends DateRangeCalendarProps<TDate> {
102
+ isDragging: boolean;
92
103
  }
93
- export declare type DateRangeCalendarDefaultizedProps<TDate> = DefaultizedProps<DateRangeCalendarProps<TDate>, 'reduceAnimations' | 'calendars' | keyof BaseDateValidationProps<TDate>>;
94
- export declare type ExportedDateRangeCalendarProps<TDate> = Omit<DateRangeCalendarProps<TDate>, 'defaultValue' | 'value' | 'onChange' | 'changeView' | 'slideDirection' | 'currentMonth' | 'className' | 'classes' | 'components' | 'componentsProps' | 'currentDatePosition' | 'onCurrentDatePositionChange'>;
104
+ export type DateRangeCalendarDefaultizedProps<TDate> = DefaultizedProps<DateRangeCalendarProps<TDate>, 'reduceAnimations' | 'calendars' | 'disableDragEditing' | keyof BaseDateValidationProps<TDate>>;
105
+ export type ExportedDateRangeCalendarProps<TDate> = Omit<DateRangeCalendarProps<TDate>, 'defaultValue' | 'value' | 'onChange' | 'changeView' | 'slideDirection' | 'currentMonth' | 'className' | 'classes' | 'components' | 'componentsProps' | 'rangePosition' | 'onRangePositionChange'>;