@mui/x-date-pickers 9.0.0-alpha.4 → 9.0.0-rc.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 +262 -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 -4
- package/DateField/DateField.mjs +22 -4
- 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 -4
- package/DateTimeField/DateTimeField.mjs +22 -4
- 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/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 +27 -1
- package/PickersTextField/PickersFilledInput/PickersFilledInput.mjs +27 -1
- package/PickersTextField/PickersInput/PickersInput.js +27 -1
- package/PickersTextField/PickersInput/PickersInput.mjs +27 -1
- package/PickersTextField/PickersInputBase/PickersInputBase.js +26 -0
- package/PickersTextField/PickersInputBase/PickersInputBase.mjs +26 -0
- package/PickersTextField/PickersInputBase/PickersInputBase.types.d.mts +26 -0
- package/PickersTextField/PickersInputBase/PickersInputBase.types.d.ts +26 -0
- package/PickersTextField/PickersOutlinedInput/Outline.js +1 -1
- package/PickersTextField/PickersOutlinedInput/Outline.mjs +1 -1
- package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.js +27 -1
- package/PickersTextField/PickersOutlinedInput/PickersOutlinedInput.mjs +27 -1
- package/PickersTextField/PickersTextField.js +42 -2
- package/PickersTextField/PickersTextField.mjs +42 -2
- package/PickersTextField/PickersTextField.types.d.mts +22 -6
- package/PickersTextField/PickersTextField.types.d.ts +22 -6
- 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 +22 -4
- package/TimeField/TimeField.mjs +22 -4
- 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 +22 -13
- package/internals/components/PickerFieldUI.d.ts +22 -13
- package/internals/components/PickerFieldUI.js +22 -80
- package/internals/components/PickerFieldUI.mjs +22 -80
- 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
|
@@ -222,26 +222,9 @@ export const getDateFromDateSections = (adapter, sections, localizedDigits) => {
|
|
|
222
222
|
const dateWithoutSeparatorStr = sectionValues.join(' ');
|
|
223
223
|
return adapter.parse(dateWithoutSeparatorStr, formatWithoutSeparator);
|
|
224
224
|
};
|
|
225
|
-
export const
|
|
225
|
+
export const createDateStrForHiddenInputFromSections = sections => sections.map(section => {
|
|
226
226
|
return `${section.startSeparator}${section.value || section.placeholder}${section.endSeparator}`;
|
|
227
227
|
}).join('');
|
|
228
|
-
export const createDateStrForV6InputFromSections = (sections, localizedDigits, isRtl) => {
|
|
229
|
-
const formattedSections = sections.map(section => {
|
|
230
|
-
const dateValue = getSectionVisibleValue(section, isRtl ? 'input-rtl' : 'input-ltr', localizedDigits);
|
|
231
|
-
return `${section.startSeparator}${dateValue}${section.endSeparator}`;
|
|
232
|
-
});
|
|
233
|
-
const dateStr = formattedSections.join('');
|
|
234
|
-
if (!isRtl) {
|
|
235
|
-
return dateStr;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// \u2066: start left-to-right isolation
|
|
239
|
-
// \u2067: start right-to-left isolation
|
|
240
|
-
// \u2068: start first strong character isolation
|
|
241
|
-
// \u2069: pop isolation
|
|
242
|
-
// wrap into an isolated group such that separators can split the string in smaller ones by adding \u2069\u2068
|
|
243
|
-
return `\u2066${dateStr}\u2069`;
|
|
244
|
-
};
|
|
245
228
|
export const getSectionsBoundaries = (adapter, localizedDigits, timezone) => {
|
|
246
229
|
const today = adapter.date(undefined, timezone);
|
|
247
230
|
const endOfYear = adapter.endOfYear(today);
|
|
@@ -428,50 +411,11 @@ export const mergeDateIntoReferenceDate = (adapter, dateToTransferFrom, sections
|
|
|
428
411
|
return mergedDate;
|
|
429
412
|
}, referenceDate);
|
|
430
413
|
export const isAndroid = () => navigator.userAgent.toLowerCase().includes('android');
|
|
431
|
-
|
|
432
|
-
// TODO v9: Remove
|
|
433
|
-
export const getSectionOrder = (sections, shouldApplyRTL) => {
|
|
414
|
+
export const getSectionOrder = sections => {
|
|
434
415
|
const neighbors = {};
|
|
435
|
-
if (!shouldApplyRTL) {
|
|
436
|
-
sections.forEach((_, index) => {
|
|
437
|
-
const leftIndex = index === 0 ? null : index - 1;
|
|
438
|
-
const rightIndex = index === sections.length - 1 ? null : index + 1;
|
|
439
|
-
neighbors[index] = {
|
|
440
|
-
leftIndex,
|
|
441
|
-
rightIndex
|
|
442
|
-
};
|
|
443
|
-
});
|
|
444
|
-
return {
|
|
445
|
-
neighbors,
|
|
446
|
-
startIndex: 0,
|
|
447
|
-
endIndex: sections.length - 1
|
|
448
|
-
};
|
|
449
|
-
}
|
|
450
|
-
const rtl2ltr = {};
|
|
451
|
-
const ltr2rtl = {};
|
|
452
|
-
let groupedSectionsStart = 0;
|
|
453
|
-
let groupedSectionsEnd = 0;
|
|
454
|
-
let RTLIndex = sections.length - 1;
|
|
455
|
-
while (RTLIndex >= 0) {
|
|
456
|
-
groupedSectionsEnd = sections.findIndex(
|
|
457
|
-
// eslint-disable-next-line @typescript-eslint/no-loop-func
|
|
458
|
-
(section, index) => index >= groupedSectionsStart && section.endSeparator?.includes(' ') &&
|
|
459
|
-
// Special case where the spaces were not there in the initial input
|
|
460
|
-
section.endSeparator !== ' / ');
|
|
461
|
-
if (groupedSectionsEnd === -1) {
|
|
462
|
-
groupedSectionsEnd = sections.length - 1;
|
|
463
|
-
}
|
|
464
|
-
for (let i = groupedSectionsEnd; i >= groupedSectionsStart; i -= 1) {
|
|
465
|
-
ltr2rtl[i] = RTLIndex;
|
|
466
|
-
rtl2ltr[RTLIndex] = i;
|
|
467
|
-
RTLIndex -= 1;
|
|
468
|
-
}
|
|
469
|
-
groupedSectionsStart = groupedSectionsEnd + 1;
|
|
470
|
-
}
|
|
471
416
|
sections.forEach((_, index) => {
|
|
472
|
-
const
|
|
473
|
-
const
|
|
474
|
-
const rightIndex = rtlIndex === sections.length - 1 ? null : rtl2ltr[rtlIndex + 1];
|
|
417
|
+
const leftIndex = index === 0 ? null : index - 1;
|
|
418
|
+
const rightIndex = index === sections.length - 1 ? null : index + 1;
|
|
475
419
|
neighbors[index] = {
|
|
476
420
|
leftIndex,
|
|
477
421
|
rightIndex
|
|
@@ -479,8 +423,8 @@ export const getSectionOrder = (sections, shouldApplyRTL) => {
|
|
|
479
423
|
});
|
|
480
424
|
return {
|
|
481
425
|
neighbors,
|
|
482
|
-
startIndex:
|
|
483
|
-
endIndex:
|
|
426
|
+
startIndex: 0,
|
|
427
|
+
endIndex: sections.length - 1
|
|
484
428
|
};
|
|
485
429
|
};
|
|
486
430
|
export const parseSelectedSections = (selectedSections, sections) => {
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { PickerAnyManager } from "../../models/manager.mjs";
|
|
3
3
|
import { UseFieldStateReturnValue } from "./useFieldState.mjs";
|
|
4
4
|
/**
|
|
5
5
|
* Generate the props to pass to the hidden input element of the field.
|
|
6
|
-
* It is not used by the non-accessible DOM structure (with an <input /> element for editing).
|
|
7
|
-
* It should be used in the MUI accessible DOM structure and the Base UI implementation.
|
|
8
6
|
* @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
|
|
9
7
|
* @returns {UseFieldHiddenInputPropsReturnValue} The props to forward to the hidden input element of the field.
|
|
10
8
|
*/
|
|
11
9
|
export declare function useFieldHiddenInputProps(parameters: UseFieldHiddenInputPropsParameters): UseFieldHiddenInputPropsReturnValue;
|
|
12
10
|
interface UseFieldHiddenInputPropsParameters {
|
|
13
|
-
manager:
|
|
11
|
+
manager: PickerAnyManager;
|
|
14
12
|
stateResponse: UseFieldStateReturnValue<any>;
|
|
15
13
|
}
|
|
16
14
|
interface UseFieldHiddenInputPropsReturnValue {
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { PickerAnyManager } from "../../models/manager.js";
|
|
3
3
|
import { UseFieldStateReturnValue } from "./useFieldState.js";
|
|
4
4
|
/**
|
|
5
5
|
* Generate the props to pass to the hidden input element of the field.
|
|
6
|
-
* It is not used by the non-accessible DOM structure (with an <input /> element for editing).
|
|
7
|
-
* It should be used in the MUI accessible DOM structure and the Base UI implementation.
|
|
8
6
|
* @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
|
|
9
7
|
* @returns {UseFieldHiddenInputPropsReturnValue} The props to forward to the hidden input element of the field.
|
|
10
8
|
*/
|
|
11
9
|
export declare function useFieldHiddenInputProps(parameters: UseFieldHiddenInputPropsParameters): UseFieldHiddenInputPropsReturnValue;
|
|
12
10
|
interface UseFieldHiddenInputPropsParameters {
|
|
13
|
-
manager:
|
|
11
|
+
manager: PickerAnyManager;
|
|
14
12
|
stateResponse: UseFieldStateReturnValue<any>;
|
|
15
13
|
}
|
|
16
14
|
interface UseFieldHiddenInputPropsReturnValue {
|
|
@@ -10,8 +10,6 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
10
10
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
11
11
|
/**
|
|
12
12
|
* Generate the props to pass to the hidden input element of the field.
|
|
13
|
-
* It is not used by the non-accessible DOM structure (with an <input /> element for editing).
|
|
14
|
-
* It should be used in the MUI accessible DOM structure and the Base UI implementation.
|
|
15
13
|
* @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
|
|
16
14
|
* @returns {UseFieldHiddenInputPropsReturnValue} The props to forward to the hidden input element of the field.
|
|
17
15
|
*/
|
|
@@ -31,7 +29,7 @@ function useFieldHiddenInputProps(parameters) {
|
|
|
31
29
|
const handleChange = (0, _useEventCallback.default)(event => {
|
|
32
30
|
updateValueFromValueStr(event.target.value);
|
|
33
31
|
});
|
|
34
|
-
const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.
|
|
32
|
+
const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.getHiddenInputValueFromSections(state.sections), [areAllSectionsEmpty, state.sections, fieldValueManager]);
|
|
35
33
|
return {
|
|
36
34
|
value: valueStr,
|
|
37
35
|
onChange: handleChange
|
|
@@ -2,8 +2,6 @@ import * as React from 'react';
|
|
|
2
2
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
3
3
|
/**
|
|
4
4
|
* Generate the props to pass to the hidden input element of the field.
|
|
5
|
-
* It is not used by the non-accessible DOM structure (with an <input /> element for editing).
|
|
6
|
-
* It should be used in the MUI accessible DOM structure and the Base UI implementation.
|
|
7
5
|
* @param {UseFieldHiddenInputPropsParameters} parameters The parameters of the hook.
|
|
8
6
|
* @returns {UseFieldHiddenInputPropsReturnValue} The props to forward to the hidden input element of the field.
|
|
9
7
|
*/
|
|
@@ -23,7 +21,7 @@ export function useFieldHiddenInputProps(parameters) {
|
|
|
23
21
|
const handleChange = useEventCallback(event => {
|
|
24
22
|
updateValueFromValueStr(event.target.value);
|
|
25
23
|
});
|
|
26
|
-
const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.
|
|
24
|
+
const valueStr = React.useMemo(() => areAllSectionsEmpty ? '' : fieldValueManager.getHiddenInputValueFromSections(state.sections), [areAllSectionsEmpty, state.sections, fieldValueManager]);
|
|
27
25
|
return {
|
|
28
26
|
value: valueStr,
|
|
29
27
|
onChange: handleChange
|
|
@@ -48,7 +48,6 @@ function useFieldInternalPropsWithDefaults(parameters) {
|
|
|
48
48
|
focused: pickerContext.open ? true : undefined,
|
|
49
49
|
format: pickerContext.fieldFormat,
|
|
50
50
|
formatDensity: fieldPrivateContext.formatDensity,
|
|
51
|
-
enableAccessibleFieldDOMStructure: fieldPrivateContext.enableAccessibleFieldDOMStructure,
|
|
52
51
|
selectedSections: fieldPrivateContext.selectedSections,
|
|
53
52
|
onSelectedSectionsChange: fieldPrivateContext.onSelectedSectionsChange,
|
|
54
53
|
fieldRef: handleFieldRef
|
|
@@ -41,7 +41,6 @@ export function useFieldInternalPropsWithDefaults(parameters) {
|
|
|
41
41
|
focused: pickerContext.open ? true : undefined,
|
|
42
42
|
format: pickerContext.fieldFormat,
|
|
43
43
|
formatDensity: fieldPrivateContext.formatDensity,
|
|
44
|
-
enableAccessibleFieldDOMStructure: fieldPrivateContext.enableAccessibleFieldDOMStructure,
|
|
45
44
|
selectedSections: fieldPrivateContext.selectedSections,
|
|
46
45
|
onSelectedSectionsChange: fieldPrivateContext.onSelectedSectionsChange,
|
|
47
46
|
fieldRef: handleFieldRef
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { PickerManager } from "../../../models/index.mjs";
|
|
2
1
|
import { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.mjs";
|
|
3
2
|
import { UseFieldStateReturnValue } from "./useFieldState.mjs";
|
|
4
3
|
import { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.mjs";
|
|
4
|
+
import { PickerAnyManager } from "../../models/index.mjs";
|
|
5
5
|
/**
|
|
6
6
|
* Generate the props to pass to the root element of the field.
|
|
7
|
-
* It is not used by the non-accessible DOM structure (with an <input /> element for editing).
|
|
8
|
-
* It should be used in the MUI accessible DOM structure and the Base UI implementation.
|
|
9
7
|
* @param {UseFieldRootPropsParameters} parameters The parameters of the hook.
|
|
10
8
|
* @returns {UseFieldRootPropsReturnValue} The props to forward to the root element of the field.
|
|
11
9
|
*/
|
|
12
10
|
export declare function useFieldRootProps(parameters: UseFieldRootPropsParameters): UseFieldRootPropsReturnValue;
|
|
13
11
|
interface UseFieldRootPropsParameters {
|
|
14
|
-
manager:
|
|
12
|
+
manager: PickerAnyManager;
|
|
15
13
|
stateResponse: UseFieldStateReturnValue<any>;
|
|
16
14
|
applyCharacterEditing: UseFieldCharacterEditingReturnValue;
|
|
17
|
-
internalPropsWithDefaults: UseFieldInternalProps<any, any
|
|
15
|
+
internalPropsWithDefaults: UseFieldInternalProps<any, any> & {
|
|
16
|
+
minutesStep?: number;
|
|
17
|
+
};
|
|
18
18
|
domGetters: UseFieldDOMGetters;
|
|
19
19
|
focused: boolean;
|
|
20
20
|
setFocused: (focused: boolean) => void;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { PickerManager } from "../../../models/index.js";
|
|
2
1
|
import { UseFieldDOMGetters, UseFieldInternalProps } from "./useField.types.js";
|
|
3
2
|
import { UseFieldStateReturnValue } from "./useFieldState.js";
|
|
4
3
|
import { UseFieldCharacterEditingReturnValue } from "./useFieldCharacterEditing.js";
|
|
4
|
+
import { PickerAnyManager } from "../../models/index.js";
|
|
5
5
|
/**
|
|
6
6
|
* Generate the props to pass to the root element of the field.
|
|
7
|
-
* It is not used by the non-accessible DOM structure (with an <input /> element for editing).
|
|
8
|
-
* It should be used in the MUI accessible DOM structure and the Base UI implementation.
|
|
9
7
|
* @param {UseFieldRootPropsParameters} parameters The parameters of the hook.
|
|
10
8
|
* @returns {UseFieldRootPropsReturnValue} The props to forward to the root element of the field.
|
|
11
9
|
*/
|
|
12
10
|
export declare function useFieldRootProps(parameters: UseFieldRootPropsParameters): UseFieldRootPropsReturnValue;
|
|
13
11
|
interface UseFieldRootPropsParameters {
|
|
14
|
-
manager:
|
|
12
|
+
manager: PickerAnyManager;
|
|
15
13
|
stateResponse: UseFieldStateReturnValue<any>;
|
|
16
14
|
applyCharacterEditing: UseFieldCharacterEditingReturnValue;
|
|
17
|
-
internalPropsWithDefaults: UseFieldInternalProps<any, any
|
|
15
|
+
internalPropsWithDefaults: UseFieldInternalProps<any, any> & {
|
|
16
|
+
minutesStep?: number;
|
|
17
|
+
};
|
|
18
18
|
domGetters: UseFieldDOMGetters;
|
|
19
19
|
focused: boolean;
|
|
20
20
|
setFocused: (focused: boolean) => void;
|
|
@@ -7,19 +7,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.useFieldRootProps = useFieldRootProps;
|
|
8
8
|
var _useEventCallback = _interopRequireDefault(require("@mui/utils/useEventCallback"));
|
|
9
9
|
var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));
|
|
10
|
-
var _useFieldRootHandleKeyDown = require("./useFieldRootHandleKeyDown");
|
|
11
10
|
var _utils = require("../../utils/utils");
|
|
12
11
|
var _syncSelectionToDOM = require("./syncSelectionToDOM");
|
|
12
|
+
var _usePickerAdapter = require("../../../hooks/usePickerAdapter");
|
|
13
|
+
var _useField = require("./useField.utils");
|
|
13
14
|
/**
|
|
14
15
|
* Generate the props to pass to the root element of the field.
|
|
15
|
-
* It is not used by the non-accessible DOM structure (with an <input /> element for editing).
|
|
16
|
-
* It should be used in the MUI accessible DOM structure and the Base UI implementation.
|
|
17
16
|
* @param {UseFieldRootPropsParameters} parameters The parameters of the hook.
|
|
18
17
|
* @returns {UseFieldRootPropsReturnValue} The props to forward to the root element of the field.
|
|
19
18
|
*/
|
|
20
19
|
function useFieldRootProps(parameters) {
|
|
21
20
|
const {
|
|
22
|
-
manager
|
|
21
|
+
manager: {
|
|
22
|
+
internal_fieldValueManager: fieldValueManager
|
|
23
|
+
},
|
|
23
24
|
focused,
|
|
24
25
|
setFocused,
|
|
25
26
|
domGetters,
|
|
@@ -29,25 +30,118 @@ function useFieldRootProps(parameters) {
|
|
|
29
30
|
stateResponse: {
|
|
30
31
|
// States and derived states
|
|
31
32
|
parsedSelectedSections,
|
|
33
|
+
sectionsValueBoundaries,
|
|
32
34
|
sectionOrder,
|
|
33
35
|
state,
|
|
36
|
+
value,
|
|
37
|
+
activeSectionIndex,
|
|
38
|
+
localizedDigits,
|
|
39
|
+
timezone,
|
|
34
40
|
// Methods to update the states
|
|
35
41
|
clearValue,
|
|
42
|
+
clearActiveSection,
|
|
36
43
|
setCharacterQuery,
|
|
37
44
|
setSelectedSections,
|
|
38
|
-
updateValueFromValueStr
|
|
45
|
+
updateValueFromValueStr,
|
|
46
|
+
updateSectionValue
|
|
39
47
|
},
|
|
40
48
|
internalPropsWithDefaults: {
|
|
41
49
|
disabled = false,
|
|
42
|
-
readOnly = false
|
|
50
|
+
readOnly = false,
|
|
51
|
+
minutesStep
|
|
43
52
|
}
|
|
44
53
|
} = parameters;
|
|
54
|
+
const adapter = (0, _usePickerAdapter.usePickerAdapter)();
|
|
55
|
+
const handleKeyDown = (0, _useEventCallback.default)(event => {
|
|
56
|
+
if (disabled) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
45
59
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
60
|
+
// eslint-disable-next-line default-case
|
|
61
|
+
switch (true) {
|
|
62
|
+
// Select all
|
|
63
|
+
case (event.ctrlKey || event.metaKey) && String.fromCharCode(event.keyCode) === 'A' && !event.shiftKey && !event.altKey:
|
|
64
|
+
{
|
|
65
|
+
// prevent default to make sure that the next line "select all" while updating
|
|
66
|
+
// the internal state at the same time.
|
|
67
|
+
event.preventDefault();
|
|
68
|
+
setSelectedSections('all');
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Move selection to next section
|
|
73
|
+
case event.key === 'ArrowRight':
|
|
74
|
+
{
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
if (parsedSelectedSections == null) {
|
|
77
|
+
setSelectedSections(sectionOrder.startIndex);
|
|
78
|
+
} else if (parsedSelectedSections === 'all') {
|
|
79
|
+
setSelectedSections(sectionOrder.endIndex);
|
|
80
|
+
} else {
|
|
81
|
+
const nextSectionIndex = sectionOrder.neighbors[parsedSelectedSections].rightIndex;
|
|
82
|
+
if (nextSectionIndex !== null) {
|
|
83
|
+
setSelectedSections(nextSectionIndex);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Move selection to previous section
|
|
90
|
+
case event.key === 'ArrowLeft':
|
|
91
|
+
{
|
|
92
|
+
event.preventDefault();
|
|
93
|
+
if (parsedSelectedSections == null) {
|
|
94
|
+
setSelectedSections(sectionOrder.endIndex);
|
|
95
|
+
} else if (parsedSelectedSections === 'all') {
|
|
96
|
+
setSelectedSections(sectionOrder.startIndex);
|
|
97
|
+
} else {
|
|
98
|
+
const nextSectionIndex = sectionOrder.neighbors[parsedSelectedSections].leftIndex;
|
|
99
|
+
if (nextSectionIndex !== null) {
|
|
100
|
+
setSelectedSections(nextSectionIndex);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Reset the value of the selected section
|
|
107
|
+
case event.key === 'Delete':
|
|
108
|
+
{
|
|
109
|
+
event.preventDefault();
|
|
110
|
+
if (readOnly) {
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
if (parsedSelectedSections == null || parsedSelectedSections === 'all') {
|
|
114
|
+
clearValue();
|
|
115
|
+
} else {
|
|
116
|
+
clearActiveSection();
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Increment / decrement the selected section value
|
|
122
|
+
case ['ArrowUp', 'ArrowDown', 'Home', 'End', 'PageUp', 'PageDown'].includes(event.key):
|
|
123
|
+
{
|
|
124
|
+
event.preventDefault();
|
|
125
|
+
if (readOnly || activeSectionIndex == null) {
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// if all sections are selected, mark the currently editing one as selected
|
|
130
|
+
if (parsedSelectedSections === 'all') {
|
|
131
|
+
setSelectedSections(activeSectionIndex);
|
|
132
|
+
}
|
|
133
|
+
const activeSection = state.sections[activeSectionIndex];
|
|
134
|
+
const newSectionValue = adjustSectionValue(adapter, timezone, activeSection, event.key, sectionsValueBoundaries, localizedDigits, fieldValueManager.getDateFromSection(value, activeSection), {
|
|
135
|
+
minutesStep
|
|
136
|
+
});
|
|
137
|
+
updateSectionValue({
|
|
138
|
+
section: activeSection,
|
|
139
|
+
newSectionValue,
|
|
140
|
+
shouldGoToNextSection: false
|
|
141
|
+
});
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
51
145
|
});
|
|
52
146
|
const containerClickTimeout = (0, _useTimeout.default)();
|
|
53
147
|
const handleClick = (0, _useEventCallback.default)(event => {
|
|
@@ -154,4 +248,82 @@ function useFieldRootProps(parameters) {
|
|
|
154
248
|
contentEditable: parsedSelectedSections === 'all',
|
|
155
249
|
tabIndex: internalPropsWithDefaults.disabled || parsedSelectedSections === 0 ? -1 : 0 // TODO: Try to set to undefined when there is a section selected.
|
|
156
250
|
};
|
|
251
|
+
}
|
|
252
|
+
function getDeltaFromKeyCode(keyCode) {
|
|
253
|
+
switch (keyCode) {
|
|
254
|
+
case 'ArrowUp':
|
|
255
|
+
return 1;
|
|
256
|
+
case 'ArrowDown':
|
|
257
|
+
return -1;
|
|
258
|
+
case 'PageUp':
|
|
259
|
+
return 5;
|
|
260
|
+
case 'PageDown':
|
|
261
|
+
return -5;
|
|
262
|
+
default:
|
|
263
|
+
return 0;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
function adjustSectionValue(adapter, timezone, section, keyCode, sectionsValueBoundaries, localizedDigits, activeDate, stepsAttributes) {
|
|
267
|
+
const delta = getDeltaFromKeyCode(keyCode);
|
|
268
|
+
const isStart = keyCode === 'Home';
|
|
269
|
+
const isEnd = keyCode === 'End';
|
|
270
|
+
const shouldSetAbsolute = section.value === '' || isStart || isEnd;
|
|
271
|
+
const adjustDigitSection = () => {
|
|
272
|
+
const sectionBoundaries = sectionsValueBoundaries[section.type]({
|
|
273
|
+
currentDate: activeDate,
|
|
274
|
+
format: section.format,
|
|
275
|
+
contentType: section.contentType
|
|
276
|
+
});
|
|
277
|
+
const getCleanValue = value => (0, _useField.cleanDigitSectionValue)(adapter, value, sectionBoundaries, localizedDigits, section);
|
|
278
|
+
const step = section.type === 'minutes' && stepsAttributes?.minutesStep ? stepsAttributes.minutesStep : 1;
|
|
279
|
+
let newSectionValueNumber;
|
|
280
|
+
if (shouldSetAbsolute) {
|
|
281
|
+
if (section.type === 'year' && !isEnd && !isStart) {
|
|
282
|
+
return adapter.formatByString(adapter.date(undefined, timezone), section.format);
|
|
283
|
+
}
|
|
284
|
+
if (delta > 0 || isStart) {
|
|
285
|
+
newSectionValueNumber = sectionBoundaries.minimum;
|
|
286
|
+
} else {
|
|
287
|
+
newSectionValueNumber = sectionBoundaries.maximum;
|
|
288
|
+
}
|
|
289
|
+
} else {
|
|
290
|
+
const currentSectionValue = parseInt((0, _useField.removeLocalizedDigits)(section.value, localizedDigits), 10);
|
|
291
|
+
newSectionValueNumber = currentSectionValue + delta * step;
|
|
292
|
+
}
|
|
293
|
+
if (newSectionValueNumber % step !== 0) {
|
|
294
|
+
if (delta < 0 || isStart) {
|
|
295
|
+
newSectionValueNumber += step - (step + newSectionValueNumber) % step; // for JS -3 % 5 = -3 (should be 2)
|
|
296
|
+
}
|
|
297
|
+
if (delta > 0 || isEnd) {
|
|
298
|
+
newSectionValueNumber -= newSectionValueNumber % step;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if (newSectionValueNumber > sectionBoundaries.maximum) {
|
|
302
|
+
return getCleanValue(sectionBoundaries.minimum + (newSectionValueNumber - sectionBoundaries.maximum - 1) % (sectionBoundaries.maximum - sectionBoundaries.minimum + 1));
|
|
303
|
+
}
|
|
304
|
+
if (newSectionValueNumber < sectionBoundaries.minimum) {
|
|
305
|
+
return getCleanValue(sectionBoundaries.maximum - (sectionBoundaries.minimum - newSectionValueNumber - 1) % (sectionBoundaries.maximum - sectionBoundaries.minimum + 1));
|
|
306
|
+
}
|
|
307
|
+
return getCleanValue(newSectionValueNumber);
|
|
308
|
+
};
|
|
309
|
+
const adjustLetterSection = () => {
|
|
310
|
+
const options = (0, _useField.getLetterEditingOptions)(adapter, timezone, section.type, section.format);
|
|
311
|
+
if (options.length === 0) {
|
|
312
|
+
return section.value;
|
|
313
|
+
}
|
|
314
|
+
if (shouldSetAbsolute) {
|
|
315
|
+
if (delta > 0 || isStart) {
|
|
316
|
+
return options[0];
|
|
317
|
+
}
|
|
318
|
+
return options[options.length - 1];
|
|
319
|
+
}
|
|
320
|
+
const currentOptionIndex = options.indexOf(section.value);
|
|
321
|
+
const newOptionIndex = (currentOptionIndex + delta) % options.length;
|
|
322
|
+
const clampedIndex = (newOptionIndex + options.length) % options.length;
|
|
323
|
+
return options[clampedIndex];
|
|
324
|
+
};
|
|
325
|
+
if (section.contentType === 'digit' || section.contentType === 'digit-with-letter') {
|
|
326
|
+
return adjustDigitSection();
|
|
327
|
+
}
|
|
328
|
+
return adjustLetterSection();
|
|
157
329
|
}
|