@gravity-ui/date-components 3.4.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -1
- 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 +85 -117
- 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 +186 -138
- 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.css +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 +2 -1
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +33 -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.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/types/inputs.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 +87 -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 +185 -131
- 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.css +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 +2 -1
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +32 -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.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/types/inputs.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 +45 -50
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -218
- 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 -214
- 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
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useControlledState, useLang } from '@gravity-ui/uikit';
|
|
3
|
+
import { createPlaceholderRangeValue, isInvalid } from "../../utils/dates.js";
|
|
4
|
+
import { useDefaultTimeZone } from "../../utils/useDefaultTimeZone.js";
|
|
5
|
+
import { IncompleteDate } from "../IncompleteDate.js";
|
|
6
|
+
import { addSegment, adjustDateToFormat, getEditableSections, getFormatInfo, isEditableSectionType, parseDateFromString, setSegment, toEditableSection, useFormatSections, } from "../utils.js";
|
|
7
|
+
import { useBaseDateFieldState } from "./useBaseDateFieldState.js";
|
|
8
|
+
const RANGE_FORMAT_DELIMITER = ' — ';
|
|
9
|
+
export function useRangeDateFieldState(props) {
|
|
10
|
+
const [value, setRange] = useControlledState(props.value, props.defaultValue || null, props.onUpdate);
|
|
11
|
+
const inputTimeZone = useDefaultTimeZone(props.value?.start || props.defaultValue?.start || props.placeholderValue);
|
|
12
|
+
const timeZone = props.timeZone || inputTimeZone;
|
|
13
|
+
const handleUpdateRange = (v) => {
|
|
14
|
+
setRange(v ? { start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone) } : v);
|
|
15
|
+
};
|
|
16
|
+
const placeholder = React.useMemo(() => {
|
|
17
|
+
return createPlaceholderRangeValue({
|
|
18
|
+
placeholderValue: props.placeholderValue,
|
|
19
|
+
timeZone,
|
|
20
|
+
});
|
|
21
|
+
}, [props.placeholderValue, timeZone]);
|
|
22
|
+
const format = props.format || 'L';
|
|
23
|
+
const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;
|
|
24
|
+
const sections = useFormatSections(format);
|
|
25
|
+
const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);
|
|
26
|
+
const allSegments = formatInfo.availableUnits;
|
|
27
|
+
const [displayValue, setDisplayValue] = React.useState(() => {
|
|
28
|
+
return {
|
|
29
|
+
start: new IncompleteDate(value ? value.start.timeZone(timeZone) : null),
|
|
30
|
+
end: new IncompleteDate(value ? value.end.timeZone(timeZone) : null),
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
const [lastValue, setLastValue] = React.useState(value);
|
|
34
|
+
const [lastTimezone, setLastTimezone] = React.useState(timeZone);
|
|
35
|
+
if ((value &&
|
|
36
|
+
(!lastValue ||
|
|
37
|
+
!(value.start.isSame(lastValue.start) && value.end.isSame(lastValue.end)))) ||
|
|
38
|
+
(value && lastTimezone !== timeZone) ||
|
|
39
|
+
(value === null && lastValue !== null)) {
|
|
40
|
+
setLastValue(value);
|
|
41
|
+
setLastTimezone(timeZone);
|
|
42
|
+
setDisplayValue({
|
|
43
|
+
start: new IncompleteDate(value ? value.start.timeZone(timeZone) : null),
|
|
44
|
+
end: new IncompleteDate(value ? value.end.timeZone(timeZone) : null),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const { lang } = useLang();
|
|
48
|
+
const rangeValue = React.useMemo(() => {
|
|
49
|
+
return {
|
|
50
|
+
start: displayValue.start
|
|
51
|
+
.toDateTime(value?.start.timeZone(timeZone) ?? placeholder.start, {
|
|
52
|
+
setDate: formatInfo.hasDate,
|
|
53
|
+
setTime: formatInfo.hasTime,
|
|
54
|
+
})
|
|
55
|
+
.locale(lang),
|
|
56
|
+
end: displayValue.end
|
|
57
|
+
.toDateTime(value?.end.timeZone(timeZone) ?? placeholder.end, {
|
|
58
|
+
setDate: formatInfo.hasDate,
|
|
59
|
+
setTime: formatInfo.hasTime,
|
|
60
|
+
})
|
|
61
|
+
.locale(lang),
|
|
62
|
+
};
|
|
63
|
+
}, [displayValue, value, placeholder, formatInfo, timeZone, lang]);
|
|
64
|
+
const sectionsState = useSectionsState(sections, displayValue, rangeValue, delimiter);
|
|
65
|
+
function setValue(newValue) {
|
|
66
|
+
if (props.disabled || props.readOnly) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (newValue === null ||
|
|
70
|
+
(newValue.start instanceof IncompleteDate &&
|
|
71
|
+
newValue.start.isCleared(allSegments) &&
|
|
72
|
+
newValue.end instanceof IncompleteDate &&
|
|
73
|
+
newValue.end.isCleared(allSegments))) {
|
|
74
|
+
setRange(null);
|
|
75
|
+
setDisplayValue({ start: new IncompleteDate(), end: new IncompleteDate() });
|
|
76
|
+
}
|
|
77
|
+
else if (newValue.start instanceof IncompleteDate &&
|
|
78
|
+
newValue.end instanceof IncompleteDate) {
|
|
79
|
+
if (newValue.start.isComplete(allSegments) && newValue.end.isComplete(allSegments)) {
|
|
80
|
+
const newRange = {
|
|
81
|
+
start: newValue.start.toDateTime(rangeValue.start, {
|
|
82
|
+
setDate: formatInfo.hasDate,
|
|
83
|
+
setTime: formatInfo.hasTime,
|
|
84
|
+
}),
|
|
85
|
+
end: newValue.end.toDateTime(rangeValue.end, {
|
|
86
|
+
setDate: formatInfo.hasDate,
|
|
87
|
+
setTime: formatInfo.hasTime,
|
|
88
|
+
}),
|
|
89
|
+
};
|
|
90
|
+
if (newValue.start.validate(newRange.start, allSegments) &&
|
|
91
|
+
newValue.end.validate(newRange.end, allSegments)) {
|
|
92
|
+
if (!value ||
|
|
93
|
+
!(newRange.start.isSame(value.start) && newRange.end.isSame(value.end))) {
|
|
94
|
+
handleUpdateRange({
|
|
95
|
+
start: adjustDateToFormat(newRange.start, formatInfo, 'startOf'),
|
|
96
|
+
end: adjustDateToFormat(newRange.end, formatInfo, 'endOf'),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
setDisplayValue({ start: newValue.start, end: newValue.end });
|
|
102
|
+
}
|
|
103
|
+
else if (!(newValue.start instanceof IncompleteDate) &&
|
|
104
|
+
!(newValue.end instanceof IncompleteDate) &&
|
|
105
|
+
(!value || !(value.start.isSame(newValue.start) && value.end.isSame(newValue.end)))) {
|
|
106
|
+
handleUpdateRange({ start: newValue.start, end: newValue.end });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function setSection(sectionIndex, amount) {
|
|
110
|
+
const portion = sectionIndex <= sections.length ? 'start' : 'end';
|
|
111
|
+
const section = sectionsState.editableSections[sectionIndex];
|
|
112
|
+
setValue({
|
|
113
|
+
...displayValue,
|
|
114
|
+
[portion]: setSegment(section, displayValue[portion], amount, rangeValue[portion]),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
function adjustSection(sectionIndex, amount) {
|
|
118
|
+
const section = sectionsState.editableSections[sectionIndex];
|
|
119
|
+
const portion = sectionIndex <= sections.length ? 'start' : 'end';
|
|
120
|
+
if (section) {
|
|
121
|
+
setValue({
|
|
122
|
+
...displayValue,
|
|
123
|
+
[portion]: addSegment(section, displayValue[portion], amount, rangeValue[portion]),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function clearSection(sectionIndex) {
|
|
128
|
+
const section = sectionsState.editableSections[sectionIndex];
|
|
129
|
+
const portion = sectionIndex <= sections.length ? 'start' : 'end';
|
|
130
|
+
if (section && isEditableSectionType(section.type)) {
|
|
131
|
+
setValue({
|
|
132
|
+
...displayValue,
|
|
133
|
+
[portion]: displayValue[portion].clear(section.type),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function setValueFromString(str) {
|
|
138
|
+
const [startDate = '', endDate = ''] = str.split(delimiter);
|
|
139
|
+
const parseDate = props.parseDateFromString ?? parseDateFromString;
|
|
140
|
+
const start = parseDate(startDate, format, timeZone);
|
|
141
|
+
const end = parseDate(endDate, format, timeZone);
|
|
142
|
+
if (start.isValid() && end.isValid()) {
|
|
143
|
+
handleUpdateRange({ start, end });
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
function confirmPlaceholder() {
|
|
149
|
+
if (props.disabled || props.readOnly) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// If the display value is complete but invalid, we need to constrain it and emit onChange on blur.
|
|
153
|
+
if (displayValue.start.isComplete(allSegments) &&
|
|
154
|
+
displayValue.end.isComplete(allSegments)) {
|
|
155
|
+
const newValue = {
|
|
156
|
+
start: adjustDateToFormat(displayValue.start.toDateTime(rangeValue.start, {
|
|
157
|
+
setDate: formatInfo.hasDate,
|
|
158
|
+
setTime: formatInfo.hasTime,
|
|
159
|
+
}), formatInfo, 'startOf'),
|
|
160
|
+
end: adjustDateToFormat(displayValue.end.toDateTime(rangeValue.end, {
|
|
161
|
+
setDate: formatInfo.hasDate,
|
|
162
|
+
setTime: formatInfo.hasTime,
|
|
163
|
+
}), formatInfo, 'endOf'),
|
|
164
|
+
};
|
|
165
|
+
setValue(newValue);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
const validationState = props.validationState ||
|
|
169
|
+
(isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||
|
|
170
|
+
(isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||
|
|
171
|
+
(value && !isValidRange(value) ? 'invalid' : undefined) ||
|
|
172
|
+
(value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||
|
|
173
|
+
(value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);
|
|
174
|
+
return useBaseDateFieldState({
|
|
175
|
+
value,
|
|
176
|
+
displayValue: rangeValue,
|
|
177
|
+
validationState,
|
|
178
|
+
editableSections: sectionsState.editableSections,
|
|
179
|
+
formatInfo,
|
|
180
|
+
readOnly: props.readOnly,
|
|
181
|
+
disabled: props.disabled,
|
|
182
|
+
isEmpty: displayValue.start.isCleared(allSegments) && displayValue.end.isCleared(allSegments),
|
|
183
|
+
setValue,
|
|
184
|
+
adjustSection,
|
|
185
|
+
setSection,
|
|
186
|
+
clearSection,
|
|
187
|
+
setValueFromString,
|
|
188
|
+
confirmPlaceholder,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
function useSectionsState(sections, value, placeholder, delimiter) {
|
|
192
|
+
const [state, setState] = React.useState(() => {
|
|
193
|
+
return {
|
|
194
|
+
value,
|
|
195
|
+
sections,
|
|
196
|
+
placeholder,
|
|
197
|
+
delimiter,
|
|
198
|
+
editableSections: getRangeEditableSections(sections, value, placeholder, delimiter),
|
|
199
|
+
};
|
|
200
|
+
});
|
|
201
|
+
if (sections !== state.sections ||
|
|
202
|
+
value !== state.value ||
|
|
203
|
+
!(placeholder.start.isSame(state.placeholder.start) &&
|
|
204
|
+
placeholder.end.isSame(state.placeholder.end)) ||
|
|
205
|
+
delimiter !== state.delimiter) {
|
|
206
|
+
setState({
|
|
207
|
+
value,
|
|
208
|
+
sections,
|
|
209
|
+
placeholder,
|
|
210
|
+
delimiter,
|
|
211
|
+
editableSections: getRangeEditableSections(sections, value, placeholder, delimiter),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
return state;
|
|
215
|
+
}
|
|
216
|
+
function getRangeEditableSections(sections, value, placeholder, delimiter) {
|
|
217
|
+
const start = getEditableSections(sections, value.start, placeholder.start);
|
|
218
|
+
const end = getEditableSections(sections, value.end, placeholder.end);
|
|
219
|
+
const delimiterSection = toEditableSection({
|
|
220
|
+
type: 'literal',
|
|
221
|
+
contentType: 'letter',
|
|
222
|
+
format: delimiter,
|
|
223
|
+
placeholder: delimiter,
|
|
224
|
+
hasLeadingZeros: false,
|
|
225
|
+
}, value.start, placeholder.start);
|
|
226
|
+
const editableSections = [...start, delimiterSection, ...end];
|
|
227
|
+
return editableSections;
|
|
228
|
+
}
|
|
229
|
+
function isValidRange({ start, end }) {
|
|
230
|
+
return start.isValid() && end.isValid() && (start.isSame(end) || start.isBefore(end));
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=useRangeDateFieldState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useRangeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useRangeDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState, useLang} from '@gravity-ui/uikit';\n\nimport type {DateFieldBase} from '../../types/datePicker';\nimport type {RangeValue} from '../../types/inputs';\nimport {createPlaceholderRangeValue, isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {IncompleteDate} from '../IncompleteDate.js';\nimport type {FormatSection} from '../types';\nimport {\n addSegment,\n adjustDateToFormat,\n getEditableSections,\n getFormatInfo,\n isEditableSectionType,\n parseDateFromString,\n setSegment,\n toEditableSection,\n useFormatSections,\n} from '../utils';\n\nimport type {DateFieldState} from './useBaseDateFieldState';\nimport {useBaseDateFieldState} from './useBaseDateFieldState';\n\nexport interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {\n delimiter?: string;\n}\n\nconst RANGE_FORMAT_DELIMITER = ' — ';\n\nexport type RangeDateFieldState = DateFieldState<RangeValue<DateTime>>;\n\nexport function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState {\n const [value, setRange] = useControlledState(\n props.value,\n props.defaultValue || null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value?.start || props.defaultValue?.start || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateRange = (v: RangeValue<DateTime> | null) => {\n setRange(\n v ? {start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone)} : v,\n );\n };\n\n const placeholder = React.useMemo(() => {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n }, [props.placeholderValue, timeZone]);\n\n const format = props.format || 'L';\n const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n const allSegments = formatInfo.availableUnits;\n\n const [displayValue, setDisplayValue] = React.useState(() => {\n return {\n start: new IncompleteDate(value ? value.start.timeZone(timeZone) : null),\n end: new IncompleteDate(value ? value.end.timeZone(timeZone) : null),\n };\n });\n\n const [lastValue, setLastValue] = React.useState(value);\n const [lastTimezone, setLastTimezone] = React.useState(timeZone);\n if (\n (value &&\n (!lastValue ||\n !(value.start.isSame(lastValue.start) && value.end.isSame(lastValue.end)))) ||\n (value && lastTimezone !== timeZone) ||\n (value === null && lastValue !== null)\n ) {\n setLastValue(value);\n setLastTimezone(timeZone);\n setDisplayValue({\n start: new IncompleteDate(value ? value.start.timeZone(timeZone) : null),\n end: new IncompleteDate(value ? value.end.timeZone(timeZone) : null),\n });\n }\n\n const {lang} = useLang();\n const rangeValue = React.useMemo(() => {\n return {\n start: displayValue.start\n .toDateTime(value?.start.timeZone(timeZone) ?? placeholder.start, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n })\n .locale(lang),\n end: displayValue.end\n .toDateTime(value?.end.timeZone(timeZone) ?? placeholder.end, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n })\n .locale(lang),\n };\n }, [displayValue, value, placeholder, formatInfo, timeZone, lang]);\n\n const sectionsState = useSectionsState(sections, displayValue, rangeValue, delimiter);\n\n function setValue(newValue: RangeValue<DateTime> | RangeValue<IncompleteDate> | null) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (\n newValue === null ||\n (newValue.start instanceof IncompleteDate &&\n newValue.start.isCleared(allSegments) &&\n newValue.end instanceof IncompleteDate &&\n newValue.end.isCleared(allSegments))\n ) {\n setRange(null);\n setDisplayValue({start: new IncompleteDate(), end: new IncompleteDate()});\n } else if (\n newValue.start instanceof IncompleteDate &&\n newValue.end instanceof IncompleteDate\n ) {\n if (newValue.start.isComplete(allSegments) && newValue.end.isComplete(allSegments)) {\n const newRange = {\n start: newValue.start.toDateTime(rangeValue.start, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n }),\n end: newValue.end.toDateTime(rangeValue.end, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n }),\n };\n if (\n newValue.start.validate(newRange.start, allSegments) &&\n newValue.end.validate(newRange.end, allSegments)\n ) {\n if (\n !value ||\n !(newRange.start.isSame(value.start) && newRange.end.isSame(value.end))\n ) {\n handleUpdateRange({\n start: adjustDateToFormat(newRange.start, formatInfo, 'startOf'),\n end: adjustDateToFormat(newRange.end, formatInfo, 'endOf'),\n });\n }\n }\n }\n setDisplayValue({start: newValue.start, end: newValue.end});\n } else if (\n !(newValue.start instanceof IncompleteDate) &&\n !(newValue.end instanceof IncompleteDate) &&\n (!value || !(value.start.isSame(newValue.start) && value.end.isSame(newValue.end)))\n ) {\n handleUpdateRange({start: newValue.start, end: newValue.end});\n }\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n const section = sectionsState.editableSections[sectionIndex];\n setValue({\n ...displayValue,\n [portion]: setSegment(section, displayValue[portion], amount, rangeValue[portion]),\n });\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (section) {\n setValue({\n ...displayValue,\n [portion]: addSegment(section, displayValue[portion], amount, rangeValue[portion]),\n });\n }\n }\n\n function clearSection(sectionIndex: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (section && isEditableSectionType(section.type)) {\n setValue({\n ...displayValue,\n [portion]: displayValue[portion].clear(section.type),\n });\n }\n }\n\n function setValueFromString(str: string) {\n const [startDate = '', endDate = ''] = str.split(delimiter);\n const parseDate = props.parseDateFromString ?? parseDateFromString;\n const start = parseDate(startDate, format, timeZone);\n const end = parseDate(endDate, format, timeZone);\n if (start.isValid() && end.isValid()) {\n handleUpdateRange({start, end});\n return true;\n }\n return false;\n }\n\n function confirmPlaceholder() {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n // If the display value is complete but invalid, we need to constrain it and emit onChange on blur.\n if (\n displayValue.start.isComplete(allSegments) &&\n displayValue.end.isComplete(allSegments)\n ) {\n const newValue = {\n start: adjustDateToFormat(\n displayValue.start.toDateTime(rangeValue.start, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n }),\n formatInfo,\n 'startOf',\n ),\n end: adjustDateToFormat(\n displayValue.end.toDateTime(rangeValue.end, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n }),\n formatInfo,\n 'endOf',\n ),\n };\n setValue(newValue);\n }\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && !isValidRange(value) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);\n\n return useBaseDateFieldState<RangeValue<DateTime>, RangeValue<IncompleteDate>>({\n value,\n displayValue: rangeValue,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n isEmpty:\n displayValue.start.isCleared(allSegments) && displayValue.end.isCleared(allSegments),\n setValue,\n adjustSection,\n setSection,\n clearSection,\n setValueFromString,\n confirmPlaceholder,\n });\n}\n\nfunction useSectionsState(\n sections: FormatSection[],\n value: RangeValue<IncompleteDate>,\n placeholder: RangeValue<DateTime>,\n delimiter: string,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n placeholder,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, placeholder, delimiter),\n };\n });\n\n if (\n sections !== state.sections ||\n value !== state.value ||\n !(\n placeholder.start.isSame(state.placeholder.start) &&\n placeholder.end.isSame(state.placeholder.end)\n ) ||\n delimiter !== state.delimiter\n ) {\n setState({\n value,\n sections,\n placeholder,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, placeholder, delimiter),\n });\n }\n\n return state;\n}\n\nfunction getRangeEditableSections(\n sections: FormatSection[],\n value: RangeValue<IncompleteDate>,\n placeholder: RangeValue<DateTime>,\n delimiter: string,\n) {\n const start = getEditableSections(sections, value.start, placeholder.start);\n const end = getEditableSections(sections, value.end, placeholder.end);\n\n const delimiterSection = toEditableSection(\n {\n type: 'literal',\n contentType: 'letter',\n format: delimiter,\n placeholder: delimiter,\n hasLeadingZeros: false,\n },\n value.start,\n placeholder.start,\n );\n\n const editableSections = [...start, delimiterSection, ...end];\n\n return editableSections;\n}\n\nfunction isValidRange({start, end}: RangeValue<DateTime>): boolean {\n return start.isValid() && end.isValid() && (start.isSame(end) || start.isBefore(end));\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from "./DateField.js";
|
|
2
2
|
export * from "./hooks/useDateFieldState.js";
|
|
3
|
+
export * from "./hooks/useRangeDateFieldState.js";
|
|
3
4
|
export * from "./hooks/useDateFieldProps.js";
|
|
4
|
-
export
|
|
5
|
+
export type { DateFieldState } from "./hooks/useBaseDateFieldState.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/DateField/index.ts"],"names":[],"mappings":"AAAA,+BAA4B;AAE5B,6CAA0C;AAC1C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/DateField/index.ts"],"names":[],"mappings":"AAAA,+BAA4B;AAE5B,6CAA0C;AAC1C,kDAA+C;AAC/C,6CAA0C","sourcesContent":["export * from './DateField';\n\nexport * from './hooks/useDateFieldState';\nexport * from './hooks/useRangeDateFieldState';\nexport * from './hooks/useDateFieldProps';\n\nexport type {DateFieldState} from './hooks/useBaseDateFieldState';\n"]}
|
|
@@ -6,7 +6,7 @@ export type DateFormatTokenMap = {
|
|
|
6
6
|
};
|
|
7
7
|
};
|
|
8
8
|
export interface DateFieldSection {
|
|
9
|
-
value: number |
|
|
9
|
+
value: number | null;
|
|
10
10
|
/**
|
|
11
11
|
* Value of the section, as rendered inside the input.
|
|
12
12
|
* For example, in the date `May 25, 1995`, the value of the month section is "May".
|
|
@@ -43,28 +43,8 @@ export interface DateFieldSection {
|
|
|
43
43
|
* For example, the value `1` should be rendered as "01" instead of "1".
|
|
44
44
|
*/
|
|
45
45
|
hasLeadingZeros: boolean;
|
|
46
|
-
/**
|
|
47
|
-
* If `true`, the section value has been modified since the last time the sections were generated from a valid date.
|
|
48
|
-
* When we can generate a valid date from the section, we don't directly pass it to `onChange`,
|
|
49
|
-
* Otherwise, we would lose all the information contained in the original date, things like:
|
|
50
|
-
* - time if the format does not contain it
|
|
51
|
-
* - timezone / UTC
|
|
52
|
-
*
|
|
53
|
-
* To avoid losing that information, we transfer the values of the modified sections from the newly generated date to the original date.
|
|
54
|
-
*/
|
|
55
|
-
modified: boolean;
|
|
56
|
-
/**
|
|
57
|
-
* Start index of the section in the format
|
|
58
|
-
*/
|
|
59
|
-
start: number;
|
|
60
|
-
/**
|
|
61
|
-
* End index of the section in the format
|
|
62
|
-
*/
|
|
63
|
-
end: number;
|
|
64
|
-
previousEditableSection: number;
|
|
65
|
-
nextEditableSection: number;
|
|
66
46
|
}
|
|
67
|
-
export type
|
|
47
|
+
export type FormatSection<TSection extends DateFieldSection = DateFieldSection> = Omit<TSection, 'value' | 'textValue'>;
|
|
68
48
|
export type AvailableSections = Partial<Record<DateFieldSectionType, boolean>>;
|
|
69
49
|
export interface FormatInfo {
|
|
70
50
|
hasTime: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/DateField/types.ts"],"names":[],"mappings":"","sourcesContent":["export type DateFieldSectionType =\n | Extract<\n Intl.DateTimeFormatPartTypes,\n | 'day'\n | 'dayPeriod'\n | 'hour'\n | 'literal'\n | 'minute'\n | 'month'\n | 'second'\n | 'timeZoneName'\n | 'weekday'\n | 'year'\n | 'unknown'\n >\n | 'quarter';\n\nexport type DateFormatTokenMap = {\n [formatToken: string]:\n
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/DateField/types.ts"],"names":[],"mappings":"","sourcesContent":["export type DateFieldSectionType =\n | Extract<\n Intl.DateTimeFormatPartTypes,\n | 'day'\n | 'dayPeriod'\n | 'hour'\n | 'literal'\n | 'minute'\n | 'month'\n | 'second'\n | 'timeZoneName'\n | 'weekday'\n | 'year'\n | 'unknown'\n >\n | 'quarter';\n\nexport type DateFormatTokenMap = {\n [formatToken: string]:\n DateFieldSectionType | {sectionType: DateFieldSectionType; contentType: 'digit' | 'letter'};\n};\n\nexport interface DateFieldSection {\n value: number | null;\n /**\n * Value of the section, as rendered inside the input.\n * For example, in the date `May 25, 1995`, the value of the month section is \"May\".\n */\n textValue: string;\n /**\n * Format token used to parse the value of this section from the date object.\n * For example, in the format `MMMM D, YYYY`, the format of the month section is \"MMMM\".\n */\n format: string;\n /**\n * Placeholder rendered when the value of this section is empty.\n */\n placeholder: string;\n /**\n * Type of the section.\n */\n type: DateFieldSectionType;\n /**\n * Type of content of the section.\n * Will determine if we should apply a digit-based editing or a letter-based editing.\n */\n contentType: 'digit' | 'letter';\n /**\n * Available values\n */\n options?: string[];\n /** The minimum numeric value for the segment, if applicable. */\n minValue?: number;\n /** The maximum numeric value for the segment, if applicable. */\n maxValue?: number;\n /**\n * If `true`, the value of this section is supposed to have leading zeroes.\n * For example, the value `1` should be rendered as \"01\" instead of \"1\".\n */\n hasLeadingZeros: boolean;\n}\n\nexport type FormatSection<TSection extends DateFieldSection = DateFieldSection> = Omit<\n TSection,\n 'value' | 'textValue'\n>;\n\nexport type AvailableSections = Partial<Record<DateFieldSectionType, boolean>>;\n\nexport interface FormatInfo {\n hasTime: boolean;\n hasDate: boolean;\n availableUnits: AvailableSections;\n minDateUnit: 'day' | 'month' | 'quarter' | 'year';\n minTimeUnit: 'second' | 'minute' | 'hour';\n}\n"]}
|
|
@@ -1,44 +1,31 @@
|
|
|
1
1
|
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
2
|
import type { ExtractFunctionType } from "../types/index.js";
|
|
3
|
+
import type { IncompleteDate } from "./IncompleteDate.js";
|
|
3
4
|
import { i18n } from "./i18n/index.js";
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
import type { DateFieldSection, DateFieldSectionType, FormatInfo, FormatSection } from "./types.js";
|
|
6
|
+
declare const EDITABLE_SEGMENTS: {
|
|
7
|
+
year: true;
|
|
8
|
+
quarter: true;
|
|
9
|
+
month: true;
|
|
10
|
+
day: true;
|
|
11
|
+
weekday: true;
|
|
12
|
+
hour: true;
|
|
13
|
+
minute: true;
|
|
14
|
+
second: true;
|
|
15
|
+
dayPeriod: true;
|
|
12
16
|
};
|
|
13
|
-
export declare
|
|
17
|
+
export declare const PAGE_STEP: Partial<Record<DateFieldSectionType, number>>;
|
|
14
18
|
export declare function getDurationUnitFromSectionType(type: DateFieldSectionType): "year" | "month" | "day" | "hour" | "minute" | "second" | "quarter" | "date";
|
|
15
|
-
export declare function addSegment(section: DateFieldSection, date:
|
|
16
|
-
export declare function setSegment(section:
|
|
19
|
+
export declare function addSegment(section: DateFieldSection, date: IncompleteDate, amount: number, placeholder: DateTime): IncompleteDate;
|
|
20
|
+
export declare function setSegment(section: FormatSection, date: IncompleteDate, amount: number, placeholder: DateTime): IncompleteDate;
|
|
17
21
|
type TranslateFunction = ExtractFunctionType<typeof i18n>;
|
|
18
|
-
export declare function splitFormatIntoSections(format: string, t?: TranslateFunction, lang?: string):
|
|
22
|
+
export declare function splitFormatIntoSections(format: string, t?: TranslateFunction, lang?: string): FormatSection[];
|
|
19
23
|
export declare function cleanString(dirtyString: string): string;
|
|
20
|
-
export declare function getEditableSections(sections:
|
|
21
|
-
export declare function
|
|
22
|
-
export declare function toEditableSection(section:
|
|
23
|
-
export declare function getCurrentEditableSectionIndex(sections: DateFieldSection[], selectedSections: 'all' | number): number;
|
|
24
|
-
export declare function formatSections(sections: DateFieldSection[]): string;
|
|
24
|
+
export declare function getEditableSections(sections: FormatSection[], value: IncompleteDate, placeholder: DateTime): DateFieldSection[];
|
|
25
|
+
export declare function isEditableSectionType(type: DateFieldSectionType): type is keyof typeof EDITABLE_SEGMENTS;
|
|
26
|
+
export declare function toEditableSection(section: FormatSection, value: IncompleteDate, placeholder: DateTime): DateFieldSection;
|
|
25
27
|
export declare function parseDateFromString(str: string, format: string, timeZone?: string): DateTime;
|
|
26
|
-
export declare function
|
|
27
|
-
export declare function
|
|
28
|
-
export declare function getFormatInfo(sections: DateFieldSectionWithoutPosition[]): FormatInfo;
|
|
28
|
+
export declare function useFormatSections(format: string): FormatSection[];
|
|
29
|
+
export declare function getFormatInfo(sections: FormatSection[]): FormatInfo;
|
|
29
30
|
export declare function adjustDateToFormat(date: DateTime, formatInfo: FormatInfo, method?: 'startOf' | 'endOf'): DateTime;
|
|
30
|
-
export declare function markValidSection(allSections: AvailableSections, editableSections: AvailableSections, unit: DateFieldSectionType): {
|
|
31
|
-
year?: boolean | undefined;
|
|
32
|
-
month?: boolean | undefined;
|
|
33
|
-
day?: boolean | undefined;
|
|
34
|
-
hour?: boolean | undefined;
|
|
35
|
-
minute?: boolean | undefined;
|
|
36
|
-
second?: boolean | undefined;
|
|
37
|
-
quarter?: boolean | undefined;
|
|
38
|
-
weekday?: boolean | undefined;
|
|
39
|
-
dayPeriod?: boolean | undefined;
|
|
40
|
-
literal?: boolean | undefined;
|
|
41
|
-
timeZoneName?: boolean | undefined;
|
|
42
|
-
unknown?: boolean | undefined;
|
|
43
|
-
};
|
|
44
31
|
export {};
|