@mui/x-date-pickers 7.9.0 → 7.11.0

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 (52) hide show
  1. package/CHANGELOG.md +159 -0
  2. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +4 -4
  3. package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +2 -3
  4. package/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  5. package/PickersCalendarHeader/PickersCalendarHeader.types.d.ts +1 -1
  6. package/PickersLayout/PickersLayout.d.ts +4 -4
  7. package/PickersLayout/PickersLayout.js +2 -4
  8. package/PickersLayout/PickersLayout.types.d.ts +0 -4
  9. package/PickersTextField/PickersInput/pickersInputClasses.d.ts +1 -1
  10. package/TimeClock/Clock.js +21 -32
  11. package/TimeClock/clockClasses.d.ts +2 -0
  12. package/TimeClock/clockClasses.js +1 -1
  13. package/index.js +1 -1
  14. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -5
  15. package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.ts +2 -2
  16. package/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.d.ts +9 -1
  17. package/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js +1 -1
  18. package/internals/hooks/useField/useFieldV6TextField.js +10 -9
  19. package/internals/hooks/useField/useFieldV7TextField.js +1 -4
  20. package/internals/index.d.ts +1 -1
  21. package/internals/index.js +1 -1
  22. package/internals/utils/date-time-utils.d.ts +1 -1
  23. package/locales/koKR.js +14 -16
  24. package/locales/ruRU.js +15 -18
  25. package/models/pickers.d.ts +1 -1
  26. package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +2 -3
  27. package/modern/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  28. package/modern/PickersLayout/PickersLayout.js +2 -4
  29. package/modern/TimeClock/Clock.js +21 -32
  30. package/modern/TimeClock/clockClasses.js +1 -1
  31. package/modern/index.js +1 -1
  32. package/modern/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -5
  33. package/modern/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js +1 -1
  34. package/modern/internals/hooks/useField/useFieldV6TextField.js +10 -9
  35. package/modern/internals/hooks/useField/useFieldV7TextField.js +1 -4
  36. package/modern/internals/index.js +1 -1
  37. package/modern/locales/koKR.js +14 -16
  38. package/modern/locales/ruRU.js +15 -18
  39. package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +3 -4
  40. package/node/PickersCalendarHeader/PickersCalendarHeader.js +1 -1
  41. package/node/PickersLayout/PickersLayout.js +2 -4
  42. package/node/TimeClock/Clock.js +21 -32
  43. package/node/TimeClock/clockClasses.js +1 -1
  44. package/node/index.js +1 -1
  45. package/node/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -5
  46. package/node/internals/components/PickersArrowSwitcher/pickersArrowSwitcherClasses.js +1 -1
  47. package/node/internals/hooks/useField/useFieldV6TextField.js +10 -9
  48. package/node/internals/hooks/useField/useFieldV7TextField.js +1 -4
  49. package/node/internals/index.js +6 -0
  50. package/node/locales/koKR.js +14 -16
  51. package/node/locales/ruRU.js +15 -18
  52. package/package.json +4 -4
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.Clock = Clock;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
9
  var React = _interopRequireWildcard(require("react"));
9
10
  var _clsx = _interopRequireDefault(require("clsx"));
10
11
  var _IconButton = _interopRequireDefault(require("@mui/material/IconButton"));
@@ -22,7 +23,8 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
22
23
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
23
24
  const useUtilityClasses = ownerState => {
24
25
  const {
25
- classes
26
+ classes,
27
+ meridiemMode
26
28
  } = ownerState;
27
29
  const slots = {
28
30
  root: ['root'],
@@ -30,8 +32,8 @@ const useUtilityClasses = ownerState => {
30
32
  wrapper: ['wrapper'],
31
33
  squareMask: ['squareMask'],
32
34
  pin: ['pin'],
33
- amButton: ['amButton'],
34
- pmButton: ['pmButton'],
35
+ amButton: ['amButton', meridiemMode === 'am' && 'selected'],
36
+ pmButton: ['pmButton', meridiemMode === 'pm' && 'selected'],
35
37
  meridiemText: ['meridiemText']
36
38
  };
37
39
  return (0, _utils.unstable_composeClasses)(slots, _clockClasses.getClockUtilityClass, classes);
@@ -114,23 +116,15 @@ const ClockPin = (0, _styles.styled)('div', {
114
116
  left: '50%',
115
117
  transform: 'translate(-50%, -50%)'
116
118
  }));
117
- const ClockAmButton = (0, _styles.styled)(_IconButton.default, {
118
- name: 'MuiClock',
119
- slot: 'AmButton',
120
- overridesResolver: (_, styles) => styles.amButton
121
- })(({
122
- theme
123
- }) => ({
119
+ const meridiemButtonCommonStyles = (theme, meridiemMode) => ({
124
120
  zIndex: 1,
125
- position: 'absolute',
126
121
  bottom: 8,
127
- left: 8,
128
122
  paddingLeft: 4,
129
123
  paddingRight: 4,
130
124
  width: _shared.CLOCK_HOUR_WIDTH,
131
125
  variants: [{
132
126
  props: {
133
- meridiemMode: 'am'
127
+ meridiemMode
134
128
  },
135
129
  style: {
136
130
  backgroundColor: (theme.vars || theme).palette.primary.main,
@@ -140,6 +134,17 @@ const ClockAmButton = (0, _styles.styled)(_IconButton.default, {
140
134
  }
141
135
  }
142
136
  }]
137
+ });
138
+ const ClockAmButton = (0, _styles.styled)(_IconButton.default, {
139
+ name: 'MuiClock',
140
+ slot: 'AmButton',
141
+ overridesResolver: (_, styles) => styles.amButton
142
+ })(({
143
+ theme
144
+ }) => (0, _extends2.default)({}, meridiemButtonCommonStyles(theme, 'am'), {
145
+ // keeping it here to make TS happy
146
+ position: 'absolute',
147
+ left: 8
143
148
  }));
144
149
  const ClockPmButton = (0, _styles.styled)(_IconButton.default, {
145
150
  name: 'MuiClock',
@@ -147,26 +152,10 @@ const ClockPmButton = (0, _styles.styled)(_IconButton.default, {
147
152
  overridesResolver: (_, styles) => styles.pmButton
148
153
  })(({
149
154
  theme
150
- }) => ({
151
- zIndex: 1,
155
+ }) => (0, _extends2.default)({}, meridiemButtonCommonStyles(theme, 'pm'), {
156
+ // keeping it here to make TS happy
152
157
  position: 'absolute',
153
- bottom: 8,
154
- right: 8,
155
- paddingLeft: 4,
156
- paddingRight: 4,
157
- width: _shared.CLOCK_HOUR_WIDTH,
158
- variants: [{
159
- props: {
160
- meridiemMode: 'pm'
161
- },
162
- style: {
163
- backgroundColor: (theme.vars || theme).palette.primary.main,
164
- color: (theme.vars || theme).palette.primary.contrastText,
165
- '&:hover': {
166
- backgroundColor: (theme.vars || theme).palette.primary.light
167
- }
168
- }
169
- }]
158
+ right: 8
170
159
  }));
171
160
  const ClockMeridiemText = (0, _styles.styled)(_Typography.default, {
172
161
  name: 'MuiClock',
@@ -9,4 +9,4 @@ var _utils = require("@mui/utils");
9
9
  function getClockUtilityClass(slot) {
10
10
  return (0, _utils.unstable_generateUtilityClass)('MuiClock', slot);
11
11
  }
12
- const clockClasses = exports.clockClasses = (0, _utils.unstable_generateUtilityClasses)('MuiClock', ['root', 'clock', 'wrapper', 'squareMask', 'pin', 'amButton', 'pmButton', 'meridiemText']);
12
+ const clockClasses = exports.clockClasses = (0, _utils.unstable_generateUtilityClasses)('MuiClock', ['root', 'clock', 'wrapper', 'squareMask', 'pin', 'amButton', 'pmButton', 'meridiemText', 'selected']);
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v7.9.0
2
+ * @mui/x-date-pickers v7.11.0
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -60,7 +60,11 @@ const useUtilityClasses = ownerState => {
60
60
  const slots = {
61
61
  root: ['root'],
62
62
  spacer: ['spacer'],
63
- button: ['button']
63
+ button: ['button'],
64
+ previousIconButton: ['previousIconButton'],
65
+ nextIconButton: ['nextIconButton'],
66
+ leftArrowIcon: ['leftArrowIcon'],
67
+ rightArrowIcon: ['rightArrowIcon']
64
68
  };
65
69
  return (0, _utils.unstable_composeClasses)(slots, _pickersArrowSwitcherClasses.getPickersArrowSwitcherUtilityClass, classes);
66
70
  };
@@ -115,7 +119,7 @@ const PickersArrowSwitcher = exports.PickersArrowSwitcher = /*#__PURE__*/React.f
115
119
  ownerState: (0, _extends2.default)({}, ownerState, {
116
120
  hidden: previousProps.isHidden
117
121
  }),
118
- className: classes.button
122
+ className: (0, _clsx.default)(classes.button, classes.previousIconButton)
119
123
  });
120
124
  const NextIconButton = slots?.nextIconButton ?? PickersArrowSwitcherButton;
121
125
  const nextIconButtonProps = (0, _utils2.useSlotProps)({
@@ -132,7 +136,7 @@ const PickersArrowSwitcher = exports.PickersArrowSwitcher = /*#__PURE__*/React.f
132
136
  ownerState: (0, _extends2.default)({}, ownerState, {
133
137
  hidden: nextProps.isHidden
134
138
  }),
135
- className: classes.button
139
+ className: (0, _clsx.default)(classes.button, classes.nextIconButton)
136
140
  });
137
141
  const LeftArrowIcon = slots?.leftArrowIcon ?? _icons.ArrowLeftIcon;
138
142
  // The spread is here to avoid this bug mui/material-ui#34056
@@ -142,7 +146,8 @@ const PickersArrowSwitcher = exports.PickersArrowSwitcher = /*#__PURE__*/React.f
142
146
  additionalProps: {
143
147
  fontSize: 'inherit'
144
148
  },
145
- ownerState: undefined
149
+ ownerState,
150
+ className: classes.leftArrowIcon
146
151
  }),
147
152
  leftArrowIconProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps, _excluded2);
148
153
  const RightArrowIcon = slots?.rightArrowIcon ?? _icons.ArrowRightIcon;
@@ -153,7 +158,8 @@ const PickersArrowSwitcher = exports.PickersArrowSwitcher = /*#__PURE__*/React.f
153
158
  additionalProps: {
154
159
  fontSize: 'inherit'
155
160
  },
156
- ownerState: undefined
161
+ ownerState,
162
+ className: classes.rightArrowIcon
157
163
  }),
158
164
  rightArrowIconProps = (0, _objectWithoutPropertiesLoose2.default)(_useSlotProps2, _excluded3);
159
165
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(PickersArrowSwitcherRoot, (0, _extends2.default)({
@@ -9,4 +9,4 @@ var _utils = require("@mui/utils");
9
9
  function getPickersArrowSwitcherUtilityClass(slot) {
10
10
  return (0, _utils.unstable_generateUtilityClass)('MuiPickersArrowSwitcher', slot);
11
11
  }
12
- const pickersArrowSwitcherClasses = exports.pickersArrowSwitcherClasses = (0, _utils.unstable_generateUtilityClasses)('MuiPickersArrowSwitcher', ['root', 'spacer', 'button']);
12
+ const pickersArrowSwitcherClasses = exports.pickersArrowSwitcherClasses = (0, _utils.unstable_generateUtilityClasses)('MuiPickersArrowSwitcher', ['root', 'spacer', 'button', 'previousIconButton', 'nextIconButton', 'leftArrowIcon', 'rightArrowIcon']);
@@ -46,6 +46,7 @@ exports.addPositionPropertiesToSections = addPositionPropertiesToSections;
46
46
  const useFieldV6TextField = params => {
47
47
  const isRtl = (0, _RtlProvider.useRtl)();
48
48
  const focusTimeoutRef = React.useRef();
49
+ const selectionSyncTimeoutRef = React.useRef();
49
50
  const {
50
51
  forwardedProps: {
51
52
  onFocus,
@@ -113,10 +114,14 @@ const useFieldV6TextField = params => {
113
114
  inputRef.current.setSelectionRange(selectionStart, selectionEnd);
114
115
  }
115
116
  }
116
- setTimeout(() => {
117
+ clearTimeout(selectionSyncTimeoutRef.current);
118
+ selectionSyncTimeoutRef.current = setTimeout(() => {
117
119
  // handle case when the selection is not updated correctly
118
120
  // could happen on Android
119
- if (inputRef.current && inputRef.current === (0, _utils.getActiveElement)(document) && (inputRef.current.selectionStart !== selectionStart || inputRef.current.selectionEnd !== selectionEnd)) {
121
+ if (inputRef.current && inputRef.current === (0, _utils.getActiveElement)(document) &&
122
+ // The section might loose all selection, where `selectionStart === selectionEnd`
123
+ // https://github.com/mui/mui-x/pull/13652
124
+ inputRef.current.selectionStart === inputRef.current.selectionEnd && (inputRef.current.selectionStart !== selectionStart || inputRef.current.selectionEnd !== selectionEnd)) {
120
125
  interactions.syncSelectionToDOM();
121
126
  }
122
127
  });
@@ -128,8 +133,7 @@ const useFieldV6TextField = params => {
128
133
  getActiveSectionIndexFromDOM: () => {
129
134
  const browserStartIndex = inputRef.current.selectionStart ?? 0;
130
135
  const browserEndIndex = inputRef.current.selectionEnd ?? 0;
131
- const isInputReadOnly = !!inputRef.current?.readOnly;
132
- if (browserStartIndex === 0 && browserEndIndex === 0 || isInputReadOnly) {
136
+ if (browserStartIndex === 0 && browserEndIndex === 0) {
133
137
  return null;
134
138
  }
135
139
  const nextSectionIndex = browserStartIndex <= sections[0].startInInput ? 1 // Special case if browser index is in invisible characters at the beginning.
@@ -144,10 +148,6 @@ const useFieldV6TextField = params => {
144
148
  isFieldFocused: () => inputRef.current === (0, _utils.getActiveElement)(document)
145
149
  }), [inputRef, parsedSelectedSections, sections, setSelectedSections]);
146
150
  const syncSelectionFromDOM = () => {
147
- if (readOnly) {
148
- setSelectedSections(null);
149
- return;
150
- }
151
151
  const browserStartIndex = inputRef.current.selectionStart ?? 0;
152
152
  let nextSectionIndex;
153
153
  if (browserStartIndex <= sections[0].startInInput) {
@@ -172,7 +172,7 @@ const useFieldV6TextField = params => {
172
172
  if (!input || input !== inputRef.current) {
173
173
  return;
174
174
  }
175
- if (activeSectionIndex != null || readOnly) {
175
+ if (activeSectionIndex != null) {
176
176
  return;
177
177
  }
178
178
  if (
@@ -306,6 +306,7 @@ const useFieldV6TextField = params => {
306
306
  }
307
307
  return () => {
308
308
  clearTimeout(focusTimeoutRef.current);
309
+ clearTimeout(selectionSyncTimeoutRef.current);
309
310
  };
310
311
  }, []); // eslint-disable-line react-hooks/exhaustive-deps
311
312
 
@@ -230,7 +230,7 @@ const useFieldV7TextField = params => {
230
230
  const getInputContainerClickHandler = (0, _useEventCallback.default)(sectionIndex => event => {
231
231
  // The click event on the clear button would propagate to the input, trigger this handler and result in a wrong section selection.
232
232
  // We avoid this by checking if the call to this function is actually intended, or a side effect.
233
- if (event.isDefaultPrevented() || readOnly) {
233
+ if (event.isDefaultPrevented()) {
234
234
  return;
235
235
  }
236
236
  setSelectedSections(sectionIndex);
@@ -240,9 +240,6 @@ const useFieldV7TextField = params => {
240
240
  event.preventDefault();
241
241
  });
242
242
  const getInputContentFocusHandler = (0, _useEventCallback.default)(sectionIndex => () => {
243
- if (readOnly) {
244
- return;
245
- }
246
243
  setSelectedSections(sectionIndex);
247
244
  });
248
245
  const handleInputContentPaste = (0, _useEventCallback.default)(event => {
@@ -213,6 +213,12 @@ Object.defineProperty(exports, "replaceInvalidDateByNull", {
213
213
  return _dateUtils.replaceInvalidDateByNull;
214
214
  }
215
215
  });
216
+ Object.defineProperty(exports, "resolveDateTimeFormat", {
217
+ enumerable: true,
218
+ get: function () {
219
+ return _dateTimeUtils.resolveDateTimeFormat;
220
+ }
221
+ });
216
222
  Object.defineProperty(exports, "resolveTimeViewsResponse", {
217
223
  enumerable: true,
218
224
  get: function () {
@@ -22,11 +22,10 @@ const koKRPickers = {
22
22
  // DateRange labels
23
23
  start: '시작',
24
24
  end: '종료',
25
- // startDate: 'Start date',
26
- // startTime: 'Start time',
27
- // endDate: 'End date',
28
- // endTime: 'End time',
29
-
25
+ startDate: '시작 날짜',
26
+ startTime: '시작 시간',
27
+ endDate: '종료 날짜',
28
+ endTime: '종료 시간',
30
29
  // Action bar
31
30
  cancelButtonLabel: '취소',
32
31
  clearButtonLabel: '초기화',
@@ -60,23 +59,22 @@ const koKRPickers = {
60
59
  fieldYearPlaceholder: params => 'Y'.repeat(params.digitAmount),
61
60
  fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
62
61
  fieldDayPlaceholder: () => 'DD',
63
- // fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
62
+ fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
64
63
  fieldHoursPlaceholder: () => 'hh',
65
64
  fieldMinutesPlaceholder: () => 'mm',
66
65
  fieldSecondsPlaceholder: () => 'ss',
67
- fieldMeridiemPlaceholder: () => 'aa'
68
-
66
+ fieldMeridiemPlaceholder: () => 'aa',
69
67
  // View names
70
- // year: 'Year',
71
- // month: 'Month',
72
- // day: 'Day',
73
- // weekDay: 'Week day',
74
- // hours: 'Hours',
75
- // minutes: 'Minutes',
76
- // seconds: 'Seconds',
68
+ year: '',
69
+ month: '',
70
+ day: '',
71
+ weekDay: '평일',
72
+ hours: '시간',
73
+ minutes: '',
74
+ seconds: '',
77
75
  // meridiem: 'Meridiem',
78
76
 
79
77
  // Common
80
- // empty: 'Empty',
78
+ empty: '공란'
81
79
  };
82
80
  const koKR = exports.koKR = (0, _getPickersLocalization.getPickersLocalization)(koKRPickers);
@@ -23,11 +23,10 @@ const ruRUPickers = {
23
23
  // DateRange labels
24
24
  start: 'Начало',
25
25
  end: 'Конец',
26
- // startDate: 'Start date',
27
- // startTime: 'Start time',
28
- // endDate: 'End date',
29
- // endTime: 'End time',
30
-
26
+ startDate: 'Начальная дата',
27
+ startTime: 'Начальное время',
28
+ endDate: 'Конечная дата',
29
+ endTime: 'Конечное время',
31
30
  // Action bar
32
31
  cancelButtonLabel: 'Отмена',
33
32
  clearButtonLabel: 'Очистить',
@@ -61,23 +60,21 @@ const ruRUPickers = {
61
60
  fieldYearPlaceholder: params => 'Г'.repeat(params.digitAmount),
62
61
  fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'ММММ' : 'ММ',
63
62
  fieldDayPlaceholder: () => 'ДД',
64
- // fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
63
+ fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'ДДДД' : 'ДД',
65
64
  fieldHoursPlaceholder: () => 'чч',
66
65
  fieldMinutesPlaceholder: () => 'мм',
67
66
  fieldSecondsPlaceholder: () => 'сс',
68
- fieldMeridiemPlaceholder: () => '(д|п)п'
69
-
67
+ fieldMeridiemPlaceholder: () => '(д|п)п',
70
68
  // View names
71
- // year: 'Year',
72
- // month: 'Month',
73
- // day: 'Day',
74
- // weekDay: 'Week day',
75
- // hours: 'Hours',
76
- // minutes: 'Minutes',
77
- // seconds: 'Seconds',
78
- // meridiem: 'Meridiem',
79
-
69
+ year: 'Год',
70
+ month: 'Месяц',
71
+ day: 'День',
72
+ weekDay: 'День недели',
73
+ hours: 'Часы',
74
+ minutes: 'Минуты',
75
+ seconds: 'Секунды',
76
+ meridiem: 'Меридием',
80
77
  // Common
81
- // empty: 'Empty',
78
+ empty: 'Пустой'
82
79
  };
83
80
  const ruRU = exports.ruRU = (0, _getPickersLocalization.getPickersLocalization)(ruRUPickers);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-date-pickers",
3
- "version": "7.9.0",
3
+ "version": "7.11.0",
4
4
  "description": "The community edition of the Date and Time Picker components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -35,10 +35,10 @@
35
35
  "directory": "packages/x-date-pickers"
36
36
  },
37
37
  "dependencies": {
38
- "@babel/runtime": "^7.24.7",
38
+ "@babel/runtime": "^7.24.8",
39
39
  "@mui/base": "^5.0.0-beta.40",
40
- "@mui/system": "^5.16.0",
41
- "@mui/utils": "^5.16.0",
40
+ "@mui/system": "^5.16.2",
41
+ "@mui/utils": "^5.16.2",
42
42
  "@types/react-transition-group": "^4.4.10",
43
43
  "clsx": "^2.1.1",
44
44
  "prop-types": "^15.8.1",