@mui/x-date-pickers 6.0.2 → 6.0.3

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 (129) hide show
  1. package/AdapterDateFns/index.js +1 -0
  2. package/AdapterDateFnsJalali/index.js +1 -0
  3. package/AdapterDayjs/index.js +5 -0
  4. package/AdapterLuxon/index.js +1 -0
  5. package/AdapterMoment/index.js +5 -0
  6. package/AdapterMomentHijri/index.js +5 -0
  7. package/AdapterMomentJalaali/index.js +5 -0
  8. package/CHANGELOG.md +58 -5
  9. package/DateField/DateField.js +4 -0
  10. package/DateField/DateField.types.d.ts +2 -2
  11. package/DateField/useDateField.js +5 -3
  12. package/DateTimeField/DateTimeField.js +4 -0
  13. package/DateTimeField/DateTimeField.types.d.ts +2 -2
  14. package/DateTimeField/useDateTimeField.js +5 -3
  15. package/PickersDay/PickersDay.js +4 -4
  16. package/TimeField/TimeField.js +4 -0
  17. package/TimeField/TimeField.types.d.ts +2 -2
  18. package/TimeField/useTimeField.js +5 -3
  19. package/index.d.ts +1 -6
  20. package/index.js +4 -2
  21. package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +5 -4
  22. package/internals/hooks/useField/index.d.ts +2 -2
  23. package/internals/hooks/useField/index.js +1 -1
  24. package/internals/hooks/useField/useField.d.ts +1 -1
  25. package/internals/hooks/useField/useField.js +54 -25
  26. package/internals/hooks/useField/useField.types.d.ts +24 -12
  27. package/internals/hooks/useField/useFieldState.d.ts +1 -2
  28. package/internals/hooks/useField/useFieldState.js +1 -6
  29. package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +5 -4
  30. package/internals/hooks/usePicker/usePicker.d.ts +2 -1
  31. package/internals/hooks/usePicker/usePicker.types.d.ts +4 -3
  32. package/internals/hooks/usePicker/usePickerValue.d.ts +8 -8
  33. package/internals/hooks/usePicker/usePickerValue.js +7 -11
  34. package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +2 -1
  35. package/internals/index.d.ts +2 -2
  36. package/internals/index.js +2 -2
  37. package/internals/models/fields.d.ts +3 -3
  38. package/internals/utils/date-utils.d.ts +1 -0
  39. package/internals/utils/date-utils.js +6 -0
  40. package/internals/utils/valueManagers.js +4 -5
  41. package/legacy/AdapterDateFns/index.js +1 -0
  42. package/legacy/AdapterDateFnsJalali/index.js +1 -0
  43. package/legacy/AdapterDayjs/index.js +5 -0
  44. package/legacy/AdapterLuxon/index.js +1 -0
  45. package/legacy/AdapterMoment/index.js +5 -0
  46. package/legacy/AdapterMomentHijri/index.js +5 -0
  47. package/legacy/AdapterMomentJalaali/index.js +5 -0
  48. package/legacy/DateField/DateField.js +4 -0
  49. package/legacy/DateField/useDateField.js +4 -2
  50. package/legacy/DateTimeField/DateTimeField.js +4 -0
  51. package/legacy/DateTimeField/useDateTimeField.js +4 -2
  52. package/legacy/PickersDay/PickersDay.js +4 -4
  53. package/legacy/TimeField/TimeField.js +4 -0
  54. package/legacy/TimeField/useTimeField.js +4 -2
  55. package/legacy/index.js +4 -2
  56. package/legacy/internals/hooks/useField/index.js +1 -1
  57. package/legacy/internals/hooks/useField/useField.js +79 -39
  58. package/legacy/internals/hooks/useField/useFieldState.js +1 -8
  59. package/legacy/internals/hooks/usePicker/usePickerValue.js +9 -13
  60. package/legacy/internals/index.js +2 -2
  61. package/legacy/internals/utils/date-utils.js +6 -0
  62. package/legacy/internals/utils/valueManagers.js +3 -8
  63. package/legacy/locales/faIR.js +33 -16
  64. package/legacy/locales/nlNL.js +12 -10
  65. package/legacy/locales/plPL.js +12 -10
  66. package/legacy/models/index.js +1 -0
  67. package/legacy/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
  68. package/locales/faIR.js +13 -16
  69. package/locales/nlNL.js +8 -10
  70. package/locales/plPL.js +8 -10
  71. package/models/index.d.ts +6 -0
  72. package/models/index.js +1 -0
  73. package/models/package.json +6 -0
  74. package/modern/AdapterDateFns/index.js +1 -0
  75. package/modern/AdapterDateFnsJalali/index.js +1 -0
  76. package/modern/AdapterDayjs/index.js +5 -0
  77. package/modern/AdapterLuxon/index.js +1 -0
  78. package/modern/AdapterMoment/index.js +5 -0
  79. package/modern/AdapterMomentHijri/index.js +5 -0
  80. package/modern/AdapterMomentJalaali/index.js +5 -0
  81. package/modern/DateField/DateField.js +4 -0
  82. package/modern/DateField/useDateField.js +5 -3
  83. package/modern/DateTimeField/DateTimeField.js +4 -0
  84. package/modern/DateTimeField/useDateTimeField.js +5 -3
  85. package/modern/PickersDay/PickersDay.js +4 -4
  86. package/modern/TimeField/TimeField.js +4 -0
  87. package/modern/TimeField/useTimeField.js +5 -3
  88. package/modern/index.js +4 -2
  89. package/modern/internals/hooks/useField/index.js +1 -1
  90. package/modern/internals/hooks/useField/useField.js +53 -25
  91. package/modern/internals/hooks/useField/useFieldState.js +1 -6
  92. package/modern/internals/hooks/usePicker/usePickerValue.js +7 -11
  93. package/modern/internals/index.js +2 -2
  94. package/modern/internals/utils/date-utils.js +6 -0
  95. package/modern/internals/utils/valueManagers.js +4 -5
  96. package/modern/locales/faIR.js +13 -16
  97. package/modern/locales/nlNL.js +8 -10
  98. package/modern/locales/plPL.js +8 -10
  99. package/modern/models/index.js +1 -0
  100. package/modern/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
  101. package/node/AdapterDateFns/index.js +1 -0
  102. package/node/AdapterDateFnsJalali/index.js +1 -0
  103. package/node/AdapterDayjs/index.js +5 -0
  104. package/node/AdapterLuxon/index.js +1 -0
  105. package/node/AdapterMoment/index.js +5 -0
  106. package/node/AdapterMomentHijri/index.js +5 -0
  107. package/node/AdapterMomentJalaali/index.js +5 -0
  108. package/node/DateField/DateField.js +4 -0
  109. package/node/DateField/useDateField.js +5 -3
  110. package/node/DateTimeField/DateTimeField.js +4 -0
  111. package/node/DateTimeField/useDateTimeField.js +5 -3
  112. package/node/PickersDay/PickersDay.js +4 -4
  113. package/node/TimeField/TimeField.js +4 -0
  114. package/node/TimeField/useTimeField.js +5 -3
  115. package/node/index.js +14 -2
  116. package/node/internals/hooks/useField/index.js +0 -6
  117. package/node/internals/hooks/useField/useField.js +52 -24
  118. package/node/internals/hooks/useField/useFieldState.js +1 -6
  119. package/node/internals/hooks/usePicker/usePickerValue.js +7 -11
  120. package/node/internals/index.js +6 -6
  121. package/node/internals/utils/date-utils.js +9 -2
  122. package/node/internals/utils/valueManagers.js +2 -3
  123. package/node/locales/faIR.js +13 -16
  124. package/node/locales/nlNL.js +8 -10
  125. package/node/locales/plPL.js +8 -10
  126. package/node/models/index.js +5 -0
  127. package/node/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
  128. package/package.json +2 -2
  129. package/tests/describeValue/testPickerOpenCloseLifeCycle.js +2 -3
@@ -45,16 +45,16 @@ const styleArg = ({
45
45
  height: _dimensions.DAY_SIZE,
46
46
  borderRadius: '50%',
47
47
  padding: 0,
48
- // background required here to prevent collides with the other days when animating with transition group
49
- backgroundColor: (theme.vars || theme).palette.background.paper,
48
+ // explicitly setting to `transparent` to avoid potentially getting impacted by change from the overridden component
49
+ backgroundColor: 'transparent',
50
50
  color: (theme.vars || theme).palette.text.primary,
51
51
  '@media (pointer: fine)': {
52
52
  '&:hover': {
53
- backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : (0, _styles.alpha)(theme.palette.action.active, theme.palette.action.hoverOpacity)
53
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : (0, _styles.alpha)(theme.palette.primary.main, theme.palette.action.hoverOpacity)
54
54
  }
55
55
  },
56
56
  '&:focus': {
57
- backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.activeChannel} / ${theme.vars.palette.action.hoverOpacity})` : (0, _styles.alpha)(theme.palette.action.active, theme.palette.action.hoverOpacity),
57
+ backgroundColor: theme.vars ? `rgba(${theme.vars.palette.primary.mainChannel} / ${theme.vars.palette.action.focusOpacity})` : (0, _styles.alpha)(theme.palette.primary.main, theme.palette.action.focusOpacity),
58
58
  [`&.${_pickersDayClasses.pickersDayClasses.selected}`]: {
59
59
  willChange: 'background-color',
60
60
  backgroundColor: (theme.vars || theme).palette.primary.dark
@@ -289,6 +289,10 @@ process.env.NODE_ENV !== "production" ? TimeField.propTypes = {
289
289
  * The system prop that allows defining system overrides as well as additional CSS styles.
290
290
  */
291
291
  sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
292
+ /**
293
+ * The ref object used to imperatively interact with the field.
294
+ */
295
+ unstableFieldRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object]),
292
296
  /**
293
297
  * The selected value.
294
298
  * Used when the component is controlled.
@@ -11,7 +11,7 @@ var _valueManagers = require("../internals/utils/valueManagers");
11
11
  var _useField = require("../internals/hooks/useField");
12
12
  var _useTimeValidation = require("../internals/hooks/validation/useTimeValidation");
13
13
  var _useUtils = require("../internals/hooks/useUtils");
14
- const _excluded = ["value", "defaultValue", "format", "onChange", "readOnly", "onError", "disableFuture", "disablePast", "minTime", "maxTime", "minutesStep", "shouldDisableClock", "shouldDisableTime", "disableIgnoringDatePartForTimeValidation", "selectedSections", "onSelectedSectionsChange", "ampm"];
14
+ const _excluded = ["value", "defaultValue", "format", "onChange", "readOnly", "onError", "disableFuture", "disablePast", "minTime", "maxTime", "minutesStep", "shouldDisableClock", "shouldDisableTime", "disableIgnoringDatePartForTimeValidation", "selectedSections", "onSelectedSectionsChange", "ampm", "unstableFieldRef"];
15
15
  const useDefaultizedTimeField = props => {
16
16
  const utils = (0, _useUtils.useUtils)();
17
17
  const ampm = props.ampm ?? utils.is12HourCycleInCurrentLocale();
@@ -44,7 +44,8 @@ const useTimeField = ({
44
44
  disableIgnoringDatePartForTimeValidation,
45
45
  selectedSections,
46
46
  onSelectedSectionsChange,
47
- ampm
47
+ ampm,
48
+ unstableFieldRef
48
49
  } = _useDefaultizedTimeFi,
49
50
  other = (0, _objectWithoutPropertiesLoose2.default)(_useDefaultizedTimeFi, _excluded);
50
51
  return (0, _useField.useField)({
@@ -67,7 +68,8 @@ const useTimeField = ({
67
68
  disableIgnoringDatePartForTimeValidation,
68
69
  selectedSections,
69
70
  onSelectedSectionsChange,
70
- ampm
71
+ ampm,
72
+ unstableFieldRef
71
73
  },
72
74
  valueManager: _valueManagers.singleItemValueManager,
73
75
  fieldValueManager: _valueManagers.singleItemFieldValueManager,
package/node/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mui/x-date-pickers v6.0.2
2
+ * @mui/x-date-pickers v6.0.3
3
3
  *
4
4
  * @license MIT
5
5
  * This source code is licensed under the MIT license found in the
@@ -355,4 +355,16 @@ Object.keys(_PickersShortcuts).forEach(function (key) {
355
355
  }
356
356
  });
357
357
  });
358
- var _utils = require("./internals/utils/utils");
358
+ var _utils = require("./internals/utils/utils");
359
+ var _models = require("./models");
360
+ Object.keys(_models).forEach(function (key) {
361
+ if (key === "default" || key === "__esModule") return;
362
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
363
+ if (key in exports && exports[key] === _models[key]) return;
364
+ Object.defineProperty(exports, key, {
365
+ enumerable: true,
366
+ get: function () {
367
+ return _models[key];
368
+ }
369
+ });
370
+ });
@@ -15,12 +15,6 @@ Object.defineProperty(exports, "createDateStrForInputFromSections", {
15
15
  return _useField2.createDateStrForInputFromSections;
16
16
  }
17
17
  });
18
- Object.defineProperty(exports, "getSectionOrder", {
19
- enumerable: true,
20
- get: function () {
21
- return _useField2.getSectionOrder;
22
- }
23
- });
24
18
  Object.defineProperty(exports, "splitFormatIntoSections", {
25
19
  enumerable: true,
26
20
  get: function () {
@@ -11,6 +11,7 @@ var React = _interopRequireWildcard(require("react"));
11
11
  var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
12
12
  var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
13
13
  var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
14
+ var _styles = require("@mui/material/styles");
14
15
  var _useValidation = require("../validation/useValidation");
15
16
  var _useUtils = require("../useUtils");
16
17
  var _useField = require("./useField.utils");
@@ -31,7 +32,6 @@ const useField = params => {
31
32
  updateSectionValue,
32
33
  updateValueFromValueStr,
33
34
  setTempAndroidValueStr,
34
- sectionOrder,
35
35
  sectionsValueBoundaries
36
36
  } = (0, _useFieldState.useFieldState)(params);
37
37
  const {
@@ -47,7 +47,8 @@ const useField = params => {
47
47
  inputRef: inputRefProp,
48
48
  internalProps,
49
49
  internalProps: {
50
- readOnly = false
50
+ readOnly = false,
51
+ unstableFieldRef
51
52
  },
52
53
  forwardedProps: {
53
54
  onClick,
@@ -66,6 +67,8 @@ const useField = params => {
66
67
  const inputRef = React.useRef(null);
67
68
  const handleRef = (0, _useForkRef.default)(inputRefProp, inputRef);
68
69
  const focusTimeoutRef = React.useRef(undefined);
70
+ const theme = (0, _styles.useTheme)();
71
+ const sectionOrder = React.useMemo(() => (0, _useField.getSectionOrder)(state.sections, theme.direction === 'rtl'), [theme.direction, state.sections]);
69
72
  const syncSelectionFromDOM = () => {
70
73
  if (readOnly) {
71
74
  setSelectedSections(null);
@@ -152,27 +155,32 @@ const useField = params => {
152
155
  updateValueFromValueStr(cleanValueStr);
153
156
  return;
154
157
  }
155
- const prevValueStr = (0, _useField.cleanString)(fieldValueManager.getValueStrFromSections(state.sections));
156
- let startOfDiffIndex = -1;
157
- let endOfDiffIndex = -1;
158
- for (let i = 0; i < prevValueStr.length; i += 1) {
159
- if (startOfDiffIndex === -1 && prevValueStr[i] !== cleanValueStr[i]) {
160
- startOfDiffIndex = i;
158
+ let keyPressed;
159
+ if (selectedSectionIndexes.startIndex === 0 && selectedSectionIndexes.endIndex === state.sections.length - 1) {
160
+ keyPressed = cleanValueStr;
161
+ } else {
162
+ const prevValueStr = (0, _useField.cleanString)(fieldValueManager.getValueStrFromSections(state.sections));
163
+ let startOfDiffIndex = -1;
164
+ let endOfDiffIndex = -1;
165
+ for (let i = 0; i < prevValueStr.length; i += 1) {
166
+ if (startOfDiffIndex === -1 && prevValueStr[i] !== cleanValueStr[i]) {
167
+ startOfDiffIndex = i;
168
+ }
169
+ if (endOfDiffIndex === -1 && prevValueStr[prevValueStr.length - i - 1] !== cleanValueStr[cleanValueStr.length - i - 1]) {
170
+ endOfDiffIndex = i;
171
+ }
161
172
  }
162
- if (endOfDiffIndex === -1 && prevValueStr[prevValueStr.length - i - 1] !== cleanValueStr[cleanValueStr.length - i - 1]) {
163
- endOfDiffIndex = i;
173
+ const activeSection = state.sections[selectedSectionIndexes.startIndex];
174
+ const hasDiffOutsideOfActiveSection = startOfDiffIndex < activeSection.start || prevValueStr.length - endOfDiffIndex - 1 > activeSection.end;
175
+ if (hasDiffOutsideOfActiveSection) {
176
+ // TODO: Support if the new date is valid
177
+ return;
164
178
  }
165
- }
166
- const activeSection = state.sections[selectedSectionIndexes.startIndex];
167
- const hasDiffOutsideOfActiveSection = startOfDiffIndex < activeSection.start || prevValueStr.length - endOfDiffIndex - 1 > activeSection.end;
168
- if (hasDiffOutsideOfActiveSection) {
169
- // TODO: Support if the new date is valid
170
- return;
171
- }
172
179
 
173
- // The active section being selected, the browser has replaced its value with the key pressed by the user.
174
- const activeSectionEndRelativeToNewValue = cleanValueStr.length - prevValueStr.length + activeSection.end - (0, _useField.cleanString)(activeSection.endSeparator || '').length;
175
- const keyPressed = cleanValueStr.slice(activeSection.start, activeSectionEndRelativeToNewValue);
180
+ // The active section being selected, the browser has replaced its value with the key pressed by the user.
181
+ const activeSectionEndRelativeToNewValue = cleanValueStr.length - prevValueStr.length + activeSection.end - (0, _useField.cleanString)(activeSection.endSeparator || '').length;
182
+ keyPressed = cleanValueStr.slice(activeSection.start, activeSectionEndRelativeToNewValue);
183
+ }
176
184
  if ((0, _useField.isAndroid)() && keyPressed.length === 0) {
177
185
  setTempAndroidValueStr(valueStr);
178
186
  return;
@@ -268,9 +276,11 @@ const useField = params => {
268
276
  });
269
277
  (0, _useEnhancedEffect.default)(() => {
270
278
  if (selectedSectionIndexes == null) {
271
- if (inputRef.current.selectionStart !== 0 || inputRef.current.selectionEnd !== 0) {
272
- // Ensure input selection range is in sync with component selection indexes
273
- inputRef.current.setSelectionRange(0, 0);
279
+ if (inputRef.current.scrollLeft) {
280
+ // Ensure that input content is not marked as selected.
281
+ // setting selection range to 0 causes issues in Safari.
282
+ // https://bugs.webkit.org/show_bug.cgi?id=224425
283
+ inputRef.current.scrollLeft = 0;
274
284
  }
275
285
  return;
276
286
  }
@@ -283,7 +293,11 @@ const useField = params => {
283
293
  selectionEnd += lastSelectedSection.endSeparator.length;
284
294
  }
285
295
  if (selectionStart !== inputRef.current.selectionStart || selectionEnd !== inputRef.current.selectionEnd) {
296
+ // Fix scroll jumping on iOS browser: https://github.com/mui/mui-x/issues/8321
297
+ const currentScrollTop = inputRef.current.scrollTop;
286
298
  inputRef.current.setSelectionRange(selectionStart, selectionEnd);
299
+ // Even reading this variable seems to do the trick, but also setting it just to make use of it
300
+ inputRef.current.scrollTop = currentScrollTop;
287
301
  }
288
302
  });
289
303
  const validationError = (0, _useValidation.useValidation)((0, _extends2.default)({}, internalProps, {
@@ -327,7 +341,21 @@ const useField = params => {
327
341
  return 'tel';
328
342
  }, [selectedSectionIndexes, state.sections]);
329
343
  const inputHasFocus = inputRef.current && inputRef.current === (0, _utils.getActiveElement)(document);
330
- const shouldShowPlaceholder = !inputHasFocus && (!state.value || valueManager.areValuesEqual(utils, state.value, valueManager.emptyValue));
344
+ const shouldShowPlaceholder = !inputHasFocus && valueManager.areValuesEqual(utils, state.value, valueManager.emptyValue);
345
+ React.useImperativeHandle(unstableFieldRef, () => ({
346
+ getSections: () => state.sections,
347
+ getActiveSectionIndex: () => {
348
+ const browserStartIndex = inputRef.current.selectionStart ?? 0;
349
+ const browserEndIndex = inputRef.current.selectionEnd ?? 0;
350
+ if (browserStartIndex === 0 && browserEndIndex === 0) {
351
+ return null;
352
+ }
353
+ const nextSectionIndex = browserStartIndex <= state.sections[0].startInInput ? 1 // Special case if browser index is in invisible characters at the beginning.
354
+ : state.sections.findIndex(section => section.startInInput - section.startSeparator.length > browserStartIndex);
355
+ return nextSectionIndex === -1 ? state.sections.length - 1 : nextSectionIndex - 1;
356
+ },
357
+ setSelectedSections: activeSectionIndex => setSelectedSections(activeSectionIndex)
358
+ }));
331
359
  return (0, _extends2.default)({
332
360
  placeholder: state.placeholder,
333
361
  autoComplete: 'off'
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.useFieldState = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
9
  var React = _interopRequireWildcard(require("react"));
10
- var _styles = require("@mui/material/styles");
11
10
  var _useControlled = _interopRequireDefault(require("@mui/utils/useControlled"));
12
11
  var _useUtils = require("../useUtils");
13
12
  var _useField = require("./useField.utils");
@@ -17,8 +16,6 @@ const useFieldState = params => {
17
16
  const utils = (0, _useUtils.useUtils)();
18
17
  const localeText = (0, _useUtils.useLocaleText)();
19
18
  const adapter = (0, _useUtils.useLocalizationContext)();
20
- const theme = (0, _styles.useTheme)();
21
- const isRTL = theme.direction === 'rtl';
22
19
  const {
23
20
  valueManager,
24
21
  fieldValueManager,
@@ -37,7 +34,6 @@ const useFieldState = params => {
37
34
  const firstDefaultValue = React.useRef(defaultValue);
38
35
  const valueFromTheOutside = valueProp ?? firstDefaultValue.current ?? valueManager.emptyValue;
39
36
  const sectionsValueBoundaries = React.useMemo(() => (0, _useField.getSectionsBoundaries)(utils), [utils]);
40
- const sectionOrder = React.useMemo(() => fieldValueManager.getSectionOrder(utils, localeText, format, isRTL), [fieldValueManager, format, isRTL, localeText, utils]);
41
37
  const placeholder = React.useMemo(() => fieldValueManager.getValueStrFromSections(fieldValueManager.getSectionsFromValue(utils, localeText, null, valueManager.emptyValue, format)), [fieldValueManager, format, localeText, utils, valueManager.emptyValue]);
42
38
  const [state, setState] = React.useState(() => {
43
39
  const sections = fieldValueManager.getSectionsFromValue(utils, localeText, null, valueFromTheOutside, format);
@@ -225,7 +221,7 @@ const useFieldState = params => {
225
221
  }));
226
222
  React.useEffect(() => {
227
223
  if (!valueManager.areValuesEqual(utils, state.value, valueFromTheOutside)) {
228
- const sections = fieldValueManager.getSectionsFromValue(utils, localeText, state.sections, valueFromTheOutside, format);
224
+ const sections = fieldValueManager.getSectionsFromValue(utils, localeText, null, valueFromTheOutside, format);
229
225
  setState(prevState => (0, _extends2.default)({}, prevState, {
230
226
  value: valueFromTheOutside,
231
227
  referenceValue: fieldValueManager.updateReferenceValue(utils, valueFromTheOutside, prevState.referenceValue),
@@ -252,7 +248,6 @@ const useFieldState = params => {
252
248
  updateSectionValue,
253
249
  updateValueFromValueStr,
254
250
  setTempAndroidValueStr,
255
- sectionOrder,
256
251
  sectionsValueBoundaries
257
252
  };
258
253
  };
@@ -34,13 +34,12 @@ const usePickerValue = ({
34
34
  } = props;
35
35
  const utils = (0, _useUtils.useUtils)();
36
36
  const adapter = (0, _useUtils.useLocalizationContext)();
37
- const [rawValue, setValue] = (0, _utils.unstable_useControlled)({
37
+ const [value, setValue] = (0, _utils.unstable_useControlled)({
38
38
  controlled: inValue,
39
39
  default: defaultValue ?? valueManager.emptyValue,
40
40
  name: 'usePickerValue',
41
41
  state: 'value'
42
42
  });
43
- const value = React.useMemo(() => valueManager.cleanValue(utils, rawValue), [valueManager, utils, rawValue]);
44
43
  const [selectedSections, setSelectedSections] = (0, _utils.unstable_useControlled)({
45
44
  controlled: selectedSectionsProp,
46
45
  default: null,
@@ -90,7 +89,7 @@ const usePickerValue = ({
90
89
  }
91
90
  }
92
91
  });
93
- if (params.forceOnChangeCall || !params.skipOnChangeCall && !valueManager.areValuesEqual(utils, dateState.committed, params.value)) {
92
+ if (!params.skipOnChangeCall && !valueManager.areValuesEqual(utils, dateState.committed, params.value)) {
94
93
  setValue(params.value);
95
94
  if (onChange) {
96
95
  const context = {
@@ -135,18 +134,14 @@ const usePickerValue = ({
135
134
  // Reset all date in state to the empty value and close picker.
136
135
  setDate({
137
136
  value: valueManager.emptyValue,
138
- action: 'acceptAndClose',
139
- // force `onChange` in cases like input (value) === `Invalid date`
140
- forceOnChangeCall: !valueManager.areValuesEqual(utils, value, valueManager.emptyValue)
137
+ action: 'acceptAndClose'
141
138
  });
142
139
  });
143
140
  const handleAccept = (0, _useEventCallback.default)(() => {
144
141
  // Set all date in state to equal the current draft value and close picker.
145
142
  setDate({
146
143
  value: dateState.draft,
147
- action: 'acceptAndClose',
148
- // force `onChange` in cases like input (value) === `Invalid date`
149
- forceOnChangeCall: !valueManager.areValuesEqual(utils, dateState.committed, dateState.draft)
144
+ action: 'acceptAndClose'
150
145
  });
151
146
  });
152
147
  const handleDismiss = (0, _useEventCallback.default)(() => {
@@ -239,8 +234,9 @@ const usePickerValue = ({
239
234
  selectedSections,
240
235
  onSelectedSectionsChange: handleFieldSelectedSectionsChange
241
236
  };
237
+ const viewValue = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
242
238
  const viewResponse = {
243
- value: dateState.draft,
239
+ value: viewValue,
244
240
  onChange: handleChange,
245
241
  onClose: handleClose,
246
242
  open: isOpen,
@@ -257,7 +253,7 @@ const usePickerValue = ({
257
253
  return Array.isArray(testedValue) ? validationResponse.every(v => v === null) : validationResponse === null;
258
254
  };
259
255
  const layoutResponse = (0, _extends2.default)({}, actions, {
260
- value: dateState.draft,
256
+ value: viewValue,
261
257
  onChange: handleChangeAndCommit,
262
258
  isValid
263
259
  });
@@ -75,6 +75,12 @@ Object.defineProperty(exports, "applyDefaultDate", {
75
75
  return _dateUtils.applyDefaultDate;
76
76
  }
77
77
  });
78
+ Object.defineProperty(exports, "areDatesEqual", {
79
+ enumerable: true,
80
+ get: function () {
81
+ return _dateUtils.areDatesEqual;
82
+ }
83
+ });
78
84
  Object.defineProperty(exports, "buildDeprecatedPropsWarning", {
79
85
  enumerable: true,
80
86
  get: function () {
@@ -111,12 +117,6 @@ Object.defineProperty(exports, "getActiveElement", {
111
117
  return _utils.getActiveElement;
112
118
  }
113
119
  });
114
- Object.defineProperty(exports, "getSectionOrder", {
115
- enumerable: true,
116
- get: function () {
117
- return _useField.getSectionOrder;
118
- }
119
- });
120
120
  Object.defineProperty(exports, "onSpaceOrEnter", {
121
121
  enumerable: true,
122
122
  get: function () {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.replaceInvalidDateByNull = exports.findClosestEnabledDate = exports.clamp = exports.applyDefaultDate = void 0;
6
+ exports.replaceInvalidDateByNull = exports.findClosestEnabledDate = exports.clamp = exports.areDatesEqual = exports.applyDefaultDate = void 0;
7
7
  const findClosestEnabledDate = ({
8
8
  date,
9
9
  disableFuture,
@@ -73,4 +73,11 @@ const applyDefaultDate = (utils, value, defaultValue) => {
73
73
  }
74
74
  return value;
75
75
  };
76
- exports.applyDefaultDate = applyDefaultDate;
76
+ exports.applyDefaultDate = applyDefaultDate;
77
+ const areDatesEqual = (utils, a, b) => {
78
+ if (!utils.isValid(a) && a != null && !utils.isValid(b) && b != null) {
79
+ return true;
80
+ }
81
+ return utils.isEqual(a, b);
82
+ };
83
+ exports.areDatesEqual = areDatesEqual;
@@ -10,7 +10,7 @@ const singleItemValueManager = {
10
10
  emptyValue: null,
11
11
  getTodayValue: utils => utils.date(),
12
12
  cleanValue: _dateUtils.replaceInvalidDateByNull,
13
- areValuesEqual: (utils, a, b) => utils.isEqual(a, b),
13
+ areValuesEqual: _dateUtils.areDatesEqual,
14
14
  isSameError: (a, b) => a === b,
15
15
  defaultErrorState: null
16
16
  };
@@ -35,7 +35,6 @@ const singleItemFieldValueManager = {
35
35
  })
36
36
  }),
37
37
  parseValueStr: (valueStr, referenceValue, parseDate) => parseDate(valueStr.trim(), referenceValue),
38
- hasError: error => error != null,
39
- getSectionOrder: (utils, localeText, format, isRTL) => (0, _useField.getSectionOrder)((0, _useField.splitFormatIntoSections)(utils, localeText, format, null), isRTL)
38
+ hasError: error => error != null
40
39
  };
41
40
  exports.singleItemFieldValueManager = singleItemFieldValueManager;
@@ -32,28 +32,25 @@ const faIRPickers = {
32
32
  minutesClockNumberText: minutes => `${minutes} دقیقه ها`,
33
33
  secondsClockNumberText: seconds => `${seconds} ثانیه ها`,
34
34
  // Calendar labels
35
- // calendarWeekNumberHeaderLabel: 'Week number',
36
- // calendarWeekNumberHeaderText: '#',
37
- // calendarWeekNumberAriaLabelText: weekNumber => `Week ${weekNumber}`,
38
- // calendarWeekNumberText: weekNumber => `${weekNumber}`,
39
-
35
+ calendarWeekNumberHeaderLabel: 'عدد هفته',
36
+ calendarWeekNumberHeaderText: '#',
37
+ calendarWeekNumberAriaLabelText: weekNumber => `هفته ${weekNumber}`,
38
+ calendarWeekNumberText: weekNumber => `${weekNumber}`,
40
39
  // Open picker labels
41
40
  openDatePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `تاریخ را انتخاب کنید، تاریخ انتخاب شده ${utils.format(value, 'fullDate')} می باشد` : 'تاریخ را انتخاب کنید',
42
41
  openTimePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `ساعت را انتخاب کنید، ساعت انتخاب شده ${utils.format(value, 'fullTime')} می باشد` : 'ساعت را انتخاب کنید',
43
42
  // Table labels
44
43
  timeTableLabel: 'انتخاب تاریخ',
45
- dateTableLabel: 'انتخاب ساعت'
46
-
44
+ dateTableLabel: 'انتخاب ساعت',
47
45
  // Field section placeholders
48
- // fieldYearPlaceholder: params => 'Y'.repeat(params.digitAmount),
49
- // fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
50
- // fieldDayPlaceholder: () => 'DD',
51
- // fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
52
- // fieldHoursPlaceholder: () => 'hh',
53
- // fieldMinutesPlaceholder: () => 'mm',
54
- // fieldSecondsPlaceholder: () => 'ss',
55
- // fieldMeridiemPlaceholder: () => 'aa',
46
+ fieldYearPlaceholder: params => 'Y'.repeat(params.digitAmount),
47
+ fieldMonthPlaceholder: params => params.contentType === 'letter' ? 'MMMM' : 'MM',
48
+ fieldDayPlaceholder: () => 'DD',
49
+ fieldWeekDayPlaceholder: params => params.contentType === 'letter' ? 'EEEE' : 'EE',
50
+ fieldHoursPlaceholder: () => 'hh',
51
+ fieldMinutesPlaceholder: () => 'mm',
52
+ fieldSecondsPlaceholder: () => 'ss',
53
+ fieldMeridiemPlaceholder: () => 'aa'
56
54
  };
57
-
58
55
  const faIR = (0, _getPickersLocalization.getPickersLocalization)(faIRPickers);
59
56
  exports.faIR = faIR;
@@ -22,22 +22,20 @@ const nlNLPickers = {
22
22
  okButtonLabel: 'OK',
23
23
  todayButtonLabel: 'Vandaag',
24
24
  // Toolbar titles
25
- // datePickerToolbarTitle: 'Select date',
26
- // dateTimePickerToolbarTitle: 'Select date & time',
27
- // timePickerToolbarTitle: 'Select time',
28
- // dateRangePickerToolbarTitle: 'Select date range',
29
-
25
+ datePickerToolbarTitle: 'Selecteer datum',
26
+ dateTimePickerToolbarTitle: 'Selecteer datum & tijd',
27
+ timePickerToolbarTitle: 'Selecteer tijd',
28
+ dateRangePickerToolbarTitle: 'Selecteer datumbereik',
30
29
  // Clock labels
31
30
  clockLabelText: (view, time, adapter) => `Selecteer ${view}. ${time === null ? 'Geen tijd geselecteerd' : `Geselecteerde tijd is ${adapter.format(time, 'fullTime')}`}`,
32
31
  hoursClockNumberText: hours => `${hours} uren`,
33
32
  minutesClockNumberText: minutes => `${minutes} minuten`,
34
33
  secondsClockNumberText: seconds => `${seconds} seconden`,
35
34
  // Calendar labels
36
- // calendarWeekNumberHeaderLabel: 'Week number',
37
- // calendarWeekNumberHeaderText: '#',
38
- // calendarWeekNumberAriaLabelText: weekNumber => `Week ${weekNumber}`,
39
- // calendarWeekNumberText: weekNumber => `${weekNumber}`,
40
-
35
+ calendarWeekNumberHeaderLabel: 'Weeknummer',
36
+ calendarWeekNumberHeaderText: '#',
37
+ calendarWeekNumberAriaLabelText: weekNumber => `Week ${weekNumber}`,
38
+ calendarWeekNumberText: weekNumber => `${weekNumber}`,
41
39
  // Open picker labels
42
40
  openDatePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Kies datum, geselecteerde datum is ${utils.format(value, 'fullDate')}` : 'Kies datum',
43
41
  openTimePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Kies tijd, geselecteerde tijd is ${utils.format(value, 'fullTime')}` : 'Kies tijd',
@@ -22,22 +22,20 @@ const plPLPickers = {
22
22
  okButtonLabel: 'Zatwierdź',
23
23
  todayButtonLabel: 'Dzisiaj',
24
24
  // Toolbar titles
25
- // datePickerToolbarTitle: 'Select date',
26
- // dateTimePickerToolbarTitle: 'Select date & time',
27
- // timePickerToolbarTitle: 'Select time',
28
- // dateRangePickerToolbarTitle: 'Select date range',
29
-
25
+ datePickerToolbarTitle: 'Wybierz datę',
26
+ dateTimePickerToolbarTitle: 'Wybierz datę i czas',
27
+ timePickerToolbarTitle: 'Wybierz czas',
28
+ dateRangePickerToolbarTitle: 'Wybierz zakres dat',
30
29
  // Clock labels
31
30
  clockLabelText: (view, time, adapter) => `Select ${view}. ${time === null ? 'Nie wybrano czasu' : `Wybrany czas to ${adapter.format(time, 'fullTime')}`}`,
32
31
  hoursClockNumberText: hours => `${hours} godzin`,
33
32
  minutesClockNumberText: minutes => `${minutes} minut`,
34
33
  secondsClockNumberText: seconds => `${seconds} sekund`,
35
34
  // Calendar labels
36
- // calendarWeekNumberHeaderLabel: 'Week number',
37
- // calendarWeekNumberHeaderText: '#',
38
- // calendarWeekNumberAriaLabelText: weekNumber => `Week ${weekNumber}`,
39
- // calendarWeekNumberText: weekNumber => `${weekNumber}`,
40
-
35
+ calendarWeekNumberHeaderLabel: 'Numer tygodnia',
36
+ calendarWeekNumberHeaderText: '#',
37
+ calendarWeekNumberAriaLabelText: weekNumber => `Tydzień ${weekNumber}`,
38
+ calendarWeekNumberText: weekNumber => `${weekNumber}`,
41
39
  // Open picker labels
42
40
  openDatePickerDialogue: (value, utils) => value != null && utils.isValid(value) ? `Wybierz datę, obecnie wybrana data to ${utils.format(value, 'fullDate')}` : 'Wybierz datę',
43
41
  openTimePickerDialogue: (value, utils) => value !== null && utils.isValid(value) ? `Wybierz czas, obecnie wybrany czas to ${utils.format(value, 'fullTime')}` : 'Wybierz czas',
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -96,7 +96,7 @@ const testPickerOpenCloseLifeCycle = (ElementToTest, getOptions) => {
96
96
  (0, _chai.expect)(onAccept.callCount).to.equal(pickerParams.variant === 'mobile' ? 0 : 1);
97
97
  (0, _chai.expect)(onClose.callCount).to.equal(pickerParams.variant === 'mobile' ? 0 : 1);
98
98
  });
99
- it('should not select any field section after closing on mobile', () => {
99
+ it('should not select input content after closing on mobile', () => {
100
100
  if (pickerParams.variant !== 'mobile') {
101
101
  return;
102
102
  }
@@ -112,8 +112,7 @@ const testPickerOpenCloseLifeCycle = (ElementToTest, getOptions) => {
112
112
  } else {
113
113
  textbox = (0, _pickersUtils.getTextbox)();
114
114
  }
115
- (0, _chai.expect)(textbox.selectionStart).to.be.equal(0);
116
- (0, _chai.expect)(textbox.selectionEnd).to.be.equal(0);
115
+ (0, _chai.expect)(textbox.scrollLeft).to.be.equal(0);
117
116
  });
118
117
  it('should call onChange, onClose and onAccept when selecting a value and `props.closeOnSelect` is true', () => {
119
118
  const onChange = (0, _sinon.spy)();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-date-pickers",
3
- "version": "6.0.2",
3
+ "version": "6.0.3",
4
4
  "description": "The community edition of the date picker components (MUI X).",
5
5
  "author": "MUI Team",
6
6
  "main": "./node/index.js",
@@ -33,7 +33,7 @@
33
33
  "directory": "packages/x-date-pickers"
34
34
  },
35
35
  "dependencies": {
36
- "@babel/runtime": "^7.20.13",
36
+ "@babel/runtime": "^7.21.0",
37
37
  "@date-io/core": "^2.16.0",
38
38
  "@date-io/date-fns": "^2.16.0",
39
39
  "@date-io/date-fns-jalali": "^2.16.0",
@@ -87,7 +87,7 @@ export const testPickerOpenCloseLifeCycle = (ElementToTest, getOptions) => {
87
87
  expect(onAccept.callCount).to.equal(pickerParams.variant === 'mobile' ? 0 : 1);
88
88
  expect(onClose.callCount).to.equal(pickerParams.variant === 'mobile' ? 0 : 1);
89
89
  });
90
- it('should not select any field section after closing on mobile', () => {
90
+ it('should not select input content after closing on mobile', () => {
91
91
  if (pickerParams.variant !== 'mobile') {
92
92
  return;
93
93
  }
@@ -103,8 +103,7 @@ export const testPickerOpenCloseLifeCycle = (ElementToTest, getOptions) => {
103
103
  } else {
104
104
  textbox = getTextbox();
105
105
  }
106
- expect(textbox.selectionStart).to.be.equal(0);
107
- expect(textbox.selectionEnd).to.be.equal(0);
106
+ expect(textbox.scrollLeft).to.be.equal(0);
108
107
  });
109
108
  it('should call onChange, onClose and onAccept when selecting a value and `props.closeOnSelect` is true', () => {
110
109
  const onChange = spy();