@gravity-ui/date-components 3.4.2 → 4.1.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/README.md +31 -0
- package/dist/cjs/components/Calendar/Calendar.d.ts +6 -2
- package/dist/cjs/components/Calendar/Calendar.js +1 -1
- package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
- package/dist/cjs/components/CalendarView/Calendar.css +3 -0
- package/dist/cjs/components/CalendarView/Calendar.css.map +1 -1
- package/dist/cjs/components/CalendarView/CalendarView.d.ts +2 -1
- package/dist/cjs/components/CalendarView/CalendarView.js +8 -8
- package/dist/cjs/components/CalendarView/CalendarView.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/types.d.ts +5 -3
- package/dist/cjs/components/CalendarView/hooks/types.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js +1 -2
- package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js +10 -3
- package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js +7 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/useCalendarState.d.ts +5 -3
- package/dist/cjs/components/CalendarView/hooks/useCalendarState.js +74 -30
- package/dist/cjs/components/CalendarView/hooks/useCalendarState.js.map +1 -1
- package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.js +16 -9
- package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.js.map +1 -1
- package/dist/cjs/components/DateField/DateField.d.ts +1 -1
- package/dist/cjs/components/DateField/DateField.js +5 -17
- package/dist/cjs/components/DateField/DateField.js.map +1 -1
- package/dist/cjs/components/DateField/IncompleteDate.d.ts +28 -0
- package/dist/cjs/components/DateField/IncompleteDate.js +116 -0
- package/dist/cjs/components/DateField/IncompleteDate.js.map +1 -0
- package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.d.ts +34 -68
- package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js +18 -249
- package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
- package/dist/cjs/components/DateField/hooks/useDateFieldProps.d.ts +2 -0
- package/dist/cjs/components/DateField/hooks/useDateFieldProps.js +250 -54
- package/dist/cjs/components/DateField/hooks/useDateFieldProps.js.map +1 -1
- package/dist/cjs/components/DateField/hooks/useDateFieldState.d.ts +20 -2
- package/dist/cjs/components/DateField/hooks/useDateFieldState.js +84 -118
- package/dist/cjs/components/DateField/hooks/useDateFieldState.js.map +1 -1
- package/dist/cjs/components/DateField/hooks/useFocusManager.d.ts +29 -0
- package/dist/cjs/components/DateField/hooks/useFocusManager.js +116 -0
- package/dist/cjs/components/DateField/hooks/useFocusManager.js.map +1 -0
- package/dist/cjs/components/{RangeDateField → DateField}/hooks/useRangeDateFieldState.d.ts +1 -1
- package/dist/cjs/components/DateField/hooks/useRangeDateFieldState.js +236 -0
- package/dist/cjs/components/DateField/hooks/useRangeDateFieldState.js.map +1 -0
- package/dist/cjs/components/DateField/i18n/ru.json +1 -1
- package/dist/cjs/components/DateField/index.d.ts +2 -1
- package/dist/cjs/components/DateField/index.js +1 -1
- package/dist/cjs/components/DateField/index.js.map +1 -1
- package/dist/cjs/components/DateField/types.d.ts +2 -22
- package/dist/cjs/components/DateField/types.js.map +1 -1
- package/dist/cjs/components/DateField/utils.d.ts +21 -34
- package/dist/cjs/components/DateField/utils.js +180 -132
- package/dist/cjs/components/DateField/utils.js.map +1 -1
- package/dist/cjs/components/DatePicker/DatePicker.d.ts +3 -3
- package/dist/cjs/components/DatePicker/DatePicker.js +3 -4
- package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/cjs/components/DatePicker/MobileCalendar.d.ts +1 -1
- package/dist/cjs/components/DatePicker/MobileCalendar.js +3 -5
- package/dist/cjs/components/DatePicker/MobileCalendar.js.map +1 -1
- package/dist/cjs/components/DatePicker/StubButton.d.ts +1 -1
- package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.d.ts +1 -1
- package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js +15 -6
- package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
- package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.d.ts +2 -2
- package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +30 -17
- package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
- package/dist/cjs/components/HiddenInput/HiddenInput.d.ts +2 -5
- package/dist/cjs/components/HiddenInput/HiddenInput.js +2 -4
- package/dist/cjs/components/HiddenInput/HiddenInput.js.map +1 -1
- package/dist/cjs/components/RangeCalendar/RangeCalendar.d.ts +2 -2
- package/dist/cjs/components/RangeCalendar/RangeCalendar.js +2 -3
- package/dist/cjs/components/RangeCalendar/RangeCalendar.js.map +1 -1
- package/dist/cjs/components/RangeDateField/RangeDateField.d.ts +1 -1
- package/dist/cjs/components/RangeDateField/RangeDateField.js +6 -19
- package/dist/cjs/components/RangeDateField/RangeDateField.js.map +1 -1
- package/dist/cjs/components/RangeDateField/index.d.ts +0 -1
- package/dist/cjs/components/RangeDateField/index.js +0 -1
- package/dist/cjs/components/RangeDateField/index.js.map +1 -1
- package/dist/cjs/components/RangeDatePicker/RangeDatePicker.d.ts +2 -1
- package/dist/cjs/components/RangeDatePicker/RangeDatePicker.js +4 -5
- package/dist/cjs/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
- package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +1 -1
- package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.js +3 -4
- package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/RangeDateSelection.d.ts +1 -1
- package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js +4 -5
- package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/components/NowLine/NowLine.d.ts +2 -1
- package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.d.ts +1 -1
- package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.js +1 -1
- package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/components/RulerViewport/RulerViewport.js +2 -2
- package/dist/cjs/components/RangeDateSelection/components/RulerViewport/RulerViewport.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.d.ts +2 -1
- package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +12 -21
- package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/components/Ticks/MiddleTicks.d.ts +1 -1
- package/dist/cjs/components/RangeDateSelection/components/Ticks/SlitTicks.d.ts +1 -1
- package/dist/cjs/components/RangeDateSelection/components/Ticks/Ticks.d.ts +2 -2
- package/dist/cjs/components/RangeDateSelection/components/Ticks/Ticks.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.d.ts +3 -4
- package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.js +0 -3
- package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/hooks/useRangeDateSelectionState.js +9 -10
- package/dist/cjs/components/RangeDateSelection/hooks/useRangeDateSelectionState.js.map +1 -1
- package/dist/cjs/components/RangeDateSelection/utils/span.d.ts +2 -1
- package/dist/cjs/components/RangeDateSelection/utils/span.js.map +1 -1
- package/dist/cjs/components/RelativeDateField/RelativeDateField.d.ts +1 -1
- package/dist/cjs/components/RelativeDateField/RelativeDateField.js +3 -40
- package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.d.ts +7 -2
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +71 -9
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js.map +1 -1
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +2 -0
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js +48 -34
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js.map +1 -1
- package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.d.ts +1 -1
- package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +7 -4
- package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.d.ts +1 -1
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +52 -21
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +9 -10
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +2 -1
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
- package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -16
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +5 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +34 -7
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +9 -12
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +27 -16
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
- package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/types.d.ts +3 -1
- package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
- package/dist/cjs/components/RelativeRangeDatePicker/utils.d.ts +2 -2
- package/dist/cjs/components/RelativeRangeDatePicker/utils.js +32 -9
- package/dist/cjs/components/RelativeRangeDatePicker/utils.js.map +1 -1
- package/dist/cjs/components/utils/constants.d.ts +2 -0
- package/dist/cjs/components/utils/constants.js +7 -1
- package/dist/cjs/components/utils/constants.js.map +1 -1
- package/dist/cjs/components/utils/dates.d.ts +6 -1
- package/dist/cjs/components/utils/dates.js +6 -1
- package/dist/cjs/components/utils/dates.js.map +1 -1
- package/dist/cjs/components/utils/filterDOMProps.js +1 -1
- package/dist/cjs/components/utils/filterDOMProps.js.map +1 -1
- package/dist/cjs/components/utils/mergeProps.js +1 -1
- package/dist/cjs/components/utils/mergeProps.js.map +1 -1
- package/dist/cjs/components/utils/validation/datePicker.js +1 -1
- package/dist/cjs/components/utils/validation/datePicker.js.map +1 -1
- package/dist/cjs/components/utils/validation/i18n/ru.json +2 -2
- package/dist/cjs/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
- package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js +6 -1
- package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
- package/dist/cjs/hooks/useEventHandler.js +1 -2
- package/dist/cjs/hooks/useEventHandler.js.map +1 -1
- package/dist/cjs/hooks/useMove.d.ts +2 -2
- package/dist/cjs/hooks/useMove.js +6 -9
- package/dist/cjs/hooks/useMove.js.map +1 -1
- package/dist/cjs/hooks/useResizeObserver.js +1 -1
- package/dist/cjs/hooks/useResizeObserver.js.map +1 -1
- package/dist/cjs/package.json +1 -1
- package/dist/docs/INDEX.md +131 -0
- package/dist/docs/components/Calendar.md +125 -0
- package/dist/docs/components/DateField.md +206 -0
- package/dist/docs/components/DatePicker.md +194 -0
- package/dist/docs/components/RangeCalendar.md +125 -0
- package/dist/docs/components/RelativeDateField.md +73 -0
- package/dist/docs/components/RelativeDatePicker.md +59 -0
- package/dist/esm/components/Calendar/Calendar.d.ts +6 -2
- package/dist/esm/components/Calendar/Calendar.js +1 -1
- package/dist/esm/components/Calendar/Calendar.js.map +1 -1
- package/dist/esm/components/CalendarView/Calendar.css +3 -0
- package/dist/esm/components/CalendarView/Calendar.css.map +1 -1
- package/dist/esm/components/CalendarView/CalendarView.d.ts +2 -1
- package/dist/esm/components/CalendarView/CalendarView.js +8 -8
- package/dist/esm/components/CalendarView/CalendarView.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/types.d.ts +5 -3
- package/dist/esm/components/CalendarView/hooks/types.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js +1 -2
- package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js +10 -3
- package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/useCalendarProps.js +7 -1
- package/dist/esm/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/useCalendarState.d.ts +5 -3
- package/dist/esm/components/CalendarView/hooks/useCalendarState.js +74 -30
- package/dist/esm/components/CalendarView/hooks/useCalendarState.js.map +1 -1
- package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js +16 -10
- package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js.map +1 -1
- package/dist/esm/components/DateField/DateField.d.ts +1 -1
- package/dist/esm/components/DateField/DateField.js +6 -18
- package/dist/esm/components/DateField/DateField.js.map +1 -1
- package/dist/esm/components/DateField/IncompleteDate.d.ts +28 -0
- package/dist/esm/components/DateField/IncompleteDate.js +112 -0
- package/dist/esm/components/DateField/IncompleteDate.js.map +1 -0
- package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +34 -68
- package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +17 -248
- package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
- package/dist/esm/components/DateField/hooks/useDateFieldProps.d.ts +2 -0
- package/dist/esm/components/DateField/hooks/useDateFieldProps.js +250 -54
- package/dist/esm/components/DateField/hooks/useDateFieldProps.js.map +1 -1
- package/dist/esm/components/DateField/hooks/useDateFieldState.d.ts +20 -2
- package/dist/esm/components/DateField/hooks/useDateFieldState.js +85 -119
- package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
- package/dist/esm/components/DateField/hooks/useFocusManager.d.ts +29 -0
- package/dist/esm/components/DateField/hooks/useFocusManager.js +112 -0
- package/dist/esm/components/DateField/hooks/useFocusManager.js.map +1 -0
- package/dist/esm/components/{RangeDateField → DateField}/hooks/useRangeDateFieldState.d.ts +1 -1
- package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js +232 -0
- package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js.map +1 -0
- package/dist/esm/components/DateField/i18n/ru.json +1 -1
- package/dist/esm/components/DateField/index.d.ts +2 -1
- package/dist/esm/components/DateField/index.js +1 -1
- package/dist/esm/components/DateField/index.js.map +1 -1
- package/dist/esm/components/DateField/types.d.ts +2 -22
- package/dist/esm/components/DateField/types.js.map +1 -1
- package/dist/esm/components/DateField/utils.d.ts +21 -34
- package/dist/esm/components/DateField/utils.js +179 -125
- package/dist/esm/components/DateField/utils.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.d.ts +3 -3
- package/dist/esm/components/DatePicker/DatePicker.js +3 -5
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/MobileCalendar.d.ts +1 -1
- package/dist/esm/components/DatePicker/MobileCalendar.js +3 -5
- package/dist/esm/components/DatePicker/MobileCalendar.js.map +1 -1
- package/dist/esm/components/DatePicker/StubButton.d.ts +1 -1
- package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.d.ts +1 -1
- package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js +15 -6
- package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
- package/dist/esm/components/DatePicker/hooks/useDatePickerProps.d.ts +2 -2
- package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +30 -18
- package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
- package/dist/esm/components/HiddenInput/HiddenInput.d.ts +2 -5
- package/dist/esm/components/HiddenInput/HiddenInput.js +3 -4
- package/dist/esm/components/HiddenInput/HiddenInput.js.map +1 -1
- package/dist/esm/components/RangeCalendar/RangeCalendar.d.ts +2 -2
- package/dist/esm/components/RangeCalendar/RangeCalendar.js +2 -3
- package/dist/esm/components/RangeCalendar/RangeCalendar.js.map +1 -1
- package/dist/esm/components/RangeDateField/RangeDateField.d.ts +1 -1
- package/dist/esm/components/RangeDateField/RangeDateField.js +7 -20
- package/dist/esm/components/RangeDateField/RangeDateField.js.map +1 -1
- package/dist/esm/components/RangeDateField/index.d.ts +0 -1
- package/dist/esm/components/RangeDateField/index.js +0 -1
- package/dist/esm/components/RangeDateField/index.js.map +1 -1
- package/dist/esm/components/RangeDatePicker/RangeDatePicker.d.ts +2 -1
- package/dist/esm/components/RangeDatePicker/RangeDatePicker.js +4 -6
- package/dist/esm/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
- package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +1 -1
- package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js +2 -3
- package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/RangeDateSelection.d.ts +1 -1
- package/dist/esm/components/RangeDateSelection/RangeDateSelection.js +4 -5
- package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/components/NowLine/NowLine.d.ts +2 -1
- package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.d.ts +1 -1
- package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js +1 -1
- package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js +2 -2
- package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.d.ts +2 -1
- package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +12 -22
- package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/components/Ticks/MiddleTicks.d.ts +1 -1
- package/dist/esm/components/RangeDateSelection/components/Ticks/SlitTicks.d.ts +1 -1
- package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.d.ts +2 -2
- package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.d.ts +3 -4
- package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js +1 -2
- package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js +9 -10
- package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js.map +1 -1
- package/dist/esm/components/RangeDateSelection/utils/span.d.ts +2 -1
- package/dist/esm/components/RangeDateSelection/utils/span.js.map +1 -1
- package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +1 -1
- package/dist/esm/components/RelativeDateField/RelativeDateField.js +4 -40
- package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.d.ts +7 -2
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +71 -9
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js.map +1 -1
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +2 -0
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js +48 -34
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js.map +1 -1
- package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +1 -1
- package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +7 -4
- package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.d.ts +1 -1
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +52 -22
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +9 -10
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +2 -1
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
- package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -17
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +5 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +33 -7
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +8 -10
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +26 -15
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
- package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/types.d.ts +3 -1
- package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
- package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +2 -2
- package/dist/esm/components/RelativeRangeDatePicker/utils.js +33 -9
- package/dist/esm/components/RelativeRangeDatePicker/utils.js.map +1 -1
- package/dist/esm/components/utils/constants.d.ts +2 -0
- package/dist/esm/components/utils/constants.js +6 -0
- package/dist/esm/components/utils/constants.js.map +1 -1
- package/dist/esm/components/utils/dates.d.ts +6 -1
- package/dist/esm/components/utils/dates.js +5 -1
- package/dist/esm/components/utils/dates.js.map +1 -1
- package/dist/esm/components/utils/filterDOMProps.js +1 -1
- package/dist/esm/components/utils/filterDOMProps.js.map +1 -1
- package/dist/esm/components/utils/mergeProps.js +1 -1
- package/dist/esm/components/utils/mergeProps.js.map +1 -1
- package/dist/esm/components/utils/validation/datePicker.js +1 -1
- package/dist/esm/components/utils/validation/datePicker.js.map +1 -1
- package/dist/esm/components/utils/validation/i18n/ru.json +2 -2
- package/dist/esm/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
- package/dist/esm/components/utils/validation/relativeRangeDatePicker.js +6 -1
- package/dist/esm/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
- package/dist/esm/hooks/useEventHandler.js +1 -2
- package/dist/esm/hooks/useEventHandler.js.map +1 -1
- package/dist/esm/hooks/useMove.d.ts +2 -2
- package/dist/esm/hooks/useMove.js +6 -9
- package/dist/esm/hooks/useMove.js.map +1 -1
- package/dist/esm/hooks/useResizeObserver.js +1 -1
- package/dist/esm/hooks/useResizeObserver.js.map +1 -1
- package/dist/esm/package.json +1 -1
- package/package.json +34 -27
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -224
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
- package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
- package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -9
- package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
- package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
- package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js +0 -42
- package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
- package/dist/cjs/components/RangeDateField/utils/index.d.ts +0 -3
- package/dist/cjs/components/RangeDateField/utils/index.js +0 -7
- package/dist/cjs/components/RangeDateField/utils/index.js.map +0 -1
- package/dist/cjs/components/RangeDateField/utils/isValidRange.d.ts +0 -3
- package/dist/cjs/components/RangeDateField/utils/isValidRange.js +0 -7
- package/dist/cjs/components/RangeDateField/utils/isValidRange.js.map +0 -1
- package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -220
- package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
- package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
- package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -6
- package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
- package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
- package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js +0 -39
- package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
- package/dist/esm/components/RangeDateField/utils/index.d.ts +0 -3
- package/dist/esm/components/RangeDateField/utils/index.js +0 -4
- package/dist/esm/components/RangeDateField/utils/index.js.map +0 -1
- package/dist/esm/components/RangeDateField/utils/isValidRange.d.ts +0 -3
- package/dist/esm/components/RangeDateField/utils/isValidRange.js +0 -4
- package/dist/esm/components/RangeDateField/utils/isValidRange.js.map +0 -1
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { useFocusWithin } from '@gravity-ui/uikit';
|
|
3
|
+
import { CtrlCmd } from "../../utils/constants.js";
|
|
4
|
+
import { filterDOMProps } from "../../utils/filterDOMProps.js";
|
|
2
5
|
import { cleanString } from "../utils.js";
|
|
6
|
+
import { useFocusManager } from "./useFocusManager.js";
|
|
3
7
|
export function useDateFieldProps(state, props) {
|
|
4
8
|
const inputRef = React.useRef(null);
|
|
5
9
|
const [, setInnerState] = React.useState({});
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
+
const enteredKeys = React.useRef('');
|
|
11
|
+
const focusManager = useFocusManager({ sections: state.sections });
|
|
12
|
+
const { text, positions } = React.useMemo(() => prepareState(state.sections), [state.sections]);
|
|
10
13
|
React.useLayoutEffect(() => {
|
|
11
14
|
const inputElement = inputRef.current;
|
|
12
15
|
if (!inputElement) {
|
|
13
16
|
return;
|
|
14
17
|
}
|
|
15
|
-
if (
|
|
18
|
+
if (focusManager.selectedSectionIndexes === null) {
|
|
16
19
|
if (inputElement.scrollLeft) {
|
|
17
20
|
// Ensure that input content is not marked as selected.
|
|
18
21
|
// setting selection range to 0 causes issues in Safari.
|
|
@@ -21,8 +24,8 @@ export function useDateFieldProps(state, props) {
|
|
|
21
24
|
}
|
|
22
25
|
return;
|
|
23
26
|
}
|
|
24
|
-
const firstSelectedSection =
|
|
25
|
-
const lastSelectedSection =
|
|
27
|
+
const firstSelectedSection = positions[focusManager.selectedSectionIndexes.startIndex];
|
|
28
|
+
const lastSelectedSection = positions[focusManager.selectedSectionIndexes.endIndex];
|
|
26
29
|
if (firstSelectedSection && lastSelectedSection) {
|
|
27
30
|
const selectionStart = firstSelectedSection.start;
|
|
28
31
|
const selectionEnd = lastSelectedSection.end;
|
|
@@ -33,23 +36,189 @@ export function useDateFieldProps(state, props) {
|
|
|
33
36
|
}
|
|
34
37
|
});
|
|
35
38
|
function syncSelectionFromDOM() {
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
enteredKeys.current = '';
|
|
40
|
+
const position = inputRef.current?.selectionStart ?? 0;
|
|
41
|
+
const index = positions.findIndex((s) => s.end >= position);
|
|
42
|
+
focusManager.focusSection(index === -1 ? 0 : index);
|
|
38
43
|
setInnerState({});
|
|
39
44
|
}
|
|
40
45
|
const inputMode = React.useMemo(() => {
|
|
41
|
-
if (!
|
|
46
|
+
if (!focusManager.selectedSectionIndexes) {
|
|
42
47
|
return 'text';
|
|
43
48
|
}
|
|
44
|
-
const activeSection = state.sections[
|
|
49
|
+
const activeSection = state.sections[focusManager.selectedSectionIndexes.startIndex];
|
|
45
50
|
if (!activeSection || activeSection.contentType === 'letter') {
|
|
46
51
|
return 'text';
|
|
47
52
|
}
|
|
48
53
|
return 'tel';
|
|
49
|
-
}, [
|
|
54
|
+
}, [focusManager.selectedSectionIndexes, state.sections]);
|
|
55
|
+
function onInput(key) {
|
|
56
|
+
if (state.readOnly || state.disabled) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const sectionIndex = focusManager.activeSectionIndex;
|
|
60
|
+
if (sectionIndex === -1) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const section = state.sections[sectionIndex];
|
|
64
|
+
const isLastSection = focusManager.isLastSection(sectionIndex);
|
|
65
|
+
let newValue = enteredKeys.current + key;
|
|
66
|
+
const onInputNumber = (numberValue) => {
|
|
67
|
+
let sectionValue = numberValue;
|
|
68
|
+
const sectionMaxValue = section.maxValue ?? 0;
|
|
69
|
+
const allowsZero = section.minValue === 0;
|
|
70
|
+
let shouldResetUserInput;
|
|
71
|
+
if (
|
|
72
|
+
// 12-hour clock format with AM/PM
|
|
73
|
+
section.type === 'hour' &&
|
|
74
|
+
(sectionMaxValue === 11 || section.minValue === 12)) {
|
|
75
|
+
if (sectionValue > 12) {
|
|
76
|
+
sectionValue = Number(key);
|
|
77
|
+
newValue = key;
|
|
78
|
+
}
|
|
79
|
+
if (sectionValue === 0) {
|
|
80
|
+
sectionValue = -Infinity;
|
|
81
|
+
}
|
|
82
|
+
if (sectionValue === 12) {
|
|
83
|
+
sectionValue = 0;
|
|
84
|
+
}
|
|
85
|
+
if (section.minValue === 12) {
|
|
86
|
+
sectionValue += 12;
|
|
87
|
+
}
|
|
88
|
+
shouldResetUserInput = Number(newValue + '0') > 12;
|
|
89
|
+
}
|
|
90
|
+
else if (sectionValue > sectionMaxValue) {
|
|
91
|
+
sectionValue = Number(key);
|
|
92
|
+
newValue = key;
|
|
93
|
+
if (sectionValue > sectionMaxValue) {
|
|
94
|
+
enteredKeys.current = '';
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const shouldSetValue = sectionValue > 0 || (sectionValue === 0 && allowsZero);
|
|
99
|
+
if (shouldSetValue) {
|
|
100
|
+
state.setSection(sectionIndex, sectionValue);
|
|
101
|
+
}
|
|
102
|
+
if (shouldResetUserInput === undefined) {
|
|
103
|
+
shouldResetUserInput = Number(newValue + '0') > sectionMaxValue;
|
|
104
|
+
}
|
|
105
|
+
const isMaxLength = newValue.length >= String(sectionMaxValue).length;
|
|
106
|
+
if (shouldResetUserInput) {
|
|
107
|
+
enteredKeys.current = '';
|
|
108
|
+
if (shouldSetValue) {
|
|
109
|
+
focusManager.focusNextSection();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (isMaxLength && shouldSetValue && !isLastSection) {
|
|
113
|
+
focusManager.focusNextSection();
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
enteredKeys.current = newValue;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const onInputString = (stringValue) => {
|
|
120
|
+
const options = section.options ?? [];
|
|
121
|
+
let sectionValue = stringValue.toLocaleUpperCase();
|
|
122
|
+
let foundOptions = options.filter((v) => v.startsWith(sectionValue));
|
|
123
|
+
if (foundOptions.length === 0) {
|
|
124
|
+
if (stringValue !== key) {
|
|
125
|
+
sectionValue = key.toLocaleUpperCase();
|
|
126
|
+
foundOptions = options.filter((v) => v.startsWith(sectionValue));
|
|
127
|
+
}
|
|
128
|
+
if (foundOptions.length === 0) {
|
|
129
|
+
enteredKeys.current = '';
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const foundValue = foundOptions[0];
|
|
134
|
+
const index = options.indexOf(foundValue);
|
|
135
|
+
if (section.type === 'month') {
|
|
136
|
+
state.setSection(sectionIndex, index + 1);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
state.setSection(sectionIndex, index);
|
|
140
|
+
}
|
|
141
|
+
if (foundOptions.length > 1) {
|
|
142
|
+
enteredKeys.current = newValue;
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
enteredKeys.current = '';
|
|
146
|
+
focusManager.focusNextSection();
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
switch (section.type) {
|
|
150
|
+
case 'day':
|
|
151
|
+
case 'hour':
|
|
152
|
+
case 'minute':
|
|
153
|
+
case 'second':
|
|
154
|
+
case 'quarter':
|
|
155
|
+
case 'year': {
|
|
156
|
+
if (!Number.isInteger(Number(newValue))) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
const numberValue = Number(newValue);
|
|
160
|
+
onInputNumber(numberValue);
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case 'dayPeriod': {
|
|
164
|
+
onInputString(newValue);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case 'weekday':
|
|
168
|
+
case 'month': {
|
|
169
|
+
if (Number.isInteger(Number(newValue))) {
|
|
170
|
+
const numberValue = Number(newValue);
|
|
171
|
+
onInputNumber(numberValue);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
onInputString(newValue);
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function backspace() {
|
|
181
|
+
if (focusManager.selectedSectionIndexes === null) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (focusManager.selectedSectionIndexes.startIndex ===
|
|
185
|
+
focusManager.selectedSectionIndexes.endIndex) {
|
|
186
|
+
const activeSection = state.sections[focusManager.activeSectionIndex];
|
|
187
|
+
if (activeSection.value === null) {
|
|
188
|
+
focusManager.focusPreviousSection();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
else if (activeSection.contentType === 'digit') {
|
|
192
|
+
const newValue = Math.floor(activeSection.value / 10);
|
|
193
|
+
if (newValue !== 0) {
|
|
194
|
+
state.setSection(focusManager.activeSectionIndex, newValue);
|
|
195
|
+
enteredKeys.current = `${newValue}`;
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
state.clearSection(focusManager.activeSectionIndex);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
state.clearAll();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
const { focusWithinProps } = useFocusWithin({
|
|
206
|
+
onBlurWithin: () => {
|
|
207
|
+
state.confirmPlaceholder();
|
|
208
|
+
},
|
|
209
|
+
onFocusWithinChange(isFocusWithin) {
|
|
210
|
+
state.setActive(isFocusWithin);
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
const DOMProps = filterDOMProps(props);
|
|
214
|
+
delete DOMProps.id;
|
|
50
215
|
return {
|
|
216
|
+
groupProps: {
|
|
217
|
+
...DOMProps,
|
|
218
|
+
...focusWithinProps,
|
|
219
|
+
},
|
|
51
220
|
inputProps: {
|
|
52
|
-
value: state.text,
|
|
221
|
+
value: state.isEmpty && !state.isActive && props.placeholder ? '' : text,
|
|
53
222
|
view: props.view,
|
|
54
223
|
size: props.size,
|
|
55
224
|
disabled: state.disabled,
|
|
@@ -73,79 +242,75 @@ export function useDateFieldProps(state, props) {
|
|
|
73
242
|
}
|
|
74
243
|
},
|
|
75
244
|
onFocus(e) {
|
|
76
|
-
|
|
77
|
-
(
|
|
78
|
-
|
|
245
|
+
props.onFocus?.(e);
|
|
246
|
+
if (focusManager.selectedSectionIndexes !== null) {
|
|
247
|
+
setInnerState({});
|
|
79
248
|
return;
|
|
80
249
|
}
|
|
81
250
|
const input = e.target;
|
|
82
|
-
const isAutofocus = !inputRef.current;
|
|
83
251
|
setTimeout(() => {
|
|
84
252
|
if (!input || input !== inputRef.current) {
|
|
85
253
|
return;
|
|
86
254
|
}
|
|
87
|
-
|
|
88
|
-
state.focusSectionInPosition(0);
|
|
89
|
-
}
|
|
90
|
-
else if (
|
|
91
|
-
// avoid selecting all sections when focusing empty field without value
|
|
92
|
-
input.value.length &&
|
|
93
|
-
Number(input.selectionEnd) - Number(input.selectionStart) ===
|
|
94
|
-
input.value.length) {
|
|
95
|
-
setSelectedSections('all');
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
syncSelectionFromDOM();
|
|
99
|
-
}
|
|
255
|
+
syncSelectionFromDOM();
|
|
100
256
|
});
|
|
101
257
|
},
|
|
102
258
|
onBlur(e) {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
259
|
+
enteredKeys.current = '';
|
|
260
|
+
props.onBlur?.(e);
|
|
261
|
+
focusManager.focusSection(-1);
|
|
106
262
|
},
|
|
107
263
|
onKeyDown(e) {
|
|
108
|
-
|
|
109
|
-
(_a = props.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
264
|
+
props.onKeyDown?.(e);
|
|
110
265
|
if (e.key === 'ArrowLeft') {
|
|
111
266
|
e.preventDefault();
|
|
112
|
-
|
|
267
|
+
enteredKeys.current = '';
|
|
268
|
+
focusManager.focusPreviousSection();
|
|
113
269
|
}
|
|
114
270
|
else if (e.key === 'ArrowRight') {
|
|
115
271
|
e.preventDefault();
|
|
116
|
-
|
|
272
|
+
enteredKeys.current = '';
|
|
273
|
+
focusManager.focusNextSection();
|
|
117
274
|
}
|
|
118
275
|
else if (e.key === 'Home') {
|
|
119
276
|
e.preventDefault();
|
|
120
|
-
|
|
277
|
+
enteredKeys.current = '';
|
|
278
|
+
state.decrementToMin(focusManager.activeSectionIndex);
|
|
121
279
|
}
|
|
122
280
|
else if (e.key === 'End') {
|
|
123
281
|
e.preventDefault();
|
|
124
|
-
|
|
282
|
+
enteredKeys.current = '';
|
|
283
|
+
state.incrementToMax(focusManager.activeSectionIndex);
|
|
125
284
|
}
|
|
126
285
|
else if (e.key === 'ArrowUp' && !e.altKey) {
|
|
127
286
|
e.preventDefault();
|
|
128
|
-
|
|
287
|
+
enteredKeys.current = '';
|
|
288
|
+
state.increment(focusManager.activeSectionIndex);
|
|
129
289
|
}
|
|
130
290
|
else if (e.key === 'ArrowDown' && !e.altKey) {
|
|
131
291
|
e.preventDefault();
|
|
132
|
-
|
|
292
|
+
enteredKeys.current = '';
|
|
293
|
+
state.decrement(focusManager.activeSectionIndex);
|
|
133
294
|
}
|
|
134
295
|
else if (e.key === 'PageUp') {
|
|
135
296
|
e.preventDefault();
|
|
136
|
-
|
|
297
|
+
enteredKeys.current = '';
|
|
298
|
+
state.incrementPage(focusManager.activeSectionIndex);
|
|
137
299
|
}
|
|
138
300
|
else if (e.key === 'PageDown') {
|
|
139
301
|
e.preventDefault();
|
|
140
|
-
|
|
302
|
+
enteredKeys.current = '';
|
|
303
|
+
state.decrementPage(focusManager.activeSectionIndex);
|
|
141
304
|
}
|
|
142
305
|
else if (e.key === 'Backspace' || e.key === 'Delete') {
|
|
143
306
|
e.preventDefault();
|
|
144
|
-
|
|
307
|
+
enteredKeys.current = '';
|
|
308
|
+
backspace();
|
|
145
309
|
}
|
|
146
|
-
else if (e.key === 'a' &&
|
|
310
|
+
else if (e.key === 'a' && e[CtrlCmd]) {
|
|
147
311
|
e.preventDefault();
|
|
148
|
-
|
|
312
|
+
enteredKeys.current = '';
|
|
313
|
+
focusManager.focusSection('all');
|
|
149
314
|
}
|
|
150
315
|
},
|
|
151
316
|
onKeyUp: props.onKeyUp,
|
|
@@ -165,9 +330,19 @@ export function useDateFieldProps(state, props) {
|
|
|
165
330
|
},
|
|
166
331
|
onBeforeInput(e) {
|
|
167
332
|
e.preventDefault();
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
333
|
+
switch (e.nativeEvent.inputType) {
|
|
334
|
+
case 'deleteContentBackward':
|
|
335
|
+
case 'deleteContentForward': {
|
|
336
|
+
enteredKeys.current = '';
|
|
337
|
+
backspace();
|
|
338
|
+
break;
|
|
339
|
+
}
|
|
340
|
+
default: {
|
|
341
|
+
const key = e.data;
|
|
342
|
+
if (key !== undefined && key !== null) {
|
|
343
|
+
onInput(key);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
171
346
|
}
|
|
172
347
|
},
|
|
173
348
|
onPaste(e) {
|
|
@@ -175,18 +350,19 @@ export function useDateFieldProps(state, props) {
|
|
|
175
350
|
if (state.readOnly) {
|
|
176
351
|
return;
|
|
177
352
|
}
|
|
353
|
+
enteredKeys.current = '';
|
|
178
354
|
const pastedValue = cleanString(e.clipboardData.getData('text'));
|
|
179
|
-
if (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
const activeSection = state.sections[
|
|
355
|
+
if (focusManager.selectedSectionIndexes &&
|
|
356
|
+
focusManager.selectedSectionIndexes.startIndex ===
|
|
357
|
+
focusManager.selectedSectionIndexes.endIndex) {
|
|
358
|
+
const activeSection = state.sections[focusManager.activeSectionIndex];
|
|
183
359
|
const digitsOnly = /^\d+$/.test(pastedValue);
|
|
184
360
|
const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);
|
|
185
361
|
const isValidValue = Boolean(activeSection &&
|
|
186
362
|
((activeSection.contentType === 'digit' && digitsOnly) ||
|
|
187
363
|
(activeSection.contentType === 'letter' && lettersOnly)));
|
|
188
364
|
if (isValidValue) {
|
|
189
|
-
|
|
365
|
+
onInput(pastedValue);
|
|
190
366
|
return;
|
|
191
367
|
}
|
|
192
368
|
if (digitsOnly || lettersOnly) {
|
|
@@ -199,4 +375,24 @@ export function useDateFieldProps(state, props) {
|
|
|
199
375
|
},
|
|
200
376
|
};
|
|
201
377
|
}
|
|
378
|
+
function prepareState(sections) {
|
|
379
|
+
let position = 1;
|
|
380
|
+
let text = '';
|
|
381
|
+
const positions = new Array(sections.length);
|
|
382
|
+
for (let i = 0; i < sections.length; i++) {
|
|
383
|
+
const section = sections[i];
|
|
384
|
+
if (!section) {
|
|
385
|
+
throw new Error('Section must be defined');
|
|
386
|
+
}
|
|
387
|
+
// use bidirectional context to allow the browser autodetect text direction
|
|
388
|
+
const textValue = '\u2068' + section.textValue + '\u2069';
|
|
389
|
+
text += textValue;
|
|
390
|
+
const pos = { start: position, end: position + textValue.length };
|
|
391
|
+
position += textValue.length;
|
|
392
|
+
positions[i] = pos;
|
|
393
|
+
}
|
|
394
|
+
// use ltr direction context to get predictable navigation inside input
|
|
395
|
+
text = '\u2066' + text + '\u2069';
|
|
396
|
+
return { text, positions };
|
|
397
|
+
}
|
|
202
398
|
//# sourceMappingURL=useDateFieldProps.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDateFieldProps.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useDateFieldProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport type {TextInputProps} from '@gravity-ui/uikit';\n\nimport type {\n AccessibilityProps,\n DateFieldBase,\n TextInputProps as DateFieldTextInputProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n StyleProps,\n TextInputExtendProps,\n} from '../../types';\nimport {cleanString} from '../utils';\n\nimport type {DateFieldState} from './useBaseDateFieldState';\n\nexport interface DateFieldProps<T = DateTime>\n extends\n DateFieldBase<T>,\n DateFieldTextInputProps,\n TextInputExtendProps,\n DomProps,\n InputDOMProps,\n FocusableProps,\n KeyboardEvents,\n StyleProps,\n AccessibilityProps {}\n\nexport function useDateFieldProps<T = DateTime>(\n state: DateFieldState<T>,\n props: DateFieldProps<T>,\n): {inputProps: TextInputProps} {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const [, setInnerState] = React.useState({});\n\n function setSelectedSections(section: 'all' | number) {\n state.setSelectedSections(section);\n setInnerState({});\n }\n\n React.useLayoutEffect(() => {\n const inputElement = inputRef.current;\n if (!inputElement) {\n return;\n }\n\n if (state.selectedSectionIndexes === null) {\n if (inputElement.scrollLeft) {\n // Ensure that input content is not marked as selected.\n // setting selection range to 0 causes issues in Safari.\n // https://bugs.webkit.org/show_bug.cgi?id=224425\n inputElement.scrollLeft = 0;\n }\n return;\n }\n\n const firstSelectedSection = state.sections[state.selectedSectionIndexes.startIndex];\n const lastSelectedSection = state.sections[state.selectedSectionIndexes.endIndex];\n if (firstSelectedSection && lastSelectedSection) {\n const selectionStart = firstSelectedSection.start;\n const selectionEnd = lastSelectedSection.end;\n\n if (\n selectionStart !== inputElement.selectionStart ||\n selectionEnd !== inputElement.selectionEnd\n ) {\n inputElement.setSelectionRange(selectionStart, selectionEnd);\n }\n }\n });\n\n function syncSelectionFromDOM() {\n state.focusSectionInPosition(inputRef.current?.selectionStart ?? 0);\n setInnerState({});\n }\n\n const inputMode = React.useMemo(() => {\n if (!state.selectedSectionIndexes) {\n return 'text';\n }\n\n const activeSection = state.sections[state.selectedSectionIndexes.startIndex];\n if (!activeSection || activeSection.contentType === 'letter') {\n return 'text';\n }\n\n return 'tel';\n }, [state.selectedSectionIndexes, state.sections]);\n\n return {\n inputProps: {\n value: state.text,\n view: props.view,\n size: props.size,\n disabled: state.disabled,\n hasClear: !state.readOnly && !state.isEmpty && props.hasClear,\n placeholder: props.placeholder,\n id: props.id,\n label: props.label,\n startContent: props.startContent,\n endContent: props.endContent,\n pin: props.pin,\n autoFocus: props.autoFocus,\n controlRef: inputRef,\n autoComplete: 'off',\n type: 'text',\n validationState: state.validationState,\n errorMessage: props.errorMessage,\n errorPlacement: props.errorPlacement,\n onUpdate(value) {\n if (!value) {\n state.clearAll();\n }\n },\n onFocus(e) {\n props.onFocus?.(e);\n\n if (state.selectedSectionIndexes !== null) {\n return;\n }\n const input = e.target;\n const isAutofocus = !inputRef.current;\n setTimeout(() => {\n if (!input || input !== inputRef.current) {\n return;\n }\n if (isAutofocus) {\n state.focusSectionInPosition(0);\n } else if (\n // avoid selecting all sections when focusing empty field without value\n input.value.length &&\n Number(input.selectionEnd) - Number(input.selectionStart) ===\n input.value.length\n ) {\n setSelectedSections('all');\n } else {\n syncSelectionFromDOM();\n }\n });\n },\n onBlur(e) {\n props.onBlur?.(e);\n setSelectedSections(-1);\n },\n onKeyDown(e) {\n props.onKeyDown?.(e);\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n state.focusPreviousSection();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n state.focusNextSection();\n } else if (e.key === 'Home') {\n e.preventDefault();\n state.decrementToMin();\n } else if (e.key === 'End') {\n e.preventDefault();\n state.incrementToMax();\n } else if (e.key === 'ArrowUp' && !e.altKey) {\n e.preventDefault();\n state.increment();\n } else if (e.key === 'ArrowDown' && !e.altKey) {\n e.preventDefault();\n state.decrement();\n } else if (e.key === 'PageUp') {\n e.preventDefault();\n state.incrementPage();\n } else if (e.key === 'PageDown') {\n e.preventDefault();\n state.decrementPage();\n } else if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n state.clearSection();\n } else if (e.key === 'a' && (e['ctrlKey'] || e['metaKey'])) {\n e.preventDefault();\n setSelectedSections('all');\n }\n },\n onKeyUp: props.onKeyUp,\n controlProps: {\n 'aria-label': props['aria-label'] || undefined,\n 'aria-labelledby': props['aria-labelledby'] || undefined,\n 'aria-describedby': props['aria-describedby'] || undefined,\n 'aria-details': props['aria-details'] || undefined,\n 'aria-disabled': state.disabled || undefined,\n readOnly: state.readOnly,\n inputMode,\n onClick() {\n syncSelectionFromDOM();\n },\n onMouseUp(e: React.MouseEvent) {\n e.preventDefault();\n },\n onBeforeInput(e) {\n e.preventDefault();\n const key = e.data;\n if (key !== undefined && key !== null) {\n state.onInput(key);\n }\n },\n onPaste(e: React.ClipboardEvent) {\n e.preventDefault();\n if (state.readOnly) {\n return;\n }\n\n const pastedValue = cleanString(e.clipboardData.getData('text'));\n if (\n state.selectedSectionIndexes &&\n state.selectedSectionIndexes.startIndex ===\n state.selectedSectionIndexes.endIndex\n ) {\n const activeSection =\n state.sections[state.selectedSectionIndexes.startIndex];\n\n const digitsOnly = /^\\d+$/.test(pastedValue);\n const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);\n\n const isValidValue = Boolean(\n activeSection &&\n ((activeSection.contentType === 'digit' && digitsOnly) ||\n (activeSection.contentType === 'letter' && lettersOnly)),\n );\n if (isValidValue) {\n state.onInput(pastedValue);\n return;\n }\n if (digitsOnly || lettersOnly) {\n return;\n }\n }\n\n state.setValueFromString(pastedValue);\n },\n },\n },\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useDateFieldProps.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useDateFieldProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAcjD,OAAO,EAAC,OAAO,EAAC,iCAAiC;AACjD,OAAO,EAAC,cAAc,EAAC,sCAAsC;AAE7D,OAAO,EAAC,WAAW,EAAC,oBAAiB;AAGrC,OAAO,EAAC,eAAe,EAAC,6BAA0B;AAclD,MAAM,UAAU,iBAAiB,CAC7B,KAAwB,EACxB,KAAwB;IAExB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEtD,MAAM,CAAC,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE7C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,eAAe,CAAC,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAC,CAAC,CAAC;IAEjE,MAAM,EAAC,IAAI,EAAE,SAAS,EAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9F,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACvB,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,IAAI,YAAY,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;YAC/C,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;gBAC1B,uDAAuD;gBACvD,wDAAwD;gBACxD,iDAAiD;gBACjD,YAAY,CAAC,UAAU,GAAG,CAAC,CAAC;YAChC,CAAC;YACD,OAAO;QACX,CAAC;QAED,MAAM,oBAAoB,GAAG,SAAS,CAAC,YAAY,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACvF,MAAM,mBAAmB,GAAG,SAAS,CAAC,YAAY,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACpF,IAAI,oBAAoB,IAAI,mBAAmB,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC;YAClD,MAAM,YAAY,GAAG,mBAAmB,CAAC,GAAG,CAAC;YAE7C,IACI,cAAc,KAAK,YAAY,CAAC,cAAc;gBAC9C,YAAY,KAAK,YAAY,CAAC,YAAY,EAC5C,CAAC;gBACC,YAAY,CAAC,iBAAiB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YACjE,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,oBAAoB;QACzB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,EAAE,cAAc,IAAI,CAAC,CAAC;QACvD,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,CAAC,CAAC;QAC5D,YAAY,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpD,aAAa,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACjC,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,EAAE,CAAC,YAAY,CAAC,sBAAsB,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1D,SAAS,OAAO,CAAC,GAAW;QACxB,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,MAAM,YAAY,GAAG,YAAY,CAAC,kBAAkB,CAAC;QACrD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,aAAa,GAAG,YAAY,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,QAAQ,GAAG,WAAW,CAAC,OAAO,GAAG,GAAG,CAAC;QAEzC,MAAM,aAAa,GAAG,CAAC,WAAmB,EAAE,EAAE;YAC1C,IAAI,YAAY,GAAG,WAAW,CAAC;YAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;YAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC;YAC1C,IAAI,oBAAoB,CAAC;YACzB;YACI,kCAAkC;YAClC,OAAO,CAAC,IAAI,KAAK,MAAM;gBACvB,CAAC,eAAe,KAAK,EAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,CAAC,EACrD,CAAC;gBACC,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;oBACpB,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC3B,QAAQ,GAAG,GAAG,CAAC;gBACnB,CAAC;gBACD,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;oBACrB,YAAY,GAAG,CAAC,QAAQ,CAAC;gBAC7B,CAAC;gBACD,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;oBACtB,YAAY,GAAG,CAAC,CAAC;gBACrB,CAAC;gBACD,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;oBAC1B,YAAY,IAAI,EAAE,CAAC;gBACvB,CAAC;gBACD,oBAAoB,GAAG,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;YACvD,CAAC;iBAAM,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;gBACxC,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,QAAQ,GAAG,GAAG,CAAC;gBACf,IAAI,YAAY,GAAG,eAAe,EAAE,CAAC;oBACjC,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,OAAO;gBACX,CAAC;YACL,CAAC;YAED,MAAM,cAAc,GAAG,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC;YAC9E,IAAI,cAAc,EAAE,CAAC;gBACjB,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;gBACrC,oBAAoB,GAAG,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,eAAe,CAAC;YACpE,CAAC;YACD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC;YACtE,IAAI,oBAAoB,EAAE,CAAC;gBACvB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;gBACzB,IAAI,cAAc,EAAE,CAAC;oBACjB,YAAY,CAAC,gBAAgB,EAAE,CAAC;gBACpC,CAAC;YACL,CAAC;iBAAM,IAAI,WAAW,IAAI,cAAc,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzD,YAAY,CAAC,gBAAgB,EAAE,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACJ,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;YACnC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,CAAC,WAAmB,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;YACtC,IAAI,YAAY,GAAG,WAAW,CAAC,iBAAiB,EAAE,CAAC;YACnD,IAAI,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;YACrE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;oBACtB,YAAY,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;oBACvC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;gBACrE,CAAC;gBACD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,OAAO;gBACX,CAAC;YACL,CAAC;YACD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE1C,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACJ,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC1C,CAAC;YAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACJ,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;gBACzB,YAAY,CAAC,gBAAgB,EAAE,CAAC;YACpC,CAAC;QACL,CAAC,CAAC;QAEF,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,KAAK,CAAC;YACX,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS,CAAC;YACf,KAAK,MAAM,CAAC,CAAC,CAAC;gBACV,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBACtC,OAAO;gBACX,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACrC,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC3B,MAAM;YACV,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACf,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACxB,MAAM;YACV,CAAC;YACD,KAAK,SAAS,CAAC;YACf,KAAK,OAAO,CAAC,CAAC,CAAC;gBACX,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBACrC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACrC,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACJ,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC5B,CAAC;gBACD,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED,SAAS,SAAS;QACd,IAAI,YAAY,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;YAC/C,OAAO;QACX,CAAC;QACD,IACI,YAAY,CAAC,sBAAsB,CAAC,UAAU;YAC9C,YAAY,CAAC,sBAAsB,CAAC,QAAQ,EAC9C,CAAC;YACC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;YACtE,IAAI,aAAa,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC/B,YAAY,CAAC,oBAAoB,EAAE,CAAC;gBACpC,OAAO;YACX,CAAC;iBAAM,IAAI,aAAa,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;gBACtD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACjB,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;oBAC5D,WAAW,CAAC,OAAO,GAAG,GAAG,QAAQ,EAAE,CAAC;oBACpC,OAAO;gBACX,CAAC;YACL,CAAC;YACD,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC;IACL,CAAC;IAED,MAAM,EAAC,gBAAgB,EAAC,GAAG,cAAc,CAAC;QACtC,YAAY,EAAE,GAAG,EAAE;YACf,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC/B,CAAC;QACD,mBAAmB,CAAC,aAAa;YAC7B,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACnC,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO,QAAQ,CAAC,EAAE,CAAC;IAEnB,OAAO;QACH,UAAU,EAAE;YACR,GAAG,QAAQ;YACX,GAAG,gBAAgB;SACtB;QACD,UAAU,EAAE;YACR,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YACxE,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ;YAC7D,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,QAAQ;YACpB,YAAY,EAAE,KAAK;YACnB,IAAI,EAAE,MAAM;YACZ,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,QAAQ,CAAC,KAAK;gBACV,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACrB,CAAC;YACL,CAAC;YACD,OAAO,CAAC,CAAC;gBACL,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEnB,IAAI,YAAY,CAAC,sBAAsB,KAAK,IAAI,EAAE,CAAC;oBAC/C,aAAa,CAAC,EAAE,CAAC,CAAC;oBAClB,OAAO;gBACX,CAAC;gBACD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC;gBACvB,UAAU,CAAC,GAAG,EAAE;oBACZ,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACvC,OAAO;oBACX,CAAC;oBACD,oBAAoB,EAAE,CAAC;gBAC3B,CAAC,CAAC,CAAC;YACP,CAAC;YACD,MAAM,CAAC,CAAC;gBACJ,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;gBACzB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClB,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,SAAS,CAAC,CAAC;gBACP,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gBAErB,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;oBACxB,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,YAAY,CAAC,oBAAoB,EAAE,CAAC;gBACxC,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;oBAChC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,YAAY,CAAC,gBAAgB,EAAE,CAAC;gBACpC,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;oBAC1B,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;oBACzB,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;oBAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;oBAC5C,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;gBACrD,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;oBAC9B,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACrD,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,SAAS,EAAE,CAAC;gBAChB,CAAC;qBAAM,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrC,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACrC,CAAC;YACL,CAAC;YACD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE;gBACV,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,IAAI,SAAS;gBAC9C,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC,IAAI,SAAS;gBACxD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,CAAC,IAAI,SAAS;gBAC1D,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,SAAS;gBAClD,eAAe,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;gBAC5C,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS;gBACT,OAAO;oBACH,oBAAoB,EAAE,CAAC;gBAC3B,CAAC;gBACD,SAAS,CAAC,CAAmB;oBACzB,CAAC,CAAC,cAAc,EAAE,CAAC;gBACvB,CAAC;gBACD,aAAa,CAAC,CAAC;oBACX,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,QAAQ,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;wBAC9B,KAAK,uBAAuB,CAAC;wBAC7B,KAAK,sBAAsB,CAAC,CAAC,CAAC;4BAC1B,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;4BACzB,SAAS,EAAE,CAAC;4BACZ,MAAM;wBACV,CAAC;wBACD,OAAO,CAAC,CAAC,CAAC;4BACN,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;4BACnB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gCACpC,OAAO,CAAC,GAAG,CAAC,CAAC;4BACjB,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,OAAO,CAAC,CAAuB;oBAC3B,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACjB,OAAO;oBACX,CAAC;oBAED,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzB,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBACjE,IACI,YAAY,CAAC,sBAAsB;wBACnC,YAAY,CAAC,sBAAsB,CAAC,UAAU;4BAC1C,YAAY,CAAC,sBAAsB,CAAC,QAAQ,EAClD,CAAC;wBACC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;wBAEtE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC7C,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAEpD,MAAM,YAAY,GAAG,OAAO,CACxB,aAAa;4BACb,CAAC,CAAC,aAAa,CAAC,WAAW,KAAK,OAAO,IAAI,UAAU,CAAC;gCAClD,CAAC,aAAa,CAAC,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,CAAC,CAC/D,CAAC;wBACF,IAAI,YAAY,EAAE,CAAC;4BACf,OAAO,CAAC,WAAW,CAAC,CAAC;4BACrB,OAAO;wBACX,CAAC;wBACD,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;4BAC5B,OAAO;wBACX,CAAC;oBACL,CAAC;oBAED,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;gBAC1C,CAAC;aACJ;SACJ;KACJ,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,QAA4B;IAC9C,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,MAAM,SAAS,GAAmC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAED,2EAA2E;QAC3E,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1D,IAAI,IAAI,SAAS,CAAC;QAClB,MAAM,GAAG,GAAG,EAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAC,CAAC;QAChE,QAAQ,IAAI,SAAS,CAAC,MAAM,CAAC;QAC7B,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACvB,CAAC;IACD,uEAAuE;IACvE,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC;IAClC,OAAO,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC;AAC7B,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useFocusWithin} from '@gravity-ui/uikit';\nimport type {TextInputProps} from '@gravity-ui/uikit';\n\nimport type {\n AccessibilityProps,\n DateFieldBase,\n TextInputProps as DateFieldTextInputProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n StyleProps,\n TextInputExtendProps,\n} from '../../types';\nimport {CtrlCmd} from '../../utils/constants.js';\nimport {filterDOMProps} from '../../utils/filterDOMProps.js';\nimport type {DateFieldSection} from '../types';\nimport {cleanString} from '../utils';\n\nimport type {DateFieldState} from './useBaseDateFieldState';\nimport {useFocusManager} from './useFocusManager';\n\nexport interface DateFieldProps<T = DateTime>\n extends\n DateFieldBase<T>,\n DateFieldTextInputProps,\n TextInputExtendProps,\n DomProps,\n InputDOMProps,\n FocusableProps,\n KeyboardEvents,\n StyleProps,\n AccessibilityProps {}\n\nexport function useDateFieldProps<T = DateTime>(\n state: DateFieldState<T>,\n props: DateFieldProps<T>,\n): {groupProps: React.HTMLAttributes<unknown>; inputProps: TextInputProps} {\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const [, setInnerState] = React.useState({});\n\n const enteredKeys = React.useRef('');\n\n const focusManager = useFocusManager({sections: state.sections});\n\n const {text, positions} = React.useMemo(() => prepareState(state.sections), [state.sections]);\n\n React.useLayoutEffect(() => {\n const inputElement = inputRef.current;\n if (!inputElement) {\n return;\n }\n\n if (focusManager.selectedSectionIndexes === null) {\n if (inputElement.scrollLeft) {\n // Ensure that input content is not marked as selected.\n // setting selection range to 0 causes issues in Safari.\n // https://bugs.webkit.org/show_bug.cgi?id=224425\n inputElement.scrollLeft = 0;\n }\n return;\n }\n\n const firstSelectedSection = positions[focusManager.selectedSectionIndexes.startIndex];\n const lastSelectedSection = positions[focusManager.selectedSectionIndexes.endIndex];\n if (firstSelectedSection && lastSelectedSection) {\n const selectionStart = firstSelectedSection.start;\n const selectionEnd = lastSelectedSection.end;\n\n if (\n selectionStart !== inputElement.selectionStart ||\n selectionEnd !== inputElement.selectionEnd\n ) {\n inputElement.setSelectionRange(selectionStart, selectionEnd);\n }\n }\n });\n\n function syncSelectionFromDOM() {\n enteredKeys.current = '';\n const position = inputRef.current?.selectionStart ?? 0;\n const index = positions.findIndex((s) => s.end >= position);\n focusManager.focusSection(index === -1 ? 0 : index);\n setInnerState({});\n }\n\n const inputMode = React.useMemo(() => {\n if (!focusManager.selectedSectionIndexes) {\n return 'text';\n }\n\n const activeSection = state.sections[focusManager.selectedSectionIndexes.startIndex];\n if (!activeSection || activeSection.contentType === 'letter') {\n return 'text';\n }\n\n return 'tel';\n }, [focusManager.selectedSectionIndexes, state.sections]);\n\n function onInput(key: string) {\n if (state.readOnly || state.disabled) {\n return;\n }\n\n const sectionIndex = focusManager.activeSectionIndex;\n if (sectionIndex === -1) {\n return;\n }\n\n const section = state.sections[sectionIndex];\n const isLastSection = focusManager.isLastSection(sectionIndex);\n let newValue = enteredKeys.current + key;\n\n const onInputNumber = (numberValue: number) => {\n let sectionValue = numberValue;\n const sectionMaxValue = section.maxValue ?? 0;\n const allowsZero = section.minValue === 0;\n let shouldResetUserInput;\n if (\n // 12-hour clock format with AM/PM\n section.type === 'hour' &&\n (sectionMaxValue === 11 || section.minValue === 12)\n ) {\n if (sectionValue > 12) {\n sectionValue = Number(key);\n newValue = key;\n }\n if (sectionValue === 0) {\n sectionValue = -Infinity;\n }\n if (sectionValue === 12) {\n sectionValue = 0;\n }\n if (section.minValue === 12) {\n sectionValue += 12;\n }\n shouldResetUserInput = Number(newValue + '0') > 12;\n } else if (sectionValue > sectionMaxValue) {\n sectionValue = Number(key);\n newValue = key;\n if (sectionValue > sectionMaxValue) {\n enteredKeys.current = '';\n return;\n }\n }\n\n const shouldSetValue = sectionValue > 0 || (sectionValue === 0 && allowsZero);\n if (shouldSetValue) {\n state.setSection(sectionIndex, sectionValue);\n }\n\n if (shouldResetUserInput === undefined) {\n shouldResetUserInput = Number(newValue + '0') > sectionMaxValue;\n }\n const isMaxLength = newValue.length >= String(sectionMaxValue).length;\n if (shouldResetUserInput) {\n enteredKeys.current = '';\n if (shouldSetValue) {\n focusManager.focusNextSection();\n }\n } else if (isMaxLength && shouldSetValue && !isLastSection) {\n focusManager.focusNextSection();\n } else {\n enteredKeys.current = newValue;\n }\n };\n\n const onInputString = (stringValue: string) => {\n const options = section.options ?? [];\n let sectionValue = stringValue.toLocaleUpperCase();\n let foundOptions = options.filter((v) => v.startsWith(sectionValue));\n if (foundOptions.length === 0) {\n if (stringValue !== key) {\n sectionValue = key.toLocaleUpperCase();\n foundOptions = options.filter((v) => v.startsWith(sectionValue));\n }\n if (foundOptions.length === 0) {\n enteredKeys.current = '';\n return;\n }\n }\n const foundValue = foundOptions[0];\n const index = options.indexOf(foundValue);\n\n if (section.type === 'month') {\n state.setSection(sectionIndex, index + 1);\n } else {\n state.setSection(sectionIndex, index);\n }\n\n if (foundOptions.length > 1) {\n enteredKeys.current = newValue;\n } else {\n enteredKeys.current = '';\n focusManager.focusNextSection();\n }\n };\n\n switch (section.type) {\n case 'day':\n case 'hour':\n case 'minute':\n case 'second':\n case 'quarter':\n case 'year': {\n if (!Number.isInteger(Number(newValue))) {\n return;\n }\n const numberValue = Number(newValue);\n onInputNumber(numberValue);\n break;\n }\n case 'dayPeriod': {\n onInputString(newValue);\n break;\n }\n case 'weekday':\n case 'month': {\n if (Number.isInteger(Number(newValue))) {\n const numberValue = Number(newValue);\n onInputNumber(numberValue);\n } else {\n onInputString(newValue);\n }\n break;\n }\n }\n }\n\n function backspace() {\n if (focusManager.selectedSectionIndexes === null) {\n return;\n }\n if (\n focusManager.selectedSectionIndexes.startIndex ===\n focusManager.selectedSectionIndexes.endIndex\n ) {\n const activeSection = state.sections[focusManager.activeSectionIndex];\n if (activeSection.value === null) {\n focusManager.focusPreviousSection();\n return;\n } else if (activeSection.contentType === 'digit') {\n const newValue = Math.floor(activeSection.value / 10);\n if (newValue !== 0) {\n state.setSection(focusManager.activeSectionIndex, newValue);\n enteredKeys.current = `${newValue}`;\n return;\n }\n }\n state.clearSection(focusManager.activeSectionIndex);\n } else {\n state.clearAll();\n }\n }\n\n const {focusWithinProps} = useFocusWithin({\n onBlurWithin: () => {\n state.confirmPlaceholder();\n },\n onFocusWithinChange(isFocusWithin) {\n state.setActive(isFocusWithin);\n },\n });\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return {\n groupProps: {\n ...DOMProps,\n ...focusWithinProps,\n },\n inputProps: {\n value: state.isEmpty && !state.isActive && props.placeholder ? '' : text,\n view: props.view,\n size: props.size,\n disabled: state.disabled,\n hasClear: !state.readOnly && !state.isEmpty && props.hasClear,\n placeholder: props.placeholder,\n id: props.id,\n label: props.label,\n startContent: props.startContent,\n endContent: props.endContent,\n pin: props.pin,\n autoFocus: props.autoFocus,\n controlRef: inputRef,\n autoComplete: 'off',\n type: 'text',\n validationState: state.validationState,\n errorMessage: props.errorMessage,\n errorPlacement: props.errorPlacement,\n onUpdate(value) {\n if (!value) {\n state.clearAll();\n }\n },\n onFocus(e) {\n props.onFocus?.(e);\n\n if (focusManager.selectedSectionIndexes !== null) {\n setInnerState({});\n return;\n }\n const input = e.target;\n setTimeout(() => {\n if (!input || input !== inputRef.current) {\n return;\n }\n syncSelectionFromDOM();\n });\n },\n onBlur(e) {\n enteredKeys.current = '';\n props.onBlur?.(e);\n focusManager.focusSection(-1);\n },\n onKeyDown(e) {\n props.onKeyDown?.(e);\n\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n enteredKeys.current = '';\n focusManager.focusPreviousSection();\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n enteredKeys.current = '';\n focusManager.focusNextSection();\n } else if (e.key === 'Home') {\n e.preventDefault();\n enteredKeys.current = '';\n state.decrementToMin(focusManager.activeSectionIndex);\n } else if (e.key === 'End') {\n e.preventDefault();\n enteredKeys.current = '';\n state.incrementToMax(focusManager.activeSectionIndex);\n } else if (e.key === 'ArrowUp' && !e.altKey) {\n e.preventDefault();\n enteredKeys.current = '';\n state.increment(focusManager.activeSectionIndex);\n } else if (e.key === 'ArrowDown' && !e.altKey) {\n e.preventDefault();\n enteredKeys.current = '';\n state.decrement(focusManager.activeSectionIndex);\n } else if (e.key === 'PageUp') {\n e.preventDefault();\n enteredKeys.current = '';\n state.incrementPage(focusManager.activeSectionIndex);\n } else if (e.key === 'PageDown') {\n e.preventDefault();\n enteredKeys.current = '';\n state.decrementPage(focusManager.activeSectionIndex);\n } else if (e.key === 'Backspace' || e.key === 'Delete') {\n e.preventDefault();\n enteredKeys.current = '';\n backspace();\n } else if (e.key === 'a' && e[CtrlCmd]) {\n e.preventDefault();\n enteredKeys.current = '';\n focusManager.focusSection('all');\n }\n },\n onKeyUp: props.onKeyUp,\n controlProps: {\n 'aria-label': props['aria-label'] || undefined,\n 'aria-labelledby': props['aria-labelledby'] || undefined,\n 'aria-describedby': props['aria-describedby'] || undefined,\n 'aria-details': props['aria-details'] || undefined,\n 'aria-disabled': state.disabled || undefined,\n readOnly: state.readOnly,\n inputMode,\n onClick() {\n syncSelectionFromDOM();\n },\n onMouseUp(e: React.MouseEvent) {\n e.preventDefault();\n },\n onBeforeInput(e) {\n e.preventDefault();\n switch (e.nativeEvent.inputType) {\n case 'deleteContentBackward':\n case 'deleteContentForward': {\n enteredKeys.current = '';\n backspace();\n break;\n }\n default: {\n const key = e.data;\n if (key !== undefined && key !== null) {\n onInput(key);\n }\n }\n }\n },\n onPaste(e: React.ClipboardEvent) {\n e.preventDefault();\n if (state.readOnly) {\n return;\n }\n\n enteredKeys.current = '';\n const pastedValue = cleanString(e.clipboardData.getData('text'));\n if (\n focusManager.selectedSectionIndexes &&\n focusManager.selectedSectionIndexes.startIndex ===\n focusManager.selectedSectionIndexes.endIndex\n ) {\n const activeSection = state.sections[focusManager.activeSectionIndex];\n\n const digitsOnly = /^\\d+$/.test(pastedValue);\n const lettersOnly = /^[a-zA-Z]+$/.test(pastedValue);\n\n const isValidValue = Boolean(\n activeSection &&\n ((activeSection.contentType === 'digit' && digitsOnly) ||\n (activeSection.contentType === 'letter' && lettersOnly)),\n );\n if (isValidValue) {\n onInput(pastedValue);\n return;\n }\n if (digitsOnly || lettersOnly) {\n return;\n }\n }\n\n state.setValueFromString(pastedValue);\n },\n },\n },\n };\n}\n\nfunction prepareState(sections: DateFieldSection[]) {\n let position = 1;\n let text = '';\n const positions: {start: number; end: number}[] = new Array(sections.length);\n for (let i = 0; i < sections.length; i++) {\n const section = sections[i];\n if (!section) {\n throw new Error('Section must be defined');\n }\n\n // use bidirectional context to allow the browser autodetect text direction\n const textValue = '\\u2068' + section.textValue + '\\u2069';\n text += textValue;\n const pos = {start: position, end: position + textValue.length};\n position += textValue.length;\n positions[i] = pos;\n }\n // use ltr direction context to get predictable navigation inside input\n text = '\\u2066' + text + '\\u2069';\n return {text, positions};\n}\n"]}
|
|
@@ -1,5 +1,23 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
|
+
import type { InputBase, Validation, ValueBase } from "../../types/index.js";
|
|
2
3
|
import type { DateFieldState } from "./useBaseDateFieldState.js";
|
|
3
|
-
export interface DateFieldStateOptions extends
|
|
4
|
+
export interface DateFieldStateOptions extends ValueBase<DateTime | null>, InputBase, Validation {
|
|
5
|
+
/** The minimum allowed date that a user may select. */
|
|
6
|
+
minValue?: DateTime;
|
|
7
|
+
/** The maximum allowed date that a user may select. */
|
|
8
|
+
maxValue?: DateTime;
|
|
9
|
+
/** Callback that is called for each date of the calendar. If it returns true, then the date is unavailable. */
|
|
10
|
+
isDateUnavailable?: (date: DateTime) => boolean;
|
|
11
|
+
/** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */
|
|
12
|
+
format?: string;
|
|
13
|
+
/** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */
|
|
14
|
+
placeholderValue?: DateTime;
|
|
15
|
+
/**
|
|
16
|
+
* Which timezone use to show values. Example: 'default', 'system', 'Europe/Amsterdam'.
|
|
17
|
+
* @default The timezone of the `value` or `defaultValue` or `placeholderValue`, 'default' otherwise.
|
|
18
|
+
*/
|
|
19
|
+
timeZone?: string;
|
|
20
|
+
/** Custom parser function for parsing pasted date strings. If not provided, the default parser will be used. */
|
|
21
|
+
parseDateFromString?: (dateStr: string, format: string, timeZone?: string) => DateTime;
|
|
4
22
|
}
|
|
5
23
|
export declare function useDateFieldState(props: DateFieldStateOptions): DateFieldState;
|