@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
|
@@ -1,56 +1,20 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import
|
|
4
|
-
import { Popup, TextInput, useFocusWithin, useMobile } from '@gravity-ui/uikit';
|
|
3
|
+
import { Popup, TextInput, useMobile } from '@gravity-ui/uikit';
|
|
5
4
|
import { block } from "../../utils/cn.js";
|
|
6
5
|
import { Calendar } from "../Calendar/index.js";
|
|
7
6
|
import { DateField } from "../DateField/index.js";
|
|
8
7
|
import { HiddenInput } from "../HiddenInput/HiddenInput.js";
|
|
9
|
-
import { filterDOMProps } from "../utils/filterDOMProps.js";
|
|
10
8
|
import { useRelativeDateFieldProps } from "./hooks/useRelativeDateFieldProps.js";
|
|
11
9
|
import { useRelativeDateFieldState } from "./hooks/useRelativeDateFieldState.js";
|
|
12
10
|
import "./RelativeDateField.css";
|
|
13
11
|
const b = block('relative-date-field');
|
|
14
12
|
export function RelativeDateField(props) {
|
|
15
13
|
const state = useRelativeDateFieldState(props);
|
|
16
|
-
const { inputProps, calendarProps, timeInputProps } = useRelativeDateFieldProps(state, props);
|
|
14
|
+
const { groupProps, inputProps, popupProps, calendarProps, timeInputProps } = useRelativeDateFieldProps(state, props);
|
|
17
15
|
const isMobile = useMobile();
|
|
18
|
-
|
|
19
|
-
const [isOpen, setOpen] = React.useState(false);
|
|
20
|
-
const dialogClosing = React.useRef(false);
|
|
21
|
-
const { focusWithinProps } = useFocusWithin({
|
|
22
|
-
onFocusWithinChange: (isFocusWithin) => {
|
|
23
|
-
if (!dialogClosing.current) {
|
|
24
|
-
setOpen(isFocusWithin);
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
isDisabled: isMobile,
|
|
28
|
-
});
|
|
29
|
-
const DOMProps = filterDOMProps(props);
|
|
30
|
-
delete DOMProps.id;
|
|
31
|
-
return (_jsxs("div", Object.assign({}, DOMProps, { role: "group", className: b(null, props.className), style: props.style }, focusWithinProps, { children: [_jsx(TextInput, Object.assign({}, inputProps, { className: b('field'), ref: setAnchor, onBlur: props.onBlur, onKeyDown: (e) => {
|
|
32
|
-
var _a;
|
|
33
|
-
(_a = inputProps.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(inputProps, e);
|
|
34
|
-
if (!e.defaultPrevented &&
|
|
35
|
-
e.altKey &&
|
|
36
|
-
(e.key === 'ArrowDown' || e.key === 'ArrowUp')) {
|
|
37
|
-
e.preventDefault();
|
|
38
|
-
e.stopPropagation();
|
|
39
|
-
setOpen(true);
|
|
40
|
-
}
|
|
41
|
-
}, controlProps: Object.assign(Object.assign({}, inputProps.controlProps), { onClick: () => {
|
|
42
|
-
setOpen(true);
|
|
43
|
-
} }) })), _jsx(HiddenInput, { name: props.name, value: state.value, onReset: (value) => {
|
|
16
|
+
return (_jsxs("div", { ...groupProps, role: "group", className: b(null, props.className), style: props.style, children: [_jsx(TextInput, { ...inputProps, className: b('field') }), _jsx(HiddenInput, { name: props.name, value: state.value, onReset: (value) => {
|
|
44
17
|
state.setValue(value);
|
|
45
|
-
}, disabled: state.disabled, form: props.form }), !isMobile && (_jsx(Popup, {
|
|
46
|
-
if (!open) {
|
|
47
|
-
setOpen(false);
|
|
48
|
-
}
|
|
49
|
-
dialogClosing.current = !open;
|
|
50
|
-
}, onTransitionOutComplete: () => {
|
|
51
|
-
setTimeout(() => {
|
|
52
|
-
dialogClosing.current = false;
|
|
53
|
-
});
|
|
54
|
-
}, placement: props.popupPlacement, offset: props.popupOffset, className: props.popupClassName, style: props.popupStyle, children: _jsxs("div", { className: b('popup-content'), children: [_jsx(Calendar, Object.assign({}, calendarProps)), props.hasTime ? (_jsx("div", { className: b('time-field-wrapper'), children: _jsx(DateField, Object.assign({ className: b('time-field') }, timeInputProps)) })) : null] }) }))] })));
|
|
18
|
+
}, disabled: state.disabled, form: props.form }), !isMobile && (_jsx(Popup, { ...popupProps, className: props.popupClassName, style: props.popupStyle, children: _jsxs("div", { className: b('popup-content'), children: [_jsx(Calendar, { ...calendarProps }), props.hasTime ? (_jsx("div", { className: b('time-field-wrapper'), children: _jsx(DateField, { className: b('time-field'), ...timeInputProps }) })) : null] }) }))] }));
|
|
55
19
|
}
|
|
56
20
|
//# sourceMappingURL=RelativeDateField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelativeDateField.js","sourceRoot":"../../../../src","sources":["components/RelativeDateField/RelativeDateField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,
|
|
1
|
+
{"version":3,"file":"RelativeDateField.js","sourceRoot":"../../../../src","sources":["components/RelativeDateField/RelativeDateField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAC,KAAK,EAAC,0BAAuB;AACrC,OAAO,EAAC,QAAQ,EAAC,6BAAoB;AACrC,OAAO,EAAC,SAAS,EAAC,8BAAqB;AACvC,OAAO,EAAC,WAAW,EAAC,sCAAmC;AAavD,OAAO,EAAC,yBAAyB,EAAC,6CAA0C;AAC5E,OAAO,EAAC,yBAAyB,EAAC,6CAA0C;AAG5E,iCAAkC;AAElC,MAAM,CAAC,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAoBvC,MAAM,UAAU,iBAAiB,CAAC,KAA6B;IAC3D,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,EAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAC,GACrE,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,SAAS,EAAE,CAAC;IAE7B,OAAO,CACH,kBAAS,UAAU,EAAE,IAAI,EAAC,OAAO,EAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,aACrF,KAAC,SAAS,OAAK,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAI,EACpD,KAAC,WAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACf,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC,EACD,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,IAAI,EAAE,KAAK,CAAC,IAAI,GAClB,EACD,CAAC,QAAQ,IAAI,CACV,KAAC,KAAK,OAAK,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,YAC3E,eAAK,SAAS,EAAE,CAAC,CAAC,eAAe,CAAC,aAC9B,KAAC,QAAQ,OAAK,aAAa,GAAI,EAC9B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACb,cAAK,SAAS,EAAE,CAAC,CAAC,oBAAoB,CAAC,YACnC,KAAC,SAAS,IAAC,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,KAAM,cAAc,GAAI,GAC3D,CACT,CAAC,CAAC,CAAC,IAAI,IACN,GACF,CACX,IACC,CACT,CAAC;AACN,CAAC","sourcesContent":["'use client';\n\nimport {Popup, TextInput, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {Calendar} from '../Calendar';\nimport {DateField} from '../DateField';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n PopupStyleProps,\n StyleProps,\n TextInputExtendProps,\n TextInputProps,\n} from '../types';\n\nimport {useRelativeDateFieldProps} from './hooks/useRelativeDateFieldProps';\nimport {useRelativeDateFieldState} from './hooks/useRelativeDateFieldState';\nimport type {RelativeDateFieldOptions} from './hooks/useRelativeDateFieldState';\n\nimport './RelativeDateField.scss';\n\nconst b = block('relative-date-field');\n\nexport interface RelativeDateFieldProps\n extends\n RelativeDateFieldOptions,\n TextInputProps,\n TextInputExtendProps,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n FocusableProps,\n KeyboardEvents,\n PopupStyleProps {\n /**\n * Show time field in popup\n * @default false\n */\n hasTime?: boolean;\n}\nexport function RelativeDateField(props: RelativeDateFieldProps) {\n const state = useRelativeDateFieldState(props);\n const {groupProps, inputProps, popupProps, calendarProps, timeInputProps} =\n useRelativeDateFieldProps(state, props);\n\n const isMobile = useMobile();\n\n return (\n <div {...groupProps} role=\"group\" className={b(null, props.className)} style={props.style}>\n <TextInput {...inputProps} className={b('field')} />\n <HiddenInput\n name={props.name}\n value={state.value}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n {!isMobile && (\n <Popup {...popupProps} className={props.popupClassName} style={props.popupStyle}>\n <div className={b('popup-content')}>\n <Calendar {...calendarProps} />\n {props.hasTime ? (\n <div className={b('time-field-wrapper')}>\n <DateField className={b('time-field')} {...timeInputProps} />\n </div>\n ) : null}\n </div>\n </Popup>\n )}\n </div>\n );\n}\n"]}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { PopupProps, TextInputProps } from '@gravity-ui/uikit';
|
|
2
3
|
import type { CalendarProps } from "../../Calendar/index.js";
|
|
3
4
|
import type { DateFieldProps } from "../../DateField/index.js";
|
|
4
5
|
import type { RelativeDateFieldProps } from "../RelativeDateField.js";
|
|
5
6
|
import type { RelativeDateFieldState } from "./useRelativeDateFieldState.js";
|
|
6
7
|
interface RelativeDateProps {
|
|
7
|
-
|
|
8
|
+
groupProps: React.HTMLAttributes<unknown>;
|
|
9
|
+
inputProps: TextInputProps & {
|
|
10
|
+
ref: React.Ref<HTMLElement>;
|
|
11
|
+
};
|
|
12
|
+
popupProps: PopupProps;
|
|
8
13
|
calendarProps: CalendarProps;
|
|
9
14
|
timeInputProps: DateFieldProps;
|
|
10
15
|
}
|
|
@@ -1,13 +1,48 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { useFocusWithin } from '@gravity-ui/uikit';
|
|
3
|
+
import { filterDOMProps } from "../../utils/filterDOMProps.js";
|
|
2
4
|
export function useRelativeDateFieldProps(state, props) {
|
|
3
|
-
const
|
|
4
|
-
const [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const lastCorrectDate = state.lastCorrectDate ? state.lastCorrectDate.startOf('day') : null;
|
|
6
|
+
const [prevCorrectDate, setPrevCorrectDate] = React.useState(lastCorrectDate);
|
|
7
|
+
const [focusedDate, setFocusedDate] = React.useState(lastCorrectDate);
|
|
8
|
+
if (lastCorrectDate && (!prevCorrectDate || !lastCorrectDate.isSame(prevCorrectDate, 'day'))) {
|
|
9
|
+
setPrevCorrectDate(lastCorrectDate);
|
|
10
|
+
setFocusedDate(lastCorrectDate);
|
|
8
11
|
}
|
|
12
|
+
const [isOpen, setOpen] = React.useState(false);
|
|
13
|
+
const dialogClosing = React.useRef(false);
|
|
14
|
+
const [anchor, setAnchor] = React.useState(null);
|
|
15
|
+
const { focusWithinProps } = useFocusWithin({
|
|
16
|
+
onFocusWithin: props.onFocus,
|
|
17
|
+
onBlurWithin: (e) => {
|
|
18
|
+
props.onBlur?.(e);
|
|
19
|
+
state.confirmValue();
|
|
20
|
+
},
|
|
21
|
+
onFocusWithinChange: (isFocusWithin) => {
|
|
22
|
+
if (!dialogClosing.current) {
|
|
23
|
+
setOpen(isFocusWithin);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
const DOMProps = filterDOMProps(props);
|
|
28
|
+
delete DOMProps.id;
|
|
9
29
|
return {
|
|
30
|
+
groupProps: {
|
|
31
|
+
...DOMProps,
|
|
32
|
+
...focusWithinProps,
|
|
33
|
+
role: 'group',
|
|
34
|
+
onKeyDown: (e) => {
|
|
35
|
+
if (isOpen &&
|
|
36
|
+
e.key === 'Escape' &&
|
|
37
|
+
e.currentTarget.contains(e.target)) {
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
e.stopPropagation();
|
|
40
|
+
setOpen(false);
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
},
|
|
10
44
|
inputProps: {
|
|
45
|
+
ref: setAnchor,
|
|
11
46
|
size: props.size,
|
|
12
47
|
autoFocus: props.autoFocus,
|
|
13
48
|
value: state.text,
|
|
@@ -24,10 +59,17 @@ export function useRelativeDateFieldProps(state, props) {
|
|
|
24
59
|
pin: props.pin,
|
|
25
60
|
view: props.view,
|
|
26
61
|
placeholder: props.placeholder,
|
|
27
|
-
onKeyDown:
|
|
62
|
+
onKeyDown: (e) => {
|
|
63
|
+
props.onKeyDown?.(e);
|
|
64
|
+
if (!e.defaultPrevented &&
|
|
65
|
+
e.altKey &&
|
|
66
|
+
(e.key === 'ArrowDown' || e.key === 'ArrowUp')) {
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
e.stopPropagation();
|
|
69
|
+
setOpen(true);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
28
72
|
onKeyUp: props.onKeyUp,
|
|
29
|
-
onBlur: props.onBlur,
|
|
30
|
-
onFocus: props.onFocus,
|
|
31
73
|
controlProps: {
|
|
32
74
|
'aria-label': props['aria-label'] || undefined,
|
|
33
75
|
'aria-labelledby': props['aria-labelledby'] || undefined,
|
|
@@ -35,12 +77,32 @@ export function useRelativeDateFieldProps(state, props) {
|
|
|
35
77
|
'aria-details': props['aria-details'] || undefined,
|
|
36
78
|
'aria-disabled': state.disabled || undefined,
|
|
37
79
|
readOnly: state.readOnly,
|
|
80
|
+
onClick: () => {
|
|
81
|
+
setOpen(true);
|
|
82
|
+
},
|
|
38
83
|
},
|
|
39
84
|
},
|
|
85
|
+
popupProps: {
|
|
86
|
+
anchorElement: anchor,
|
|
87
|
+
open: isOpen,
|
|
88
|
+
onOpenChange: (open) => {
|
|
89
|
+
if (!open) {
|
|
90
|
+
setOpen(false);
|
|
91
|
+
}
|
|
92
|
+
dialogClosing.current = !open;
|
|
93
|
+
},
|
|
94
|
+
onTransitionOutComplete: () => {
|
|
95
|
+
setTimeout(() => {
|
|
96
|
+
dialogClosing.current = false;
|
|
97
|
+
});
|
|
98
|
+
},
|
|
99
|
+
placement: props.popupPlacement,
|
|
100
|
+
offset: props.popupOffset,
|
|
101
|
+
},
|
|
40
102
|
calendarProps: {
|
|
41
103
|
size: props.size === 's' ? 'm' : props.size,
|
|
42
104
|
readOnly: true,
|
|
43
|
-
value: state.
|
|
105
|
+
value: state.lastCorrectDate,
|
|
44
106
|
focusedValue: focusedDate,
|
|
45
107
|
onFocusUpdate: setFocusedDate,
|
|
46
108
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRelativeDateFieldProps.js","sourceRoot":"../../../../../src","sources":["components/RelativeDateField/hooks/useRelativeDateFieldProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useRelativeDateFieldProps.js","sourceRoot":"../../../../../src","sources":["components/RelativeDateField/hooks/useRelativeDateFieldProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {useFocusWithin} from '@gravity-ui/uikit';\nimport type {PopupProps, TextInputProps} from '@gravity-ui/uikit';\n\nimport type {CalendarProps} from '../../Calendar';\nimport type {DateFieldProps} from '../../DateField';\nimport {filterDOMProps} from '../../utils/filterDOMProps.js';\nimport type {RelativeDateFieldProps} from '../RelativeDateField';\n\nimport type {RelativeDateFieldState} from './useRelativeDateFieldState';\n\ninterface RelativeDateProps {\n groupProps: React.HTMLAttributes<unknown>;\n inputProps: TextInputProps & {ref: React.Ref<HTMLElement>};\n popupProps: PopupProps;\n calendarProps: CalendarProps;\n timeInputProps: DateFieldProps;\n}\n\nexport function useRelativeDateFieldProps(\n state: RelativeDateFieldState,\n props: RelativeDateFieldProps,\n): RelativeDateProps {\n const lastCorrectDate = state.lastCorrectDate ? state.lastCorrectDate.startOf('day') : null;\n const [prevCorrectDate, setPrevCorrectDate] = React.useState(lastCorrectDate);\n const [focusedDate, setFocusedDate] = React.useState(lastCorrectDate);\n\n if (lastCorrectDate && (!prevCorrectDate || !lastCorrectDate.isSame(prevCorrectDate, 'day'))) {\n setPrevCorrectDate(lastCorrectDate);\n setFocusedDate(lastCorrectDate);\n }\n\n const [isOpen, setOpen] = React.useState(false);\n const dialogClosing = React.useRef(false);\n\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\n\n const {focusWithinProps} = useFocusWithin({\n onFocusWithin: props.onFocus,\n onBlurWithin: (e) => {\n props.onBlur?.(e);\n state.confirmValue();\n },\n onFocusWithinChange: (isFocusWithin) => {\n if (!dialogClosing.current) {\n setOpen(isFocusWithin);\n }\n },\n });\n\n const DOMProps = filterDOMProps(props);\n delete DOMProps.id;\n\n return {\n groupProps: {\n ...DOMProps,\n ...focusWithinProps,\n role: 'group',\n onKeyDown: (e) => {\n if (\n isOpen &&\n e.key === 'Escape' &&\n (e.currentTarget as HTMLElement).contains(e.target as Node)\n ) {\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n }\n },\n },\n inputProps: {\n ref: setAnchor,\n size: props.size,\n autoFocus: props.autoFocus,\n value: state.text,\n onUpdate: state.setText,\n disabled: state.disabled,\n hasClear: props.hasClear,\n validationState: state.validationState,\n errorMessage: props.errorMessage,\n errorPlacement: props.errorPlacement,\n label: props.label,\n id: props.id,\n startContent: props.startContent,\n endContent: props.endContent,\n pin: props.pin,\n view: props.view,\n placeholder: props.placeholder,\n onKeyDown: (e) => {\n props.onKeyDown?.(e);\n if (\n !e.defaultPrevented &&\n e.altKey &&\n (e.key === 'ArrowDown' || e.key === 'ArrowUp')\n ) {\n e.preventDefault();\n e.stopPropagation();\n setOpen(true);\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 onClick: () => {\n setOpen(true);\n },\n },\n },\n popupProps: {\n anchorElement: anchor,\n open: isOpen,\n onOpenChange: (open) => {\n if (!open) {\n setOpen(false);\n }\n dialogClosing.current = !open;\n },\n onTransitionOutComplete: () => {\n setTimeout(() => {\n dialogClosing.current = false;\n });\n },\n placement: props.popupPlacement,\n offset: props.popupOffset,\n },\n calendarProps: {\n size: props.size === 's' ? 'm' : props.size,\n readOnly: true,\n value: state.lastCorrectDate,\n focusedValue: focusedDate,\n onFocusUpdate: setFocusedDate,\n },\n timeInputProps: {\n size: props.size,\n readOnly: true,\n value: state.lastCorrectDate,\n format: 'LTS',\n },\n };\n}\n"]}
|
|
@@ -5,6 +5,8 @@ export interface RelativeDateFieldState {
|
|
|
5
5
|
value: string | null;
|
|
6
6
|
/** Sets the field value */
|
|
7
7
|
setValue: (v: string | null) => void;
|
|
8
|
+
/** Commits current text value on blur. */
|
|
9
|
+
confirmValue: () => void;
|
|
8
10
|
/** Current user input */
|
|
9
11
|
text: string;
|
|
10
12
|
/** Sets text */
|
|
@@ -2,50 +2,64 @@ import React from 'react';
|
|
|
2
2
|
import { dateTimeParse, isLikeRelative } from '@gravity-ui/date-utils';
|
|
3
3
|
import { useControlledState } from '@gravity-ui/uikit';
|
|
4
4
|
export function useRelativeDateFieldState(props) {
|
|
5
|
-
|
|
6
|
-
const [
|
|
7
|
-
const [
|
|
8
|
-
if (value
|
|
9
|
-
|
|
5
|
+
const [value, setValue] = useControlledState(props.value, props.defaultValue ?? '', props.onUpdate);
|
|
6
|
+
const [text, setText] = React.useState(value ?? '');
|
|
7
|
+
const [lastValue, setLastValue] = React.useState(value);
|
|
8
|
+
if (value !== lastValue) {
|
|
9
|
+
setLastValue(value);
|
|
10
|
+
setText(value ?? '');
|
|
10
11
|
}
|
|
11
|
-
const
|
|
12
|
+
const parseRelativeDate = React.useCallback((relativeValue) => {
|
|
13
|
+
if (!isLikeRelative(relativeValue)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const date = dateTimeParse(relativeValue, {
|
|
17
|
+
timeZone: props.timeZone,
|
|
18
|
+
roundUp: props.roundUp,
|
|
19
|
+
});
|
|
20
|
+
return date?.isValid() ? date : null;
|
|
21
|
+
}, [props.roundUp, props.timeZone]);
|
|
22
|
+
const parsedDate = React.useMemo(() => parseRelativeDate(text), [parseRelativeDate, text]);
|
|
23
|
+
const [lastCorrectDate, setLastCorrectDate] = React.useState(parsedDate);
|
|
24
|
+
if (parsedDate && (!lastCorrectDate || !parsedDate.isSame(lastCorrectDate))) {
|
|
25
|
+
setLastCorrectDate(parsedDate);
|
|
26
|
+
}
|
|
27
|
+
const commitValue = React.useCallback((nextValue) => {
|
|
12
28
|
if (props.disabled || props.readOnly) {
|
|
13
29
|
return;
|
|
14
30
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
setValue(null);
|
|
23
|
-
}
|
|
31
|
+
setValue(nextValue);
|
|
32
|
+
}, [props.disabled, props.readOnly, setValue]);
|
|
33
|
+
const confirmValue = React.useCallback(() => {
|
|
34
|
+
if (!text) {
|
|
35
|
+
return;
|
|
24
36
|
}
|
|
25
|
-
|
|
37
|
+
if (parsedDate) {
|
|
38
|
+
commitValue(text);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const newValue = parseRelativeDate(value) ? value : null;
|
|
42
|
+
setText(newValue ?? '');
|
|
43
|
+
commitValue(newValue);
|
|
44
|
+
}, [commitValue, parseRelativeDate, parsedDate, text, value]);
|
|
45
|
+
const handleTextChange = React.useCallback((t) => {
|
|
46
|
+
if (props.disabled || props.readOnly) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
setText(t);
|
|
50
|
+
if (!t) {
|
|
26
51
|
setValue(null);
|
|
52
|
+
return;
|
|
27
53
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
var _a;
|
|
31
|
-
if (!value) {
|
|
32
|
-
return null;
|
|
54
|
+
if (parseRelativeDate(t)) {
|
|
55
|
+
setValue(t);
|
|
33
56
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const [lastCorrectDate, setLastCorrectDate] = React.useState(parsedDate);
|
|
37
|
-
if (parsedDate && parsedDate !== lastCorrectDate) {
|
|
38
|
-
setLastCorrectDate(parsedDate);
|
|
39
|
-
}
|
|
40
|
-
const validationState = props.validationState || (text && !parsedDate) ? 'invalid' : undefined;
|
|
57
|
+
}, [parseRelativeDate, props.disabled, props.readOnly, setValue]);
|
|
58
|
+
const validationState = props.validationState ?? (text && !parsedDate ? 'invalid' : undefined);
|
|
41
59
|
return {
|
|
42
60
|
value,
|
|
43
|
-
setValue
|
|
44
|
-
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
setValue(v);
|
|
48
|
-
},
|
|
61
|
+
setValue: commitValue,
|
|
62
|
+
confirmValue,
|
|
49
63
|
text,
|
|
50
64
|
setText: handleTextChange,
|
|
51
65
|
parsedDate,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRelativeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/RelativeDateField/hooks/useRelativeDateFieldState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,aAAa,EAAE,cAAc,EAAC,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"useRelativeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/RelativeDateField/hooks/useRelativeDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {dateTimeParse, isLikeRelative} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {InputBase, Validation, ValueBase} from '../../types';\n\nexport interface RelativeDateFieldState {\n /** The current field value. */\n value: string | null;\n /** Sets the field value */\n setValue: (v: string | null) => void;\n /** Commits current text value on blur. */\n confirmValue: () => void;\n /** Current user input */\n text: string;\n /** Sets text */\n setText: (t: string) => void;\n /** */\n parsedDate: DateTime | null;\n /** */\n lastCorrectDate: DateTime | null;\n /** */\n validationState?: 'invalid';\n /**\n * Whether the field is disabled.\n */\n disabled?: boolean;\n /**\n * Whether the value is immutable.\n */\n readOnly?: boolean;\n}\n\nexport interface RelativeDateFieldOptions extends ValueBase<string | null>, InputBase, Validation {\n timeZone?: string;\n /** Round up parsed date to the nearest granularity. */\n roundUp?: boolean;\n}\nexport function useRelativeDateFieldState(props: RelativeDateFieldOptions): RelativeDateFieldState {\n const [value, setValue] = useControlledState(\n props.value,\n props.defaultValue ?? '',\n props.onUpdate,\n );\n\n const [text, setText] = React.useState(value ?? '');\n const [lastValue, setLastValue] = React.useState(value);\n if (value !== lastValue) {\n setLastValue(value);\n setText(value ?? '');\n }\n\n const parseRelativeDate = React.useCallback(\n (relativeValue: string | null) => {\n if (!isLikeRelative(relativeValue)) {\n return null;\n }\n\n const date = dateTimeParse(relativeValue, {\n timeZone: props.timeZone,\n roundUp: props.roundUp,\n });\n\n return date?.isValid() ? date : null;\n },\n [props.roundUp, props.timeZone],\n );\n\n const parsedDate = React.useMemo(() => parseRelativeDate(text), [parseRelativeDate, text]);\n\n const [lastCorrectDate, setLastCorrectDate] = React.useState(parsedDate);\n if (parsedDate && (!lastCorrectDate || !parsedDate.isSame(lastCorrectDate))) {\n setLastCorrectDate(parsedDate);\n }\n\n const commitValue = React.useCallback(\n (nextValue: string | null) => {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n setValue(nextValue);\n },\n [props.disabled, props.readOnly, setValue],\n );\n\n const confirmValue = React.useCallback(() => {\n if (!text) {\n return;\n }\n\n if (parsedDate) {\n commitValue(text);\n return;\n }\n\n const newValue = parseRelativeDate(value) ? value : null;\n setText(newValue ?? '');\n commitValue(newValue);\n }, [commitValue, parseRelativeDate, parsedDate, text, value]);\n\n const handleTextChange = React.useCallback(\n (t: string) => {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n setText(t);\n\n if (!t) {\n setValue(null);\n return;\n }\n\n if (parseRelativeDate(t)) {\n setValue(t);\n }\n },\n [parseRelativeDate, props.disabled, props.readOnly, setValue],\n );\n\n const validationState = props.validationState ?? (text && !parsedDate ? 'invalid' : undefined);\n\n return {\n value,\n setValue: commitValue,\n confirmValue,\n text,\n setText: handleTextChange,\n parsedDate,\n lastCorrectDate,\n validationState,\n disabled: props.disabled,\n readOnly: props.readOnly,\n };\n}\n"]}
|
|
@@ -8,4 +8,4 @@ export interface RelativeDatePickerProps extends RelativeDatePickerStateOptions,
|
|
|
8
8
|
/** Handler that is called when the popup's open state changes. */
|
|
9
9
|
onOpenChange?: (open: boolean) => void;
|
|
10
10
|
}
|
|
11
|
-
export declare function RelativeDatePicker(props: RelativeDatePickerProps):
|
|
11
|
+
export declare function RelativeDatePicker(props: RelativeDatePickerProps): React.JSX.Element;
|
|
@@ -14,22 +14,25 @@ import { useRelativeDatePickerState } from "./hooks/useRelativeDatePickerState.j
|
|
|
14
14
|
import "./RelativeDatePicker.css";
|
|
15
15
|
const b = block('relative-date-picker');
|
|
16
16
|
export function RelativeDatePicker(props) {
|
|
17
|
-
var _a;
|
|
18
17
|
const state = useRelativeDatePickerState(props);
|
|
19
18
|
const { groupProps, fieldProps, modeSwitcherProps, calendarButtonProps, popupProps, calendarProps, timeInputProps, } = useRelativeDatePickerProps(state, props);
|
|
20
19
|
const [anchor, setAnchor] = React.useState(null);
|
|
21
20
|
const handleRef = useForkRef(groupProps.ref, setAnchor);
|
|
22
21
|
const isMobile = useMobile();
|
|
23
22
|
const isOnlyTime = state.datePickerState.formatInfo.hasTime && !state.datePickerState.formatInfo.hasDate;
|
|
24
|
-
return (_jsxs("div",
|
|
23
|
+
return (_jsxs("div", { ...groupProps, ref: handleRef, className: b(null, props.className), children: [isMobile && state.mode === 'absolute' && (_jsx(MobileCalendar, { state: state.datePickerState, props: {
|
|
25
24
|
id: props.id,
|
|
26
25
|
disabled: props.disabled,
|
|
27
26
|
readOnly: props.readOnly,
|
|
28
27
|
placeholderValue: props.placeholderValue,
|
|
29
28
|
timeZone: props.timeZone,
|
|
30
|
-
} })), _jsx(TextInput,
|
|
29
|
+
} })), _jsx(TextInput, { ...fieldProps, controlProps: {
|
|
30
|
+
...fieldProps.controlProps,
|
|
31
|
+
disabled: isMobile && state.mode === 'absolute',
|
|
32
|
+
className: b('input', { mobile: isMobile && state.mode === 'absolute' }),
|
|
33
|
+
}, hasClear: fieldProps.hasClear && !(isMobile && state.mode === 'absolute'), startContent: _jsx(Button, { ...modeSwitcherProps, children: _jsx(Icon, { data: FunctionIcon }) }), endContent: _jsxs(React.Fragment, { children: [!isMobile && !isOnlyTime && (_jsx(Button, { ...calendarButtonProps, children: _jsx(Icon, { data: CalendarIcon }) })), !isMobile && isOnlyTime && (_jsx(StubButton, { size: calendarButtonProps.size, icon: ClockIcon })), isMobile && state.mode === 'absolute' && (_jsx(StubButton, { size: calendarButtonProps.size, icon: isOnlyTime ? ClockIcon : CalendarIcon }))] }) }), _jsx(HiddenInput, { name: props.name, value: state.value?.type, disabled: state.disabled, form: props.form }), _jsx(HiddenInput, { name: props.name, value: state.value, toStringValue: (value) => getNativeValue(value), onReset: (value) => {
|
|
31
34
|
state.setValue(value);
|
|
32
|
-
}, disabled: state.disabled, form: props.form }), !isMobile && !isOnlyTime && (_jsx(Popup,
|
|
35
|
+
}, disabled: state.disabled, form: props.form }), !isMobile && !isOnlyTime && (_jsx(Popup, { ...popupProps, anchorElement: anchor, children: _jsxs("div", { className: b('popup-content'), children: [typeof props.children === 'function' ? (props.children(calendarProps)) : (_jsx(Calendar, { ...calendarProps })), state.datePickerState.formatInfo.hasTime && (_jsx("div", { className: b('time-field-wrapper'), children: _jsx(DateField, { ...timeInputProps }) }))] }) }))] }));
|
|
33
36
|
}
|
|
34
37
|
function getNativeValue(value) {
|
|
35
38
|
if (!value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RelativeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeDatePicker/RelativeDatePicker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACH,QAAQ,IAAI,YAAY,EACxB,KAAK,IAAI,SAAS,EAClB,QAAQ,IAAI,YAAY,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAExF,OAAO,EAAC,KAAK,EAAC,0BAAuB;AACrC,OAAO,EAAC,QAAQ,EAAC,6BAAoB;AAErC,OAAO,EAAC,SAAS,EAAC,8BAAqB;AACvC,OAAO,EAAC,cAAc,EAAC,wCAAqC;AAC5D,OAAO,EAAC,UAAU,EAAC,oCAAiC;AACpD,OAAO,EAAC,WAAW,EAAC,sCAAmC;AAYvD,OAAO,EAAC,0BAA0B,EAAC,8CAA2C;AAC9E,OAAO,EAAC,0BAA0B,EAAC,8CAA2C;AAG9E,kCAAmC;AAEnC,MAAM,CAAC,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"RelativeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RelativeDatePicker/RelativeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {\n Calendar as CalendarIcon,\n Clock as ClockIcon,\n Function as FunctionIcon,\n} from '@gravity-ui/icons';\nimport {Button, Icon, Popup, TextInput, useForkRef, useMobile} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {Calendar} from '../Calendar';\nimport type {CalendarProps} from '../Calendar';\nimport {DateField} from '../DateField';\nimport {MobileCalendar} from '../DatePicker/MobileCalendar';\nimport {StubButton} from '../DatePicker/StubButton';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputDOMProps,\n KeyboardEvents,\n PopupStyleProps,\n StyleProps,\n TextInputProps,\n} from '../types';\n\nimport {useRelativeDatePickerProps} from './hooks/useRelativeDatePickerProps';\nimport {useRelativeDatePickerState} from './hooks/useRelativeDatePickerState';\nimport type {RelativeDatePickerStateOptions, Value} from './hooks/useRelativeDatePickerState';\n\nimport './RelativeDatePicker.scss';\n\nconst b = block('relative-date-picker');\n\nexport interface RelativeDatePickerProps\n extends\n RelativeDatePickerStateOptions,\n TextInputProps,\n FocusableProps,\n KeyboardEvents,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n PopupStyleProps {\n children?: (props: CalendarProps) => React.ReactNode;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function RelativeDatePicker(props: RelativeDatePickerProps) {\n const state = useRelativeDatePickerState(props);\n\n const {\n groupProps,\n fieldProps,\n modeSwitcherProps,\n calendarButtonProps,\n popupProps,\n calendarProps,\n timeInputProps,\n } = useRelativeDatePickerProps(state, props);\n\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\n const handleRef = useForkRef(groupProps.ref, setAnchor);\n\n const isMobile = useMobile();\n const isOnlyTime =\n state.datePickerState.formatInfo.hasTime && !state.datePickerState.formatInfo.hasDate;\n\n return (\n <div {...groupProps} ref={handleRef} className={b(null, props.className)}>\n {isMobile && state.mode === 'absolute' && (\n <MobileCalendar\n state={state.datePickerState}\n props={{\n id: props.id,\n disabled: props.disabled,\n readOnly: props.readOnly,\n placeholderValue: props.placeholderValue,\n timeZone: props.timeZone,\n }}\n />\n )}\n <TextInput\n {...fieldProps}\n controlProps={{\n ...fieldProps.controlProps,\n disabled: isMobile && state.mode === 'absolute',\n className: b('input', {mobile: isMobile && state.mode === 'absolute'}),\n }}\n hasClear={fieldProps.hasClear && !(isMobile && state.mode === 'absolute')}\n startContent={\n <Button {...modeSwitcherProps}>\n <Icon data={FunctionIcon} />\n </Button>\n }\n endContent={\n <React.Fragment>\n {!isMobile && !isOnlyTime && (\n <Button {...calendarButtonProps}>\n <Icon data={CalendarIcon} />\n </Button>\n )}\n {!isMobile && isOnlyTime && (\n <StubButton size={calendarButtonProps.size} icon={ClockIcon} />\n )}\n {isMobile && state.mode === 'absolute' && (\n <StubButton\n size={calendarButtonProps.size}\n icon={isOnlyTime ? ClockIcon : CalendarIcon}\n />\n )}\n </React.Fragment>\n }\n />\n <HiddenInput\n name={props.name}\n value={state.value?.type}\n disabled={state.disabled}\n form={props.form}\n />\n <HiddenInput\n name={props.name}\n value={state.value}\n toStringValue={(value) => getNativeValue(value)}\n onReset={(value) => {\n state.setValue(value);\n }}\n disabled={state.disabled}\n form={props.form}\n />\n {!isMobile && !isOnlyTime && (\n <Popup {...popupProps} anchorElement={anchor}>\n <div className={b('popup-content')}>\n {typeof props.children === 'function' ? (\n props.children(calendarProps)\n ) : (\n <Calendar {...calendarProps} />\n )}\n {state.datePickerState.formatInfo.hasTime && (\n <div className={b('time-field-wrapper')}>\n <DateField {...timeInputProps} />\n </div>\n )}\n </div>\n </Popup>\n )}\n </div>\n );\n}\n\nfunction getNativeValue(value: Value | null) {\n if (!value) {\n return '';\n }\n if (value.type === 'relative') {\n return value.value;\n }\n return value.value.toISOString();\n}\n"]}
|
|
@@ -12,7 +12,7 @@ interface InnerRelativeDatePickerProps {
|
|
|
12
12
|
modeSwitcherProps: ButtonButtonProps;
|
|
13
13
|
calendarButtonProps: ButtonButtonProps;
|
|
14
14
|
popupProps: PopupProps;
|
|
15
|
-
calendarProps: React.ComponentProps<typeof Calendar
|
|
15
|
+
calendarProps: React.ComponentProps<typeof Calendar<'single'>>;
|
|
16
16
|
timeInputProps: DateFieldProps;
|
|
17
17
|
}
|
|
18
18
|
export declare function useRelativeDatePickerProps(state: RelativeDatePickerState, { onFocus, onBlur, ...props }: RelativeDatePickerProps): InnerRelativeDatePickerProps;
|