@gravity-ui/date-components 1.6.0 → 2.0.1
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/dist/cjs/components/Calendar/Calendar.d.ts +6 -5
- package/dist/cjs/components/Calendar/Calendar.js +4 -4
- package/dist/cjs/components/Calendar/index.d.ts +6 -6
- package/dist/cjs/components/Calendar/index.js +5 -5
- package/dist/cjs/components/{CalendarBase → CalendarView}/Calendar.css +9 -6
- package/dist/cjs/components/{CalendarBase/CalendarBase.d.ts → CalendarView/CalendarView.d.ts} +2 -2
- package/dist/cjs/components/{CalendarBase/CalendarBase.js → CalendarView/CalendarView.js} +4 -3
- package/dist/{esm/components/CalendarBase → cjs/components/CalendarView}/hooks/types.d.ts +37 -31
- package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.js +1 -2
- package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.d.ts +2 -2
- package/dist/{esm/components/CalendarBase → cjs/components/CalendarView}/hooks/useCalendarState.d.ts +1 -1
- package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarState.js +45 -23
- package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.d.ts +8 -0
- package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useRangeCalendarState.js +25 -14
- package/dist/cjs/components/DateField/DateField.d.ts +1 -4
- package/dist/cjs/components/DateField/DateField.js +3 -1
- package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.d.ts +97 -0
- package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js +316 -0
- package/dist/cjs/components/DateField/hooks/useDateFieldProps.d.ts +6 -3
- package/dist/cjs/components/DateField/hooks/useDateFieldProps.js +14 -12
- package/dist/cjs/components/DateField/hooks/useDateFieldState.d.ts +2 -65
- package/dist/cjs/components/DateField/hooks/useDateFieldState.js +98 -410
- package/dist/cjs/components/DateField/index.d.ts +1 -0
- package/dist/cjs/components/DateField/index.js +1 -0
- package/dist/cjs/components/DateField/utils.d.ts +10 -1
- package/dist/cjs/components/DateField/utils.js +114 -2
- package/dist/cjs/components/DatePicker/DatePicker.d.ts +4 -4
- package/dist/cjs/components/DatePicker/DatePicker.js +6 -6
- package/dist/cjs/components/DatePicker/MobileCalendar.css +6 -6
- package/dist/cjs/components/DatePicker/MobileCalendar.js +17 -12
- package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +5 -16
- package/dist/cjs/components/DatePicker/hooks/useDatePickerState.d.ts +5 -4
- package/dist/cjs/components/DatePicker/hooks/useDatePickerState.js +71 -56
- package/dist/cjs/components/RangeCalendar/RangeCalendar.d.ts +3 -3
- package/dist/cjs/components/RangeCalendar/RangeCalendar.js +4 -4
- package/dist/cjs/components/RangeDateField/RangeDateField.css +4 -0
- package/dist/cjs/components/RangeDateField/RangeDateField.d.ts +12 -0
- package/dist/cjs/components/RangeDateField/RangeDateField.js +25 -0
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.d.ts +9 -0
- package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +227 -0
- package/dist/cjs/components/RangeDateField/index.d.ts +2 -0
- package/dist/cjs/components/RangeDateField/index.js +5 -0
- package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +5 -0
- package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +9 -0
- package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.d.ts +5 -0
- package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js +42 -0
- package/dist/cjs/components/RangeDateField/utils/index.d.ts +3 -0
- package/dist/cjs/components/RangeDateField/utils/index.js +6 -0
- package/dist/cjs/components/RangeDateField/utils/isValidRange.d.ts +3 -0
- package/dist/cjs/components/RangeDateField/utils/isValidRange.js +8 -0
- package/dist/cjs/components/RelativeDateField/RelativeDateField.d.ts +2 -2
- package/dist/cjs/components/RelativeDateField/RelativeDateField.js +5 -2
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +5 -11
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +3 -1
- package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js +5 -4
- package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.css +3 -0
- package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.d.ts +2 -2
- package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +13 -2
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +35 -27
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.d.ts +2 -2
- package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +12 -16
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +56 -0
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +27 -0
- package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +90 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +32 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +14 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +43 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +1 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.js +9 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +16 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +104 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.css +26 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +18 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +67 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +14 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +7 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +90 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +9 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +186 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/en.json +40 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +1 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/index.js +9 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/i18n/ru.json +40 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +16 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +85 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.css +3 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +9 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +62 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/en.json +4 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +1 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/index.js +9 -0
- package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/i18n/ru.json +4 -0
- package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +26 -0
- package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +58 -0
- package/dist/cjs/components/RelativeRangeDatePicker/i18n/en.json +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.d.ts +1 -0
- package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.js +9 -0
- package/dist/cjs/components/RelativeRangeDatePicker/i18n/ru.json +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/index.d.ts +4 -0
- package/dist/cjs/components/RelativeRangeDatePicker/index.js +8 -0
- package/dist/cjs/components/RelativeRangeDatePicker/utils.d.ts +15 -0
- package/dist/cjs/components/RelativeRangeDatePicker/utils.js +53 -0
- package/dist/cjs/components/index.d.ts +3 -0
- package/dist/cjs/components/index.js +2 -0
- package/dist/cjs/components/types/datePicker.d.ts +5 -2
- package/dist/cjs/components/types/events.d.ts +4 -4
- package/dist/cjs/components/types/inputs.d.ts +10 -9
- package/dist/cjs/components/utils/dates.d.ts +1 -2
- package/dist/cjs/components/utils/useDefaultTimeZone.d.ts +2 -0
- package/dist/cjs/components/utils/useDefaultTimeZone.js +15 -0
- package/dist/cjs/components/utils/validation/datePicker.d.ts +6 -0
- package/dist/cjs/components/utils/validation/datePicker.js +30 -0
- package/dist/cjs/components/utils/validation/i18n/en.json +6 -0
- package/dist/cjs/components/utils/validation/i18n/index.d.ts +1 -0
- package/dist/cjs/components/utils/validation/i18n/index.js +9 -0
- package/dist/cjs/components/utils/validation/i18n/ru.json +6 -0
- package/dist/esm/components/Calendar/Calendar.d.ts +6 -5
- package/dist/esm/components/Calendar/Calendar.js +4 -4
- package/dist/esm/components/Calendar/index.d.ts +6 -6
- package/dist/esm/components/Calendar/index.js +5 -5
- package/dist/esm/components/{CalendarBase → CalendarView}/Calendar.css +9 -6
- package/dist/esm/components/{CalendarBase/CalendarBase.d.ts → CalendarView/CalendarView.d.ts} +2 -2
- package/dist/esm/components/{CalendarBase/CalendarBase.js → CalendarView/CalendarView.js} +3 -2
- package/dist/{cjs/components/CalendarBase → esm/components/CalendarView}/hooks/types.d.ts +37 -31
- package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.js +1 -2
- package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.d.ts +2 -2
- package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.js +0 -1
- package/dist/{cjs/components/CalendarBase → esm/components/CalendarView}/hooks/useCalendarState.d.ts +1 -1
- package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarState.js +46 -24
- package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.d.ts +8 -0
- package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useRangeCalendarState.js +24 -13
- package/dist/esm/components/DateField/DateField.d.ts +1 -4
- package/dist/esm/components/DateField/DateField.js +4 -2
- package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +97 -0
- package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +311 -0
- package/dist/esm/components/DateField/hooks/useDateFieldProps.d.ts +6 -3
- package/dist/esm/components/DateField/hooks/useDateFieldProps.js +14 -12
- package/dist/esm/components/DateField/hooks/useDateFieldState.d.ts +2 -65
- package/dist/esm/components/DateField/hooks/useDateFieldState.js +97 -409
- package/dist/esm/components/DateField/index.d.ts +1 -0
- package/dist/esm/components/DateField/index.js +1 -0
- package/dist/esm/components/DateField/utils.d.ts +10 -1
- package/dist/esm/components/DateField/utils.js +105 -2
- package/dist/esm/components/DatePicker/DatePicker.d.ts +4 -4
- package/dist/esm/components/DatePicker/DatePicker.js +6 -6
- package/dist/esm/components/DatePicker/MobileCalendar.css +6 -6
- package/dist/esm/components/DatePicker/MobileCalendar.js +17 -12
- package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +5 -16
- package/dist/esm/components/DatePicker/hooks/useDatePickerState.d.ts +5 -4
- package/dist/esm/components/DatePicker/hooks/useDatePickerState.js +71 -56
- package/dist/esm/components/RangeCalendar/RangeCalendar.d.ts +3 -3
- package/dist/esm/components/RangeCalendar/RangeCalendar.js +4 -4
- package/dist/esm/components/RangeDateField/RangeDateField.css +4 -0
- package/dist/esm/components/RangeDateField/RangeDateField.d.ts +12 -0
- package/dist/esm/components/RangeDateField/RangeDateField.js +21 -0
- package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.d.ts +9 -0
- package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +222 -0
- package/dist/esm/components/RangeDateField/index.d.ts +2 -0
- package/dist/esm/components/RangeDateField/index.js +2 -0
- package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +5 -0
- package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +5 -0
- package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.d.ts +5 -0
- package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js +38 -0
- package/dist/esm/components/RangeDateField/utils/index.d.ts +3 -0
- package/dist/esm/components/RangeDateField/utils/index.js +3 -0
- package/dist/esm/components/RangeDateField/utils/isValidRange.d.ts +3 -0
- package/dist/esm/components/RangeDateField/utils/isValidRange.js +4 -0
- package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +2 -2
- package/dist/esm/components/RelativeDateField/RelativeDateField.js +5 -2
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +5 -11
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +3 -1
- package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js +5 -4
- package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.css +3 -0
- package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +2 -2
- package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +13 -2
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +35 -27
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.d.ts +2 -2
- package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +12 -16
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +56 -0
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +27 -0
- package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +85 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +32 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +14 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +39 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/en.json +8 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.d.ts +1 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/index.js +5 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/i18n/ru.json +8 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +16 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +99 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.css +26 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +18 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +62 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.css +14 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.d.ts +7 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/PresetsDoc.js +85 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +9 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js +183 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/en.json +40 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/index.d.ts +1 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/index.js +5 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/i18n/ru.json +40 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +16 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +78 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.css +3 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +9 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +58 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/en.json +4 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/index.d.ts +1 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/index.js +5 -0
- package/dist/esm/components/RelativeRangeDatePicker/components/Zones/i18n/ru.json +4 -0
- package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +26 -0
- package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +53 -0
- package/dist/esm/components/RelativeRangeDatePicker/i18n/en.json +8 -0
- package/dist/esm/components/RelativeRangeDatePicker/i18n/index.d.ts +1 -0
- package/dist/esm/components/RelativeRangeDatePicker/i18n/index.js +5 -0
- package/dist/esm/components/RelativeRangeDatePicker/i18n/ru.json +8 -0
- package/dist/esm/components/RelativeRangeDatePicker/index.d.ts +4 -0
- package/dist/esm/components/RelativeRangeDatePicker/index.js +3 -0
- package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +15 -0
- package/dist/esm/components/RelativeRangeDatePicker/utils.js +46 -0
- package/dist/esm/components/index.d.ts +3 -0
- package/dist/esm/components/index.js +2 -0
- package/dist/esm/components/types/datePicker.d.ts +5 -2
- package/dist/esm/components/types/events.d.ts +4 -4
- package/dist/esm/components/types/inputs.d.ts +10 -9
- package/dist/esm/components/utils/dates.d.ts +1 -2
- package/dist/esm/components/utils/useDefaultTimeZone.d.ts +2 -0
- package/dist/esm/components/utils/useDefaultTimeZone.js +10 -0
- package/dist/esm/components/utils/validation/datePicker.d.ts +6 -0
- package/dist/esm/components/utils/validation/datePicker.js +26 -0
- package/dist/esm/components/utils/validation/i18n/en.json +6 -0
- package/dist/esm/components/utils/validation/i18n/index.d.ts +1 -0
- package/dist/esm/components/utils/validation/i18n/index.js +5 -0
- package/dist/esm/components/utils/validation/i18n/ru.json +6 -0
- package/package.json +27 -27
- package/dist/cjs/components/CalendarBase/hooks/useRangeCalendarState.d.ts +0 -7
- package/dist/cjs/components/hooks/useControlledState.d.ts +0 -1
- package/dist/cjs/components/hooks/useControlledState.js +0 -28
- package/dist/esm/components/CalendarBase/hooks/useRangeCalendarState.d.ts +0 -7
- package/dist/esm/components/hooks/useControlledState.d.ts +0 -1
- package/dist/esm/components/hooks/useControlledState.js +0 -23
- /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/types.js +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.d.ts +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarGridProps.js +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.d.ts +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.js +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/en.json +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/index.d.ts +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/index.js +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/i18n/ru.json +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/utils.d.ts +0 -0
- /package/dist/cjs/components/{CalendarBase → CalendarView}/utils.js +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/types.js +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarCellProps.d.ts +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.d.ts +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/hooks/useCalendarProps.js +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/en.json +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/index.d.ts +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/index.js +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/i18n/ru.json +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/utils.d.ts +0 -0
- /package/dist/esm/components/{CalendarBase → CalendarView}/utils.js +0 -0
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cleanString = exports.splitFormatIntoSections = exports.setSegment = exports.addSegment = exports.getDurationUnitFromSectionType = exports.getSectionValue = exports.getSectionLimits = exports.expandFormat = void 0;
|
|
3
|
+
exports.useFormatSections = exports.isAllSegmentsValid = exports.parseDateFromString = exports.formatSections = exports.getCurrentEditableSectionIndex = exports.toEditableSection = exports.isEditableSection = exports.getEditableSections = exports.cleanString = exports.splitFormatIntoSections = exports.setSegment = exports.addSegment = exports.getDurationUnitFromSectionType = exports.getSectionValue = exports.getSectionLimits = exports.expandFormat = exports.EDITABLE_SEGMENTS = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
4
6
|
const date_utils_1 = require("@gravity-ui/date-utils");
|
|
7
|
+
const dates_1 = require("../utils/dates");
|
|
5
8
|
const i18n_1 = require("./i18n");
|
|
9
|
+
exports.EDITABLE_SEGMENTS = {
|
|
10
|
+
year: true,
|
|
11
|
+
month: true,
|
|
12
|
+
day: true,
|
|
13
|
+
hour: true,
|
|
14
|
+
minute: true,
|
|
15
|
+
second: true,
|
|
16
|
+
dayPeriod: true,
|
|
17
|
+
weekday: true,
|
|
18
|
+
};
|
|
6
19
|
function expandFormat(format) {
|
|
7
20
|
const localeFormats = date_utils_1.settings.getLocaleData().formats;
|
|
8
21
|
const getShortLocalizedFormatFromLongLocalizedFormat = (formatBis) => formatBis.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (_, escapeSequence, localizedFormat) => escapeSequence || localizedFormat.slice(1));
|
|
@@ -320,7 +333,7 @@ function splitFormatIntoSections(format) {
|
|
|
320
333
|
let isSeparator = false;
|
|
321
334
|
let isInEscapeBoundary = false;
|
|
322
335
|
for (let i = 0; i < expandedFormat.length; i++) {
|
|
323
|
-
const char = expandedFormat[i];
|
|
336
|
+
const char = expandedFormat[i] || '';
|
|
324
337
|
if (isInEscapeBoundary) {
|
|
325
338
|
if (char === escapedCharacters.end) {
|
|
326
339
|
isInEscapeBoundary = false;
|
|
@@ -419,3 +432,102 @@ function cleanString(dirtyString) {
|
|
|
419
432
|
return dirtyString.replace(/[\u2066\u2067\u2068\u2069]/g, '');
|
|
420
433
|
}
|
|
421
434
|
exports.cleanString = cleanString;
|
|
435
|
+
function getEditableSections(sections, value, validSegments) {
|
|
436
|
+
let position = 1;
|
|
437
|
+
const newSections = [];
|
|
438
|
+
let previousEditableSection = -1;
|
|
439
|
+
for (let i = 0; i < sections.length; i++) {
|
|
440
|
+
const section = sections[i];
|
|
441
|
+
if (!section) {
|
|
442
|
+
continue;
|
|
443
|
+
}
|
|
444
|
+
const newSection = toEditableSection(section, value, validSegments, position, previousEditableSection);
|
|
445
|
+
newSections.push(newSection);
|
|
446
|
+
if (isEditableSection(section)) {
|
|
447
|
+
for (let j = Math.max(0, previousEditableSection); j <= i; j++) {
|
|
448
|
+
const prevSection = newSections[j];
|
|
449
|
+
if (prevSection) {
|
|
450
|
+
prevSection.nextEditableSection = i;
|
|
451
|
+
if (prevSection.previousEditableSection === -1) {
|
|
452
|
+
prevSection.previousEditableSection = i;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
previousEditableSection = i;
|
|
457
|
+
}
|
|
458
|
+
position += newSection.textValue.length;
|
|
459
|
+
}
|
|
460
|
+
return newSections;
|
|
461
|
+
}
|
|
462
|
+
exports.getEditableSections = getEditableSections;
|
|
463
|
+
function isEditableSection(section) {
|
|
464
|
+
var _a;
|
|
465
|
+
return (_a = exports.EDITABLE_SEGMENTS[section.type]) !== null && _a !== void 0 ? _a : false;
|
|
466
|
+
}
|
|
467
|
+
exports.isEditableSection = isEditableSection;
|
|
468
|
+
function toEditableSection(section, value, validSegments, position, previousEditableSection) {
|
|
469
|
+
const isEditable = isEditableSection(section);
|
|
470
|
+
let renderedValue = section.placeholder;
|
|
471
|
+
if ((isEditable && validSegments[section.type]) || section.type === 'timeZoneName') {
|
|
472
|
+
renderedValue = value.format(section.format);
|
|
473
|
+
if (section.contentType === 'digit' && renderedValue.length < section.placeholder.length) {
|
|
474
|
+
renderedValue = renderedValue.padStart(section.placeholder.length, '0');
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
// use bidirectional context to allow the browser autodetect text direction
|
|
478
|
+
renderedValue = '\u2068' + renderedValue + '\u2069';
|
|
479
|
+
const sectionLength = renderedValue.length;
|
|
480
|
+
const newSection = Object.assign(Object.assign(Object.assign({}, section), { value: getSectionValue(section, value), textValue: renderedValue, start: position, end: position + sectionLength, modified: false, previousEditableSection, nextEditableSection: previousEditableSection }), getSectionLimits(section, value));
|
|
481
|
+
return newSection;
|
|
482
|
+
}
|
|
483
|
+
exports.toEditableSection = toEditableSection;
|
|
484
|
+
function getCurrentEditableSectionIndex(sections, selectedSections) {
|
|
485
|
+
const currentIndex = selectedSections === 'all' || selectedSections === -1 ? 0 : selectedSections;
|
|
486
|
+
const section = sections[currentIndex];
|
|
487
|
+
if (section && !exports.EDITABLE_SEGMENTS[section.type]) {
|
|
488
|
+
return section.nextEditableSection;
|
|
489
|
+
}
|
|
490
|
+
return section ? currentIndex : -1;
|
|
491
|
+
}
|
|
492
|
+
exports.getCurrentEditableSectionIndex = getCurrentEditableSectionIndex;
|
|
493
|
+
function formatSections(sections) {
|
|
494
|
+
// use ltr direction context to get predictable navigation inside input
|
|
495
|
+
return '\u2066' + sections.map((s) => s.textValue).join('') + '\u2069';
|
|
496
|
+
}
|
|
497
|
+
exports.formatSections = formatSections;
|
|
498
|
+
function parseDate(options) {
|
|
499
|
+
let date = (0, date_utils_1.dateTime)(options);
|
|
500
|
+
if (!(0, date_utils_1.isValid)(date)) {
|
|
501
|
+
date = (0, date_utils_1.dateTime)(Object.assign(Object.assign({}, options), { format: undefined }));
|
|
502
|
+
}
|
|
503
|
+
return date;
|
|
504
|
+
}
|
|
505
|
+
function isDateStringWithTimeZone(str) {
|
|
506
|
+
return /z$/i.test(str) || /[+-]\d\d:\d\d$/.test(str);
|
|
507
|
+
}
|
|
508
|
+
function parseDateFromString(str, format, timeZone) {
|
|
509
|
+
let date = parseDate({ input: str, format, timeZone });
|
|
510
|
+
if ((0, date_utils_1.isValid)(date)) {
|
|
511
|
+
if (timeZone && !isDateStringWithTimeZone(str)) {
|
|
512
|
+
const time = parseDate({ input: str, format });
|
|
513
|
+
date = (0, dates_1.mergeDateTime)(date, time);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
return date;
|
|
517
|
+
}
|
|
518
|
+
exports.parseDateFromString = parseDateFromString;
|
|
519
|
+
function isAllSegmentsValid(allSegments, validSegments) {
|
|
520
|
+
return Object.keys(allSegments).every((key) => validSegments[key]);
|
|
521
|
+
}
|
|
522
|
+
exports.isAllSegmentsValid = isAllSegmentsValid;
|
|
523
|
+
function useFormatSections(format) {
|
|
524
|
+
const usedFormat = format;
|
|
525
|
+
const [sections, setSections] = react_1.default.useState(() => splitFormatIntoSections(usedFormat));
|
|
526
|
+
const [previousFormat, setFormat] = react_1.default.useState(usedFormat);
|
|
527
|
+
if (usedFormat !== previousFormat) {
|
|
528
|
+
setFormat(usedFormat);
|
|
529
|
+
setSections(splitFormatIntoSections(usedFormat));
|
|
530
|
+
}
|
|
531
|
+
return sections;
|
|
532
|
+
}
|
|
533
|
+
exports.useFormatSections = useFormatSections;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import type { AccessibilityProps, DateFieldBase, DomProps, FocusableProps, KeyboardEvents, StyleProps, TextInputProps } from '../types';
|
|
2
|
+
import type { CalendarProps } from '../Calendar';
|
|
3
|
+
import type { AccessibilityProps, DateFieldBase, DomProps, FocusableProps, InputDOMProps, KeyboardEvents, StyleProps, TextInputProps } from '../types';
|
|
4
4
|
import './DatePicker.css';
|
|
5
|
-
export interface DatePickerProps extends DateFieldBase, TextInputProps, FocusableProps, KeyboardEvents, DomProps, StyleProps, AccessibilityProps {
|
|
5
|
+
export interface DatePickerProps extends DateFieldBase, TextInputProps, FocusableProps, KeyboardEvents, DomProps, InputDOMProps, StyleProps, AccessibilityProps {
|
|
6
6
|
children?: (props: CalendarProps) => React.ReactNode;
|
|
7
7
|
}
|
|
8
|
-
export declare function DatePicker({
|
|
8
|
+
export declare function DatePicker({ className, ...props }: DatePickerProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -14,13 +14,13 @@ const useDatePickerState_1 = require("./hooks/useDatePickerState");
|
|
|
14
14
|
const utils_1 = require("./utils");
|
|
15
15
|
require("./DatePicker.css");
|
|
16
16
|
function DatePicker(_a) {
|
|
17
|
-
var {
|
|
17
|
+
var { className } = _a, props = tslib_1.__rest(_a, ["className"]);
|
|
18
18
|
const anchorRef = react_1.default.useRef(null);
|
|
19
|
-
const state = (0, useDatePickerState_1.useDatePickerState)(
|
|
20
|
-
defaultValue,
|
|
21
|
-
onUpdate }));
|
|
19
|
+
const state = (0, useDatePickerState_1.useDatePickerState)(props);
|
|
22
20
|
const { groupProps, fieldProps, calendarButtonProps, popupProps, calendarProps, timeInputProps } = (0, useDatePickerProps_1.useDatePickerProps)(state, props);
|
|
23
|
-
const
|
|
24
|
-
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, utils_1.b)(null, className) }, groupProps, { children: [isMobile ? ((0, jsx_runtime_1.jsx)(MobileCalendar_1.MobileCalendar, { props: props, state: state })) : ((0, jsx_runtime_1.jsx)("div", { ref: anchorRef, className: (0, utils_1.b)('popup-anchor'), children: (0, jsx_runtime_1.jsx)(uikit_1.Popup, Object.assign({ anchorRef: anchorRef }, popupProps, { children: (0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.b)('popup-content'), children: [typeof props.children === 'function' ? (props.children(calendarProps)) : ((0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps))), state.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.b)('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({}, timeInputProps)) }))] }) })) })), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, fieldProps, { className: (0, utils_1.b)('field', { mobile: isMobile }), hasClear: !isMobile && fieldProps.hasClear,
|
|
21
|
+
const isMobile = (0, uikit_1.useMobile)();
|
|
22
|
+
return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: (0, utils_1.b)(null, className) }, groupProps, { children: [isMobile ? ((0, jsx_runtime_1.jsx)(MobileCalendar_1.MobileCalendar, { props: props, state: state })) : ((0, jsx_runtime_1.jsx)("div", { ref: anchorRef, className: (0, utils_1.b)('popup-anchor'), children: (0, jsx_runtime_1.jsx)(uikit_1.Popup, Object.assign({ anchorRef: anchorRef }, popupProps, { children: (0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.b)('popup-content'), children: [typeof props.children === 'function' ? (props.children(calendarProps)) : ((0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps))), state.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.b)('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({}, timeInputProps)) }))] }) })) })), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, fieldProps, { className: (0, utils_1.b)('field', { mobile: isMobile }), hasClear: !isMobile && fieldProps.hasClear, endContent: isMobile ? ((0, jsx_runtime_1.jsx)(MobileCalendar_1.MobileCalendarIcon, { props: props, state: state })) : ((0, jsx_runtime_1.jsx)(uikit_1.Button, Object.assign({}, calendarButtonProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }))) })), (0, jsx_runtime_1.jsx)("input", { type: "text", hidden: true, name: props.name, value: state.value ? state.value.toISOString() : '',
|
|
23
|
+
// Ignore React warning
|
|
24
|
+
onChange: () => { } })] })));
|
|
25
25
|
}
|
|
26
26
|
exports.DatePicker = DatePicker;
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
.g-date-mobile-calendar__input {
|
|
27
27
|
position: absolute;
|
|
28
28
|
z-index: 1;
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
inset-block-start: 0;
|
|
30
|
+
inset-inline-start: 0;
|
|
31
31
|
box-sizing: border-box;
|
|
32
|
-
width: 100%;
|
|
32
|
+
min-width: 100%;
|
|
33
33
|
height: 100%;
|
|
34
34
|
margin: 0;
|
|
35
35
|
padding: 0;
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
}
|
|
40
40
|
.g-date-mobile-calendar__input::-webkit-calendar-picker-indicator {
|
|
41
41
|
position: absolute;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
width: 100%;
|
|
42
|
+
inset-block-start: 0;
|
|
43
|
+
inset-inline-start: 0;
|
|
44
|
+
min-width: 100%;
|
|
45
45
|
height: 100%;
|
|
46
46
|
margin: 0;
|
|
47
47
|
padding: 0;
|
|
@@ -11,6 +11,7 @@ const getButtonSizeForInput_1 = require("../utils/getButtonSizeForInput");
|
|
|
11
11
|
require("./MobileCalendar.css");
|
|
12
12
|
const b = (0, cn_1.block)('mobile-calendar');
|
|
13
13
|
function MobileCalendar({ props, state }) {
|
|
14
|
+
var _a, _b;
|
|
14
15
|
let type = 'date';
|
|
15
16
|
if (state.hasTime && state.hasDate) {
|
|
16
17
|
type = 'datetime-local';
|
|
@@ -18,31 +19,35 @@ function MobileCalendar({ props, state }) {
|
|
|
18
19
|
else if (state.hasTime) {
|
|
19
20
|
type = 'time';
|
|
20
21
|
}
|
|
21
|
-
return ((0, jsx_runtime_1.jsx)("input", { className: b('input'), disabled: props.disabled, type: type, value: formatNative(state.
|
|
22
|
+
return ((0, jsx_runtime_1.jsx)("input", { className: b('input'), disabled: props.disabled, type: type, value: formatNative(state.dateFieldState.displayValue, type), id: props.id, min: formatNative((_a = props.minValue) === null || _a === void 0 ? void 0 : _a.timeZone(state.timeZone), type), max: formatNative((_b = props.maxValue) === null || _b === void 0 ? void 0 : _b.timeZone(state.timeZone), type), tabIndex: -1, onChange: (e) => {
|
|
23
|
+
var _a, _b;
|
|
22
24
|
if (props.readOnly) {
|
|
23
25
|
return;
|
|
24
26
|
}
|
|
25
27
|
const newValue = e.target.value;
|
|
26
28
|
if (newValue) {
|
|
27
|
-
const localDate = (0, date_utils_1.dateTime)({
|
|
29
|
+
const localDate = (0, date_utils_1.dateTime)({
|
|
30
|
+
input: newValue,
|
|
31
|
+
format: getDateFormat(type),
|
|
32
|
+
timeZone: 'system',
|
|
33
|
+
}).timeZone(state.timeZone, true);
|
|
28
34
|
let newDate = state.hasDate
|
|
29
|
-
?
|
|
30
|
-
input: newValue,
|
|
31
|
-
format: getDateFormat(type),
|
|
32
|
-
timeZone: props.timeZone,
|
|
33
|
-
})
|
|
35
|
+
? localDate
|
|
34
36
|
: (0, dates_1.createPlaceholderValue)({
|
|
35
|
-
placeholderValue: props.placeholderValue,
|
|
36
|
-
timeZone:
|
|
37
|
+
placeholderValue: (_a = props.placeholderValue) === null || _a === void 0 ? void 0 : _a.timeZone(state.timeZone),
|
|
38
|
+
timeZone: state.timeZone,
|
|
37
39
|
});
|
|
38
40
|
if (state.hasTime) {
|
|
39
41
|
newDate = (0, dates_1.mergeDateTime)(newDate, localDate);
|
|
40
42
|
}
|
|
41
|
-
else if (state.
|
|
42
|
-
newDate = (0, dates_1.mergeDateTime)(newDate, state.
|
|
43
|
+
else if (state.value) {
|
|
44
|
+
newDate = (0, dates_1.mergeDateTime)(newDate, state.value.timeZone(state.timeZone));
|
|
43
45
|
}
|
|
44
46
|
else {
|
|
45
|
-
newDate =
|
|
47
|
+
newDate = (0, dates_1.mergeDateTime)(newDate, (0, dates_1.createPlaceholderValue)({
|
|
48
|
+
placeholderValue: (_b = props.placeholderValue) === null || _b === void 0 ? void 0 : _b.timeZone(state.timeZone),
|
|
49
|
+
timeZone: state.timeZone,
|
|
50
|
+
}));
|
|
46
51
|
}
|
|
47
52
|
state.setValue(newDate);
|
|
48
53
|
}
|
|
@@ -9,7 +9,6 @@ const getButtonSizeForInput_1 = require("../../utils/getButtonSizeForInput");
|
|
|
9
9
|
const mergeProps_1 = require("../../utils/mergeProps");
|
|
10
10
|
const i18n_1 = require("../i18n");
|
|
11
11
|
function useDatePickerProps(state, _a) {
|
|
12
|
-
var _b;
|
|
13
12
|
var { onFocus, onBlur } = _a, props = tslib_1.__rest(_a, ["onFocus", "onBlur"]);
|
|
14
13
|
const [isActive, setActive] = react_1.default.useState(false);
|
|
15
14
|
const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
|
|
@@ -23,15 +22,6 @@ function useDatePickerProps(state, _a) {
|
|
|
23
22
|
},
|
|
24
23
|
});
|
|
25
24
|
const { inputProps } = (0, DateField_1.useDateFieldProps)(state.dateFieldState, props);
|
|
26
|
-
let error;
|
|
27
|
-
let validationState = props.validationState;
|
|
28
|
-
if (validationState) {
|
|
29
|
-
error = validationState === 'invalid' ? props.errorMessage || true : undefined;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
validationState = state.dateFieldState.validationState;
|
|
33
|
-
error = validationState === 'invalid';
|
|
34
|
-
}
|
|
35
25
|
const inputRef = react_1.default.useRef(null);
|
|
36
26
|
const handleRef = (0, uikit_1.useForkRef)(inputRef, inputProps.controlRef);
|
|
37
27
|
const calendarRef = react_1.default.useRef(null);
|
|
@@ -53,7 +43,7 @@ function useDatePickerProps(state, _a) {
|
|
|
53
43
|
} }),
|
|
54
44
|
fieldProps: (0, mergeProps_1.mergeProps)(inputProps, state.dateFieldState.isEmpty && !isActive && props.placeholder
|
|
55
45
|
? { value: '' }
|
|
56
|
-
: undefined, { controlRef: handleRef
|
|
46
|
+
: undefined, { controlRef: handleRef }),
|
|
57
47
|
calendarButtonProps: {
|
|
58
48
|
ref: calendarButtonRef,
|
|
59
49
|
size: (0, getButtonSizeForInput_1.getButtonSizeForInput)(props.size),
|
|
@@ -84,7 +74,6 @@ function useDatePickerProps(state, _a) {
|
|
|
84
74
|
focusInput();
|
|
85
75
|
}
|
|
86
76
|
},
|
|
87
|
-
// @ts-expect-error focusTrap in popup was introduced in a newer version of uikit
|
|
88
77
|
focusTrap: true,
|
|
89
78
|
},
|
|
90
79
|
calendarProps: {
|
|
@@ -99,20 +88,20 @@ function useDatePickerProps(state, _a) {
|
|
|
99
88
|
focusInput();
|
|
100
89
|
}
|
|
101
90
|
},
|
|
102
|
-
|
|
103
|
-
value: state.dateValue,
|
|
91
|
+
value: state.dateFieldState.displayValue,
|
|
104
92
|
minValue: props.minValue,
|
|
105
93
|
maxValue: props.maxValue,
|
|
106
94
|
isDateUnavailable: props.isDateUnavailable,
|
|
107
|
-
timeZone:
|
|
95
|
+
timeZone: state.timeZone,
|
|
108
96
|
},
|
|
109
97
|
timeInputProps: {
|
|
110
98
|
value: state.timeValue,
|
|
99
|
+
placeholderValue: state.dateFieldState.displayValue,
|
|
111
100
|
onUpdate: state.setTimeValue,
|
|
112
101
|
format: state.timeFormat,
|
|
113
102
|
readOnly: state.readOnly,
|
|
114
103
|
disabled: state.disabled,
|
|
115
|
-
timeZone:
|
|
104
|
+
timeZone: state.timeZone,
|
|
116
105
|
hasClear: props.hasClear,
|
|
117
106
|
size: props.size,
|
|
118
107
|
},
|
|
@@ -6,21 +6,21 @@ export interface DatePickerState {
|
|
|
6
6
|
/** The currently selected date. */
|
|
7
7
|
value: DateTime | null;
|
|
8
8
|
/** Sets the selected date. */
|
|
9
|
-
setValue(value: DateTime | null)
|
|
9
|
+
setValue: (value: DateTime | null) => void;
|
|
10
10
|
/**
|
|
11
11
|
* The date portion of the value. This may be set prior to `value` if the user has
|
|
12
12
|
* selected a date but has not yet selected a time.
|
|
13
13
|
*/
|
|
14
14
|
dateValue: DateTime | null;
|
|
15
15
|
/** Sets the date portion of the value. */
|
|
16
|
-
setDateValue(value: DateTime)
|
|
16
|
+
setDateValue: (value: DateTime) => void;
|
|
17
17
|
/**
|
|
18
18
|
* The time portion of the value. This may be set prior to `value` if the user has
|
|
19
19
|
* selected a time but has not yet selected a date.
|
|
20
20
|
*/
|
|
21
21
|
timeValue: DateTime | null;
|
|
22
22
|
/** Sets the time portion of the value. */
|
|
23
|
-
setTimeValue(value: DateTime | null)
|
|
23
|
+
setTimeValue: (value: DateTime | null) => void;
|
|
24
24
|
/** Whether the field is read only. */
|
|
25
25
|
readOnly?: boolean;
|
|
26
26
|
/** Whether the field is disabled. */
|
|
@@ -33,10 +33,11 @@ export interface DatePickerState {
|
|
|
33
33
|
hasTime: boolean;
|
|
34
34
|
/** Format of the time when rendered in the input. */
|
|
35
35
|
timeFormat?: string;
|
|
36
|
+
timeZone: string;
|
|
36
37
|
/** Whether the calendar popover is currently open. */
|
|
37
38
|
isOpen: boolean;
|
|
38
39
|
/** Sets whether the calendar popover is open. */
|
|
39
|
-
setOpen(isOpen: boolean)
|
|
40
|
+
setOpen: (isOpen: boolean) => void;
|
|
40
41
|
dateFieldState: DateFieldState;
|
|
41
42
|
}
|
|
42
43
|
export interface DatePickerStateOptions extends DateFieldBase {
|
|
@@ -3,67 +3,76 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.useDatePickerState = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
6
7
|
const DateField_1 = require("../../DateField");
|
|
7
|
-
const utils_1 = require("../../DateField/utils");
|
|
8
|
-
const useControlledState_1 = require("../../hooks/useControlledState");
|
|
9
8
|
const dates_1 = require("../../utils/dates");
|
|
9
|
+
const useDefaultTimeZone_1 = require("../../utils/useDefaultTimeZone");
|
|
10
10
|
function useDatePickerState(props) {
|
|
11
|
+
var _a;
|
|
11
12
|
const { disabled, readOnly } = props;
|
|
12
13
|
const [isOpen, setOpen] = react_1.default.useState(false);
|
|
13
|
-
const [value, setValue] = (0,
|
|
14
|
+
const [value, setValue] = (0, uikit_1.useControlledState)(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null, props.onUpdate);
|
|
14
15
|
const [selectedDateInner, setSelectedDate] = react_1.default.useState(null);
|
|
15
16
|
const [selectedTimeInner, setSelectedTime] = react_1.default.useState(null);
|
|
17
|
+
const inputTimeZone = (0, useDefaultTimeZone_1.useDefaultTimeZone)(props.value || props.defaultValue || props.placeholderValue);
|
|
18
|
+
const timeZone = props.timeZone || inputTimeZone;
|
|
16
19
|
let selectedDate = selectedDateInner;
|
|
17
20
|
let selectedTime = selectedTimeInner;
|
|
18
21
|
const format = props.format || 'L';
|
|
19
|
-
const { hasDate, hasTime, timeFormat } = react_1.default.useMemo(() => {
|
|
20
|
-
const sections = (0, utils_1.splitFormatIntoSections)(format);
|
|
21
|
-
let hasDate = false;
|
|
22
|
-
let hasHours = false;
|
|
23
|
-
let hasMinutes = false;
|
|
24
|
-
let hasSeconds = false;
|
|
25
|
-
for (const s of sections) {
|
|
26
|
-
hasHours || (hasHours = s.type === 'hour');
|
|
27
|
-
hasMinutes || (hasMinutes = s.type === 'minute');
|
|
28
|
-
hasSeconds || (hasSeconds = s.type === 'second');
|
|
29
|
-
hasDate || (hasDate = ['day', 'month', 'year'].includes(s.type));
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
hasTime: hasHours || hasMinutes || hasSeconds,
|
|
33
|
-
timeFormat: hasSeconds ? 'LTS' : 'LT',
|
|
34
|
-
hasDate,
|
|
35
|
-
};
|
|
36
|
-
}, [format]);
|
|
37
|
-
if (value) {
|
|
38
|
-
selectedDate = value;
|
|
39
|
-
if (hasTime) {
|
|
40
|
-
selectedTime = value;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
22
|
const commitValue = (date, time) => {
|
|
44
23
|
if (disabled || readOnly) {
|
|
45
24
|
return;
|
|
46
25
|
}
|
|
47
|
-
setValue((0, dates_1.mergeDateTime)(date, time));
|
|
26
|
+
setValue((0, dates_1.mergeDateTime)(date, time).timeZone(inputTimeZone));
|
|
48
27
|
setSelectedDate(null);
|
|
49
28
|
setSelectedTime(null);
|
|
50
29
|
};
|
|
30
|
+
const dateFieldState = (0, DateField_1.useDateFieldState)({
|
|
31
|
+
value,
|
|
32
|
+
onUpdate(date) {
|
|
33
|
+
if (date) {
|
|
34
|
+
commitValue(date, date);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
setValue(null);
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
disabled,
|
|
41
|
+
readOnly,
|
|
42
|
+
validationState: props.validationState,
|
|
43
|
+
minValue: props.minValue,
|
|
44
|
+
maxValue: props.maxValue,
|
|
45
|
+
isDateUnavailable: props.isDateUnavailable,
|
|
46
|
+
format,
|
|
47
|
+
placeholderValue: props.placeholderValue,
|
|
48
|
+
timeZone,
|
|
49
|
+
});
|
|
50
|
+
const timeFormat = react_1.default.useMemo(() => {
|
|
51
|
+
const hasSeconds = dateFieldState.sections.some((s) => s.type === 'second');
|
|
52
|
+
return hasSeconds ? 'LTS' : 'LT';
|
|
53
|
+
}, [dateFieldState.sections]);
|
|
54
|
+
if (value) {
|
|
55
|
+
selectedDate = value.timeZone(timeZone);
|
|
56
|
+
if (dateFieldState.hasTime) {
|
|
57
|
+
selectedTime = value.timeZone(timeZone);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
51
60
|
// Intercept setValue to make sure the Time section is not changed by date selection in Calendar
|
|
52
61
|
const selectDate = (newValue) => {
|
|
53
62
|
if (disabled || readOnly) {
|
|
54
63
|
return;
|
|
55
64
|
}
|
|
56
|
-
const shouldClose = !hasTime;
|
|
57
|
-
if (hasTime) {
|
|
65
|
+
const shouldClose = !dateFieldState.hasTime;
|
|
66
|
+
if (dateFieldState.hasTime) {
|
|
58
67
|
if (selectedTime || shouldClose) {
|
|
59
|
-
commitValue(newValue, selectedTime ||
|
|
68
|
+
commitValue(newValue, selectedTime || newValue);
|
|
60
69
|
}
|
|
61
70
|
else {
|
|
62
71
|
setSelectedDate(newValue);
|
|
63
72
|
}
|
|
64
73
|
}
|
|
65
74
|
else {
|
|
66
|
-
|
|
75
|
+
commitValue(newValue, newValue);
|
|
67
76
|
}
|
|
68
77
|
if (shouldClose) {
|
|
69
78
|
setOpen(false);
|
|
@@ -73,29 +82,33 @@ function useDatePickerState(props) {
|
|
|
73
82
|
if (disabled || readOnly) {
|
|
74
83
|
return;
|
|
75
84
|
}
|
|
85
|
+
const newTime = newValue !== null && newValue !== void 0 ? newValue : (0, dates_1.createPlaceholderValue)({
|
|
86
|
+
placeholderValue: props.placeholderValue,
|
|
87
|
+
timeZone,
|
|
88
|
+
});
|
|
76
89
|
if (selectedDate) {
|
|
77
|
-
commitValue(selectedDate,
|
|
90
|
+
commitValue(selectedDate, newTime);
|
|
78
91
|
}
|
|
79
92
|
else {
|
|
80
|
-
setSelectedTime(
|
|
93
|
+
setSelectedTime(newTime);
|
|
81
94
|
}
|
|
82
95
|
};
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
disabled,
|
|
87
|
-
readOnly,
|
|
88
|
-
validationState: props.validationState,
|
|
89
|
-
minValue: props.minValue,
|
|
90
|
-
maxValue: props.maxValue,
|
|
91
|
-
isDateUnavailable: props.isDateUnavailable,
|
|
92
|
-
format,
|
|
93
|
-
placeholderValue: props.placeholderValue,
|
|
94
|
-
timeZone: props.timeZone,
|
|
95
|
-
});
|
|
96
|
+
if (dateFieldState.hasTime && !selectedTime) {
|
|
97
|
+
selectedTime = dateFieldState.displayValue;
|
|
98
|
+
}
|
|
96
99
|
return {
|
|
97
|
-
value
|
|
98
|
-
setValue
|
|
100
|
+
value,
|
|
101
|
+
setValue(newDate) {
|
|
102
|
+
if (props.readOnly || props.disabled) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (newDate) {
|
|
106
|
+
setValue(newDate.timeZone(inputTimeZone));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
setValue(null);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
99
112
|
dateValue: selectedDate,
|
|
100
113
|
timeValue: selectedTime,
|
|
101
114
|
setDateValue: selectDate,
|
|
@@ -103,13 +116,18 @@ function useDatePickerState(props) {
|
|
|
103
116
|
disabled,
|
|
104
117
|
readOnly,
|
|
105
118
|
format,
|
|
106
|
-
hasDate,
|
|
107
|
-
hasTime,
|
|
119
|
+
hasDate: dateFieldState.hasDate,
|
|
120
|
+
hasTime: dateFieldState.hasTime,
|
|
108
121
|
timeFormat,
|
|
122
|
+
timeZone,
|
|
109
123
|
isOpen,
|
|
110
124
|
setOpen(newIsOpen) {
|
|
111
|
-
if (!newIsOpen && !value && selectedDate && hasTime) {
|
|
112
|
-
commitValue(selectedDate, selectedTime ||
|
|
125
|
+
if (!newIsOpen && !value && selectedDate && dateFieldState.hasTime) {
|
|
126
|
+
commitValue(selectedDate, selectedTime ||
|
|
127
|
+
(0, dates_1.createPlaceholderValue)({
|
|
128
|
+
placeholderValue: props.placeholderValue,
|
|
129
|
+
timeZone: inputTimeZone,
|
|
130
|
+
}));
|
|
113
131
|
}
|
|
114
132
|
setOpen(newIsOpen);
|
|
115
133
|
},
|
|
@@ -117,6 +135,3 @@ function useDatePickerState(props) {
|
|
|
117
135
|
};
|
|
118
136
|
}
|
|
119
137
|
exports.useDatePickerState = useDatePickerState;
|
|
120
|
-
function getPlaceholderTime(placeholderValue, timeZone) {
|
|
121
|
-
return (0, dates_1.createPlaceholderValue)({ placeholderValue, timeZone });
|
|
122
|
-
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { CalendarInstance, CalendarSize } from '../
|
|
3
|
-
import type { RangeCalendarStateOptions } from '../
|
|
2
|
+
import type { CalendarInstance, CalendarSize } from '../CalendarView/CalendarView';
|
|
3
|
+
import type { RangeCalendarStateOptions } from '../CalendarView/hooks/useRangeCalendarState';
|
|
4
4
|
import type { AccessibilityProps, DomProps, FocusEvents, StyleProps } from '../types';
|
|
5
|
-
import '../
|
|
5
|
+
import '../CalendarView/Calendar.css';
|
|
6
6
|
export interface RangeCalendarProps extends RangeCalendarStateOptions, DomProps, StyleProps, FocusEvents, AccessibilityProps {
|
|
7
7
|
/**
|
|
8
8
|
* The size of the element.
|
|
@@ -4,9 +4,9 @@ exports.RangeCalendar = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const react_1 = tslib_1.__importDefault(require("react"));
|
|
7
|
-
const
|
|
8
|
-
const useRangeCalendarState_1 = require("../
|
|
9
|
-
require("../
|
|
7
|
+
const CalendarView_1 = require("../CalendarView/CalendarView");
|
|
8
|
+
const useRangeCalendarState_1 = require("../CalendarView/hooks/useRangeCalendarState");
|
|
9
|
+
require("../CalendarView/Calendar.css");
|
|
10
10
|
exports.RangeCalendar = react_1.default.forwardRef(function Calendar(props, ref) {
|
|
11
11
|
const state = (0, useRangeCalendarState_1.useRangeCalendarState)(props);
|
|
12
12
|
const handleBlur = (e) => {
|
|
@@ -16,5 +16,5 @@ exports.RangeCalendar = react_1.default.forwardRef(function Calendar(props, ref)
|
|
|
16
16
|
}
|
|
17
17
|
(_a = props.onBlur) === null || _a === void 0 ? void 0 : _a.call(props, e);
|
|
18
18
|
};
|
|
19
|
-
return (0, jsx_runtime_1.jsx)(
|
|
19
|
+
return (0, jsx_runtime_1.jsx)(CalendarView_1.CalendarView, Object.assign({ ref: ref }, props, { state: state, onBlur: handleBlur }));
|
|
20
20
|
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
|
+
import type { DateFieldProps } from '../DateField/hooks/useDateFieldProps';
|
|
3
|
+
import type { RangeValue } from '../types';
|
|
4
|
+
import './RangeDateField.css';
|
|
5
|
+
export type RangeDateFieldProps = DateFieldProps<RangeValue<DateTime>> & {
|
|
6
|
+
/**
|
|
7
|
+
* Delimiter separating the start and end parts of the range.
|
|
8
|
+
* @default ' — '
|
|
9
|
+
* */
|
|
10
|
+
delimiter?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function RangeDateField({ className, ...props }: RangeDateFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RangeDateField = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
7
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
8
|
+
const cn_1 = require("../../utils/cn");
|
|
9
|
+
const useDateFieldProps_1 = require("../DateField/hooks/useDateFieldProps");
|
|
10
|
+
const useRangeDateFieldState_1 = require("./hooks/useRangeDateFieldState");
|
|
11
|
+
require("./RangeDateField.css");
|
|
12
|
+
const b = (0, cn_1.block)('range-date-field');
|
|
13
|
+
function RangeDateField(_a) {
|
|
14
|
+
var { className } = _a, props = tslib_1.__rest(_a, ["className"]);
|
|
15
|
+
const state = (0, useRangeDateFieldState_1.useRangeDateFieldState)(props);
|
|
16
|
+
const { inputProps } = (0, useDateFieldProps_1.useDateFieldProps)(state, props);
|
|
17
|
+
const [isActive, setActive] = react_1.default.useState(false);
|
|
18
|
+
const { focusWithinProps } = (0, uikit_1.useFocusWithin)({
|
|
19
|
+
onFocusWithinChange(isFocusWithin) {
|
|
20
|
+
setActive(isFocusWithin);
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
return ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: b(null, className), style: props.style }, focusWithinProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, inputProps, { value: state.isEmpty && !isActive && props.placeholder ? '' : inputProps.value })) })));
|
|
24
|
+
}
|
|
25
|
+
exports.RangeDateField = RangeDateField;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DateTime } from '@gravity-ui/date-utils';
|
|
2
|
+
import type { BaseDateFieldState } from '../../DateField';
|
|
3
|
+
import type { DateFieldBase } from '../../types/datePicker';
|
|
4
|
+
import type { RangeValue } from '../../types/inputs';
|
|
5
|
+
export interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {
|
|
6
|
+
delimiter?: string;
|
|
7
|
+
}
|
|
8
|
+
export type RangeDateFieldState = BaseDateFieldState<RangeValue<DateTime>>;
|
|
9
|
+
export declare function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState;
|