@mui/x-date-pickers 9.0.0-alpha.4 → 9.0.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.
- package/AdapterDateFnsBase/AdapterDateFnsBase.mjs +1 -1
- package/AdapterDayjs/AdapterDayjs.mjs +1 -1
- package/AdapterLuxon/AdapterLuxon.mjs +1 -1
- package/AdapterMoment/AdapterMoment.mjs +1 -1
- package/AdapterMomentHijri/AdapterMomentHijri.mjs +1 -1
- package/AdapterMomentJalaali/AdapterMomentJalaali.mjs +1 -1
- package/CHANGELOG.md +374 -2
- package/DateCalendar/DateCalendar.js +1 -1
- package/DateCalendar/DateCalendar.mjs +1 -1
- package/DateCalendar/DayCalendar.d.mts +7 -7
- package/DateCalendar/DayCalendar.d.ts +7 -7
- package/DateCalendar/DayCalendar.js +23 -25
- package/DateCalendar/DayCalendar.mjs +23 -25
- package/DateField/DateField.d.mts +1 -1
- package/DateField/DateField.d.ts +1 -1
- package/DateField/DateField.js +22 -28
- package/DateField/DateField.mjs +22 -28
- package/DateField/DateField.types.d.mts +3 -3
- package/DateField/DateField.types.d.ts +3 -3
- package/DateField/useDateField.d.mts +1 -1
- package/DateField/useDateField.d.ts +1 -1
- package/DateField/useDateField.js +1 -1
- package/DateField/useDateField.mjs +1 -1
- package/DatePicker/DatePicker.d.mts +1 -1
- package/DatePicker/DatePicker.d.ts +1 -1
- package/DatePicker/DatePicker.js +1 -5
- package/DatePicker/DatePicker.mjs +1 -5
- package/DatePicker/DatePicker.types.d.mts +3 -3
- package/DatePicker/DatePicker.types.d.ts +3 -3
- package/DateTimeField/DateTimeField.d.mts +1 -1
- package/DateTimeField/DateTimeField.d.ts +1 -1
- package/DateTimeField/DateTimeField.js +22 -28
- package/DateTimeField/DateTimeField.mjs +22 -28
- package/DateTimeField/DateTimeField.types.d.mts +2 -2
- package/DateTimeField/DateTimeField.types.d.ts +2 -2
- package/DateTimeField/useDateTimeField.d.mts +1 -1
- package/DateTimeField/useDateTimeField.d.ts +1 -1
- package/DateTimeField/useDateTimeField.js +1 -1
- package/DateTimeField/useDateTimeField.mjs +1 -1
- package/DateTimePicker/DateTimePicker.d.mts +1 -1
- package/DateTimePicker/DateTimePicker.d.ts +1 -1
- package/DateTimePicker/DateTimePicker.js +1 -5
- package/DateTimePicker/DateTimePicker.mjs +1 -5
- package/DateTimePicker/DateTimePicker.types.d.mts +3 -3
- package/DateTimePicker/DateTimePicker.types.d.ts +3 -3
- package/DesktopDatePicker/DesktopDatePicker.d.mts +1 -1
- package/DesktopDatePicker/DesktopDatePicker.d.ts +1 -1
- package/DesktopDatePicker/DesktopDatePicker.js +1 -5
- package/DesktopDatePicker/DesktopDatePicker.mjs +1 -5
- package/DesktopDatePicker/DesktopDatePicker.types.d.mts +3 -3
- package/DesktopDatePicker/DesktopDatePicker.types.d.ts +3 -3
- package/DesktopDateTimePicker/DesktopDateTimePicker.d.mts +1 -1
- package/DesktopDateTimePicker/DesktopDateTimePicker.d.ts +1 -1
- package/DesktopDateTimePicker/DesktopDateTimePicker.js +1 -5
- package/DesktopDateTimePicker/DesktopDateTimePicker.mjs +1 -5
- package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.mts +3 -3
- package/DesktopDateTimePicker/DesktopDateTimePicker.types.d.ts +3 -3
- package/DesktopTimePicker/DesktopTimePicker.d.mts +1 -1
- package/DesktopTimePicker/DesktopTimePicker.d.ts +1 -1
- package/DesktopTimePicker/DesktopTimePicker.js +0 -4
- package/DesktopTimePicker/DesktopTimePicker.mjs +0 -4
- package/DesktopTimePicker/DesktopTimePicker.types.d.mts +3 -3
- package/DesktopTimePicker/DesktopTimePicker.types.d.ts +3 -3
- package/DigitalClock/DigitalClock.d.mts +1 -1
- package/DigitalClock/DigitalClock.d.ts +1 -1
- package/DigitalClock/DigitalClock.js +2 -2
- package/DigitalClock/DigitalClock.mjs +3 -3
- package/LocalizationProvider/LocalizationProvider.d.mts +0 -6
- package/LocalizationProvider/LocalizationProvider.d.ts +0 -6
- package/LocalizationProvider/LocalizationProvider.js +1 -10
- package/LocalizationProvider/LocalizationProvider.mjs +0 -9
- package/LocalizationProvider/index.d.mts +1 -1
- package/LocalizationProvider/index.d.ts +1 -1
- package/LocalizationProvider/index.js +0 -6
- package/LocalizationProvider/index.mjs +1 -1
- package/MobileDatePicker/MobileDatePicker.d.mts +1 -1
- package/MobileDatePicker/MobileDatePicker.d.ts +1 -1
- package/MobileDatePicker/MobileDatePicker.js +1 -5
- package/MobileDatePicker/MobileDatePicker.mjs +1 -5
- package/MobileDatePicker/MobileDatePicker.types.d.mts +3 -3
- package/MobileDatePicker/MobileDatePicker.types.d.ts +3 -3
- package/MobileDateTimePicker/MobileDateTimePicker.d.mts +1 -1
- package/MobileDateTimePicker/MobileDateTimePicker.d.ts +1 -1
- package/MobileDateTimePicker/MobileDateTimePicker.js +1 -5
- package/MobileDateTimePicker/MobileDateTimePicker.mjs +1 -5
- package/MobileDateTimePicker/MobileDateTimePicker.types.d.mts +3 -3
- package/MobileDateTimePicker/MobileDateTimePicker.types.d.ts +3 -3
- package/MobileTimePicker/MobileTimePicker.d.mts +1 -1
- package/MobileTimePicker/MobileTimePicker.d.ts +1 -1
- package/MobileTimePicker/MobileTimePicker.js +0 -4
- package/MobileTimePicker/MobileTimePicker.mjs +0 -4
- package/MobileTimePicker/MobileTimePicker.types.d.mts +3 -3
- package/MobileTimePicker/MobileTimePicker.types.d.ts +3 -3
- package/MonthCalendar/MonthCalendarButton.js +2 -2
- package/MonthCalendar/MonthCalendarButton.mjs +3 -3
- package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.js +2 -2
- package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.mjs +3 -3
- package/PickerDay/PickerDay.d.mts +14 -0
- package/PickerDay/PickerDay.d.ts +14 -0
- package/{PickerDay2/PickerDay2.js → PickerDay/PickerDay.js} +110 -45
- package/{PickerDay2/PickerDay2.mjs → PickerDay/PickerDay.mjs} +110 -45
- package/PickerDay/PickerDay.types.d.mts +137 -0
- package/PickerDay/PickerDay.types.d.ts +137 -0
- package/PickerDay/index.d.mts +4 -0
- package/PickerDay/index.d.ts +4 -0
- package/PickerDay/index.js +25 -0
- package/PickerDay/index.mjs +2 -0
- package/{PickerDay2/pickerDay2Classes.d.mts → PickerDay/pickerDayClasses.d.mts} +4 -4
- package/{PickerDay2/pickerDay2Classes.d.ts → PickerDay/pickerDayClasses.d.ts} +4 -4
- package/PickerDay/pickerDayClasses.js +14 -0
- package/PickerDay/pickerDayClasses.mjs +6 -0
- package/PickersTextField/PickersFilledInput/PickersFilledInput.js +37 -16
- package/PickersTextField/PickersFilledInput/PickersFilledInput.mjs +37 -16
- package/PickersTextField/PickersInput/PickersInput.js +35 -14
- package/PickersTextField/PickersInput/PickersInput.mjs +35 -14
- package/PickersTextField/PickersInputBase/PickersInputBase.js +38 -8
- package/PickersTextField/PickersInputBase/PickersInputBase.mjs +38 -8
- package/PickersTextField/PickersInputBase/PickersInputBase.types.d.mts +56 -13
- package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +56 -13
- package/PickersTextField/PickersOutlinedInput/Outline.js +1 -1
- package/PickersTextField/PickersOutlinedInput/Outline.mjs +1 -1
- package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +33 -11
- package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.mjs +33 -11
- package/PickersTextField/PickersTextField.js +92 -39
- package/PickersTextField/PickersTextField.mjs +92 -39
- package/PickersTextField/PickersTextField.types.d.mts +56 -28
- package/PickersTextField/PickersTextField.types.d.ts +56 -28
- package/PickersTextField/index.d.mts +1 -1
- package/PickersTextField/index.d.ts +1 -1
- package/StaticDatePicker/StaticDatePicker.js +1 -1
- package/StaticDatePicker/StaticDatePicker.mjs +1 -1
- package/StaticDateTimePicker/StaticDateTimePicker.js +1 -1
- package/StaticDateTimePicker/StaticDateTimePicker.mjs +1 -1
- package/TimeField/TimeField.d.mts +1 -1
- package/TimeField/TimeField.d.ts +1 -1
- package/TimeField/TimeField.js +23 -29
- package/TimeField/TimeField.mjs +23 -29
- package/TimeField/TimeField.types.d.mts +2 -2
- package/TimeField/TimeField.types.d.ts +2 -2
- package/TimeField/useTimeField.d.mts +1 -1
- package/TimeField/useTimeField.d.ts +1 -1
- package/TimePicker/TimePicker.d.mts +1 -1
- package/TimePicker/TimePicker.d.ts +1 -1
- package/TimePicker/TimePicker.js +0 -4
- package/TimePicker/TimePicker.mjs +0 -4
- package/TimePicker/TimePicker.types.d.mts +3 -3
- package/TimePicker/TimePicker.types.d.ts +3 -3
- package/YearCalendar/YearCalendarButton.js +2 -2
- package/YearCalendar/YearCalendarButton.mjs +3 -3
- package/hooks/useParsedFormat.js +5 -7
- package/hooks/useParsedFormat.mjs +5 -7
- package/hooks/useSplitFieldProps.d.mts +1 -1
- package/hooks/useSplitFieldProps.d.ts +1 -1
- package/hooks/useSplitFieldProps.js +1 -1
- package/hooks/useSplitFieldProps.mjs +1 -1
- package/index.d.mts +1 -2
- package/index.d.ts +1 -2
- package/index.js +2 -14
- package/index.mjs +2 -3
- package/internals/components/PickerFieldUI.d.mts +11 -17
- package/internals/components/PickerFieldUI.d.ts +11 -17
- package/internals/components/PickerFieldUI.js +65 -114
- package/internals/components/PickerFieldUI.mjs +65 -114
- package/internals/components/PickerPopper/PickerPopper.js +3 -0
- package/internals/components/PickerPopper/PickerPopper.mjs +3 -0
- package/internals/components/PickersToolbar.js +3 -1
- package/internals/components/PickersToolbar.mjs +3 -1
- package/internals/demo/DemoContainer.js +6 -8
- package/internals/demo/DemoContainer.mjs +6 -8
- package/internals/hooks/PickerDay.types.d.mts +12 -0
- package/internals/hooks/PickerDay.types.d.ts +12 -0
- package/internals/hooks/useDesktopPicker/useDesktopPicker.d.mts +2 -2
- package/internals/hooks/useDesktopPicker/useDesktopPicker.d.ts +2 -2
- package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.mts +6 -6
- package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +6 -6
- package/internals/hooks/useField/buildSectionsFromFormat.d.mts +0 -1
- package/internals/hooks/useField/buildSectionsFromFormat.d.ts +0 -1
- package/internals/hooks/useField/buildSectionsFromFormat.js +1 -1
- package/internals/hooks/useField/buildSectionsFromFormat.mjs +1 -1
- package/internals/hooks/useField/index.d.mts +1 -1
- package/internals/hooks/useField/index.d.ts +1 -1
- package/internals/hooks/useField/index.js +2 -8
- package/internals/hooks/useField/index.mjs +1 -1
- package/internals/hooks/useField/useField.d.mts +2 -2
- package/internals/hooks/useField/useField.d.ts +2 -2
- package/internals/hooks/useField/useField.js +265 -8
- package/internals/hooks/useField/useField.mjs +264 -8
- package/internals/hooks/useField/useField.types.d.mts +11 -50
- package/internals/hooks/useField/useField.types.d.ts +11 -50
- package/internals/hooks/useField/useField.utils.d.mts +2 -3
- package/internals/hooks/useField/useField.utils.d.ts +2 -3
- package/internals/hooks/useField/useField.utils.js +8 -65
- package/internals/hooks/useField/useField.utils.mjs +6 -62
- package/internals/hooks/useField/useFieldHiddenInputProps.d.mts +2 -4
- package/internals/hooks/useField/useFieldHiddenInputProps.d.ts +2 -4
- package/internals/hooks/useField/useFieldHiddenInputProps.js +1 -3
- package/internals/hooks/useField/useFieldHiddenInputProps.mjs +1 -3
- package/internals/hooks/useField/useFieldInternalPropsWithDefaults.js +0 -1
- package/internals/hooks/useField/useFieldInternalPropsWithDefaults.mjs +0 -1
- package/internals/hooks/useField/useFieldRootProps.d.mts +5 -5
- package/internals/hooks/useField/useFieldRootProps.d.ts +5 -5
- package/internals/hooks/useField/useFieldRootProps.js +183 -11
- package/internals/hooks/useField/useFieldRootProps.mjs +183 -11
- package/internals/hooks/useField/useFieldSectionContainerProps.d.mts +3 -5
- package/internals/hooks/useField/useFieldSectionContainerProps.d.ts +3 -5
- package/internals/hooks/useField/useFieldSectionContainerProps.js +2 -4
- package/internals/hooks/useField/useFieldSectionContainerProps.mjs +2 -4
- package/internals/hooks/useField/useFieldSectionContentProps.d.mts +6 -7
- package/internals/hooks/useField/useFieldSectionContentProps.d.ts +6 -7
- package/internals/hooks/useField/useFieldSectionContentProps.js +2 -4
- package/internals/hooks/useField/useFieldSectionContentProps.mjs +2 -4
- package/internals/hooks/useField/useFieldState.d.mts +4 -4
- package/internals/hooks/useField/useFieldState.d.ts +4 -4
- package/internals/hooks/useField/useFieldState.js +3 -6
- package/internals/hooks/useField/useFieldState.mjs +3 -6
- package/internals/hooks/useMobilePicker/useMobilePicker.d.mts +2 -2
- package/internals/hooks/useMobilePicker/useMobilePicker.d.ts +2 -2
- package/internals/hooks/useMobilePicker/useMobilePicker.types.d.mts +6 -6
- package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +6 -6
- package/internals/hooks/useNullableFieldPrivateContext.d.mts +1 -1
- package/internals/hooks/useNullableFieldPrivateContext.d.ts +1 -1
- package/internals/hooks/usePicker/usePicker.js +1 -3
- package/internals/hooks/usePicker/usePicker.mjs +1 -3
- package/{PickersDay → internals/hooks}/usePickerDayOwnerState.d.mts +2 -3
- package/{PickersDay → internals/hooks}/usePickerDayOwnerState.d.ts +2 -3
- package/{PickersDay → internals/hooks}/usePickerDayOwnerState.js +3 -5
- package/{PickersDay → internals/hooks}/usePickerDayOwnerState.mjs +3 -5
- package/internals/index.d.mts +4 -4
- package/internals/index.d.ts +4 -4
- package/internals/index.js +9 -9
- package/internals/index.mjs +3 -3
- package/internals/models/manager.d.mts +3 -5
- package/internals/models/manager.d.ts +3 -5
- package/internals/utils/valueManagers.js +1 -2
- package/internals/utils/valueManagers.mjs +2 -3
- package/managers/index.d.mts +2 -2
- package/managers/index.d.ts +2 -2
- package/managers/useDateManager.d.mts +3 -6
- package/managers/useDateManager.d.ts +3 -6
- package/managers/useDateManager.js +2 -6
- package/managers/useDateManager.mjs +2 -6
- package/managers/useDateTimeManager.d.mts +3 -6
- package/managers/useDateTimeManager.d.ts +3 -6
- package/managers/useDateTimeManager.js +2 -6
- package/managers/useDateTimeManager.mjs +2 -6
- package/managers/useTimeManager.d.mts +4 -6
- package/managers/useTimeManager.d.ts +4 -6
- package/managers/useTimeManager.js +1 -3
- package/managers/useTimeManager.mjs +1 -3
- package/models/fields.d.mts +3 -4
- package/models/fields.d.ts +3 -4
- package/models/manager.d.mts +2 -8
- package/models/manager.d.ts +2 -8
- package/package.json +55 -69
- package/themeAugmentation/components.d.mts +4 -8
- package/themeAugmentation/components.d.ts +4 -8
- package/themeAugmentation/overrides.d.mts +2 -4
- package/themeAugmentation/overrides.d.ts +2 -4
- package/themeAugmentation/props.d.mts +5 -7
- package/themeAugmentation/props.d.ts +5 -7
- package/PickerDay2/PickerDay2.d.mts +0 -7
- package/PickerDay2/PickerDay2.d.ts +0 -7
- package/PickerDay2/PickerDay2.types.d.mts +0 -18
- package/PickerDay2/PickerDay2.types.d.ts +0 -18
- package/PickerDay2/index.d.mts +0 -4
- package/PickerDay2/index.d.ts +0 -4
- package/PickerDay2/index.js +0 -25
- package/PickerDay2/index.mjs +0 -2
- package/PickerDay2/pickerDay2Classes.js +0 -14
- package/PickerDay2/pickerDay2Classes.mjs +0 -6
- package/PickersDay/PickersDay.d.mts +0 -15
- package/PickersDay/PickersDay.d.ts +0 -15
- package/PickersDay/PickersDay.js +0 -384
- package/PickersDay/PickersDay.mjs +0 -377
- package/PickersDay/PickersDay.types.d.mts +0 -114
- package/PickersDay/PickersDay.types.d.ts +0 -114
- package/PickersDay/index.d.mts +0 -4
- package/PickersDay/index.d.ts +0 -4
- package/PickersDay/index.js +0 -25
- package/PickersDay/index.mjs +0 -2
- package/PickersDay/pickersDayClasses.d.mts +0 -19
- package/PickersDay/pickersDayClasses.d.ts +0 -19
- package/PickersDay/pickersDayClasses.js +0 -14
- package/PickersDay/pickersDayClasses.mjs +0 -6
- package/internals/hooks/useField/useFieldRootHandleKeyDown.d.mts +0 -16
- package/internals/hooks/useField/useFieldRootHandleKeyDown.d.ts +0 -16
- package/internals/hooks/useField/useFieldRootHandleKeyDown.js +0 -211
- package/internals/hooks/useField/useFieldRootHandleKeyDown.mjs +0 -205
- package/internals/hooks/useField/useFieldV6TextField.d.mts +0 -26
- package/internals/hooks/useField/useFieldV6TextField.d.ts +0 -26
- package/internals/hooks/useField/useFieldV6TextField.js +0 -422
- package/internals/hooks/useField/useFieldV6TextField.mjs +0 -413
- package/internals/hooks/useField/useFieldV7TextField.d.mts +0 -3
- package/internals/hooks/useField/useFieldV7TextField.d.ts +0 -3
- package/internals/hooks/useField/useFieldV7TextField.js +0 -272
- package/internals/hooks/useField/useFieldV7TextField.mjs +0 -264
- /package/{PickerDay2/PickerDay2.types.js → PickerDay/PickerDay.types.js} +0 -0
- /package/{PickerDay2/PickerDay2.types.mjs → PickerDay/PickerDay.types.mjs} +0 -0
- /package/{PickersDay/PickersDay.types.js → internals/hooks/PickerDay.types.js} +0 -0
- /package/{PickersDay/PickersDay.types.mjs → internals/hooks/PickerDay.types.mjs} +0 -0
|
@@ -1,422 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
'use client';
|
|
3
|
-
|
|
4
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
6
|
-
Object.defineProperty(exports, "__esModule", {
|
|
7
|
-
value: true
|
|
8
|
-
});
|
|
9
|
-
exports.useFieldV6TextField = exports.addPositionPropertiesToSections = void 0;
|
|
10
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
-
var React = _interopRequireWildcard(require("react"));
|
|
12
|
-
var _RtlProvider = require("@mui/system/RtlProvider");
|
|
13
|
-
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
14
|
-
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
15
|
-
var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));
|
|
16
|
-
var _useForkRef = _interopRequireDefault(require("@mui/utils/useForkRef"));
|
|
17
|
-
var _hooks = require("../../../hooks");
|
|
18
|
-
var _utils = require("../../utils/utils");
|
|
19
|
-
var _useField = require("./useField.utils");
|
|
20
|
-
var _useFieldCharacterEditing = require("./useFieldCharacterEditing");
|
|
21
|
-
var _useFieldRootHandleKeyDown = require("./useFieldRootHandleKeyDown");
|
|
22
|
-
var _useFieldState = require("./useFieldState");
|
|
23
|
-
var _useFieldInternalPropsWithDefaults = require("./useFieldInternalPropsWithDefaults");
|
|
24
|
-
const cleanString = dirtyString => dirtyString.replace(/[\u2066\u2067\u2068\u2069]/g, '');
|
|
25
|
-
const addPositionPropertiesToSections = (sections, localizedDigits, isRtl) => {
|
|
26
|
-
let position = 0;
|
|
27
|
-
let positionInInput = isRtl ? 1 : 0;
|
|
28
|
-
const newSections = [];
|
|
29
|
-
for (let i = 0; i < sections.length; i += 1) {
|
|
30
|
-
const section = sections[i];
|
|
31
|
-
const renderedValue = (0, _useField.getSectionVisibleValue)(section, isRtl ? 'input-rtl' : 'input-ltr', localizedDigits);
|
|
32
|
-
const sectionStr = `${section.startSeparator}${renderedValue}${section.endSeparator}`;
|
|
33
|
-
const sectionLength = cleanString(sectionStr).length;
|
|
34
|
-
const sectionLengthInInput = sectionStr.length;
|
|
35
|
-
|
|
36
|
-
// The ...InInput values consider the unicode characters but do include them in their indexes
|
|
37
|
-
const cleanedValue = cleanString(renderedValue);
|
|
38
|
-
const startInInput = positionInInput + (cleanedValue === '' ? 0 : renderedValue.indexOf(cleanedValue[0])) + section.startSeparator.length;
|
|
39
|
-
const endInInput = startInInput + cleanedValue.length;
|
|
40
|
-
newSections.push((0, _extends2.default)({}, section, {
|
|
41
|
-
start: position,
|
|
42
|
-
end: position + sectionLength,
|
|
43
|
-
startInInput,
|
|
44
|
-
endInInput
|
|
45
|
-
}));
|
|
46
|
-
position += sectionLength;
|
|
47
|
-
// Move position to the end of string associated to the current section
|
|
48
|
-
positionInInput += sectionLengthInInput;
|
|
49
|
-
}
|
|
50
|
-
return newSections;
|
|
51
|
-
};
|
|
52
|
-
exports.addPositionPropertiesToSections = addPositionPropertiesToSections;
|
|
53
|
-
const useFieldV6TextField = parameters => {
|
|
54
|
-
const isRtl = (0, _RtlProvider.useRtl)();
|
|
55
|
-
const focusTimeout = (0, _useTimeout.default)();
|
|
56
|
-
const selectionSyncTimeout = (0, _useTimeout.default)();
|
|
57
|
-
const {
|
|
58
|
-
props,
|
|
59
|
-
manager,
|
|
60
|
-
skipContextFieldRefAssignment,
|
|
61
|
-
manager: {
|
|
62
|
-
valueType,
|
|
63
|
-
internal_valueManager: valueManager,
|
|
64
|
-
internal_fieldValueManager: fieldValueManager,
|
|
65
|
-
internal_useOpenPickerButtonAriaLabel: useOpenPickerButtonAriaLabel
|
|
66
|
-
}
|
|
67
|
-
} = parameters;
|
|
68
|
-
const {
|
|
69
|
-
internalProps,
|
|
70
|
-
forwardedProps
|
|
71
|
-
} = (0, _hooks.useSplitFieldProps)(props, valueType);
|
|
72
|
-
const internalPropsWithDefaults = (0, _useFieldInternalPropsWithDefaults.useFieldInternalPropsWithDefaults)({
|
|
73
|
-
manager,
|
|
74
|
-
internalProps,
|
|
75
|
-
skipContextFieldRefAssignment
|
|
76
|
-
});
|
|
77
|
-
const {
|
|
78
|
-
onFocus,
|
|
79
|
-
onClick,
|
|
80
|
-
onPaste,
|
|
81
|
-
onBlur,
|
|
82
|
-
onKeyDown,
|
|
83
|
-
onClear,
|
|
84
|
-
clearable,
|
|
85
|
-
inputRef: inputRefProp,
|
|
86
|
-
placeholder: inPlaceholder
|
|
87
|
-
} = forwardedProps;
|
|
88
|
-
const {
|
|
89
|
-
readOnly = false,
|
|
90
|
-
disabled = false,
|
|
91
|
-
autoFocus = false,
|
|
92
|
-
focused,
|
|
93
|
-
fieldRef
|
|
94
|
-
} = internalPropsWithDefaults;
|
|
95
|
-
const inputRef = React.useRef(null);
|
|
96
|
-
const handleRef = (0, _useForkRef.default)(inputRefProp, inputRef);
|
|
97
|
-
const stateResponse = (0, _useFieldState.useFieldState)({
|
|
98
|
-
manager,
|
|
99
|
-
internalPropsWithDefaults,
|
|
100
|
-
forwardedProps
|
|
101
|
-
});
|
|
102
|
-
const {
|
|
103
|
-
// States and derived states
|
|
104
|
-
activeSectionIndex,
|
|
105
|
-
areAllSectionsEmpty,
|
|
106
|
-
error,
|
|
107
|
-
localizedDigits,
|
|
108
|
-
parsedSelectedSections,
|
|
109
|
-
sectionOrder,
|
|
110
|
-
state,
|
|
111
|
-
value,
|
|
112
|
-
// Methods to update the states
|
|
113
|
-
clearValue,
|
|
114
|
-
clearActiveSection,
|
|
115
|
-
setCharacterQuery,
|
|
116
|
-
setSelectedSections,
|
|
117
|
-
setTempAndroidValueStr,
|
|
118
|
-
updateSectionValue,
|
|
119
|
-
updateValueFromValueStr,
|
|
120
|
-
// Utilities methods
|
|
121
|
-
getSectionsFromValue
|
|
122
|
-
} = stateResponse;
|
|
123
|
-
const applyCharacterEditing = (0, _useFieldCharacterEditing.useFieldCharacterEditing)({
|
|
124
|
-
stateResponse
|
|
125
|
-
});
|
|
126
|
-
const openPickerAriaLabel = useOpenPickerButtonAriaLabel(value);
|
|
127
|
-
const sections = React.useMemo(() => addPositionPropertiesToSections(state.sections, localizedDigits, isRtl), [state.sections, localizedDigits, isRtl]);
|
|
128
|
-
function syncSelectionFromDOM() {
|
|
129
|
-
const browserStartIndex = inputRef.current.selectionStart ?? 0;
|
|
130
|
-
let nextSectionIndex;
|
|
131
|
-
if (browserStartIndex <= sections[0].startInInput) {
|
|
132
|
-
// Special case if browser index is in invisible characters at the beginning
|
|
133
|
-
nextSectionIndex = 1;
|
|
134
|
-
} else if (browserStartIndex >= sections[sections.length - 1].endInInput) {
|
|
135
|
-
// If the click is after the last character of the input, then we want to select the 1st section.
|
|
136
|
-
nextSectionIndex = 1;
|
|
137
|
-
} else {
|
|
138
|
-
nextSectionIndex = sections.findIndex(section => section.startInInput - section.startSeparator.length > browserStartIndex);
|
|
139
|
-
}
|
|
140
|
-
const sectionIndex = nextSectionIndex === -1 ? sections.length - 1 : nextSectionIndex - 1;
|
|
141
|
-
setSelectedSections(sectionIndex);
|
|
142
|
-
}
|
|
143
|
-
function focusField(newSelectedSection = 0) {
|
|
144
|
-
if ((0, _utils.getActiveElement)(inputRef.current) === inputRef.current) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
inputRef.current?.focus();
|
|
148
|
-
setSelectedSections(newSelectedSection);
|
|
149
|
-
}
|
|
150
|
-
const handleInputFocus = (0, _useEventCallback.default)(event => {
|
|
151
|
-
onFocus?.(event);
|
|
152
|
-
// The ref is guaranteed to be resolved at this point.
|
|
153
|
-
const input = inputRef.current;
|
|
154
|
-
focusTimeout.start(0, () => {
|
|
155
|
-
// The ref changed, the component got remounted, the focus event is no longer relevant.
|
|
156
|
-
if (!input || input !== inputRef.current) {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
if (activeSectionIndex != null) {
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
if (
|
|
163
|
-
// avoid selecting all sections when focusing empty field without value
|
|
164
|
-
input.value.length && Number(input.selectionEnd) - Number(input.selectionStart) === input.value.length) {
|
|
165
|
-
setSelectedSections('all');
|
|
166
|
-
} else {
|
|
167
|
-
syncSelectionFromDOM();
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
const handleInputClick = (0, _useEventCallback.default)((event, ...args) => {
|
|
172
|
-
// The click event on the clear button would propagate to the input, trigger this handler and result in a wrong section selection.
|
|
173
|
-
// We avoid this by checking if the call of `handleInputClick` is actually intended, or a side effect.
|
|
174
|
-
if (event.isDefaultPrevented()) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
onClick?.(event, ...args);
|
|
178
|
-
syncSelectionFromDOM();
|
|
179
|
-
});
|
|
180
|
-
const handleInputPaste = (0, _useEventCallback.default)(event => {
|
|
181
|
-
onPaste?.(event);
|
|
182
|
-
|
|
183
|
-
// prevent default to avoid the input `onChange` handler being called
|
|
184
|
-
event.preventDefault();
|
|
185
|
-
if (readOnly || disabled) {
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
const pastedValue = event.clipboardData.getData('text');
|
|
189
|
-
if (typeof parsedSelectedSections === 'number') {
|
|
190
|
-
const activeSection = state.sections[parsedSelectedSections];
|
|
191
|
-
const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);
|
|
192
|
-
const digitsOnly = /^[0-9]+$/.test(pastedValue);
|
|
193
|
-
const digitsAndLetterOnly = /^(([a-zA-Z]+)|)([0-9]+)(([a-zA-Z]+)|)$/.test(pastedValue);
|
|
194
|
-
const isValidPastedValue = activeSection.contentType === 'letter' && lettersOnly || activeSection.contentType === 'digit' && digitsOnly || activeSection.contentType === 'digit-with-letter' && digitsAndLetterOnly;
|
|
195
|
-
if (isValidPastedValue) {
|
|
196
|
-
setCharacterQuery(null);
|
|
197
|
-
updateSectionValue({
|
|
198
|
-
section: activeSection,
|
|
199
|
-
newSectionValue: pastedValue,
|
|
200
|
-
shouldGoToNextSection: true
|
|
201
|
-
});
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
if (lettersOnly || digitsOnly) {
|
|
205
|
-
// The pasted value corresponds to a single section, but not the expected type,
|
|
206
|
-
// skip the modification
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
setCharacterQuery(null);
|
|
211
|
-
updateValueFromValueStr(pastedValue);
|
|
212
|
-
});
|
|
213
|
-
const handleContainerBlur = (0, _useEventCallback.default)(event => {
|
|
214
|
-
onBlur?.(event);
|
|
215
|
-
setSelectedSections(null);
|
|
216
|
-
});
|
|
217
|
-
const handleInputChange = (0, _useEventCallback.default)(event => {
|
|
218
|
-
if (readOnly) {
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
const targetValue = event.target.value;
|
|
222
|
-
if (targetValue === '') {
|
|
223
|
-
clearValue();
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
const eventData = event.nativeEvent.data;
|
|
227
|
-
// Calling `.fill(04/11/2022)` in playwright will trigger a change event with the requested content to insert in `event.nativeEvent.data`
|
|
228
|
-
// usual changes have only the currently typed character in the `event.nativeEvent.data`
|
|
229
|
-
const shouldUseEventData = eventData && eventData.length > 1;
|
|
230
|
-
const valueStr = shouldUseEventData ? eventData : targetValue;
|
|
231
|
-
const cleanValueStr = cleanString(valueStr);
|
|
232
|
-
if (parsedSelectedSections === 'all') {
|
|
233
|
-
setSelectedSections(activeSectionIndex);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// If no section is selected or eventData should be used, we just try to parse the new value
|
|
237
|
-
// This line is mostly triggered by imperative code / application tests.
|
|
238
|
-
if (activeSectionIndex == null || shouldUseEventData) {
|
|
239
|
-
updateValueFromValueStr(shouldUseEventData ? eventData : cleanValueStr);
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
let keyPressed;
|
|
243
|
-
if (parsedSelectedSections === 'all' && cleanValueStr.length === 1) {
|
|
244
|
-
keyPressed = cleanValueStr;
|
|
245
|
-
} else {
|
|
246
|
-
const prevValueStr = cleanString(fieldValueManager.getV6InputValueFromSections(sections, localizedDigits, isRtl));
|
|
247
|
-
let startOfDiffIndex = -1;
|
|
248
|
-
let endOfDiffIndex = -1;
|
|
249
|
-
for (let i = 0; i < prevValueStr.length; i += 1) {
|
|
250
|
-
if (startOfDiffIndex === -1 && prevValueStr[i] !== cleanValueStr[i]) {
|
|
251
|
-
startOfDiffIndex = i;
|
|
252
|
-
}
|
|
253
|
-
if (endOfDiffIndex === -1 && prevValueStr[prevValueStr.length - i - 1] !== cleanValueStr[cleanValueStr.length - i - 1]) {
|
|
254
|
-
endOfDiffIndex = i;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
const activeSection = sections[activeSectionIndex];
|
|
258
|
-
const hasDiffOutsideOfActiveSection = startOfDiffIndex < activeSection.start || prevValueStr.length - endOfDiffIndex - 1 > activeSection.end;
|
|
259
|
-
if (hasDiffOutsideOfActiveSection) {
|
|
260
|
-
// TODO: Support if the new date is valid
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// The active section being selected, the browser has replaced its value with the key pressed by the user.
|
|
265
|
-
const activeSectionEndRelativeToNewValue = cleanValueStr.length - prevValueStr.length + activeSection.end - cleanString(activeSection.endSeparator || '').length;
|
|
266
|
-
keyPressed = cleanValueStr.slice(activeSection.start + cleanString(activeSection.startSeparator || '').length, activeSectionEndRelativeToNewValue);
|
|
267
|
-
}
|
|
268
|
-
if (keyPressed.length === 0) {
|
|
269
|
-
if ((0, _useField.isAndroid)()) {
|
|
270
|
-
setTempAndroidValueStr(valueStr);
|
|
271
|
-
}
|
|
272
|
-
clearActiveSection();
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
applyCharacterEditing({
|
|
276
|
-
keyPressed,
|
|
277
|
-
sectionIndex: activeSectionIndex
|
|
278
|
-
});
|
|
279
|
-
});
|
|
280
|
-
const handleClear = (0, _useEventCallback.default)((event, ...args) => {
|
|
281
|
-
event.preventDefault();
|
|
282
|
-
onClear?.(event, ...args);
|
|
283
|
-
clearValue();
|
|
284
|
-
if (!isFieldFocused(inputRef)) {
|
|
285
|
-
// setSelectedSections is called internally
|
|
286
|
-
focusField(0);
|
|
287
|
-
} else {
|
|
288
|
-
setSelectedSections(sectionOrder.startIndex);
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
const handleContainerKeyDown = (0, _useFieldRootHandleKeyDown.useFieldRootHandleKeyDown)({
|
|
292
|
-
manager,
|
|
293
|
-
internalPropsWithDefaults,
|
|
294
|
-
stateResponse
|
|
295
|
-
});
|
|
296
|
-
const wrappedHandleContainerKeyDown = (0, _useEventCallback.default)(event => {
|
|
297
|
-
onKeyDown?.(event);
|
|
298
|
-
handleContainerKeyDown(event);
|
|
299
|
-
});
|
|
300
|
-
const placeholder = React.useMemo(() => {
|
|
301
|
-
if (inPlaceholder !== undefined) {
|
|
302
|
-
return inPlaceholder;
|
|
303
|
-
}
|
|
304
|
-
return fieldValueManager.getV6InputValueFromSections(getSectionsFromValue(valueManager.emptyValue), localizedDigits, isRtl);
|
|
305
|
-
}, [inPlaceholder, fieldValueManager, getSectionsFromValue, valueManager.emptyValue, localizedDigits, isRtl]);
|
|
306
|
-
const valueStr = React.useMemo(() => state.tempValueStrAndroid ?? fieldValueManager.getV6InputValueFromSections(state.sections, localizedDigits, isRtl), [state.sections, fieldValueManager, state.tempValueStrAndroid, localizedDigits, isRtl]);
|
|
307
|
-
React.useEffect(() => {
|
|
308
|
-
// Select all the sections when focused on mount (`autoFocus = true` on the input)
|
|
309
|
-
if (inputRef.current && inputRef.current === (0, _utils.getActiveElement)(inputRef.current)) {
|
|
310
|
-
setSelectedSections('all');
|
|
311
|
-
}
|
|
312
|
-
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
313
|
-
|
|
314
|
-
(0, _useEnhancedEffect.default)(() => {
|
|
315
|
-
function syncSelectionToDOM() {
|
|
316
|
-
if (!inputRef.current) {
|
|
317
|
-
return;
|
|
318
|
-
}
|
|
319
|
-
if (parsedSelectedSections == null) {
|
|
320
|
-
if (inputRef.current.scrollLeft) {
|
|
321
|
-
// Ensure that input content is not marked as selected.
|
|
322
|
-
// setting selection range to 0 causes issues in Safari.
|
|
323
|
-
// https://bugs.webkit.org/show_bug.cgi?id=224425
|
|
324
|
-
inputRef.current.scrollLeft = 0;
|
|
325
|
-
}
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
// On multi input range pickers we want to update selection range only for the active input
|
|
330
|
-
// This helps to avoid the focus jumping on Safari https://github.com/mui/mui-x/issues/9003
|
|
331
|
-
// because WebKit implements the `setSelectionRange` based on the spec: https://bugs.webkit.org/show_bug.cgi?id=224425
|
|
332
|
-
if (inputRef.current !== (0, _utils.getActiveElement)(inputRef.current)) {
|
|
333
|
-
return;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
// Fix scroll jumping on iOS browser: https://github.com/mui/mui-x/issues/8321
|
|
337
|
-
const currentScrollTop = inputRef.current.scrollTop;
|
|
338
|
-
if (parsedSelectedSections === 'all') {
|
|
339
|
-
inputRef.current.select();
|
|
340
|
-
} else {
|
|
341
|
-
const selectedSection = sections[parsedSelectedSections];
|
|
342
|
-
const selectionStart = selectedSection.type === 'empty' ? selectedSection.startInInput - selectedSection.startSeparator.length : selectedSection.startInInput;
|
|
343
|
-
const selectionEnd = selectedSection.type === 'empty' ? selectedSection.endInInput + selectedSection.endSeparator.length : selectedSection.endInInput;
|
|
344
|
-
if (selectionStart !== inputRef.current.selectionStart || selectionEnd !== inputRef.current.selectionEnd) {
|
|
345
|
-
if (inputRef.current === (0, _utils.getActiveElement)(inputRef.current)) {
|
|
346
|
-
inputRef.current.setSelectionRange(selectionStart, selectionEnd);
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
selectionSyncTimeout.start(0, () => {
|
|
350
|
-
// handle case when the selection is not updated correctly
|
|
351
|
-
// could happen on Android
|
|
352
|
-
if (inputRef.current && inputRef.current === (0, _utils.getActiveElement)(inputRef.current) &&
|
|
353
|
-
// The section might loose all selection, where `selectionStart === selectionEnd`
|
|
354
|
-
// https://github.com/mui/mui-x/pull/13652
|
|
355
|
-
inputRef.current.selectionStart === inputRef.current.selectionEnd && (inputRef.current.selectionStart !== selectionStart || inputRef.current.selectionEnd !== selectionEnd)) {
|
|
356
|
-
syncSelectionToDOM();
|
|
357
|
-
}
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
// Even reading this variable seems to do the trick, but also setting it just to make use of it
|
|
362
|
-
inputRef.current.scrollTop = currentScrollTop;
|
|
363
|
-
}
|
|
364
|
-
syncSelectionToDOM();
|
|
365
|
-
});
|
|
366
|
-
const inputMode = React.useMemo(() => {
|
|
367
|
-
if (activeSectionIndex == null) {
|
|
368
|
-
return 'text';
|
|
369
|
-
}
|
|
370
|
-
if (state.sections[activeSectionIndex].contentType === 'letter') {
|
|
371
|
-
return 'text';
|
|
372
|
-
}
|
|
373
|
-
return 'numeric';
|
|
374
|
-
}, [activeSectionIndex, state.sections]);
|
|
375
|
-
const inputHasFocus = inputRef.current && inputRef.current === (0, _utils.getActiveElement)(inputRef.current);
|
|
376
|
-
const shouldShowPlaceholder = !inputHasFocus && areAllSectionsEmpty;
|
|
377
|
-
React.useImperativeHandle(fieldRef, () => ({
|
|
378
|
-
getSections: () => state.sections,
|
|
379
|
-
getActiveSectionIndex: () => {
|
|
380
|
-
const browserStartIndex = inputRef.current.selectionStart ?? 0;
|
|
381
|
-
const browserEndIndex = inputRef.current.selectionEnd ?? 0;
|
|
382
|
-
if (browserStartIndex === 0 && browserEndIndex === 0) {
|
|
383
|
-
return null;
|
|
384
|
-
}
|
|
385
|
-
const nextSectionIndex = browserStartIndex <= sections[0].startInInput ? 1 // Special case if browser index is in invisible characters at the beginning.
|
|
386
|
-
: sections.findIndex(section => section.startInInput - section.startSeparator.length > browserStartIndex);
|
|
387
|
-
return nextSectionIndex === -1 ? sections.length - 1 : nextSectionIndex - 1;
|
|
388
|
-
},
|
|
389
|
-
setSelectedSections: newSelectedSections => setSelectedSections(newSelectedSections),
|
|
390
|
-
focusField,
|
|
391
|
-
isFieldFocused: () => isFieldFocused(inputRef),
|
|
392
|
-
clearValue
|
|
393
|
-
}));
|
|
394
|
-
return (0, _extends2.default)({}, forwardedProps, {
|
|
395
|
-
error,
|
|
396
|
-
'aria-invalid': error,
|
|
397
|
-
clearable: Boolean(clearable && !areAllSectionsEmpty && !readOnly && !disabled),
|
|
398
|
-
onBlur: handleContainerBlur,
|
|
399
|
-
onClick: handleInputClick,
|
|
400
|
-
onFocus: handleInputFocus,
|
|
401
|
-
onPaste: handleInputPaste,
|
|
402
|
-
onKeyDown: wrappedHandleContainerKeyDown,
|
|
403
|
-
onClear: handleClear,
|
|
404
|
-
inputRef: handleRef,
|
|
405
|
-
// Additional
|
|
406
|
-
enableAccessibleFieldDOMStructure: false,
|
|
407
|
-
placeholder,
|
|
408
|
-
inputMode,
|
|
409
|
-
autoComplete: 'off',
|
|
410
|
-
value: shouldShowPlaceholder ? '' : valueStr,
|
|
411
|
-
onChange: handleInputChange,
|
|
412
|
-
focused,
|
|
413
|
-
disabled,
|
|
414
|
-
readOnly,
|
|
415
|
-
autoFocus,
|
|
416
|
-
openPickerAriaLabel
|
|
417
|
-
});
|
|
418
|
-
};
|
|
419
|
-
exports.useFieldV6TextField = useFieldV6TextField;
|
|
420
|
-
function isFieldFocused(inputRef) {
|
|
421
|
-
return inputRef.current === (0, _utils.getActiveElement)(inputRef.current);
|
|
422
|
-
}
|