@gravity-ui/date-components 3.0.0-beta.0 → 3.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.
Files changed (177) hide show
  1. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.d.ts +12 -3
  2. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js +6 -15
  3. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
  4. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +5 -11
  5. package/dist/cjs/components/DateField/hooks/useDateFieldState.js.map +1 -1
  6. package/dist/cjs/components/DateField/i18n/en.json +1 -0
  7. package/dist/cjs/components/DateField/i18n/index.d.ts +2 -2
  8. package/dist/cjs/components/DateField/i18n/ru.json +1 -0
  9. package/dist/cjs/components/DateField/types.d.ts +9 -1
  10. package/dist/cjs/components/DateField/types.js.map +1 -1
  11. package/dist/cjs/components/DateField/utils.d.ts +22 -6
  12. package/dist/cjs/components/DateField/utils.js +83 -0
  13. package/dist/cjs/components/DateField/utils.js.map +1 -1
  14. package/dist/cjs/components/DatePicker/DatePicker.d.ts +2 -2
  15. package/dist/cjs/components/DatePicker/DatePicker.js +2 -2
  16. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  17. package/dist/cjs/components/DatePicker/MobileCalendar.js +4 -4
  18. package/dist/cjs/components/DatePicker/MobileCalendar.js.map +1 -1
  19. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.d.ts +13 -3
  20. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js +17 -15
  21. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  22. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +8 -2
  23. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  24. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.js +4 -2
  25. package/dist/cjs/components/DatePicker/hooks/useDatePickerState.js.map +1 -1
  26. package/dist/cjs/components/DatePicker/utils/getCalendarModes.d.ts +5 -0
  27. package/dist/cjs/components/DatePicker/utils/getCalendarModes.js +21 -0
  28. package/dist/cjs/components/DatePicker/utils/getCalendarModes.js.map +1 -0
  29. package/dist/cjs/components/DatePicker/utils/index.d.ts +1 -0
  30. package/dist/cjs/components/DatePicker/utils/index.js +1 -0
  31. package/dist/cjs/components/DatePicker/utils/index.js.map +1 -1
  32. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +8 -16
  33. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
  34. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +1 -1
  35. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +1 -1
  36. package/dist/cjs/components/RangeDatePicker/RangeDatePicker.js +2 -2
  37. package/dist/cjs/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
  38. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +4 -1
  39. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.js +11 -4
  40. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
  41. package/dist/cjs/components/RelativeDateField/RelativeDateField.d.ts +2 -2
  42. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +1 -1
  43. package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
  44. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.d.ts +2 -2
  45. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +2 -2
  46. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  47. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +8 -1
  48. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  49. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +11 -3
  50. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
  51. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +8 -7
  52. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  53. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +0 -22
  54. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css.map +1 -1
  55. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +13 -13
  56. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +13 -38
  57. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  58. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css +23 -0
  59. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css.map +1 -0
  60. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +33 -0
  61. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +39 -0
  62. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -0
  63. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +2 -3
  64. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +49 -42
  65. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  66. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +1 -1
  67. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  68. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +1 -1
  69. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  70. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +12 -1
  71. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +5 -2
  72. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  73. package/dist/cjs/components/RelativeRangeDatePicker/i18n/index.d.ts +2 -2
  74. package/dist/cjs/components/RelativeRangeDatePicker/index.d.ts +2 -0
  75. package/dist/cjs/components/RelativeRangeDatePicker/index.js +3 -1
  76. package/dist/cjs/components/RelativeRangeDatePicker/index.js.map +1 -1
  77. package/dist/cjs/components/RelativeRangeDatePicker/types.d.ts +2 -7
  78. package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
  79. package/dist/cjs/components/index.d.ts +1 -0
  80. package/dist/cjs/components/index.js.map +1 -1
  81. package/dist/cjs/components/types/datePicker.d.ts +11 -0
  82. package/dist/cjs/components/types/datePicker.js.map +1 -1
  83. package/dist/cjs/components/types/i18n.d.ts +17 -0
  84. package/dist/cjs/components/types/i18n.js +3 -0
  85. package/dist/cjs/components/types/i18n.js.map +1 -0
  86. package/dist/cjs/components/utils/dates.js +1 -1
  87. package/dist/cjs/components/utils/dates.js.map +1 -1
  88. package/dist/cjs/components/utils/validation/i18n/ru.json +3 -3
  89. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +12 -3
  90. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +6 -15
  91. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
  92. package/dist/esm/components/DateField/hooks/useDateFieldState.js +6 -12
  93. package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
  94. package/dist/esm/components/DateField/i18n/en.json +1 -0
  95. package/dist/esm/components/DateField/i18n/index.d.ts +2 -2
  96. package/dist/esm/components/DateField/i18n/ru.json +1 -0
  97. package/dist/esm/components/DateField/types.d.ts +9 -1
  98. package/dist/esm/components/DateField/types.js.map +1 -1
  99. package/dist/esm/components/DateField/utils.d.ts +22 -6
  100. package/dist/esm/components/DateField/utils.js +80 -0
  101. package/dist/esm/components/DateField/utils.js.map +1 -1
  102. package/dist/esm/components/DatePicker/DatePicker.d.ts +2 -2
  103. package/dist/esm/components/DatePicker/DatePicker.js +2 -2
  104. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  105. package/dist/esm/components/DatePicker/MobileCalendar.js +4 -4
  106. package/dist/esm/components/DatePicker/MobileCalendar.js.map +1 -1
  107. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.d.ts +13 -3
  108. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js +17 -15
  109. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  110. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +9 -3
  111. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  112. package/dist/esm/components/DatePicker/hooks/useDatePickerState.js +2 -0
  113. package/dist/esm/components/DatePicker/hooks/useDatePickerState.js.map +1 -1
  114. package/dist/esm/components/DatePicker/utils/getCalendarModes.d.ts +5 -0
  115. package/dist/esm/components/DatePicker/utils/getCalendarModes.js +18 -0
  116. package/dist/esm/components/DatePicker/utils/getCalendarModes.js.map +1 -0
  117. package/dist/esm/components/DatePicker/utils/index.d.ts +1 -0
  118. package/dist/esm/components/DatePicker/utils/index.js +1 -0
  119. package/dist/esm/components/DatePicker/utils/index.js.map +1 -1
  120. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +9 -17
  121. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +1 -1
  122. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +1 -1
  123. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +1 -1
  124. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js +2 -2
  125. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
  126. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +4 -1
  127. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js +10 -3
  128. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
  129. package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +2 -2
  130. package/dist/esm/components/RelativeDateField/RelativeDateField.js +1 -1
  131. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  132. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +2 -2
  133. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +2 -2
  134. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  135. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +8 -1
  136. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  137. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +11 -3
  138. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
  139. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +8 -7
  140. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  141. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css +0 -22
  142. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.css.map +1 -1
  143. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +13 -13
  144. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +15 -40
  145. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  146. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css +23 -0
  147. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.css.map +1 -0
  148. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +33 -0
  149. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +36 -0
  150. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -0
  151. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +2 -3
  152. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +49 -42
  153. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  154. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +2 -2
  155. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  156. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +1 -1
  157. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  158. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.d.ts +12 -1
  159. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +5 -3
  160. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  161. package/dist/esm/components/RelativeRangeDatePicker/i18n/index.d.ts +2 -2
  162. package/dist/esm/components/RelativeRangeDatePicker/index.d.ts +2 -0
  163. package/dist/esm/components/RelativeRangeDatePicker/index.js +1 -0
  164. package/dist/esm/components/RelativeRangeDatePicker/index.js.map +1 -1
  165. package/dist/esm/components/RelativeRangeDatePicker/types.d.ts +2 -7
  166. package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
  167. package/dist/esm/components/index.d.ts +1 -0
  168. package/dist/esm/components/index.js.map +1 -1
  169. package/dist/esm/components/types/datePicker.d.ts +11 -0
  170. package/dist/esm/components/types/datePicker.js.map +1 -1
  171. package/dist/esm/components/types/i18n.d.ts +17 -0
  172. package/dist/esm/components/types/i18n.js +2 -0
  173. package/dist/esm/components/types/i18n.js.map +1 -0
  174. package/dist/esm/components/utils/dates.js +1 -1
  175. package/dist/esm/components/utils/dates.js.map +1 -1
  176. package/dist/esm/components/utils/validation/i18n/ru.json +3 -3
  177. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"useDatePickerProps.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/hooks/useDatePickerProps.ts"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {isDateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useFocusWithin, useForkRef} from '@gravity-ui/uikit';\nimport type {ButtonButtonProps, PopupProps, TextInputProps} from '@gravity-ui/uikit';\n\nimport type {CalendarInstance, CalendarProps} from '../../Calendar';\nimport {useDateFieldProps} from '../../DateField';\nimport type {DateFieldProps} from '../../DateField';\nimport type {RangeValue} from '../../types';\nimport {getButtonSizeForInput} from '../../utils/getButtonSizeForInput';\nimport {mergeProps} from '../../utils/mergeProps';\nimport type {DatePickerProps} from '../DatePicker';\nimport {i18n} from '../i18n';\nimport {getDateTimeValue} from '../utils';\n\nimport type {DatePickerState} from './useDatePickerState';\n\ninterface InnerDatePickerProps<T = DateTime> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupProps: React.HTMLAttributes<unknown> & {ref: React.Ref<any>};\n fieldProps: TextInputProps;\n calendarButtonProps: ButtonButtonProps & {ref: React.Ref<HTMLButtonElement>};\n popupProps: PopupProps;\n calendarProps: CalendarProps<T> & {ref: React.Ref<CalendarInstance>};\n timeInputProps: DateFieldProps<T>;\n}\n\nexport function useDatePickerProps<T extends DateTime | RangeValue<DateTime>>(\n state: DatePickerState<T>,\n {onFocus, onBlur, ...props}: DatePickerProps<T>,\n): InnerDatePickerProps<T> {\n const [isActive, setActive] = React.useState(false);\n\n const [focusedDate, setFocusedDate] = React.useState(\n isDateTime(state.dateFieldState.displayValue)\n ? state.dateFieldState.displayValue\n : state.dateFieldState.displayValue.start,\n );\n const [prevDateValue, setPrevDateValue] = React.useState<any>(\n state.dateFieldState.displayValue,\n );\n\n if (isDateTime(state.dateFieldState.displayValue)) {\n if (!state.dateFieldState.displayValue.isSame(prevDateValue, 'day')) {\n setPrevDateValue(state.dateFieldState.displayValue);\n setFocusedDate(state.dateFieldState.displayValue);\n }\n } else if (!state.dateFieldState.displayValue.start.isSame(prevDateValue.start, 'day')) {\n setPrevDateValue(state.dateFieldState.displayValue);\n setFocusedDate(state.dateFieldState.displayValue.start);\n } else if (!state.dateFieldState.displayValue.end.isSame(prevDateValue.end, 'day')) {\n setPrevDateValue(state.dateFieldState.displayValue);\n setFocusedDate(state.dateFieldState.displayValue.end);\n }\n\n const {focusWithinProps} = useFocusWithin({\n onFocusWithin: onFocus,\n onBlurWithin: onBlur,\n onFocusWithinChange(isFocusWithin) {\n setActive(isFocusWithin);\n if (!isFocusWithin) {\n state.setOpen(false, 'FocusOut');\n }\n },\n });\n\n const {inputProps} = useDateFieldProps(state.dateFieldState, props);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const handleRef = useForkRef(inputRef, inputProps.controlRef);\n\n const calendarRef = React.useRef<CalendarInstance>(null);\n const calendarButtonRef = React.useRef<HTMLButtonElement>(null);\n const groupRef = React.useRef<HTMLElement>(null);\n\n function focusInput() {\n setTimeout(() => {\n inputRef.current?.focus({preventScroll: true});\n });\n }\n\n const onlyTime = state.hasTime && !state.hasDate;\n\n return {\n groupProps: {\n ref: groupRef,\n tabIndex: -1,\n role: 'group',\n ...focusWithinProps,\n style: props.style,\n 'aria-disabled': state.disabled || undefined,\n onKeyDown: (e) => {\n if (!onlyTime && e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n e.stopPropagation();\n state.setOpen(true, 'ShortcutKeyDown');\n }\n },\n },\n fieldProps: mergeProps(\n inputProps,\n state.dateFieldState.isEmpty && !isActive && props.placeholder\n ? {value: ''}\n : undefined,\n {\n controlRef: handleRef,\n controlProps: {role: 'combobox', 'aria-expanded': state.isOpen},\n },\n ),\n calendarButtonProps: {\n ref: calendarButtonRef,\n size: getButtonSizeForInput(props.size),\n disabled: state.disabled,\n 'aria-label': i18n('Calendar'),\n 'aria-haspopup': 'dialog',\n 'aria-expanded': state.isOpen,\n view: 'flat-secondary',\n onClick: () => {\n setActive(true);\n state.setOpen(!state.isOpen, 'TriggerButtonClick');\n },\n },\n popupProps: {\n open: state.isOpen,\n onOpenChange: (open, e, reason) => {\n if (!open) {\n if (reason === 'escape-key') {\n state.setOpen(false, 'EscapeKeyDown');\n focusInput();\n } else if (reason === 'outside-press') {\n if (!e?.target || !calendarButtonRef.current?.contains(e.target as Node)) {\n state.setOpen(false, 'ClickOutside');\n }\n\n if (e?.target && groupRef.current?.contains(e.target as Node)) {\n focusInput();\n }\n }\n }\n },\n onTransitionOutComplete: () => {\n setFocusedDate(\n isDateTime(state.dateFieldState.displayValue)\n ? state.dateFieldState.displayValue\n : state.dateFieldState.displayValue.start,\n );\n },\n modal: !props.disableFocusTrap,\n disablePortal: props.disablePortal,\n },\n calendarProps: {\n ref: calendarRef,\n autoFocus: true,\n size: props.size === 's' ? 'm' : props.size,\n disabled: props.disabled,\n readOnly: props.readOnly,\n onUpdate: (d) => {\n state.setDateValue(d);\n if (!state.hasTime) {\n focusInput();\n }\n },\n value: state.dateFieldState.displayValue,\n minValue: props.minValue,\n maxValue: props.maxValue,\n isDateUnavailable: props.isDateUnavailable,\n timeZone: state.timeZone,\n focusedValue: focusedDate,\n onFocusUpdate: setFocusedDate,\n },\n timeInputProps: {\n value: state.timeValue,\n placeholderValue: getDateTimeValue(state.dateFieldState.displayValue),\n onUpdate: state.setTimeValue,\n format: state.timeFormat,\n readOnly: state.readOnly,\n disabled: state.disabled,\n timeZone: state.timeZone,\n hasClear: props.hasClear,\n size: props.size,\n },\n };\n}\n"]}
1
+ {"version":3,"file":"useDatePickerProps.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/hooks/useDatePickerProps.ts"],"names":[],"mappings":";;AA6BA,gDAkKC;;AA/LD,0DAA0B;AAE1B,uDAAkD;AAElD,6CAA6D;AAI7D,wDAAkD;AAGlD,gFAAwE;AACxE,0DAAkD;AAElD,2CAA6B;AAC7B,6CAA4D;AAc5D,SAAgB,kBAAkB,CAC9B,KAAyB,EACzB,EAA+C;QAA/C,EAAC,OAAO,EAAE,MAAM,OAA+B,EAA1B,KAAK,sBAA1B,qBAA2B,CAAD;IAE1B,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,eAAK,CAAC,QAAQ,CAChD,IAAA,uBAAU,EAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;QACzC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY;QACnC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAChD,CAAC;IACF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,eAAK,CAAC,QAAQ,CACpD,KAAK,CAAC,cAAc,CAAC,YAAY,CACpC,CAAC;IAEF,IAAI,IAAA,uBAAU,EAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC;YAClE,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YACpD,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACrF,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QACjF,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpD,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,EAAC,gBAAgB,EAAC,GAAG,IAAA,sBAAc,EAAC;QACtC,aAAa,EAAE,OAAO;QACtB,YAAY,EAAE,MAAM;QACpB,mBAAmB,CAAC,aAAa;YAC7B,SAAS,CAAC,aAAa,CAAC,CAAC;YACzB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,EAAC,UAAU,EAAC,GAAG,IAAA,6BAAiB,EAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,eAAK,CAAC,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,IAAA,kBAAU,EAAC,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;IAE9D,MAAM,WAAW,GAAG,eAAK,CAAC,MAAM,CAAmB,IAAI,CAAC,CAAC;IACzD,MAAM,iBAAiB,GAAG,eAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,eAAK,CAAC,MAAM,CAAc,IAAI,CAAC,CAAC;IAEjD,SAAS,UAAU;QACf,UAAU,CAAC,GAAG,EAAE;;YACZ,MAAA,QAAQ,CAAC,OAAO,0CAAE,KAAK,CAAC,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;IACvE,MAAM,aAAa,GAAG,IAAA,wBAAgB,EAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEzD,OAAO;QACH,UAAU,gCACN,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,CAAC,CAAC,EACZ,IAAI,EAAE,OAAO,IACV,gBAAgB,KACnB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,eAAe,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS,EAC5C,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gBACb,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,CAAC;oBAC1E,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;gBAC3C,CAAC;YACL,CAAC,GACJ;QACD,UAAU,EAAE,IAAA,uBAAU,EAClB,UAAU,EACV,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,WAAW;YAC1D,CAAC,CAAC,EAAC,KAAK,EAAE,EAAE,EAAC;YACb,CAAC,CAAC,SAAS,EACf;YACI,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,CAAC,MAAM,EAAC;SAClE,CACJ;QACD,mBAAmB,EAAE;YACjB,GAAG,EAAE,iBAAiB;YACtB,IAAI,EAAE,IAAA,6CAAqB,EAAC,KAAK,CAAC,IAAI,CAAC;YACvC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,IAAA,WAAI,EAAC,UAAU,CAAC;YAC9B,eAAe,EAAE,QAAQ;YACzB,eAAe,EAAE,KAAK,CAAC,MAAM;YAC7B,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,GAAG,EAAE;gBACV,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChB,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;YACvD,CAAC;SACJ;QACD,UAAU,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;;gBAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACR,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;wBAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;wBACtC,UAAU,EAAE,CAAC;oBACjB,CAAC;yBAAM,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;wBACpC,IAAI,CAAC,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAA,IAAI,CAAC,CAAA,MAAA,iBAAiB,CAAC,OAAO,0CAAE,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,CAAA,EAAE,CAAC;4BACvE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;wBACzC,CAAC;wBAED,IAAI,CAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,MAAI,MAAA,QAAQ,CAAC,OAAO,0CAAE,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,CAAA,EAAE,CAAC;4BAC5D,UAAU,EAAE,CAAC;wBACjB,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YACD,uBAAuB,EAAE,GAAG,EAAE;gBAC1B,cAAc,CACV,IAAA,uBAAU,EAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;oBACzC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY;oBACnC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,CAChD,CAAC;YACN,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,CAAC,gBAAgB;YAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,SAAS,EAAE,KAAK,CAAC,cAAc;YAC/B,MAAM,EAAE,KAAK,CAAC,WAAW;YACzB,SAAS,EAAE,KAAK,CAAC,cAAc;YAC/B,KAAK,EAAE,KAAK,CAAC,UAAU;SAC1B;QACD,aAAa,EAAE;YACX,GAAG,EAAE,WAAW;YAChB,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;YAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACZ,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;oBAC5B,UAAU,EAAE,CAAC;gBACjB,CAAC;YACL,CAAC;YACD,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,YAAY;YACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,WAAW;YACzB,aAAa,EAAE,cAAc;YAC7B,KAAK,EAAE,aAAa;SACvB;QACD,cAAc,EAAE;YACZ,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,gBAAgB,EAAE,IAAA,wBAAgB,EAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC;YACrE,QAAQ,EAAE,KAAK,CAAC,YAAY;YAC5B,MAAM,EAAE,KAAK,CAAC,UAAU;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;SACnB;KACJ,CAAC;AACN,CAAC","sourcesContent":["import React from 'react';\n\nimport {isDateTime} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useFocusWithin, useForkRef} from '@gravity-ui/uikit';\nimport type {ButtonButtonProps, PopupProps, TextInputProps} from '@gravity-ui/uikit';\n\nimport type {CalendarInstance, CalendarProps} from '../../Calendar';\nimport {useDateFieldProps} from '../../DateField';\nimport type {DateFieldProps} from '../../DateField';\nimport type {RangeValue} from '../../types';\nimport {getButtonSizeForInput} from '../../utils/getButtonSizeForInput';\nimport {mergeProps} from '../../utils/mergeProps';\nimport type {DatePickerProps} from '../DatePicker';\nimport {i18n} from '../i18n';\nimport {getCalendarModes, getDateTimeValue} from '../utils';\n\nimport type {DatePickerState} from './useDatePickerState';\n\ninterface InnerDatePickerProps<T = DateTime> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n groupProps: React.HTMLAttributes<unknown> & {ref: React.Ref<any>};\n fieldProps: TextInputProps;\n calendarButtonProps: ButtonButtonProps & {ref: React.Ref<HTMLButtonElement>};\n popupProps: PopupProps;\n calendarProps: CalendarProps<T> & {ref: React.Ref<CalendarInstance>};\n timeInputProps: DateFieldProps<T>;\n}\n\nexport function useDatePickerProps<T extends DateTime | RangeValue<DateTime>>(\n state: DatePickerState<T>,\n {onFocus, onBlur, ...props}: DatePickerProps<T>,\n): InnerDatePickerProps<T> {\n const [isActive, setActive] = React.useState(false);\n\n const [focusedDate, setFocusedDate] = React.useState(\n isDateTime(state.dateFieldState.displayValue)\n ? state.dateFieldState.displayValue\n : state.dateFieldState.displayValue.start,\n );\n const [prevDateValue, setPrevDateValue] = React.useState<any>(\n state.dateFieldState.displayValue,\n );\n\n if (isDateTime(state.dateFieldState.displayValue)) {\n if (!state.dateFieldState.displayValue.isSame(prevDateValue, 'day')) {\n setPrevDateValue(state.dateFieldState.displayValue);\n setFocusedDate(state.dateFieldState.displayValue);\n }\n } else if (!state.dateFieldState.displayValue.start.isSame(prevDateValue.start, 'day')) {\n setPrevDateValue(state.dateFieldState.displayValue);\n setFocusedDate(state.dateFieldState.displayValue.start);\n } else if (!state.dateFieldState.displayValue.end.isSame(prevDateValue.end, 'day')) {\n setPrevDateValue(state.dateFieldState.displayValue);\n setFocusedDate(state.dateFieldState.displayValue.end);\n }\n\n const {focusWithinProps} = useFocusWithin({\n onFocusWithin: onFocus,\n onBlurWithin: onBlur,\n onFocusWithinChange(isFocusWithin) {\n setActive(isFocusWithin);\n if (!isFocusWithin) {\n state.setOpen(false, 'FocusOut');\n }\n },\n });\n\n const {inputProps} = useDateFieldProps(state.dateFieldState, props);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const handleRef = useForkRef(inputRef, inputProps.controlRef);\n\n const calendarRef = React.useRef<CalendarInstance>(null);\n const calendarButtonRef = React.useRef<HTMLButtonElement>(null);\n const groupRef = React.useRef<HTMLElement>(null);\n\n function focusInput() {\n setTimeout(() => {\n inputRef.current?.focus({preventScroll: true});\n });\n }\n\n const onlyTime = state.formatInfo.hasTime && !state.formatInfo.hasDate;\n const calendarModes = getCalendarModes(state.formatInfo);\n\n return {\n groupProps: {\n ref: groupRef,\n tabIndex: -1,\n role: 'group',\n ...focusWithinProps,\n style: props.style,\n 'aria-disabled': state.disabled || undefined,\n onKeyDown: (e) => {\n if (!onlyTime && e.altKey && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n e.stopPropagation();\n state.setOpen(true, 'ShortcutKeyDown');\n }\n },\n },\n fieldProps: mergeProps(\n inputProps,\n state.dateFieldState.isEmpty && !isActive && props.placeholder\n ? {value: ''}\n : undefined,\n {\n controlRef: handleRef,\n controlProps: {role: 'combobox', 'aria-expanded': state.isOpen},\n },\n ),\n calendarButtonProps: {\n ref: calendarButtonRef,\n size: getButtonSizeForInput(props.size),\n disabled: state.disabled,\n 'aria-label': i18n('Calendar'),\n 'aria-haspopup': 'dialog',\n 'aria-expanded': state.isOpen,\n view: 'flat-secondary',\n onClick: () => {\n setActive(true);\n state.setOpen(!state.isOpen, 'TriggerButtonClick');\n },\n },\n popupProps: {\n open: state.isOpen,\n onOpenChange: (open, e, reason) => {\n if (!open) {\n if (reason === 'escape-key') {\n state.setOpen(false, 'EscapeKeyDown');\n focusInput();\n } else if (reason === 'outside-press') {\n if (!e?.target || !calendarButtonRef.current?.contains(e.target as Node)) {\n state.setOpen(false, 'ClickOutside');\n }\n\n if (e?.target && groupRef.current?.contains(e.target as Node)) {\n focusInput();\n }\n }\n }\n },\n onTransitionOutComplete: () => {\n setFocusedDate(\n isDateTime(state.dateFieldState.displayValue)\n ? state.dateFieldState.displayValue\n : state.dateFieldState.displayValue.start,\n );\n },\n modal: !props.disableFocusTrap,\n disablePortal: props.disablePortal,\n placement: props.popupPlacement,\n offset: props.popupOffset,\n className: props.popupClassName,\n style: props.popupStyle,\n },\n calendarProps: {\n ref: calendarRef,\n autoFocus: true,\n size: props.size === 's' ? 'm' : props.size,\n disabled: props.disabled,\n readOnly: props.readOnly,\n onUpdate: (d) => {\n state.setDateValue(d);\n if (!state.formatInfo.hasTime) {\n focusInput();\n }\n },\n value: state.dateFieldState.displayValue,\n minValue: props.minValue,\n maxValue: props.maxValue,\n isDateUnavailable: props.isDateUnavailable,\n timeZone: state.timeZone,\n focusedValue: focusedDate,\n onFocusUpdate: setFocusedDate,\n modes: calendarModes,\n },\n timeInputProps: {\n value: state.timeValue,\n placeholderValue: getDateTimeValue(state.dateFieldState.displayValue),\n onUpdate: state.setTimeValue,\n format: state.timeFormat,\n readOnly: state.readOnly,\n disabled: state.disabled,\n timeZone: state.timeZone,\n hasClear: props.hasClear,\n size: props.size,\n },\n };\n}\n"]}
@@ -2,15 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useDatePickerState = void 0;
4
4
  const DateField_1 = require("../../DateField/index.js");
5
+ const utils_1 = require("../../DateField/utils.js");
5
6
  const dates_1 = require("../../utils/dates.js");
6
- const utils_1 = require("../utils/index.js");
7
+ const utils_2 = require("../utils/index.js");
7
8
  const datePickerStateFactory_1 = require("./datePickerStateFactory.js");
8
9
  exports.useDatePickerState = (0, datePickerStateFactory_1.datePickerStateFactory)({
9
10
  getPlaceholderTime,
10
11
  mergeDateTime: dates_1.mergeDateTime,
11
12
  setTimezone: (date, timeZone) => date.timeZone(timeZone),
12
- getDateTime: utils_1.getDateTimeValue,
13
+ getDateTime: utils_2.getDateTimeValue,
13
14
  useDateFieldState: DateField_1.useDateFieldState,
15
+ adjustDateToFormat: utils_1.adjustDateToFormat,
14
16
  });
15
17
  function getPlaceholderTime(placeholderValue, timeZone) {
16
18
  return (0, dates_1.createPlaceholderValue)({ placeholderValue, timeZone });
@@ -1 +1 @@
1
- {"version":3,"file":"useDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/hooks/useDatePickerState.ts"],"names":[],"mappings":";;;AAEA,wDAAkD;AAElD,gDAAwE;AACxE,6CAA0C;AAE1C,wEAAgE;AAMnD,QAAA,kBAAkB,GAAG,IAAA,+CAAsB,EAAC;IACrD,kBAAkB;IAClB,aAAa,EAAb,qBAAa;IACb,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACxD,WAAW,EAAE,wBAAgB;IAC7B,iBAAiB,EAAjB,6BAAiB;CACpB,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,gBAAsC,EAAE,QAAiB;IACjF,OAAO,IAAA,8BAAsB,EAAC,EAAC,gBAAgB,EAAE,QAAQ,EAAC,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport {useDateFieldState} from '../../DateField';\nimport type {DateFieldBase} from '../../types';\nimport {createPlaceholderValue, mergeDateTime} from '../../utils/dates';\nimport {getDateTimeValue} from '../utils';\n\nimport {datePickerStateFactory} from './datePickerStateFactory';\n\nexport type {DatePickerState} from './datePickerStateFactory';\n\nexport interface DatePickerStateOptions extends DateFieldBase {}\n\nexport const useDatePickerState = datePickerStateFactory({\n getPlaceholderTime,\n mergeDateTime,\n setTimezone: (date, timeZone) => date.timeZone(timeZone),\n getDateTime: getDateTimeValue,\n useDateFieldState,\n});\n\nfunction getPlaceholderTime(placeholderValue: DateTime | undefined, timeZone?: string) {\n return createPlaceholderValue({placeholderValue, timeZone});\n}\n"]}
1
+ {"version":3,"file":"useDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/hooks/useDatePickerState.ts"],"names":[],"mappings":";;;AAEA,wDAAkD;AAClD,oDAAyD;AAEzD,gDAAwE;AACxE,6CAA0C;AAE1C,wEAAgE;AAMnD,QAAA,kBAAkB,GAAG,IAAA,+CAAsB,EAAC;IACrD,kBAAkB;IAClB,aAAa,EAAb,qBAAa;IACb,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACxD,WAAW,EAAE,wBAAgB;IAC7B,iBAAiB,EAAjB,6BAAiB;IACjB,kBAAkB,EAAlB,0BAAkB;CACrB,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,gBAAsC,EAAE,QAAiB;IACjF,OAAO,IAAA,8BAAsB,EAAC,EAAC,gBAAgB,EAAE,QAAQ,EAAC,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport {useDateFieldState} from '../../DateField';\nimport {adjustDateToFormat} from '../../DateField/utils';\nimport type {DateFieldBase} from '../../types';\nimport {createPlaceholderValue, mergeDateTime} from '../../utils/dates';\nimport {getDateTimeValue} from '../utils';\n\nimport {datePickerStateFactory} from './datePickerStateFactory';\n\nexport type {DatePickerState} from './datePickerStateFactory';\n\nexport interface DatePickerStateOptions extends DateFieldBase {}\n\nexport const useDatePickerState = datePickerStateFactory({\n getPlaceholderTime,\n mergeDateTime,\n setTimezone: (date, timeZone) => date.timeZone(timeZone),\n getDateTime: getDateTimeValue,\n useDateFieldState,\n adjustDateToFormat,\n});\n\nfunction getPlaceholderTime(placeholderValue: DateTime | undefined, timeZone?: string) {\n return createPlaceholderValue({placeholderValue, timeZone});\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import type { CalendarLayout } from "../../CalendarView/hooks/types.js";
2
+ import type { FormatInfo } from "../../DateField/types.js";
3
+ type LayoutModes = Partial<Record<CalendarLayout, boolean>>;
4
+ export declare function getCalendarModes(formatInfo: FormatInfo): LayoutModes | undefined;
5
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCalendarModes = getCalendarModes;
4
+ function getCalendarModes(formatInfo) {
5
+ if (!formatInfo.hasDate) {
6
+ return undefined;
7
+ }
8
+ const modes = { years: true };
9
+ if (formatInfo.availableUnits.day) {
10
+ modes.days = true;
11
+ modes.months = true;
12
+ }
13
+ if (formatInfo.availableUnits.month) {
14
+ modes.months = true;
15
+ }
16
+ if (formatInfo.availableUnits.quarter && !modes.months) {
17
+ modes.quarters = true;
18
+ }
19
+ return modes;
20
+ }
21
+ //# sourceMappingURL=getCalendarModes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getCalendarModes.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/utils/getCalendarModes.ts"],"names":[],"mappings":";;AAKA,4CAoBC;AApBD,SAAgB,gBAAgB,CAAC,UAAsB;IACnD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,MAAM,KAAK,GAAgB,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;IACzC,IAAI,UAAU,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAClC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,UAAU,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACrD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC","sourcesContent":["import type {CalendarLayout} from '../../CalendarView/hooks/types';\nimport type {FormatInfo} from '../../DateField/types';\n\ntype LayoutModes = Partial<Record<CalendarLayout, boolean>>;\n\nexport function getCalendarModes(formatInfo: FormatInfo): LayoutModes | undefined {\n if (!formatInfo.hasDate) {\n return undefined;\n }\n\n const modes: LayoutModes = {years: true};\n if (formatInfo.availableUnits.day) {\n modes.days = true;\n modes.months = true;\n }\n\n if (formatInfo.availableUnits.month) {\n modes.months = true;\n }\n\n if (formatInfo.availableUnits.quarter && !modes.months) {\n modes.quarters = true;\n }\n\n return modes;\n}\n"]}
@@ -1,2 +1,3 @@
1
1
  export * from "./cn.js";
2
2
  export * from "./getDateTimeValue.js";
3
+ export * from "./getCalendarModes.js";
@@ -3,4 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./cn.js"), exports);
5
5
  tslib_1.__exportStar(require("./getDateTimeValue.js"), exports);
6
+ tslib_1.__exportStar(require("./getCalendarModes.js"), exports);
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/utils/index.ts"],"names":[],"mappings":";;;AAAA,kDAAqB;AACrB,gEAAmC","sourcesContent":["export * from './cn';\nexport * from './getDateTimeValue';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../../src","sources":["components/DatePicker/utils/index.ts"],"names":[],"mappings":";;;AAAA,kDAAqB;AACrB,gEAAmC;AACnC,gEAAmC","sourcesContent":["export * from './cn';\nexport * from './getDateTimeValue';\nexport * from './getCalendarModes';\n"]}
@@ -28,11 +28,8 @@ function useRangeDateFieldState(props) {
28
28
  const format = props.format || 'L';
29
29
  const delimiter = (_c = props.delimiter) !== null && _c !== void 0 ? _c : RANGE_FORMAT_DELIMITER;
30
30
  const sections = (0, utils_1.useFormatSections)(format);
31
- const allSegments = react_1.default.useMemo(() => {
32
- return sections
33
- .filter((seg) => utils_1.EDITABLE_SEGMENTS[seg.type])
34
- .reduce((p, seg) => (Object.assign(Object.assign({}, p), { [seg.type]: true })), {});
35
- }, [sections]);
31
+ const formatInfo = react_1.default.useMemo(() => (0, utils_1.getFormatInfo)(sections), [sections]);
32
+ const allSegments = formatInfo.availableUnits;
36
33
  // eslint-disable-next-line prefer-const
37
34
  let [validSegments, setValidSegments] = react_1.default.useState(() => (value ? { start: Object.assign({}, allSegments), end: Object.assign({}, allSegments) } : { start: {}, end: {} }));
38
35
  if (value &&
@@ -91,7 +88,10 @@ function useRangeDateFieldState(props) {
91
88
  if ((0, utils_1.isAllSegmentsValid)(allSegments, validSegments.start) &&
92
89
  (0, utils_1.isAllSegmentsValid)(allSegments, validSegments.end)) {
93
90
  if (!value || !(newValue.start.isSame(value.start) && newValue.end.isSame(value.end))) {
94
- handleUpdateRange(newValue);
91
+ handleUpdateRange({
92
+ start: (0, utils_1.adjustDateToFormat)(newValue.start, formatInfo, 'startOf'),
93
+ end: (0, utils_1.adjustDateToFormat)(newValue.end, formatInfo, 'endOf'),
94
+ });
95
95
  }
96
96
  }
97
97
  else {
@@ -102,16 +102,7 @@ function useRangeDateFieldState(props) {
102
102
  }
103
103
  }
104
104
  function markValid(portion, part) {
105
- validSegments[portion][part] = true;
106
- if (validSegments[portion].day &&
107
- validSegments[portion].month &&
108
- validSegments[portion].year &&
109
- allSegments.weekday) {
110
- validSegments[portion].weekday = true;
111
- }
112
- if (validSegments[portion].hour && allSegments.dayPeriod) {
113
- validSegments[portion].dayPeriod = true;
114
- }
105
+ validSegments[portion] = (0, utils_1.markValidSection)(allSegments, validSegments[portion], part);
115
106
  setValidSegments(Object.assign(Object.assign({}, validSegments), { [portion]: Object.assign({}, validSegments[portion]) }));
116
107
  }
117
108
  function setSection(sectionIndex, amount) {
@@ -181,6 +172,7 @@ function useRangeDateFieldState(props) {
181
172
  timeZone,
182
173
  validationState,
183
174
  editableSections: sectionsState.editableSections,
175
+ formatInfo,
184
176
  readOnly: props.readOnly,
185
177
  disabled: props.disabled,
186
178
  selectedSectionIndexes,
@@ -1 +1 @@
1
- {"version":3,"file":"useRangeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/RangeDateField/hooks/useRangeDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport {useBaseDateFieldState} from '../../DateField';\nimport type {DateFieldState} from '../../DateField';\nimport type {DateFieldSectionType, DateFieldSectionWithoutPosition} from '../../DateField/types';\nimport {\n EDITABLE_SEGMENTS,\n addSegment,\n isAllSegmentsValid,\n parseDateFromString,\n setSegment,\n useFormatSections,\n} from '../../DateField/utils';\nimport type {DateFieldBase} from '../../types/datePicker';\nimport type {RangeValue} from '../../types/inputs';\nimport {isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {createPlaceholderRangeValue, getRangeEditableSections, isValidRange} from '../utils';\n\nexport interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {\n delimiter?: string;\n}\n\nconst RANGE_FORMAT_DELIMITER = ' — ';\n\nexport type RangeDateFieldState = DateFieldState<RangeValue<DateTime>>;\n\nexport function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState {\n const [value, setRange] = useControlledState(\n props.value,\n props.defaultValue || null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value?.start || props.defaultValue?.start || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateRange = (v: RangeValue<DateTime> | null) => {\n setRange(\n v ? {start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone)} : v,\n );\n };\n\n const [placeholderDate, setPlaceholderDate] = React.useState<RangeValue<DateTime>>(() => {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n\n const format = props.format || 'L';\n const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;\n const sections = useFormatSections(format);\n\n const allSegments: typeof EDITABLE_SEGMENTS = React.useMemo(() => {\n return sections\n .filter((seg) => EDITABLE_SEGMENTS[seg.type])\n .reduce<typeof EDITABLE_SEGMENTS>((p, seg) => ({...p, [seg.type]: true}), {});\n }, [sections]);\n\n // eslint-disable-next-line prefer-const\n let [validSegments, setValidSegments] = React.useState<RangeValue<typeof EDITABLE_SEGMENTS>>(\n () => (value ? {start: {...allSegments}, end: {...allSegments}} : {start: {}, end: {}}),\n );\n\n if (\n value &&\n (!isAllSegmentsValid(allSegments, validSegments.start) ||\n !isAllSegmentsValid(allSegments, validSegments.end))\n ) {\n setValidSegments({start: {...allSegments}, end: {...allSegments}});\n }\n\n if (\n !value &&\n Object.keys(allSegments).length > 0 &&\n isAllSegmentsValid(allSegments, validSegments.start) &&\n Object.keys(validSegments.start).length === Object.keys(allSegments).length &&\n isAllSegmentsValid(allSegments, validSegments.end) &&\n Object.keys(validSegments.end).length === Object.keys(allSegments).length\n ) {\n validSegments = {start: {}, end: {}};\n setValidSegments(validSegments);\n setPlaceholderDate(\n createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }),\n );\n }\n\n const displayValue =\n value &&\n value.start.isValid() &&\n value.end.isValid() &&\n Object.keys(validSegments.start).length >= Object.keys(allSegments).length &&\n Object.keys(validSegments.end).length >= Object.keys(allSegments).length\n ? {start: value.start.timeZone(timeZone), end: value.end.timeZone(timeZone)}\n : {\n start: placeholderDate.start.timeZone(timeZone),\n end: placeholderDate.end.timeZone(timeZone),\n };\n const sectionsState = useSectionsState(sections, displayValue, validSegments, delimiter);\n\n const [selectedSections, setSelectedSections] = React.useState<number | 'all'>(-1);\n\n const selectedSectionIndexes = React.useMemo<{\n startIndex: number;\n endIndex: number;\n } | null>(() => {\n if (selectedSections === -1) {\n return null;\n }\n\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n\n if (typeof selectedSections === 'number') {\n return {startIndex: selectedSections, endIndex: selectedSections};\n }\n\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex(\n (section) => section.type === selectedSections,\n );\n\n return {startIndex: selectedSectionIndex, endIndex: selectedSectionIndex};\n }\n\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n\n function setValue(newValue: RangeValue<DateTime>) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (\n isAllSegmentsValid(allSegments, validSegments.start) &&\n isAllSegmentsValid(allSegments, validSegments.end)\n ) {\n if (!value || !(newValue.start.isSame(value.start) && newValue.end.isSame(value.end))) {\n handleUpdateRange(newValue);\n }\n } else {\n if (value) {\n handleUpdateRange(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n\n function markValid(portion: 'start' | 'end', part: DateFieldSectionType) {\n validSegments[portion][part] = true;\n if (\n validSegments[portion].day &&\n validSegments[portion].month &&\n validSegments[portion].year &&\n allSegments.weekday\n ) {\n validSegments[portion].weekday = true;\n }\n if (validSegments[portion].hour && allSegments.dayPeriod) {\n validSegments[portion].dayPeriod = true;\n }\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n const section = sectionsState.editableSections[sectionIndex];\n markValid(portion, section.type);\n setValue({\n ...displayValue,\n [portion]: setSegment(section, displayValue[portion], amount),\n });\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (validSegments[portion][section.type]) {\n setValue({\n ...displayValue,\n [portion]: addSegment(section, displayValue[portion], amount),\n });\n } else {\n markValid(portion, section.type);\n if (Object.keys(validSegments[portion]).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n\n function flushValidSection(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n delete validSegments[portion][sectionsState.editableSections[sectionIndex].type];\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function flushAllValidSections() {\n validSegments = {start: {}, end: {}};\n setValidSegments({start: {}, end: {}});\n }\n\n function getSectionValue(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n return displayValue[portion];\n }\n\n function setSectionValue(sectionIndex: number, currentValue: DateTime) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n setValue({...displayValue, [portion]: currentValue});\n }\n\n function createPlaceholder() {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n }\n\n function setValueFromString(str: string) {\n const list = str.split(delimiter);\n const start = parseDateFromString(list?.[0]?.trim(), format, timeZone);\n const end = parseDateFromString(list?.[1]?.trim(), format, timeZone);\n const range = {start, end};\n if (range.start.isValid() && range.end.isValid()) {\n handleUpdateRange(range);\n return true;\n }\n return false;\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && !isValidRange(value) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);\n\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty:\n Object.keys(validSegments.start).length === 0 &&\n Object.keys(validSegments.end).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateRange,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\n\nfunction useSectionsState(\n sections: DateFieldSectionWithoutPosition[],\n value: RangeValue<DateTime>,\n validSegments: RangeValue<typeof EDITABLE_SEGMENTS>,\n delimiter: string,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n };\n });\n\n if (\n sections !== state.sections ||\n validSegments !== state.validSegments ||\n !(value.start.isSame(state.value.start) && value.end.isSame(state.value.end)) ||\n delimiter !== state.delimiter\n ) {\n setState({\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n });\n }\n\n return state;\n}\n"]}
1
+ {"version":3,"file":"useRangeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/RangeDateField/hooks/useRangeDateFieldState.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable complexity */\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport {useBaseDateFieldState} from '../../DateField';\nimport type {DateFieldState} from '../../DateField';\nimport type {DateFieldSectionType, DateFieldSectionWithoutPosition} from '../../DateField/types';\nimport {\n EDITABLE_SEGMENTS,\n addSegment,\n adjustDateToFormat,\n getFormatInfo,\n isAllSegmentsValid,\n markValidSection,\n parseDateFromString,\n setSegment,\n useFormatSections,\n} from '../../DateField/utils';\nimport type {DateFieldBase} from '../../types/datePicker';\nimport type {RangeValue} from '../../types/inputs';\nimport {isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {createPlaceholderRangeValue, getRangeEditableSections, isValidRange} from '../utils';\n\nexport interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {\n delimiter?: string;\n}\n\nconst RANGE_FORMAT_DELIMITER = ' — ';\n\nexport type RangeDateFieldState = DateFieldState<RangeValue<DateTime>>;\n\nexport function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState {\n const [value, setRange] = useControlledState(\n props.value,\n props.defaultValue || null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value?.start || props.defaultValue?.start || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateRange = (v: RangeValue<DateTime> | null) => {\n setRange(\n v ? {start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone)} : v,\n );\n };\n\n const [placeholderDate, setPlaceholderDate] = React.useState<RangeValue<DateTime>>(() => {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n });\n\n const format = props.format || 'L';\n const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n\n const allSegments = formatInfo.availableUnits;\n\n // eslint-disable-next-line prefer-const\n let [validSegments, setValidSegments] = React.useState<RangeValue<typeof EDITABLE_SEGMENTS>>(\n () => (value ? {start: {...allSegments}, end: {...allSegments}} : {start: {}, end: {}}),\n );\n\n if (\n value &&\n (!isAllSegmentsValid(allSegments, validSegments.start) ||\n !isAllSegmentsValid(allSegments, validSegments.end))\n ) {\n setValidSegments({start: {...allSegments}, end: {...allSegments}});\n }\n\n if (\n !value &&\n Object.keys(allSegments).length > 0 &&\n isAllSegmentsValid(allSegments, validSegments.start) &&\n Object.keys(validSegments.start).length === Object.keys(allSegments).length &&\n isAllSegmentsValid(allSegments, validSegments.end) &&\n Object.keys(validSegments.end).length === Object.keys(allSegments).length\n ) {\n validSegments = {start: {}, end: {}};\n setValidSegments(validSegments);\n setPlaceholderDate(\n createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n }),\n );\n }\n\n const displayValue =\n value &&\n value.start.isValid() &&\n value.end.isValid() &&\n Object.keys(validSegments.start).length >= Object.keys(allSegments).length &&\n Object.keys(validSegments.end).length >= Object.keys(allSegments).length\n ? {start: value.start.timeZone(timeZone), end: value.end.timeZone(timeZone)}\n : {\n start: placeholderDate.start.timeZone(timeZone),\n end: placeholderDate.end.timeZone(timeZone),\n };\n const sectionsState = useSectionsState(sections, displayValue, validSegments, delimiter);\n\n const [selectedSections, setSelectedSections] = React.useState<number | 'all'>(-1);\n\n const selectedSectionIndexes = React.useMemo<{\n startIndex: number;\n endIndex: number;\n } | null>(() => {\n if (selectedSections === -1) {\n return null;\n }\n\n if (selectedSections === 'all') {\n return {\n startIndex: 0,\n endIndex: sectionsState.editableSections.length - 1,\n };\n }\n\n if (typeof selectedSections === 'number') {\n return {startIndex: selectedSections, endIndex: selectedSections};\n }\n\n if (typeof selectedSections === 'string') {\n const selectedSectionIndex = sectionsState.editableSections.findIndex(\n (section) => section.type === selectedSections,\n );\n\n return {startIndex: selectedSectionIndex, endIndex: selectedSectionIndex};\n }\n\n return selectedSections;\n }, [selectedSections, sectionsState.editableSections]);\n\n function setValue(newValue: RangeValue<DateTime>) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (\n isAllSegmentsValid(allSegments, validSegments.start) &&\n isAllSegmentsValid(allSegments, validSegments.end)\n ) {\n if (!value || !(newValue.start.isSame(value.start) && newValue.end.isSame(value.end))) {\n handleUpdateRange({\n start: adjustDateToFormat(newValue.start, formatInfo, 'startOf'),\n end: adjustDateToFormat(newValue.end, formatInfo, 'endOf'),\n });\n }\n } else {\n if (value) {\n handleUpdateRange(null);\n }\n setPlaceholderDate(newValue);\n }\n }\n\n function markValid(portion: 'start' | 'end', part: DateFieldSectionType) {\n validSegments[portion] = markValidSection(allSegments, validSegments[portion], part);\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n const section = sectionsState.editableSections[sectionIndex];\n markValid(portion, section.type);\n setValue({\n ...displayValue,\n [portion]: setSegment(section, displayValue[portion], amount),\n });\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (validSegments[portion][section.type]) {\n setValue({\n ...displayValue,\n [portion]: addSegment(section, displayValue[portion], amount),\n });\n } else {\n markValid(portion, section.type);\n if (Object.keys(validSegments[portion]).length >= Object.keys(allSegments).length) {\n setValue(displayValue);\n }\n }\n }\n\n function flushValidSection(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n delete validSegments[portion][sectionsState.editableSections[sectionIndex].type];\n setValidSegments({...validSegments, [portion]: {...validSegments[portion]}});\n }\n\n function flushAllValidSections() {\n validSegments = {start: {}, end: {}};\n setValidSegments({start: {}, end: {}});\n }\n\n function getSectionValue(sectionIndex: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n return displayValue[portion];\n }\n\n function setSectionValue(sectionIndex: number, currentValue: DateTime) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n setValue({...displayValue, [portion]: currentValue});\n }\n\n function createPlaceholder() {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n }\n\n function setValueFromString(str: string) {\n const list = str.split(delimiter);\n const start = parseDateFromString(list?.[0]?.trim(), format, timeZone);\n const end = parseDateFromString(list?.[1]?.trim(), format, timeZone);\n const range = {start, end};\n if (range.start.isValid() && range.end.isValid()) {\n handleUpdateRange(range);\n return true;\n }\n return false;\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && !isValidRange(value) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);\n\n return useBaseDateFieldState({\n value,\n displayValue,\n placeholderValue: props.placeholderValue,\n timeZone,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n selectedSectionIndexes,\n selectedSections,\n isEmpty:\n Object.keys(validSegments.start).length === 0 &&\n Object.keys(validSegments.end).length === 0,\n flushAllValidSections,\n flushValidSection,\n setSelectedSections,\n setValue,\n setDate: handleUpdateRange,\n adjustSection,\n setSection,\n getSectionValue,\n setSectionValue,\n createPlaceholder,\n setValueFromString,\n });\n}\n\nfunction useSectionsState(\n sections: DateFieldSectionWithoutPosition[],\n value: RangeValue<DateTime>,\n validSegments: RangeValue<typeof EDITABLE_SEGMENTS>,\n delimiter: string,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n };\n });\n\n if (\n sections !== state.sections ||\n validSegments !== state.validSegments ||\n !(value.start.isSame(state.value.start) && value.end.isSame(state.value.end)) ||\n delimiter !== state.delimiter\n ) {\n setState({\n value,\n sections,\n validSegments,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, validSegments, delimiter),\n });\n }\n\n return state;\n}\n"]}
@@ -4,6 +4,6 @@ exports.createPlaceholderRangeValue = createPlaceholderRangeValue;
4
4
  const dates_1 = require("../../utils/dates.js");
5
5
  function createPlaceholderRangeValue({ placeholderValue, timeZone }) {
6
6
  const date = (0, dates_1.createPlaceholderValue)({ placeholderValue, timeZone });
7
- return { start: date, end: date };
7
+ return { start: date.startOf('day'), end: date.endOf('day') };
8
8
  }
9
9
  //# sourceMappingURL=createPlaceholderRangeValue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createPlaceholderRangeValue.js","sourceRoot":"../../../../../src","sources":["components/RangeDateField/utils/createPlaceholderRangeValue.ts"],"names":[],"mappings":";;AAGA,kEAGC;AAND,gDAAyD;AAGzD,SAAgB,2BAA2B,CAAC,EAAC,gBAAgB,EAAE,QAAQ,EAA0B;IAC7F,MAAM,IAAI,GAAG,IAAA,8BAAsB,EAAC,EAAC,gBAAgB,EAAE,QAAQ,EAAC,CAAC,CAAC;IAClE,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;AACpC,CAAC","sourcesContent":["import {createPlaceholderValue} from '../../utils/dates';\nimport type {PlaceholderValueOptions} from '../../utils/dates';\n\nexport function createPlaceholderRangeValue({placeholderValue, timeZone}: PlaceholderValueOptions) {\n const date = createPlaceholderValue({placeholderValue, timeZone});\n return {start: date, end: date};\n}\n"]}
1
+ {"version":3,"file":"createPlaceholderRangeValue.js","sourceRoot":"../../../../../src","sources":["components/RangeDateField/utils/createPlaceholderRangeValue.ts"],"names":[],"mappings":";;AAGA,kEAGC;AAND,gDAAyD;AAGzD,SAAgB,2BAA2B,CAAC,EAAC,gBAAgB,EAAE,QAAQ,EAA0B;IAC7F,MAAM,IAAI,GAAG,IAAA,8BAAsB,EAAC,EAAC,gBAAgB,EAAE,QAAQ,EAAC,CAAC,CAAC;IAClE,OAAO,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAC,CAAC;AAChE,CAAC","sourcesContent":["import {createPlaceholderValue} from '../../utils/dates';\nimport type {PlaceholderValueOptions} from '../../utils/dates';\n\nexport function createPlaceholderRangeValue({placeholderValue, timeZone}: PlaceholderValueOptions) {\n const date = createPlaceholderValue({placeholderValue, timeZone});\n return {start: date.startOf('day'), end: date.endOf('day')};\n}\n"]}
@@ -21,8 +21,8 @@ function RangeDatePicker(_a) {
21
21
  const [anchor, setAnchor] = react_1.default.useState(null);
22
22
  const state = (0, useRangeDatePickerState_1.useRangeDatePickerState)(props);
23
23
  const { groupProps, fieldProps, calendarButtonProps, popupProps, calendarProps, timeInputProps } = (0, DatePicker_1.useDatePickerProps)(state, props);
24
- const isOnlyTime = state.hasTime && !state.hasDate;
25
- return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: b(null, className) }, groupProps, { children: [!isOnlyTime && ((0, jsx_runtime_1.jsx)("div", { ref: setAnchor, className: b('popup-anchor'), children: (0, jsx_runtime_1.jsx)(uikit_1.Popup, Object.assign({ anchorElement: anchor }, popupProps, { children: (0, jsx_runtime_1.jsxs)("div", { className: b('popup-content'), children: [typeof props.children === 'function' ? (props.children(Object.assign(Object.assign({}, calendarProps), { value: state.value }))) : ((0, jsx_runtime_1.jsx)(Calendar_1.RangeCalendar, Object.assign({}, calendarProps, { value: state.value }))), state.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: b('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(RangeDateField_1.RangeDateField, Object.assign({}, timeInputProps)) }))] }) })) })), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, fieldProps, { className: b('field'), endContent: (0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [!isOnlyTime && ((0, jsx_runtime_1.jsx)(uikit_1.Button, Object.assign({}, calendarButtonProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }))), isOnlyTime && ((0, jsx_runtime_1.jsx)(StubButton_1.StubButton, { size: calendarButtonProps.size, icon: icons_1.Clock }))] }) })), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, onReset: (v) => {
24
+ const isOnlyTime = state.formatInfo.hasTime && !state.formatInfo.hasDate;
25
+ return ((0, jsx_runtime_1.jsxs)("div", Object.assign({ className: b(null, className) }, groupProps, { children: [!isOnlyTime && ((0, jsx_runtime_1.jsx)("div", { ref: setAnchor, className: b('popup-anchor'), children: (0, jsx_runtime_1.jsx)(uikit_1.Popup, Object.assign({ anchorElement: anchor }, popupProps, { children: (0, jsx_runtime_1.jsxs)("div", { className: b('popup-content'), children: [typeof props.children === 'function' ? (props.children(Object.assign(Object.assign({}, calendarProps), { value: state.value }))) : ((0, jsx_runtime_1.jsx)(Calendar_1.RangeCalendar, Object.assign({}, calendarProps, { value: state.value }))), state.formatInfo.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: b('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(RangeDateField_1.RangeDateField, Object.assign({}, timeInputProps)) }))] }) })) })), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, fieldProps, { className: b('field'), endContent: (0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [!isOnlyTime && ((0, jsx_runtime_1.jsx)(uikit_1.Button, Object.assign({}, calendarButtonProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }))), isOnlyTime && ((0, jsx_runtime_1.jsx)(StubButton_1.StubButton, { size: calendarButtonProps.size, icon: icons_1.Clock }))] }) })), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, onReset: (v) => {
26
26
  state.dateFieldState.setDate(v);
27
27
  }, value: state.value, toStringValue: (v) => (v ? v.start.toISOString() : ''), disabled: state.disabled }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, form: props.form, value: state.value, toStringValue: (v) => (v ? v.end.toISOString() : ''), disabled: state.disabled })] })));
28
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RangeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RangeDatePicker/RangeDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Calendar as CalendarIcon, Clock as ClockIcon} from '@gravity-ui/icons';\nimport {Button, Icon, Popup, TextInput} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {RangeCalendar} from '../Calendar';\nimport {useDatePickerProps} from '../DatePicker';\nimport type {DatePickerProps} from '../DatePicker';\nimport {StubButton} from '../DatePicker/StubButton';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport {RangeDateField} from '../RangeDateField';\nimport type {RangeValue} from '../types';\n\nimport {useRangeDatePickerState} from './hooks/useRangeDatePickerState';\n\nimport './RangeDatePicker.scss';\n\nconst b = block('range-date-picker');\n\nexport type RangeDatePickerProps = DatePickerProps<RangeValue<DateTime>>;\n\nexport function RangeDatePicker({className, ...props}: RangeDatePickerProps) {\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n\n const state = useRangeDatePickerState(props);\n\n const {groupProps, fieldProps, calendarButtonProps, popupProps, calendarProps, timeInputProps} =\n useDatePickerProps(state, props);\n\n const isOnlyTime = state.hasTime && !state.hasDate;\n\n return (\n <div className={b(null, className)} {...groupProps}>\n {!isOnlyTime && (\n <div ref={setAnchor} className={b('popup-anchor')}>\n <Popup anchorElement={anchor} {...popupProps}>\n <div className={b('popup-content')}>\n {typeof props.children === 'function' ? (\n props.children({...calendarProps, value: state.value})\n ) : (\n <RangeCalendar {...calendarProps} value={state.value} />\n )}\n {state.hasTime && (\n <div className={b('time-field-wrapper')}>\n <RangeDateField {...timeInputProps} />\n </div>\n )}\n </div>\n </Popup>\n </div>\n )}\n <TextInput\n {...fieldProps}\n className={b('field')}\n endContent={\n <React.Fragment>\n {!isOnlyTime && (\n <Button {...calendarButtonProps}>\n <Icon data={CalendarIcon} />\n </Button>\n )}\n {isOnlyTime && (\n <StubButton size={calendarButtonProps.size} icon={ClockIcon} />\n )}\n </React.Fragment>\n }\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n onReset={(v) => {\n state.dateFieldState.setDate(v);\n }}\n value={state.value}\n toStringValue={(v) => (v ? v.start.toISOString() : '')}\n disabled={state.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => (v ? v.end.toISOString() : '')}\n disabled={state.disabled}\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"RangeDatePicker.js","sourceRoot":"../../../../src","sources":["components/RangeDatePicker/RangeDatePicker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AAyBb,0CAiEC;;;AAxFD,0DAA0B;AAG1B,6CAA+E;AAC/E,6CAAiE;AAEjE,0CAAqC;AACrC,mDAA0C;AAC1C,uDAAiD;AAEjD,4DAAoD;AACpD,+DAAuD;AACvD,+DAAiD;AAGjD,gFAAwE;AAExE,iCAAgC;AAEhC,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,mBAAmB,CAAC,CAAC;AAIrC,SAAgB,eAAe,CAAC,EAA2C;QAA3C,EAAC,SAAS,OAAiC,EAA5B,KAAK,sBAApB,aAAqB,CAAD;IAChD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAExE,MAAM,KAAK,GAAG,IAAA,iDAAuB,EAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,EAAC,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAC,GAC1F,IAAA,+BAAkB,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAErC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;IAEzE,OAAO,CACH,+CAAK,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,IAAM,UAAU,eAC7C,CAAC,UAAU,IAAI,CACZ,gCAAK,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,YAC7C,uBAAC,aAAK,kBAAC,aAAa,EAAE,MAAM,IAAM,UAAU,cACxC,iCAAK,SAAS,EAAE,CAAC,CAAC,eAAe,CAAC,aAC7B,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CACpC,KAAK,CAAC,QAAQ,iCAAK,aAAa,KAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAE,CACzD,CAAC,CAAC,CAAC,CACA,uBAAC,wBAAa,oBAAK,aAAa,IAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAC3D,EACA,KAAK,CAAC,UAAU,CAAC,OAAO,IAAI,CACzB,gCAAK,SAAS,EAAE,CAAC,CAAC,oBAAoB,CAAC,YACnC,uBAAC,+BAAc,oBAAK,cAAc,EAAI,GACpC,CACT,IACC,IACF,GACN,CACT,EACD,uBAAC,iBAAS,oBACF,UAAU,IACd,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EACrB,UAAU,EACN,wBAAC,eAAK,CAAC,QAAQ,eACV,CAAC,UAAU,IAAI,CACZ,uBAAC,cAAM,oBAAK,mBAAmB,cAC3B,uBAAC,YAAI,IAAC,IAAI,EAAE,gBAAY,GAAI,IACvB,CACZ,EACA,UAAU,IAAI,CACX,uBAAC,uBAAU,IAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,aAAS,GAAI,CAClE,IACY,IAEvB,EACF,uBAAC,yBAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACX,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAC,EACD,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACtD,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAC1B,EACF,uBAAC,yBAAW,IACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EACpD,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAC1B,KACA,CACT,CAAC;AACN,CAAC","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {Calendar as CalendarIcon, Clock as ClockIcon} from '@gravity-ui/icons';\nimport {Button, Icon, Popup, TextInput} from '@gravity-ui/uikit';\n\nimport {block} from '../../utils/cn';\nimport {RangeCalendar} from '../Calendar';\nimport {useDatePickerProps} from '../DatePicker';\nimport type {DatePickerProps} from '../DatePicker';\nimport {StubButton} from '../DatePicker/StubButton';\nimport {HiddenInput} from '../HiddenInput/HiddenInput';\nimport {RangeDateField} from '../RangeDateField';\nimport type {RangeValue} from '../types';\n\nimport {useRangeDatePickerState} from './hooks/useRangeDatePickerState';\n\nimport './RangeDatePicker.scss';\n\nconst b = block('range-date-picker');\n\nexport type RangeDatePickerProps = DatePickerProps<RangeValue<DateTime>>;\n\nexport function RangeDatePicker({className, ...props}: RangeDatePickerProps) {\n const [anchor, setAnchor] = React.useState<HTMLDivElement | null>(null);\n\n const state = useRangeDatePickerState(props);\n\n const {groupProps, fieldProps, calendarButtonProps, popupProps, calendarProps, timeInputProps} =\n useDatePickerProps(state, props);\n\n const isOnlyTime = state.formatInfo.hasTime && !state.formatInfo.hasDate;\n\n return (\n <div className={b(null, className)} {...groupProps}>\n {!isOnlyTime && (\n <div ref={setAnchor} className={b('popup-anchor')}>\n <Popup anchorElement={anchor} {...popupProps}>\n <div className={b('popup-content')}>\n {typeof props.children === 'function' ? (\n props.children({...calendarProps, value: state.value})\n ) : (\n <RangeCalendar {...calendarProps} value={state.value} />\n )}\n {state.formatInfo.hasTime && (\n <div className={b('time-field-wrapper')}>\n <RangeDateField {...timeInputProps} />\n </div>\n )}\n </div>\n </Popup>\n </div>\n )}\n <TextInput\n {...fieldProps}\n className={b('field')}\n endContent={\n <React.Fragment>\n {!isOnlyTime && (\n <Button {...calendarButtonProps}>\n <Icon data={CalendarIcon} />\n </Button>\n )}\n {isOnlyTime && (\n <StubButton size={calendarButtonProps.size} icon={ClockIcon} />\n )}\n </React.Fragment>\n }\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n onReset={(v) => {\n state.dateFieldState.setDate(v);\n }}\n value={state.value}\n toStringValue={(v) => (v ? v.start.toISOString() : '')}\n disabled={state.disabled}\n />\n <HiddenInput\n name={props.name}\n form={props.form}\n value={state.value}\n toStringValue={(v) => (v ? v.end.toISOString() : '')}\n disabled={state.disabled}\n />\n </div>\n );\n}\n"]}
@@ -4,4 +4,7 @@ import type { RangeDateFieldStateOptions } from "../../RangeDateField/index.js";
4
4
  import type { RangeValue } from "../../types/index.js";
5
5
  export type RangeDatePickerState = DatePickerState<RangeValue<DateTime>>;
6
6
  export type RangeDatePickerStateOptions = RangeDateFieldStateOptions;
7
- export declare const useRangeDatePickerState: (props: RangeDateFieldStateOptions) => DatePickerState<RangeValue<DateTime>>;
7
+ export declare const useRangeDatePickerState: (props: RangeDateFieldStateOptions) => DatePickerState<{
8
+ start: DateTime;
9
+ end: DateTime;
10
+ }>;
@@ -1,20 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useRangeDatePickerState = void 0;
4
+ const utils_1 = require("../../DateField/utils.js");
4
5
  const datePickerStateFactory_1 = require("../../DatePicker/hooks/datePickerStateFactory.js");
5
- const utils_1 = require("../../DatePicker/utils/index.js");
6
+ const utils_2 = require("../../DatePicker/utils/index.js");
6
7
  const RangeDateField_1 = require("../../RangeDateField/index.js");
8
+ const utils_3 = require("../../RangeDateField/utils/index.js");
7
9
  const dates_1 = require("../../utils/dates.js");
8
10
  exports.useRangeDatePickerState = (0, datePickerStateFactory_1.datePickerStateFactory)({
9
11
  getPlaceholderTime,
10
12
  mergeDateTime: mergeRangeDateTime,
11
13
  setTimezone,
12
- getDateTime: utils_1.getDateTimeValue,
14
+ getDateTime: utils_2.getDateTimeValue,
13
15
  useDateFieldState: RangeDateField_1.useRangeDateFieldState,
16
+ adjustDateToFormat: adjustRangeToFormat,
14
17
  });
15
18
  function getPlaceholderTime(placeholderValue, timeZone) {
16
- const date = (0, dates_1.createPlaceholderValue)({ placeholderValue, timeZone });
17
- return { start: date, end: date };
19
+ return (0, utils_3.createPlaceholderRangeValue)({ placeholderValue, timeZone });
18
20
  }
19
21
  function mergeRangeDateTime(date, time) {
20
22
  const start = (0, dates_1.mergeDateTime)(date.start, time.start);
@@ -26,4 +28,9 @@ function setTimezone(date, timeZone) {
26
28
  const end = date.end.timeZone(timeZone);
27
29
  return { start, end };
28
30
  }
31
+ function adjustRangeToFormat(date, sectionsInfo) {
32
+ const start = (0, utils_1.adjustDateToFormat)(date.start, sectionsInfo, 'startOf');
33
+ const end = (0, utils_1.adjustDateToFormat)(date.end, sectionsInfo, 'endOf');
34
+ return { start, end };
35
+ }
29
36
  //# sourceMappingURL=useRangeDatePickerState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRangeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RangeDatePicker/hooks/useRangeDatePickerState.ts"],"names":[],"mappings":";;;AAGA,6FAAqF;AACrF,2DAAwD;AACxD,kEAA4D;AAG5D,gDAAwE;AAM3D,QAAA,uBAAuB,GAAG,IAAA,+CAAsB,EAAC;IAC1D,kBAAkB;IAClB,aAAa,EAAE,kBAAkB;IACjC,WAAW;IACX,WAAW,EAAE,wBAAgB;IAC7B,iBAAiB,EAAE,uCAAsB;CAC5C,CAAC,CAAC;AAEH,SAAS,kBAAkB,CACvB,gBAAsC,EACtC,QAAiB;IAEjB,MAAM,IAAI,GAAG,IAAA,8BAAsB,EAAC,EAAC,gBAAgB,EAAE,QAAQ,EAAC,CAAC,CAAC;IAClE,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAC,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CACvB,IAA0B,EAC1B,IAA0B;IAE1B,MAAM,KAAK,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,IAA0B,EAAE,QAAgB;IAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC;AACxB,CAAC","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {DatePickerState} from '../../DatePicker';\nimport {datePickerStateFactory} from '../../DatePicker/hooks/datePickerStateFactory';\nimport {getDateTimeValue} from '../../DatePicker/utils';\nimport {useRangeDateFieldState} from '../../RangeDateField';\nimport type {RangeDateFieldStateOptions} from '../../RangeDateField';\nimport type {RangeValue} from '../../types';\nimport {createPlaceholderValue, mergeDateTime} from '../../utils/dates';\n\nexport type RangeDatePickerState = DatePickerState<RangeValue<DateTime>>;\n\nexport type RangeDatePickerStateOptions = RangeDateFieldStateOptions;\n\nexport const useRangeDatePickerState = datePickerStateFactory({\n getPlaceholderTime,\n mergeDateTime: mergeRangeDateTime,\n setTimezone,\n getDateTime: getDateTimeValue,\n useDateFieldState: useRangeDateFieldState,\n});\n\nfunction getPlaceholderTime(\n placeholderValue: DateTime | undefined,\n timeZone?: string,\n): RangeValue<DateTime> {\n const date = createPlaceholderValue({placeholderValue, timeZone});\n return {start: date, end: date};\n}\n\nfunction mergeRangeDateTime(\n date: RangeValue<DateTime>,\n time: RangeValue<DateTime>,\n): RangeValue<DateTime> {\n const start = mergeDateTime(date.start, time.start);\n const end = mergeDateTime(date.end, time.end);\n return {start, end};\n}\n\nfunction setTimezone(date: RangeValue<DateTime>, timeZone: string): RangeValue<DateTime> {\n const start = date.start.timeZone(timeZone);\n const end = date.end.timeZone(timeZone);\n return {start, end};\n}\n"]}
1
+ {"version":3,"file":"useRangeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RangeDatePicker/hooks/useRangeDatePickerState.ts"],"names":[],"mappings":";;;AAGA,oDAAyD;AAEzD,6FAAqF;AACrF,2DAAwD;AACxD,kEAA4D;AAE5D,+DAAuE;AAEvE,gDAAgD;AAMnC,QAAA,uBAAuB,GAAG,IAAA,+CAAsB,EAAC;IAC1D,kBAAkB;IAClB,aAAa,EAAE,kBAAkB;IACjC,WAAW;IACX,WAAW,EAAE,wBAAgB;IAC7B,iBAAiB,EAAE,uCAAsB;IACzC,kBAAkB,EAAE,mBAAmB;CAC1C,CAAC,CAAC;AAEH,SAAS,kBAAkB,CACvB,gBAAsC,EACtC,QAAiB;IAEjB,OAAO,IAAA,mCAA2B,EAAC,EAAC,gBAAgB,EAAE,QAAQ,EAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,kBAAkB,CACvB,IAA0B,EAC1B,IAA0B;IAE1B,MAAM,KAAK,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAA,qBAAa,EAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,IAA0B,EAAE,QAAgB;IAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC;AACxB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA0B,EAAE,YAAwB;IAC7E,MAAM,KAAK,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC;AACxB,CAAC","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {FormatInfo} from '../../DateField/types';\nimport {adjustDateToFormat} from '../../DateField/utils';\nimport type {DatePickerState} from '../../DatePicker';\nimport {datePickerStateFactory} from '../../DatePicker/hooks/datePickerStateFactory';\nimport {getDateTimeValue} from '../../DatePicker/utils';\nimport {useRangeDateFieldState} from '../../RangeDateField';\nimport type {RangeDateFieldStateOptions} from '../../RangeDateField';\nimport {createPlaceholderRangeValue} from '../../RangeDateField/utils';\nimport type {RangeValue} from '../../types';\nimport {mergeDateTime} from '../../utils/dates';\n\nexport type RangeDatePickerState = DatePickerState<RangeValue<DateTime>>;\n\nexport type RangeDatePickerStateOptions = RangeDateFieldStateOptions;\n\nexport const useRangeDatePickerState = datePickerStateFactory({\n getPlaceholderTime,\n mergeDateTime: mergeRangeDateTime,\n setTimezone,\n getDateTime: getDateTimeValue,\n useDateFieldState: useRangeDateFieldState,\n adjustDateToFormat: adjustRangeToFormat,\n});\n\nfunction getPlaceholderTime(\n placeholderValue: DateTime | undefined,\n timeZone?: string,\n): RangeValue<DateTime> {\n return createPlaceholderRangeValue({placeholderValue, timeZone});\n}\n\nfunction mergeRangeDateTime(\n date: RangeValue<DateTime>,\n time: RangeValue<DateTime>,\n): RangeValue<DateTime> {\n const start = mergeDateTime(date.start, time.start);\n const end = mergeDateTime(date.end, time.end);\n return {start, end};\n}\n\nfunction setTimezone(date: RangeValue<DateTime>, timeZone: string): RangeValue<DateTime> {\n const start = date.start.timeZone(timeZone);\n const end = date.end.timeZone(timeZone);\n return {start, end};\n}\n\nfunction adjustRangeToFormat(date: RangeValue<DateTime>, sectionsInfo: FormatInfo) {\n const start = adjustDateToFormat(date.start, sectionsInfo, 'startOf');\n const end = adjustDateToFormat(date.end, sectionsInfo, 'endOf');\n return {start, end};\n}\n"]}
@@ -1,7 +1,7 @@
1
- import type { AccessibilityProps, DomProps, FocusableProps, InputDOMProps, KeyboardEvents, StyleProps, TextInputExtendProps, TextInputProps } from "../types/index.js";
1
+ import type { AccessibilityProps, DomProps, FocusableProps, InputDOMProps, KeyboardEvents, PopupStyleProps, StyleProps, TextInputExtendProps, TextInputProps } from "../types/index.js";
2
2
  import type { RelativeDateFieldOptions } from "./hooks/useRelativeDateFieldState.js";
3
3
  import "./RelativeDateField.css";
4
- export interface RelativeDateFieldProps extends RelativeDateFieldOptions, TextInputProps, TextInputExtendProps, DomProps, InputDOMProps, StyleProps, AccessibilityProps, FocusableProps, KeyboardEvents {
4
+ export interface RelativeDateFieldProps extends RelativeDateFieldOptions, TextInputProps, TextInputExtendProps, DomProps, InputDOMProps, StyleProps, AccessibilityProps, FocusableProps, KeyboardEvents, PopupStyleProps {
5
5
  /**
6
6
  * Show time field in popup
7
7
  * @default false
@@ -42,6 +42,6 @@ function RelativeDateField(props) {
42
42
  if (reason === 'escape-key') {
43
43
  setOpen(false);
44
44
  }
45
- }, children: (0, jsx_runtime_1.jsxs)("div", { className: b('popup-content'), children: [(0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps)), props.hasTime ? ((0, jsx_runtime_1.jsx)("div", { className: b('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({ className: b('time-field') }, timeInputProps)) })) : null] }) }))] })));
45
+ }, placement: props.popupPlacement, offset: props.popupOffset, className: props.popupClassName, style: props.popupStyle, children: (0, jsx_runtime_1.jsxs)("div", { className: b('popup-content'), children: [(0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps)), props.hasTime ? ((0, jsx_runtime_1.jsx)("div", { className: b('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({ className: b('time-field') }, timeInputProps)) })) : null] }) }))] })));
46
46
  }
47
47
  //# sourceMappingURL=RelativeDateField.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RelativeDateField.js","sourceRoot":"../../../../src","sources":["components/RelativeDateField/RelativeDateField.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {Popup, TextInput, useFocusWithin, 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 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 RelativeDateFieldOptions,\n TextInputProps,\n TextInputExtendProps,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps,\n FocusableProps,\n KeyboardEvents {\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 {inputProps, calendarProps, timeInputProps} = useRelativeDateFieldProps(state, props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\n\n const [isOpen, setOpen] = React.useState(false);\n\n const {focusWithinProps} = useFocusWithin({\n onFocusWithinChange: (isFocusWithin) => {\n setOpen(isFocusWithin);\n },\n isDisabled: isMobile,\n });\n\n return (\n <div\n role=\"group\"\n className={b(null, props.className)}\n style={props.style}\n {...focusWithinProps}\n >\n <TextInput\n {...inputProps}\n className={b('field')}\n ref={setAnchor}\n onBlur={props.onBlur}\n onKeyDown={(e) => {\n inputProps.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 />\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\n anchorElement={anchor}\n open={isOpen}\n onOpenChange={(_open, _event, reason) => {\n if (reason === 'escape-key') {\n setOpen(false);\n }\n }}\n >\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
+ {"version":3,"file":"RelativeDateField.js","sourceRoot":"../../../../src","sources":["components/RelativeDateField/RelativeDateField.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport {Popup, TextInput, useFocusWithin, 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 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 {inputProps, calendarProps, timeInputProps} = useRelativeDateFieldProps(state, props);\n\n const isMobile = useMobile();\n\n const [anchor, setAnchor] = React.useState<HTMLElement | null>(null);\n\n const [isOpen, setOpen] = React.useState(false);\n\n const {focusWithinProps} = useFocusWithin({\n onFocusWithinChange: (isFocusWithin) => {\n setOpen(isFocusWithin);\n },\n isDisabled: isMobile,\n });\n\n return (\n <div\n role=\"group\"\n className={b(null, props.className)}\n style={props.style}\n {...focusWithinProps}\n >\n <TextInput\n {...inputProps}\n className={b('field')}\n ref={setAnchor}\n onBlur={props.onBlur}\n onKeyDown={(e) => {\n inputProps.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 />\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\n anchorElement={anchor}\n open={isOpen}\n onOpenChange={(_open, _event, reason) => {\n if (reason === 'escape-key') {\n setOpen(false);\n }\n }}\n placement={props.popupPlacement}\n offset={props.popupOffset}\n className={props.popupClassName}\n style={props.popupStyle}\n >\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,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import type { CalendarProps } from "../Calendar/index.js";
3
- import type { AccessibilityProps, DomProps, FocusableProps, InputDOMProps, KeyboardEvents, StyleProps, TextInputProps } from "../types/index.js";
3
+ import type { AccessibilityProps, DomProps, FocusableProps, InputDOMProps, KeyboardEvents, PopupStyleProps, StyleProps, TextInputProps } from "../types/index.js";
4
4
  import type { RelativeDatePickerStateOptions } from "./hooks/useRelativeDatePickerState.js";
5
5
  import "./RelativeDatePicker.css";
6
- export interface RelativeDatePickerProps extends RelativeDatePickerStateOptions, TextInputProps, FocusableProps, KeyboardEvents, DomProps, InputDOMProps, StyleProps, AccessibilityProps {
6
+ export interface RelativeDatePickerProps extends RelativeDatePickerStateOptions, TextInputProps, FocusableProps, KeyboardEvents, DomProps, InputDOMProps, StyleProps, AccessibilityProps, PopupStyleProps {
7
7
  children?: (props: CalendarProps) => React.ReactNode;
8
8
  /** Handler that is called when the popup's open state changes. */
9
9
  onOpenChange?: (open: boolean) => void;
@@ -24,7 +24,7 @@ function RelativeDatePicker(props) {
24
24
  const [anchor, setAnchor] = react_1.default.useState(null);
25
25
  const handleRef = (0, uikit_1.useForkRef)(groupProps.ref, setAnchor);
26
26
  const isMobile = (0, uikit_1.useMobile)();
27
- const isOnlyTime = state.datePickerState.hasTime && !state.datePickerState.hasDate;
27
+ const isOnlyTime = state.datePickerState.formatInfo.hasTime && !state.datePickerState.formatInfo.hasDate;
28
28
  return ((0, jsx_runtime_1.jsxs)("div", Object.assign({}, groupProps, { ref: handleRef, className: b(null, props.className), children: [isMobile && state.mode === 'absolute' && ((0, jsx_runtime_1.jsx)(MobileCalendar_1.MobileCalendar, { state: state.datePickerState, props: {
29
29
  id: props.id,
30
30
  disabled: props.disabled,
@@ -33,7 +33,7 @@ function RelativeDatePicker(props) {
33
33
  timeZone: props.timeZone,
34
34
  } })), (0, jsx_runtime_1.jsx)(uikit_1.TextInput, Object.assign({}, fieldProps, { controlProps: Object.assign(Object.assign({}, fieldProps.controlProps), { disabled: isMobile && state.mode === 'absolute', className: b('input', { mobile: isMobile && state.mode === 'absolute' }) }), hasClear: props.hasClear && !(isMobile && state.mode === 'absolute'), startContent: (0, jsx_runtime_1.jsx)(uikit_1.Button, Object.assign({}, modeSwitcherProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Function }) })), endContent: (0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [!isMobile && !isOnlyTime && ((0, jsx_runtime_1.jsx)(uikit_1.Button, Object.assign({}, calendarButtonProps, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Calendar }) }))), !isMobile && isOnlyTime && ((0, jsx_runtime_1.jsx)(StubButton_1.StubButton, { size: calendarButtonProps.size, icon: icons_1.Clock })), isMobile && state.mode === 'absolute' && ((0, jsx_runtime_1.jsx)(StubButton_1.StubButton, { size: calendarButtonProps.size, icon: isOnlyTime ? icons_1.Clock : icons_1.Calendar }))] }) })), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, value: (_a = state.value) === null || _a === void 0 ? void 0 : _a.type, disabled: state.disabled, form: props.form }), (0, jsx_runtime_1.jsx)(HiddenInput_1.HiddenInput, { name: props.name, value: state.value, toStringValue: (value) => getNativeValue(value), onReset: (value) => {
35
35
  state.setValue(value);
36
- }, disabled: state.disabled, form: props.form }), !isMobile && !isOnlyTime && ((0, jsx_runtime_1.jsx)(uikit_1.Popup, Object.assign({}, popupProps, { anchorElement: anchor, children: (0, jsx_runtime_1.jsxs)("div", { className: b('popup-content'), children: [typeof props.children === 'function' ? (props.children(calendarProps)) : ((0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps))), state.datePickerState.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: b('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({}, timeInputProps)) }))] }) })))] })));
36
+ }, disabled: state.disabled, form: props.form }), !isMobile && !isOnlyTime && ((0, jsx_runtime_1.jsx)(uikit_1.Popup, Object.assign({}, popupProps, { anchorElement: anchor, children: (0, jsx_runtime_1.jsxs)("div", { className: b('popup-content'), children: [typeof props.children === 'function' ? (props.children(calendarProps)) : ((0, jsx_runtime_1.jsx)(Calendar_1.Calendar, Object.assign({}, calendarProps))), state.datePickerState.formatInfo.hasTime && ((0, jsx_runtime_1.jsx)("div", { className: b('time-field-wrapper'), children: (0, jsx_runtime_1.jsx)(DateField_1.DateField, Object.assign({}, timeInputProps)) }))] }) })))] })));
37
37
  }
38
38
  function getNativeValue(value) {
39
39
  if (!value) {
@@ -1 +1 @@
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 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 RelativeDatePickerStateOptions,\n TextInputProps,\n FocusableProps,\n KeyboardEvents,\n DomProps,\n InputDOMProps,\n StyleProps,\n AccessibilityProps {\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 = state.datePickerState.hasTime && !state.datePickerState.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={props.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.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"]}
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 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={props.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"]}