@gravity-ui/date-components 3.4.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/README.md +32 -1
  2. package/dist/cjs/components/Calendar/Calendar.d.ts +6 -2
  3. package/dist/cjs/components/Calendar/Calendar.js +1 -1
  4. package/dist/cjs/components/Calendar/Calendar.js.map +1 -1
  5. package/dist/cjs/components/CalendarView/Calendar.css +3 -0
  6. package/dist/cjs/components/CalendarView/Calendar.css.map +1 -1
  7. package/dist/cjs/components/CalendarView/CalendarView.d.ts +2 -1
  8. package/dist/cjs/components/CalendarView/CalendarView.js +8 -8
  9. package/dist/cjs/components/CalendarView/CalendarView.js.map +1 -1
  10. package/dist/cjs/components/CalendarView/hooks/types.d.ts +5 -3
  11. package/dist/cjs/components/CalendarView/hooks/types.js.map +1 -1
  12. package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js +1 -2
  13. package/dist/cjs/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
  14. package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js +10 -3
  15. package/dist/cjs/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
  16. package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js +7 -1
  17. package/dist/cjs/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
  18. package/dist/cjs/components/CalendarView/hooks/useCalendarState.d.ts +5 -3
  19. package/dist/cjs/components/CalendarView/hooks/useCalendarState.js +74 -30
  20. package/dist/cjs/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  21. package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.js +16 -9
  22. package/dist/cjs/components/CalendarView/hooks/useRangeCalendarState.js.map +1 -1
  23. package/dist/cjs/components/DateField/DateField.d.ts +1 -1
  24. package/dist/cjs/components/DateField/DateField.js +5 -17
  25. package/dist/cjs/components/DateField/DateField.js.map +1 -1
  26. package/dist/cjs/components/DateField/IncompleteDate.d.ts +28 -0
  27. package/dist/cjs/components/DateField/IncompleteDate.js +116 -0
  28. package/dist/cjs/components/DateField/IncompleteDate.js.map +1 -0
  29. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.d.ts +34 -68
  30. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js +18 -249
  31. package/dist/cjs/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
  32. package/dist/cjs/components/DateField/hooks/useDateFieldProps.d.ts +2 -0
  33. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js +250 -54
  34. package/dist/cjs/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  35. package/dist/cjs/components/DateField/hooks/useDateFieldState.d.ts +20 -2
  36. package/dist/cjs/components/DateField/hooks/useDateFieldState.js +85 -117
  37. package/dist/cjs/components/DateField/hooks/useDateFieldState.js.map +1 -1
  38. package/dist/cjs/components/DateField/hooks/useFocusManager.d.ts +29 -0
  39. package/dist/cjs/components/DateField/hooks/useFocusManager.js +116 -0
  40. package/dist/cjs/components/DateField/hooks/useFocusManager.js.map +1 -0
  41. package/dist/cjs/components/{RangeDateField → DateField}/hooks/useRangeDateFieldState.d.ts +1 -1
  42. package/dist/cjs/components/DateField/hooks/useRangeDateFieldState.js +236 -0
  43. package/dist/cjs/components/DateField/hooks/useRangeDateFieldState.js.map +1 -0
  44. package/dist/cjs/components/DateField/i18n/ru.json +1 -1
  45. package/dist/cjs/components/DateField/index.d.ts +2 -1
  46. package/dist/cjs/components/DateField/index.js +1 -1
  47. package/dist/cjs/components/DateField/index.js.map +1 -1
  48. package/dist/cjs/components/DateField/types.d.ts +2 -22
  49. package/dist/cjs/components/DateField/types.js.map +1 -1
  50. package/dist/cjs/components/DateField/utils.d.ts +21 -34
  51. package/dist/cjs/components/DateField/utils.js +186 -138
  52. package/dist/cjs/components/DateField/utils.js.map +1 -1
  53. package/dist/cjs/components/DatePicker/DatePicker.d.ts +3 -3
  54. package/dist/cjs/components/DatePicker/DatePicker.js +3 -4
  55. package/dist/cjs/components/DatePicker/DatePicker.js.map +1 -1
  56. package/dist/cjs/components/DatePicker/MobileCalendar.d.ts +1 -1
  57. package/dist/cjs/components/DatePicker/MobileCalendar.js +3 -5
  58. package/dist/cjs/components/DatePicker/MobileCalendar.js.map +1 -1
  59. package/dist/cjs/components/DatePicker/StubButton.d.ts +1 -1
  60. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.d.ts +1 -1
  61. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js +15 -6
  62. package/dist/cjs/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  63. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.d.ts +2 -2
  64. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js +30 -17
  65. package/dist/cjs/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  66. package/dist/cjs/components/HiddenInput/HiddenInput.d.ts +2 -5
  67. package/dist/cjs/components/HiddenInput/HiddenInput.js +2 -4
  68. package/dist/cjs/components/HiddenInput/HiddenInput.js.map +1 -1
  69. package/dist/cjs/components/RangeCalendar/RangeCalendar.d.ts +2 -2
  70. package/dist/cjs/components/RangeCalendar/RangeCalendar.js +2 -3
  71. package/dist/cjs/components/RangeCalendar/RangeCalendar.js.map +1 -1
  72. package/dist/cjs/components/RangeDateField/RangeDateField.d.ts +1 -1
  73. package/dist/cjs/components/RangeDateField/RangeDateField.js +6 -19
  74. package/dist/cjs/components/RangeDateField/RangeDateField.js.map +1 -1
  75. package/dist/cjs/components/RangeDateField/index.d.ts +0 -1
  76. package/dist/cjs/components/RangeDateField/index.js +0 -1
  77. package/dist/cjs/components/RangeDateField/index.js.map +1 -1
  78. package/dist/cjs/components/RangeDatePicker/RangeDatePicker.d.ts +2 -1
  79. package/dist/cjs/components/RangeDatePicker/RangeDatePicker.js +4 -5
  80. package/dist/cjs/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
  81. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +1 -1
  82. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.js +3 -4
  83. package/dist/cjs/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
  84. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.d.ts +1 -1
  85. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js +4 -5
  86. package/dist/cjs/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  87. package/dist/cjs/components/RangeDateSelection/components/NowLine/NowLine.d.ts +2 -1
  88. package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.d.ts +1 -1
  89. package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.js +1 -1
  90. package/dist/cjs/components/RangeDateSelection/components/Ruler/Ruler.js.map +1 -1
  91. package/dist/cjs/components/RangeDateSelection/components/RulerViewport/RulerViewport.js +2 -2
  92. package/dist/cjs/components/RangeDateSelection/components/RulerViewport/RulerViewport.js.map +1 -1
  93. package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.d.ts +2 -1
  94. package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +12 -21
  95. package/dist/cjs/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
  96. package/dist/cjs/components/RangeDateSelection/components/Ticks/MiddleTicks.d.ts +1 -1
  97. package/dist/cjs/components/RangeDateSelection/components/Ticks/SlitTicks.d.ts +1 -1
  98. package/dist/cjs/components/RangeDateSelection/components/Ticks/Ticks.d.ts +2 -2
  99. package/dist/cjs/components/RangeDateSelection/components/Ticks/Ticks.js.map +1 -1
  100. package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.d.ts +3 -4
  101. package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.js +0 -3
  102. package/dist/cjs/components/RangeDateSelection/components/Ticks/UnavialableTicks.js.map +1 -1
  103. package/dist/cjs/components/RangeDateSelection/hooks/useRangeDateSelectionState.js +9 -10
  104. package/dist/cjs/components/RangeDateSelection/hooks/useRangeDateSelectionState.js.map +1 -1
  105. package/dist/cjs/components/RangeDateSelection/utils/span.d.ts +2 -1
  106. package/dist/cjs/components/RangeDateSelection/utils/span.js.map +1 -1
  107. package/dist/cjs/components/RelativeDateField/RelativeDateField.d.ts +1 -1
  108. package/dist/cjs/components/RelativeDateField/RelativeDateField.js +3 -40
  109. package/dist/cjs/components/RelativeDateField/RelativeDateField.js.map +1 -1
  110. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.d.ts +7 -2
  111. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +71 -9
  112. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldProps.js.map +1 -1
  113. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +2 -0
  114. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js +48 -34
  115. package/dist/cjs/components/RelativeDateField/hooks/useRelativeDateFieldState.js.map +1 -1
  116. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.d.ts +1 -1
  117. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js +7 -4
  118. package/dist/cjs/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  119. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.d.ts +1 -1
  120. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +52 -21
  121. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  122. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +9 -10
  123. package/dist/cjs/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
  124. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +1 -1
  125. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +2 -1
  126. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
  127. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  128. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
  129. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
  130. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  131. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
  132. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  133. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
  134. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
  135. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  136. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
  137. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -16
  138. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  139. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +2 -1
  140. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +33 -7
  141. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  142. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
  143. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
  144. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  145. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
  146. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +9 -12
  147. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  148. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
  149. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  150. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
  151. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +27 -16
  152. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  153. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
  154. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
  155. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  156. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
  157. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  158. package/dist/cjs/components/RelativeRangeDatePicker/types.js.map +1 -1
  159. package/dist/cjs/components/RelativeRangeDatePicker/utils.d.ts +2 -2
  160. package/dist/cjs/components/RelativeRangeDatePicker/utils.js +32 -9
  161. package/dist/cjs/components/RelativeRangeDatePicker/utils.js.map +1 -1
  162. package/dist/cjs/components/types/inputs.js.map +1 -1
  163. package/dist/cjs/components/utils/constants.d.ts +2 -0
  164. package/dist/cjs/components/utils/constants.js +7 -1
  165. package/dist/cjs/components/utils/constants.js.map +1 -1
  166. package/dist/cjs/components/utils/dates.d.ts +6 -1
  167. package/dist/cjs/components/utils/dates.js +6 -1
  168. package/dist/cjs/components/utils/dates.js.map +1 -1
  169. package/dist/cjs/components/utils/filterDOMProps.js +1 -1
  170. package/dist/cjs/components/utils/filterDOMProps.js.map +1 -1
  171. package/dist/cjs/components/utils/mergeProps.js +1 -1
  172. package/dist/cjs/components/utils/mergeProps.js.map +1 -1
  173. package/dist/cjs/components/utils/validation/datePicker.js +1 -1
  174. package/dist/cjs/components/utils/validation/datePicker.js.map +1 -1
  175. package/dist/cjs/components/utils/validation/i18n/ru.json +2 -2
  176. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
  177. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js +6 -1
  178. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
  179. package/dist/cjs/hooks/useEventHandler.js +1 -2
  180. package/dist/cjs/hooks/useEventHandler.js.map +1 -1
  181. package/dist/cjs/hooks/useMove.d.ts +2 -2
  182. package/dist/cjs/hooks/useMove.js +6 -9
  183. package/dist/cjs/hooks/useMove.js.map +1 -1
  184. package/dist/cjs/hooks/useResizeObserver.js +1 -1
  185. package/dist/cjs/hooks/useResizeObserver.js.map +1 -1
  186. package/dist/cjs/package.json +1 -1
  187. package/dist/docs/INDEX.md +131 -0
  188. package/dist/docs/components/Calendar.md +125 -0
  189. package/dist/docs/components/DateField.md +206 -0
  190. package/dist/docs/components/DatePicker.md +194 -0
  191. package/dist/docs/components/RangeCalendar.md +125 -0
  192. package/dist/docs/components/RelativeDateField.md +73 -0
  193. package/dist/docs/components/RelativeDatePicker.md +59 -0
  194. package/dist/esm/components/Calendar/Calendar.d.ts +6 -2
  195. package/dist/esm/components/Calendar/Calendar.js +1 -1
  196. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  197. package/dist/esm/components/CalendarView/Calendar.css +3 -0
  198. package/dist/esm/components/CalendarView/Calendar.css.map +1 -1
  199. package/dist/esm/components/CalendarView/CalendarView.d.ts +2 -1
  200. package/dist/esm/components/CalendarView/CalendarView.js +8 -8
  201. package/dist/esm/components/CalendarView/CalendarView.js.map +1 -1
  202. package/dist/esm/components/CalendarView/hooks/types.d.ts +5 -3
  203. package/dist/esm/components/CalendarView/hooks/types.js.map +1 -1
  204. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js +1 -2
  205. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
  206. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js +10 -3
  207. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
  208. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js +7 -1
  209. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
  210. package/dist/esm/components/CalendarView/hooks/useCalendarState.d.ts +5 -3
  211. package/dist/esm/components/CalendarView/hooks/useCalendarState.js +74 -30
  212. package/dist/esm/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  213. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js +16 -10
  214. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js.map +1 -1
  215. package/dist/esm/components/DateField/DateField.d.ts +1 -1
  216. package/dist/esm/components/DateField/DateField.js +6 -18
  217. package/dist/esm/components/DateField/DateField.js.map +1 -1
  218. package/dist/esm/components/DateField/IncompleteDate.d.ts +28 -0
  219. package/dist/esm/components/DateField/IncompleteDate.js +112 -0
  220. package/dist/esm/components/DateField/IncompleteDate.js.map +1 -0
  221. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +34 -68
  222. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +17 -248
  223. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
  224. package/dist/esm/components/DateField/hooks/useDateFieldProps.d.ts +2 -0
  225. package/dist/esm/components/DateField/hooks/useDateFieldProps.js +250 -54
  226. package/dist/esm/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  227. package/dist/esm/components/DateField/hooks/useDateFieldState.d.ts +20 -2
  228. package/dist/esm/components/DateField/hooks/useDateFieldState.js +87 -119
  229. package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
  230. package/dist/esm/components/DateField/hooks/useFocusManager.d.ts +29 -0
  231. package/dist/esm/components/DateField/hooks/useFocusManager.js +112 -0
  232. package/dist/esm/components/DateField/hooks/useFocusManager.js.map +1 -0
  233. package/dist/esm/components/{RangeDateField → DateField}/hooks/useRangeDateFieldState.d.ts +1 -1
  234. package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js +232 -0
  235. package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js.map +1 -0
  236. package/dist/esm/components/DateField/i18n/ru.json +1 -1
  237. package/dist/esm/components/DateField/index.d.ts +2 -1
  238. package/dist/esm/components/DateField/index.js +1 -1
  239. package/dist/esm/components/DateField/index.js.map +1 -1
  240. package/dist/esm/components/DateField/types.d.ts +2 -22
  241. package/dist/esm/components/DateField/types.js.map +1 -1
  242. package/dist/esm/components/DateField/utils.d.ts +21 -34
  243. package/dist/esm/components/DateField/utils.js +185 -131
  244. package/dist/esm/components/DateField/utils.js.map +1 -1
  245. package/dist/esm/components/DatePicker/DatePicker.d.ts +3 -3
  246. package/dist/esm/components/DatePicker/DatePicker.js +3 -5
  247. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  248. package/dist/esm/components/DatePicker/MobileCalendar.d.ts +1 -1
  249. package/dist/esm/components/DatePicker/MobileCalendar.js +3 -5
  250. package/dist/esm/components/DatePicker/MobileCalendar.js.map +1 -1
  251. package/dist/esm/components/DatePicker/StubButton.d.ts +1 -1
  252. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.d.ts +1 -1
  253. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js +15 -6
  254. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  255. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.d.ts +2 -2
  256. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +30 -18
  257. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  258. package/dist/esm/components/HiddenInput/HiddenInput.d.ts +2 -5
  259. package/dist/esm/components/HiddenInput/HiddenInput.js +3 -4
  260. package/dist/esm/components/HiddenInput/HiddenInput.js.map +1 -1
  261. package/dist/esm/components/RangeCalendar/RangeCalendar.d.ts +2 -2
  262. package/dist/esm/components/RangeCalendar/RangeCalendar.js +2 -3
  263. package/dist/esm/components/RangeCalendar/RangeCalendar.js.map +1 -1
  264. package/dist/esm/components/RangeDateField/RangeDateField.d.ts +1 -1
  265. package/dist/esm/components/RangeDateField/RangeDateField.js +7 -20
  266. package/dist/esm/components/RangeDateField/RangeDateField.js.map +1 -1
  267. package/dist/esm/components/RangeDateField/index.d.ts +0 -1
  268. package/dist/esm/components/RangeDateField/index.js +0 -1
  269. package/dist/esm/components/RangeDateField/index.js.map +1 -1
  270. package/dist/esm/components/RangeDatePicker/RangeDatePicker.d.ts +2 -1
  271. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js +4 -6
  272. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
  273. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +1 -1
  274. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js +2 -3
  275. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
  276. package/dist/esm/components/RangeDateSelection/RangeDateSelection.d.ts +1 -1
  277. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js +4 -5
  278. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  279. package/dist/esm/components/RangeDateSelection/components/NowLine/NowLine.d.ts +2 -1
  280. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.d.ts +1 -1
  281. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js +1 -1
  282. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js.map +1 -1
  283. package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js +2 -2
  284. package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js.map +1 -1
  285. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.d.ts +2 -1
  286. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +12 -22
  287. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
  288. package/dist/esm/components/RangeDateSelection/components/Ticks/MiddleTicks.d.ts +1 -1
  289. package/dist/esm/components/RangeDateSelection/components/Ticks/SlitTicks.d.ts +1 -1
  290. package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.d.ts +2 -2
  291. package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.js.map +1 -1
  292. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.d.ts +3 -4
  293. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js +1 -2
  294. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js.map +1 -1
  295. package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js +9 -10
  296. package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js.map +1 -1
  297. package/dist/esm/components/RangeDateSelection/utils/span.d.ts +2 -1
  298. package/dist/esm/components/RangeDateSelection/utils/span.js.map +1 -1
  299. package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +1 -1
  300. package/dist/esm/components/RelativeDateField/RelativeDateField.js +4 -40
  301. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  302. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.d.ts +7 -2
  303. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +71 -9
  304. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js.map +1 -1
  305. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +2 -0
  306. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js +48 -34
  307. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js.map +1 -1
  308. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +1 -1
  309. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +7 -4
  310. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  311. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.d.ts +1 -1
  312. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +52 -22
  313. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  314. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +9 -10
  315. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
  316. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.css +1 -1
  317. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +2 -1
  318. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
  319. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  320. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
  321. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
  322. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  323. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
  324. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  325. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
  326. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
  327. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  328. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
  329. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -17
  330. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  331. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +2 -1
  332. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +32 -7
  333. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  334. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
  335. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
  336. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  337. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
  338. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +8 -10
  339. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  340. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
  341. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  342. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
  343. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +26 -15
  344. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  345. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
  346. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
  347. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  348. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
  349. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  350. package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
  351. package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +2 -2
  352. package/dist/esm/components/RelativeRangeDatePicker/utils.js +33 -9
  353. package/dist/esm/components/RelativeRangeDatePicker/utils.js.map +1 -1
  354. package/dist/esm/components/types/inputs.js.map +1 -1
  355. package/dist/esm/components/utils/constants.d.ts +2 -0
  356. package/dist/esm/components/utils/constants.js +6 -0
  357. package/dist/esm/components/utils/constants.js.map +1 -1
  358. package/dist/esm/components/utils/dates.d.ts +6 -1
  359. package/dist/esm/components/utils/dates.js +5 -1
  360. package/dist/esm/components/utils/dates.js.map +1 -1
  361. package/dist/esm/components/utils/filterDOMProps.js +1 -1
  362. package/dist/esm/components/utils/filterDOMProps.js.map +1 -1
  363. package/dist/esm/components/utils/mergeProps.js +1 -1
  364. package/dist/esm/components/utils/mergeProps.js.map +1 -1
  365. package/dist/esm/components/utils/validation/datePicker.js +1 -1
  366. package/dist/esm/components/utils/validation/datePicker.js.map +1 -1
  367. package/dist/esm/components/utils/validation/i18n/ru.json +2 -2
  368. package/dist/esm/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
  369. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js +6 -1
  370. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
  371. package/dist/esm/hooks/useEventHandler.js +1 -2
  372. package/dist/esm/hooks/useEventHandler.js.map +1 -1
  373. package/dist/esm/hooks/useMove.d.ts +2 -2
  374. package/dist/esm/hooks/useMove.js +6 -9
  375. package/dist/esm/hooks/useMove.js.map +1 -1
  376. package/dist/esm/hooks/useResizeObserver.js +1 -1
  377. package/dist/esm/hooks/useResizeObserver.js.map +1 -1
  378. package/dist/esm/package.json +1 -1
  379. package/package.json +45 -50
  380. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -218
  381. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
  382. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
  383. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -9
  384. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
  385. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
  386. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js +0 -42
  387. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
  388. package/dist/cjs/components/RangeDateField/utils/index.d.ts +0 -3
  389. package/dist/cjs/components/RangeDateField/utils/index.js +0 -7
  390. package/dist/cjs/components/RangeDateField/utils/index.js.map +0 -1
  391. package/dist/cjs/components/RangeDateField/utils/isValidRange.d.ts +0 -3
  392. package/dist/cjs/components/RangeDateField/utils/isValidRange.js +0 -7
  393. package/dist/cjs/components/RangeDateField/utils/isValidRange.js.map +0 -1
  394. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -214
  395. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
  396. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
  397. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -6
  398. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
  399. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
  400. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js +0 -39
  401. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
  402. package/dist/esm/components/RangeDateField/utils/index.d.ts +0 -3
  403. package/dist/esm/components/RangeDateField/utils/index.js +0 -4
  404. package/dist/esm/components/RangeDateField/utils/index.js.map +0 -1
  405. package/dist/esm/components/RangeDateField/utils/isValidRange.d.ts +0 -3
  406. package/dist/esm/components/RangeDateField/utils/isValidRange.js +0 -4
  407. package/dist/esm/components/RangeDateField/utils/isValidRange.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Presets.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/Presets.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 {List, Tab, TabList, TabPanel, TabProvider} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\n\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\nimport {filterPresetTabs, getDefaultPresetTabs} from './utils';\nimport type {PresetTab} from './utils';\n\nimport './Presets.scss';\n\nconst b = block('relative-range-date-picker-presets');\n\nexport interface PresetProps {\n className?: string;\n onChoosePreset: (start: string, end: string) => void;\n withTime?: boolean;\n minValue?: DateTime;\n size?: 's' | 'm' | 'l' | 'xl';\n presetTabs?: PresetTab[];\n}\nexport function Presets({\n className,\n size = 'm',\n minValue,\n withTime,\n onChoosePreset,\n presetTabs,\n}: PresetProps) {\n const {t} = i18n.useTranslation();\n const tabs = React.useMemo(() => {\n return filterPresetTabs(presetTabs ?? getDefaultPresetTabs({withTime, t}), {minValue});\n }, [withTime, minValue, presetTabs, t]);\n\n const [activeTabId, setActiveTab] = React.useState(tabs[0]?.id);\n\n if (tabs.length === 0) {\n return null;\n }\n\n const activeTab = tabs.find((tab) => tab.id === activeTabId) ?? tabs[0];\n if (!activeTab) {\n return null;\n }\n\n if (activeTab.id !== activeTabId) {\n setActiveTab(activeTab.id);\n }\n\n return (\n <div className={b({size}, className)}>\n <TabProvider value={activeTabId} onUpdate={setActiveTab}>\n <div className={b('tabs')}>\n <TabList size={size === 's' ? 'm' : size}>\n {tabs.map(({id, title}) => (\n <Tab key={id} value={id}>\n {title}\n </Tab>\n ))}\n </TabList>\n </div>\n <TabPanel className={b('content')} value={activeTabId}>\n <PresetsList\n presets={activeTab.presets}\n onChoosePreset={onChoosePreset}\n size={size}\n />\n </TabPanel>\n </TabProvider>\n </div>\n );\n}\nexport const SIZE_TO_ITEM_HEIGHT = {\n s: 28,\n m: 28,\n l: 32,\n xl: 36,\n};\n\ninterface PresetsListProps {\n size?: 's' | 'm' | 'l' | 'xl';\n presets: Preset[];\n onChoosePreset: (start: string, end: string) => void;\n}\nfunction PresetsList({presets, onChoosePreset, size = 'm'}: PresetsListProps) {\n const ref = React.useRef<List<Preset>>(null);\n const {t} = i18n.useTranslation();\n\n React.useEffect(() => {\n const list = ref.current;\n const container = ref.current?.refContainer.current?.node as HTMLDivElement | undefined;\n if (list && container) {\n try {\n container.setAttribute('tabindex', '0');\n container.setAttribute('class', b('list-container'));\n const handleFocus = () => {\n if (list.getActiveItem() === null) {\n list.activateItem(0, true);\n }\n };\n container.addEventListener('focus', handleFocus);\n return () => {\n container.removeEventListener('focus', handleFocus);\n };\n } catch {\n // Oooops\n }\n }\n return undefined;\n }, []);\n\n return (\n <List\n ref={ref}\n className={b('list')}\n itemClassName={b('item')}\n items={presets}\n filterable={false}\n virtualized={false}\n renderItem={(item) => t(item.title as any)}\n itemHeight={SIZE_TO_ITEM_HEIGHT[size]}\n onItemClick={(item) => {\n onChoosePreset(item.from, item.to);\n }}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"Presets.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/Presets.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 {List, Tab, TabList, TabPanel, TabProvider} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\n\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\nimport {filterPresetTabs, getDefaultPresetTabs} from './utils';\nimport type {PresetTab} from './utils';\n\nimport './Presets.scss';\n\nconst b = block('relative-range-date-picker-presets');\n\ninterface PresetProps {\n className?: string;\n onChoosePreset: (start: string | null, end: string | null) => void;\n withTime?: boolean;\n minValue?: DateTime;\n size?: 's' | 'm' | 'l' | 'xl';\n presetTabs?: PresetTab[];\n allowNullableValues?: boolean;\n}\nexport function Presets({\n className,\n size = 'm',\n minValue,\n withTime,\n onChoosePreset,\n presetTabs,\n allowNullableValues,\n}: PresetProps) {\n const {t} = i18n.useTranslation();\n const tabs = React.useMemo(() => {\n return filterPresetTabs(\n presetTabs ?? getDefaultPresetTabs({withTime, allowNullableValues, t}),\n {minValue, allowNullableValues},\n );\n }, [presetTabs, withTime, allowNullableValues, t, minValue]);\n\n const [activeTabId, setActiveTab] = React.useState(tabs[0]?.id);\n\n if (tabs.length === 0) {\n return null;\n }\n\n const activeTab = tabs.find((tab) => tab.id === activeTabId) ?? tabs[0];\n if (!activeTab) {\n return null;\n }\n\n if (activeTab.id !== activeTabId) {\n setActiveTab(activeTab.id);\n }\n\n return (\n <div className={b({size}, className)}>\n <TabProvider value={activeTabId} onUpdate={setActiveTab}>\n <div className={b('tabs')}>\n <TabList size={size === 's' ? 'm' : size}>\n {tabs.map(({id, title}) => (\n <Tab key={id} value={id}>\n {title}\n </Tab>\n ))}\n </TabList>\n </div>\n <TabPanel className={b('content')} value={activeTabId}>\n <PresetsList\n presets={activeTab.presets}\n onChoosePreset={onChoosePreset}\n size={size}\n />\n </TabPanel>\n </TabProvider>\n </div>\n );\n}\nconst SIZE_TO_ITEM_HEIGHT = {\n s: 28,\n m: 28,\n l: 32,\n xl: 36,\n};\n\ninterface PresetsListProps {\n size?: 's' | 'm' | 'l' | 'xl';\n presets: Preset[];\n onChoosePreset: (start: string | null, end: string | null) => void;\n}\nfunction PresetsList({presets, onChoosePreset, size = 'm'}: PresetsListProps) {\n const ref = React.useRef<List<Preset>>(null);\n const {t} = i18n.useTranslation();\n\n React.useEffect(() => {\n const list = ref.current;\n const container = ref.current?.refContainer.current?.node as HTMLDivElement | undefined;\n if (list && container) {\n try {\n container.setAttribute('tabindex', '0');\n container.setAttribute('class', b('list-container'));\n const handleFocus = () => {\n if (list.getActiveItem() === null) {\n list.activateItem(0, true);\n }\n };\n container.addEventListener('focus', handleFocus);\n return () => {\n container.removeEventListener('focus', handleFocus);\n };\n } catch {\n // Oooops\n }\n }\n return undefined;\n }, []);\n\n return (\n <List\n ref={ref}\n className={b('list')}\n itemClassName={b('item')}\n items={presets}\n filterable={false}\n virtualized={false}\n renderItem={(item) => t(item.title as any)}\n itemHeight={SIZE_TO_ITEM_HEIGHT[size]}\n onItemClick={(item) => {\n onChoosePreset(item.from, item.to);\n }}\n />\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { i18n } from "./i18n/index.js";
2
2
  export interface Preset {
3
- from: string;
4
- to: string;
3
+ from: string | null;
4
+ to: string | null;
5
5
  title: string;
6
6
  }
7
7
  export interface DefaultPreset {
@@ -1 +1 @@
1
- {"version":3,"file":"defaultPresets.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/defaultPresets.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {i18n} from './i18n';\n\nexport interface Preset {\n from: string;\n to: string;\n title: string;\n}\n\nexport interface DefaultPreset {\n from: string;\n to: string;\n title: keyof (typeof i18n.keysetData)['g-date-relative-range-date-picker-presets'];\n}\n\nexport const DEFAULT_DATE_PRESETS: DefaultPreset[] = [\n {\n from: 'now-1d',\n to: 'now',\n title: 'Last day',\n },\n {\n from: 'now-3d',\n to: 'now',\n title: 'Last 3 days',\n },\n {\n from: 'now-1w',\n to: 'now',\n title: 'Last week',\n },\n {\n from: 'now-1M',\n to: 'now',\n title: 'Last month',\n },\n {\n from: 'now-3M',\n to: 'now',\n title: 'Last 3 months',\n },\n {\n from: 'now-6M',\n to: 'now',\n title: 'Last 6 months',\n },\n {\n from: 'now-1y',\n to: 'now',\n title: 'Last year',\n },\n {\n from: 'now-3y',\n to: 'now',\n title: 'Last 3 years',\n },\n];\n\nexport const DEFAULT_TIME_PRESETS: DefaultPreset[] = [\n {\n from: 'now-5m',\n to: 'now',\n title: 'Last 5 minutes',\n },\n {\n from: 'now-15m',\n to: 'now',\n title: 'Last 15 minutes',\n },\n {\n from: 'now-30m',\n to: 'now',\n title: 'Last 30 minutes',\n },\n {\n from: 'now-1h',\n to: 'now',\n title: 'Last hour',\n },\n {\n from: 'now-3h',\n to: 'now',\n title: 'Last 3 hours',\n },\n {\n from: 'now-6h',\n to: 'now',\n title: 'Last 6 hours',\n },\n {\n from: 'now-12h',\n to: 'now',\n title: 'Last 12 hours',\n },\n];\n\nexport const DEFAULT_OTHERS_PRESETS: DefaultPreset[] = [\n {\n from: 'now/d',\n to: 'now/d',\n title: 'Today',\n },\n {\n from: 'now-1d/d',\n to: 'now-1d/d',\n title: 'Yesterday',\n },\n {\n from: 'now-2d/d',\n to: 'now-2d/d',\n title: 'Day before yesterday',\n },\n {\n from: 'now/w',\n to: 'now/w',\n title: 'This week',\n },\n {\n from: 'now/M',\n to: 'now/M',\n title: 'This month',\n },\n {\n from: 'now/y',\n to: 'now/y',\n title: 'This year',\n },\n {\n from: 'now/d',\n to: 'now',\n title: 'From start of day',\n },\n {\n from: 'now/w',\n to: 'now',\n title: 'From start of week',\n },\n {\n from: 'now/M',\n to: 'now',\n title: 'From start of month',\n },\n {\n from: 'now/y',\n to: 'now',\n title: 'From start of year',\n },\n];\n\nexport const allPresets = DEFAULT_TIME_PRESETS.concat(DEFAULT_DATE_PRESETS, DEFAULT_OTHERS_PRESETS);\n"]}
1
+ {"version":3,"file":"defaultPresets.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/defaultPresets.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {i18n} from './i18n';\n\nexport interface Preset {\n from: string | null;\n to: string | null;\n title: string;\n}\n\nexport interface DefaultPreset {\n from: string;\n to: string;\n title: keyof (typeof i18n.keysetData)['g-date-relative-range-date-picker-presets'];\n}\n\nexport const DEFAULT_DATE_PRESETS: DefaultPreset[] = [\n {\n from: 'now-1d',\n to: 'now',\n title: 'Last day',\n },\n {\n from: 'now-3d',\n to: 'now',\n title: 'Last 3 days',\n },\n {\n from: 'now-1w',\n to: 'now',\n title: 'Last week',\n },\n {\n from: 'now-1M',\n to: 'now',\n title: 'Last month',\n },\n {\n from: 'now-3M',\n to: 'now',\n title: 'Last 3 months',\n },\n {\n from: 'now-6M',\n to: 'now',\n title: 'Last 6 months',\n },\n {\n from: 'now-1y',\n to: 'now',\n title: 'Last year',\n },\n {\n from: 'now-3y',\n to: 'now',\n title: 'Last 3 years',\n },\n];\n\nexport const DEFAULT_TIME_PRESETS: DefaultPreset[] = [\n {\n from: 'now-5m',\n to: 'now',\n title: 'Last 5 minutes',\n },\n {\n from: 'now-15m',\n to: 'now',\n title: 'Last 15 minutes',\n },\n {\n from: 'now-30m',\n to: 'now',\n title: 'Last 30 minutes',\n },\n {\n from: 'now-1h',\n to: 'now',\n title: 'Last hour',\n },\n {\n from: 'now-3h',\n to: 'now',\n title: 'Last 3 hours',\n },\n {\n from: 'now-6h',\n to: 'now',\n title: 'Last 6 hours',\n },\n {\n from: 'now-12h',\n to: 'now',\n title: 'Last 12 hours',\n },\n];\n\nexport const DEFAULT_OTHERS_PRESETS: DefaultPreset[] = [\n {\n from: 'now/d',\n to: 'now/d',\n title: 'Today',\n },\n {\n from: 'now-1d/d',\n to: 'now-1d/d',\n title: 'Yesterday',\n },\n {\n from: 'now-2d/d',\n to: 'now-2d/d',\n title: 'Day before yesterday',\n },\n {\n from: 'now/w',\n to: 'now/w',\n title: 'This week',\n },\n {\n from: 'now/M',\n to: 'now/M',\n title: 'This month',\n },\n {\n from: 'now/y',\n to: 'now/y',\n title: 'This year',\n },\n {\n from: 'now/d',\n to: 'now',\n title: 'From start of day',\n },\n {\n from: 'now/w',\n to: 'now',\n title: 'From start of week',\n },\n {\n from: 'now/M',\n to: 'now',\n title: 'From start of month',\n },\n {\n from: 'now/y',\n to: 'now',\n title: 'From start of year',\n },\n];\n\nexport const allPresets = DEFAULT_TIME_PRESETS.concat(DEFAULT_DATE_PRESETS, DEFAULT_OTHERS_PRESETS);\n"]}
@@ -2,18 +2,23 @@ import type { DateTime } from '@gravity-ui/date-utils';
2
2
  import type { ExtractFunctionType } from "../../../types/index.js";
3
3
  import type { Preset } from "./defaultPresets.js";
4
4
  import { i18n } from "./i18n/index.js";
5
- export declare function getPresetTitle(start: string, end: string, presets?: Preset[], t?: ExtractFunctionType<typeof i18n>): string;
6
- export declare function filterPresets(presets: Preset[], minValue?: DateTime): Preset[];
5
+ export declare function getPresetTitle(start: string | null, end: string | null, presets?: Preset[], t?: ExtractFunctionType<typeof i18n>): string;
6
+ export declare function filterPresetList(presets: Preset[], { minValue, allowNullableValues }?: {
7
+ minValue?: DateTime;
8
+ allowNullableValues?: boolean;
9
+ }): Preset[];
7
10
  export interface PresetTab {
8
11
  id: string;
9
12
  title: string;
10
13
  presets: Preset[];
11
14
  }
12
- export declare function getDefaultPresetTabs({ withTime, minValue, t, }: {
15
+ export declare function getDefaultPresetTabs({ withTime, minValue, allowNullableValues, t, }: {
13
16
  minValue?: DateTime;
14
17
  withTime?: boolean;
18
+ allowNullableValues?: boolean;
15
19
  t?: (key: 'Main' | 'Other') => string;
16
20
  }): PresetTab[];
17
- export declare function filterPresetTabs(tabs: PresetTab[], { minValue }?: {
21
+ export declare function filterPresetTabs(tabs: PresetTab[], { minValue, allowNullableValues }?: {
18
22
  minValue?: DateTime;
23
+ allowNullableValues?: boolean;
19
24
  }): PresetTab[];
@@ -21,14 +21,20 @@ const countUnit = {
21
21
  y: 'Last {count} year',
22
22
  };
23
23
  export function getPresetTitle(start, end, presets = allPresets, t = i18n) {
24
- const startText = start.replace(/\s+/g, '');
25
- const endText = end.replace(/\s+/g, '');
24
+ const startText = start?.replace(/\s+/g, '') ?? start;
25
+ const endText = end?.replace(/\s+/g, '') ?? end;
26
26
  for (const preset of presets) {
27
27
  if (preset.from === startText && preset.to === endText) {
28
28
  return t(preset.title);
29
29
  }
30
30
  }
31
- if (end === 'now') {
31
+ if (!startText) {
32
+ return `${t('To')}: ${endText}`;
33
+ }
34
+ if (!endText) {
35
+ return `${t('From')}: ${startText}`;
36
+ }
37
+ if (endText === 'now') {
32
38
  const match = lastRe.exec(startText);
33
39
  if (match) {
34
40
  const [, count, unit] = match;
@@ -43,23 +49,25 @@ export function getPresetTitle(start, end, presets = allPresets, t = i18n) {
43
49
  function isDateUnit(value) {
44
50
  return ['s', 'm', 'h', 'd', 'w', 'M', 'y'].includes(value);
45
51
  }
46
- export function filterPresets(presets, minValue) {
52
+ export function filterPresetList(presets, { minValue, allowNullableValues } = {}) {
47
53
  return presets.filter((preset) => {
48
- const from = dateTimeParse(preset.from);
49
- const to = dateTimeParse(preset.to, { roundUp: true });
50
- if (!from || !to) {
54
+ const from = preset.from ? dateTimeParse(preset.from) : undefined;
55
+ const to = preset.to ? dateTimeParse(preset.to, { roundUp: true }) : undefined;
56
+ const hasNullableFrom = allowNullableValues && preset.from === null;
57
+ const hasNullableTo = allowNullableValues && preset.to === null;
58
+ if ((!from && !hasNullableFrom) || (!to && !hasNullableTo)) {
51
59
  return false;
52
60
  }
53
- if (to.isBefore(from)) {
61
+ if (to?.isBefore(from)) {
54
62
  return false;
55
63
  }
56
- if (minValue && from.isBefore(minValue)) {
64
+ if (minValue && from?.isBefore(minValue)) {
57
65
  return false;
58
66
  }
59
67
  return true;
60
68
  });
61
69
  }
62
- export function getDefaultPresetTabs({ withTime, minValue, t = i18n, }) {
70
+ export function getDefaultPresetTabs({ withTime, minValue, allowNullableValues, t = i18n, }) {
63
71
  const tabs = [];
64
72
  const mainTab = {
65
73
  id: 'main',
@@ -70,25 +78,28 @@ export function getDefaultPresetTabs({ withTime, minValue, t = i18n, }) {
70
78
  if (withTime) {
71
79
  mainPresets.unshift(...DEFAULT_TIME_PRESETS);
72
80
  }
73
- mainTab.presets = filterPresets(mainPresets, minValue);
81
+ mainTab.presets = filterPresetList(mainPresets, { minValue, allowNullableValues });
74
82
  if (mainTab.presets.length > 0) {
75
83
  tabs.push(mainTab);
76
84
  }
77
85
  const otherTab = {
78
86
  id: 'other',
79
87
  title: t('Other'),
80
- presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),
88
+ presets: filterPresetList(DEFAULT_OTHERS_PRESETS, { minValue, allowNullableValues }),
81
89
  };
82
90
  if (otherTab.presets.length > 0) {
83
91
  tabs.push(otherTab);
84
92
  }
85
93
  return tabs;
86
94
  }
87
- export function filterPresetTabs(tabs, { minValue } = {}) {
95
+ export function filterPresetTabs(tabs, { minValue, allowNullableValues } = {}) {
88
96
  return tabs.reduce((acc, tab) => {
89
- const presets = filterPresets(tab.presets, minValue);
97
+ const presets = filterPresetList(tab.presets, { minValue, allowNullableValues });
90
98
  if (presets.length) {
91
- acc.push(Object.assign(Object.assign({}, tab), { presets }));
99
+ acc.push({
100
+ ...tab,
101
+ presets,
102
+ });
92
103
  }
93
104
  return acc;
94
105
  }, []);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ExtractFunctionType} from '../../../types';\n\nimport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n DEFAULT_TIME_PRESETS,\n allPresets,\n} from './defaultPresets';\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\n\nconst lastRe = /^now-(\\d+)([smhdwMy])$/;\n\nconst oneUnit = {\n s: 'Last second',\n m: 'Last minute',\n h: 'Last hour',\n d: 'Last day',\n w: 'Last week',\n M: 'Last month',\n y: 'Last year',\n} as const;\n\nconst countUnit = {\n s: 'Last {count} second',\n m: 'Last {count} minute',\n h: 'Last {count} hour',\n d: 'Last {count} day',\n w: 'Last {count} week',\n M: 'Last {count} month',\n y: 'Last {count} year',\n} as const;\n\nexport function getPresetTitle(\n start: string,\n end: string,\n presets: Preset[] = allPresets,\n t: ExtractFunctionType<typeof i18n> = i18n,\n): string {\n const startText = start.replace(/\\s+/g, '');\n const endText = end.replace(/\\s+/g, '');\n\n for (const preset of presets) {\n if (preset.from === startText && preset.to === endText) {\n return t(preset.title as any);\n }\n }\n\n if (end === 'now') {\n const match = lastRe.exec(startText);\n if (match) {\n const [, count, unit] = match;\n if (isDateUnit(unit)) {\n const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];\n return t(template, {count});\n }\n }\n }\n\n return startText + ' — ' + endText;\n}\n\nfunction isDateUnit(value: string): value is 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y' {\n return ['s', 'm', 'h', 'd', 'w', 'M', 'y'].includes(value);\n}\n\nexport function filterPresets(presets: Preset[], minValue?: DateTime) {\n return presets.filter((preset) => {\n const from = dateTimeParse(preset.from);\n const to = dateTimeParse(preset.to, {roundUp: true});\n\n if (!from || !to) {\n return false;\n }\n\n if (to.isBefore(from)) {\n return false;\n }\n\n if (minValue && from.isBefore(minValue)) {\n return false;\n }\n\n return true;\n });\n}\n\nexport interface PresetTab {\n id: string;\n title: string;\n presets: Preset[];\n}\n\nexport function getDefaultPresetTabs({\n withTime,\n minValue,\n t = i18n,\n}: {\n minValue?: DateTime;\n withTime?: boolean;\n t?: (key: 'Main' | 'Other') => string;\n}) {\n const tabs: PresetTab[] = [];\n\n const mainTab: PresetTab = {\n id: 'main',\n title: t('Main'),\n presets: [],\n };\n const mainPresets = DEFAULT_DATE_PRESETS;\n if (withTime) {\n mainPresets.unshift(...DEFAULT_TIME_PRESETS);\n }\n mainTab.presets = filterPresets(mainPresets, minValue);\n\n if (mainTab.presets.length > 0) {\n tabs.push(mainTab);\n }\n\n const otherTab: PresetTab = {\n id: 'other',\n title: t('Other'),\n presets: filterPresets(DEFAULT_OTHERS_PRESETS, minValue),\n };\n\n if (otherTab.presets.length > 0) {\n tabs.push(otherTab);\n }\n\n return tabs;\n}\n\nexport function filterPresetTabs(tabs: PresetTab[], {minValue}: {minValue?: DateTime} = {}) {\n return tabs.reduce<PresetTab[]>((acc, tab) => {\n const presets = filterPresets(tab.presets, minValue);\n if (presets.length) {\n acc.push({\n ...tab,\n presets,\n });\n }\n return acc;\n }, []);\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Presets/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTimeParse} from '@gravity-ui/date-utils';\nimport type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {ExtractFunctionType} from '../../../types';\n\nimport {\n DEFAULT_DATE_PRESETS,\n DEFAULT_OTHERS_PRESETS,\n DEFAULT_TIME_PRESETS,\n allPresets,\n} from './defaultPresets';\nimport type {Preset} from './defaultPresets';\nimport {i18n} from './i18n';\n\nconst lastRe = /^now-(\\d+)([smhdwMy])$/;\n\nconst oneUnit = {\n s: 'Last second',\n m: 'Last minute',\n h: 'Last hour',\n d: 'Last day',\n w: 'Last week',\n M: 'Last month',\n y: 'Last year',\n} as const;\n\nconst countUnit = {\n s: 'Last {count} second',\n m: 'Last {count} minute',\n h: 'Last {count} hour',\n d: 'Last {count} day',\n w: 'Last {count} week',\n M: 'Last {count} month',\n y: 'Last {count} year',\n} as const;\n\nexport function getPresetTitle(\n start: string | null,\n end: string | null,\n presets: Preset[] = allPresets,\n t: ExtractFunctionType<typeof i18n> = i18n,\n): string {\n const startText = start?.replace(/\\s+/g, '') ?? start;\n const endText = end?.replace(/\\s+/g, '') ?? end;\n\n for (const preset of presets) {\n if (preset.from === startText && preset.to === endText) {\n return t(preset.title as any);\n }\n }\n if (!startText) {\n return `${t('To')}: ${endText}`;\n }\n if (!endText) {\n return `${t('From')}: ${startText}`;\n }\n\n if (endText === 'now') {\n const match = lastRe.exec(startText);\n if (match) {\n const [, count, unit] = match;\n if (isDateUnit(unit)) {\n const template = Number(count) === 1 ? oneUnit[unit] : countUnit[unit];\n return t(template, {count});\n }\n }\n }\n\n return startText + ' — ' + endText;\n}\n\nfunction isDateUnit(value: string): value is 's' | 'm' | 'h' | 'd' | 'w' | 'M' | 'y' {\n return ['s', 'm', 'h', 'd', 'w', 'M', 'y'].includes(value);\n}\n\nexport function filterPresetList(\n presets: Preset[],\n {minValue, allowNullableValues}: {minValue?: DateTime; allowNullableValues?: boolean} = {},\n) {\n return presets.filter((preset) => {\n const from = preset.from ? dateTimeParse(preset.from) : undefined;\n const to = preset.to ? dateTimeParse(preset.to, {roundUp: true}) : undefined;\n\n const hasNullableFrom = allowNullableValues && preset.from === null;\n const hasNullableTo = allowNullableValues && preset.to === null;\n\n if ((!from && !hasNullableFrom) || (!to && !hasNullableTo)) {\n return false;\n }\n\n if (to?.isBefore(from)) {\n return false;\n }\n\n if (minValue && from?.isBefore(minValue)) {\n return false;\n }\n\n return true;\n });\n}\n\nexport interface PresetTab {\n id: string;\n title: string;\n presets: Preset[];\n}\n\nexport function getDefaultPresetTabs({\n withTime,\n minValue,\n allowNullableValues,\n t = i18n,\n}: {\n minValue?: DateTime;\n withTime?: boolean;\n allowNullableValues?: boolean;\n t?: (key: 'Main' | 'Other') => string;\n}) {\n const tabs: PresetTab[] = [];\n\n const mainTab: PresetTab = {\n id: 'main',\n title: t('Main'),\n presets: [],\n };\n const mainPresets = DEFAULT_DATE_PRESETS;\n if (withTime) {\n mainPresets.unshift(...DEFAULT_TIME_PRESETS);\n }\n mainTab.presets = filterPresetList(mainPresets, {minValue, allowNullableValues});\n\n if (mainTab.presets.length > 0) {\n tabs.push(mainTab);\n }\n\n const otherTab: PresetTab = {\n id: 'other',\n title: t('Other'),\n presets: filterPresetList(DEFAULT_OTHERS_PRESETS, {minValue, allowNullableValues}),\n };\n\n if (otherTab.presets.length > 0) {\n tabs.push(otherTab);\n }\n\n return tabs;\n}\n\nexport function filterPresetTabs(\n tabs: PresetTab[],\n {minValue, allowNullableValues}: {minValue?: DateTime; allowNullableValues?: boolean} = {},\n) {\n return tabs.reduce<PresetTab[]>((acc, tab) => {\n const presets = filterPresetList(tab.presets, {minValue, allowNullableValues});\n if (presets.length) {\n acc.push({\n ...tab,\n presets,\n });\n }\n return acc;\n }, []);\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import "./Zones.css";
2
- export interface ZonesProps {
2
+ interface ZonesProps {
3
3
  value: string;
4
4
  onUpdate: (timeZone: string) => void;
5
5
  size?: 's' | 'm' | 'l' | 'xl';
6
- isMobile?: boolean;
7
6
  disabled?: boolean;
8
7
  }
9
- export declare function Zones(props: ZonesProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function Zones(props: ZonesProps): import("react").JSX.Element;
9
+ export {};
@@ -33,18 +33,17 @@ zones.unshift({
33
33
  const b = block('relative-range-date-picker-zones');
34
34
  export function Zones(props) {
35
35
  const timeZone = normalizeTimeZone(props.value);
36
- const size = props.isMobile ? 'xl' : props.size;
37
36
  const { t } = i18n.useTranslation();
38
- return (_jsx(Select, { disabled: props.disabled, value: [timeZone], options: zones, size: size, onUpdate: (v) => {
37
+ return (_jsx(Select, { disabled: props.disabled, value: [timeZone], options: zones, size: props.size, onUpdate: (v) => {
39
38
  const tz = v[0];
40
39
  if (tz) {
41
40
  props.onUpdate(tz);
42
41
  }
43
42
  }, width: "max", renderControl: (controlProps) => {
44
43
  const value = timeZone === 'system' || timeZone === 'default' ? t(timeZone) : timeZone;
45
- return (_jsxs(Button, { ref: controlProps.ref, onClick: controlProps.triggerProps.onClick, view: "flat-secondary", width: "max", pin: "clear-clear", size: size, disabled: props.disabled, "aria-haspopup": "listbox", "aria-expanded": controlProps.open, onKeyDown: controlProps.triggerProps.onKeyDown, className: b('control'), children: [`${value} (${getTimeZoneOffset(timeZone)})`, _jsx(Icon, { className: b('control-icon'), data: ChevronRight, size: props.isMobile ? 20 : 16 })] }));
44
+ return (_jsxs(Button, { ref: controlProps.ref, onClick: controlProps.triggerProps.onClick, view: "flat-secondary", width: "max", pin: "clear-clear", size: props.size, disabled: props.disabled, "aria-haspopup": "listbox", "aria-expanded": controlProps.open, onKeyDown: controlProps.triggerProps.onKeyDown, className: b('control'), children: [`${value} (${getTimeZoneOffset(timeZone)})`, _jsx(Icon, { className: b('control-icon'), data: ChevronRight, size: props.size === 'xl' ? 20 : 16 })] }));
46
45
  }, renderOption: ({ value, content }) => {
47
- const v = content !== null && content !== void 0 ? content : value;
46
+ const v = content ?? value;
48
47
  return (_jsxs("span", { className: b('item'), children: [_jsxs("span", { className: b('item-title'), title: value, children: [value === 'system' || value === 'default' ? t(value) : v, "\u00A0"] }), _jsx(Text, { color: "secondary", children: getTimeZoneOffset(value) })] }));
49
48
  }, filterable: true }));
50
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Zones.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Zones/Zones.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {getTimeZonesList} from '@gravity-ui/date-utils';\nimport {ChevronRight} from '@gravity-ui/icons';\nimport {Button, Icon, Select, Text} from '@gravity-ui/uikit';\nimport type {SelectOption, SelectOptionGroup} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getTimeZoneOffset, normalizeTimeZone} from '../../utils';\n\nimport {i18n} from './i18n';\n\nimport './Zones.scss';\n\nconst groups: Record<string, {label: string; options: SelectOption[]}> = {};\n\nconst zones = getTimeZonesList().reduce<(SelectOption | SelectOptionGroup)[]>((opts, value) => {\n const [groupName] = value.split('/');\n if (groupName) {\n let group = groups[groupName];\n if (!group) {\n group = {label: groupName, options: []};\n groups[groupName] = group;\n opts.push(group);\n }\n group.options.push({value});\n }\n return opts;\n}, []);\n\nzones.unshift({\n value: 'UTC',\n});\n\nzones.unshift({\n value: 'system',\n});\n\nzones.unshift({\n value: 'default',\n});\n\nconst b = block('relative-range-date-picker-zones');\n\nexport interface ZonesProps {\n value: string;\n onUpdate: (timeZone: string) => void;\n size?: 's' | 'm' | 'l' | 'xl';\n isMobile?: boolean;\n disabled?: boolean;\n}\n\nexport function Zones(props: ZonesProps) {\n const timeZone = normalizeTimeZone(props.value);\n const size = props.isMobile ? 'xl' : props.size;\n const {t} = i18n.useTranslation();\n return (\n <Select\n disabled={props.disabled}\n value={[timeZone]}\n options={zones}\n size={size}\n onUpdate={(v) => {\n const tz = v[0];\n if (tz) {\n props.onUpdate(tz);\n }\n }}\n width=\"max\"\n renderControl={(controlProps) => {\n const value =\n timeZone === 'system' || timeZone === 'default' ? t(timeZone) : timeZone;\n return (\n <Button\n ref={controlProps.ref as React.Ref<HTMLButtonElement>}\n onClick={controlProps.triggerProps.onClick}\n view=\"flat-secondary\"\n width=\"max\"\n pin=\"clear-clear\"\n size={size}\n disabled={props.disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={controlProps.open}\n onKeyDown={controlProps.triggerProps.onKeyDown}\n className={b('control')}\n >\n {`${value} (${getTimeZoneOffset(timeZone)})`}\n <Icon\n className={b('control-icon')}\n data={ChevronRight}\n size={props.isMobile ? 20 : 16}\n />\n </Button>\n );\n }}\n renderOption={({value, content}) => {\n const v = content ?? value;\n return (\n <span className={b('item')}>\n <span className={b('item-title')} title={value}>\n {value === 'system' || value === 'default' ? t(value) : v}&nbsp;\n </span>\n <Text color=\"secondary\">{getTimeZoneOffset(value)}</Text>\n </span>\n );\n }}\n filterable\n />\n );\n}\n"]}
1
+ {"version":3,"file":"Zones.js","sourceRoot":"../../../../../../src","sources":["components/RelativeRangeDatePicker/components/Zones/Zones.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {getTimeZonesList} from '@gravity-ui/date-utils';\nimport {ChevronRight} from '@gravity-ui/icons';\nimport {Button, Icon, Select, Text} from '@gravity-ui/uikit';\nimport type {SelectOption, SelectOptionGroup} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\nimport {getTimeZoneOffset, normalizeTimeZone} from '../../utils';\n\nimport {i18n} from './i18n';\n\nimport './Zones.scss';\n\nconst groups: Record<string, {label: string; options: SelectOption[]}> = {};\n\nconst zones = getTimeZonesList().reduce<(SelectOption | SelectOptionGroup)[]>((opts, value) => {\n const [groupName] = value.split('/');\n if (groupName) {\n let group = groups[groupName];\n if (!group) {\n group = {label: groupName, options: []};\n groups[groupName] = group;\n opts.push(group);\n }\n group.options.push({value});\n }\n return opts;\n}, []);\n\nzones.unshift({\n value: 'UTC',\n});\n\nzones.unshift({\n value: 'system',\n});\n\nzones.unshift({\n value: 'default',\n});\n\nconst b = block('relative-range-date-picker-zones');\n\ninterface ZonesProps {\n value: string;\n onUpdate: (timeZone: string) => void;\n size?: 's' | 'm' | 'l' | 'xl';\n disabled?: boolean;\n}\n\nexport function Zones(props: ZonesProps) {\n const timeZone = normalizeTimeZone(props.value);\n const {t} = i18n.useTranslation();\n return (\n <Select\n disabled={props.disabled}\n value={[timeZone]}\n options={zones}\n size={props.size}\n onUpdate={(v) => {\n const tz = v[0];\n if (tz) {\n props.onUpdate(tz);\n }\n }}\n width=\"max\"\n renderControl={(controlProps) => {\n const value =\n timeZone === 'system' || timeZone === 'default' ? t(timeZone) : timeZone;\n return (\n <Button\n ref={controlProps.ref as React.Ref<HTMLButtonElement>}\n onClick={controlProps.triggerProps.onClick}\n view=\"flat-secondary\"\n width=\"max\"\n pin=\"clear-clear\"\n size={props.size}\n disabled={props.disabled}\n aria-haspopup=\"listbox\"\n aria-expanded={controlProps.open}\n onKeyDown={controlProps.triggerProps.onKeyDown}\n className={b('control')}\n >\n {`${value} (${getTimeZoneOffset(timeZone)})`}\n <Icon\n className={b('control-icon')}\n data={ChevronRight}\n size={props.size === 'xl' ? 20 : 16}\n />\n </Button>\n );\n }}\n renderOption={({value, content}) => {\n const v = content ?? value;\n return (\n <span className={b('item')}>\n <span className={b('item-title')} title={value}>\n {value === 'system' || value === 'default' ? t(value) : v}&nbsp;\n </span>\n <Text color=\"secondary\">{getTimeZoneOffset(value)}</Text>\n </span>\n );\n }}\n filterable\n />\n );\n}\n"]}
@@ -3,9 +3,8 @@ import { useControlledState } from '@gravity-ui/uikit';
3
3
  import { i18n } from "../../utils/validation/i18n/index.js";
4
4
  import { getRangeValidationResult } from "../../utils/validation/relativeRangeDatePicker.js";
5
5
  export function useRelativeRangeDatePickerState(props) {
6
- var _a, _b;
7
- const [value, setValue] = useControlledState(props.value, (_a = props.defaultValue) !== null && _a !== void 0 ? _a : null);
8
- const [timeZone, setTimeZone] = useControlledState(props.timeZone, (_b = props.defaultTimeZone) !== null && _b !== void 0 ? _b : 'default', props.onUpdateTimeZone);
6
+ const [value, setValue] = useControlledState(props.value, props.defaultValue ?? null);
7
+ const [timeZone, setTimeZone] = useControlledState(props.timeZone, props.defaultTimeZone ?? 'default', props.onUpdateTimeZone);
9
8
  const { t } = i18n.useTranslation();
10
9
  const validation = React.useMemo(() => getRangeValidationResult(value, props.allowNullableValues, props.minValue, props.maxValue, props.isDateUnavailable, timeZone, t), [
11
10
  value,
@@ -16,15 +15,17 @@ export function useRelativeRangeDatePickerState(props) {
16
15
  timeZone,
17
16
  t,
18
17
  ]);
19
- return Object.assign({ value,
18
+ return {
19
+ value,
20
20
  timeZone,
21
21
  setValue(v, tz) {
22
- var _a;
23
22
  setValue(v);
24
23
  setTimeZone(tz);
25
24
  if (value !== v || (value && timeZone !== tz)) {
26
- (_a = props.onUpdate) === null || _a === void 0 ? void 0 : _a.call(props, v, tz);
25
+ props.onUpdate?.(v, tz);
27
26
  }
28
- } }, validation);
27
+ },
28
+ ...validation,
29
+ };
29
30
  }
30
31
  //# sourceMappingURL=useRelativeRangeDatePickerState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useRelativeRangeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAIrD,OAAO,EAAC,IAAI,EAAC,6CAAoC;AACjD,OAAO,EAAC,wBAAwB,EAAC,0DAAuD;AA4BxF,MAAM,UAAU,+BAA+B,CAC3C,KAA0C;;IAE1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAA,KAAK,CAAC,YAAY,mCAAI,IAAI,CAAC,CAAC;IAEtF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,kBAAkB,CAC9C,KAAK,CAAC,QAAQ,EACd,MAAA,KAAK,CAAC,eAAe,mCAAI,SAAS,EAClC,KAAK,CAAC,gBAAgB,CACzB,CAAC;IAEF,MAAM,EAAC,CAAC,EAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CACD,wBAAwB,CACpB,KAAK,EACL,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,iBAAiB,EACvB,QAAQ,EACR,CAAC,CACJ,EACL;QACI,KAAK;QACL,KAAK,CAAC,mBAAmB;QACzB,KAAK,CAAC,iBAAiB;QACvB,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,QAAQ;QACd,QAAQ;QACR,CAAC;KACJ,CACJ,CAAC;IAEF,uBACI,KAAK;QACL,QAAQ;QACR,QAAQ,CAAC,CAAC,EAAE,EAAE;;YACV,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,WAAW,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC5C,MAAA,KAAK,CAAC,QAAQ,sDAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC,IACE,UAAU,EACf;AACN,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {Value} from '../../RelativeDatePicker';\nimport type {RangeValue} from '../../types';\nimport {i18n} from '../../utils/validation/i18n';\nimport {getRangeValidationResult} from '../../utils/validation/relativeRangeDatePicker';\n\nexport type RelativeRangeDatePickerValue = RangeValue<Value | null>;\n\nexport interface RelativeRangeDatePickerState {\n value: RelativeRangeDatePickerValue | null;\n timeZone: string;\n setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n isInvalid: boolean;\n errors: string[];\n}\n\nexport interface RelativeRangeDatePickerStateOptions {\n value?: RelativeRangeDatePickerValue | null;\n defaultValue?: RelativeRangeDatePickerValue;\n onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n timeZone?: string;\n defaultTimeZone?: string;\n onUpdateTimeZone?: (timeZone: string) => void;\n /** The minimum allowed date that a user may select. */\n minValue?: DateTime;\n /** The maximum allowed date that a user may select. */\n maxValue?: DateTime;\n /** Callback that is called for each date of the calendar. If it returns true, then the date is unavailable. */\n isDateUnavailable?: (date: DateTime, endpoint: 'start' | 'end') => boolean;\n allowNullableValues?: boolean;\n}\n\nexport function useRelativeRangeDatePickerState(\n props: RelativeRangeDatePickerStateOptions,\n): RelativeRangeDatePickerState {\n const [value, setValue] = useControlledState(props.value, props.defaultValue ?? null);\n\n const [timeZone, setTimeZone] = useControlledState(\n props.timeZone,\n props.defaultTimeZone ?? 'default',\n props.onUpdateTimeZone,\n );\n\n const {t} = i18n.useTranslation();\n const validation = React.useMemo(\n () =>\n getRangeValidationResult(\n value,\n props.allowNullableValues,\n props.minValue,\n props.maxValue,\n props.isDateUnavailable,\n timeZone,\n t,\n ),\n [\n value,\n props.allowNullableValues,\n props.isDateUnavailable,\n props.maxValue,\n props.minValue,\n timeZone,\n t,\n ],\n );\n\n return {\n value,\n timeZone,\n setValue(v, tz) {\n setValue(v);\n setTimeZone(tz);\n if (value !== v || (value && timeZone !== tz)) {\n props.onUpdate?.(v, tz);\n }\n },\n ...validation,\n };\n}\n"]}
1
+ {"version":3,"file":"useRelativeRangeDatePickerState.js","sourceRoot":"../../../../../src","sources":["components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAIrD,OAAO,EAAC,IAAI,EAAC,6CAAoC;AACjD,OAAO,EAAC,wBAAwB,EAAC,0DAAuD;AA4BxF,MAAM,UAAU,+BAA+B,CAC3C,KAA0C;IAE1C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC;IAEtF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,kBAAkB,CAC9C,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,eAAe,IAAI,SAAS,EAClC,KAAK,CAAC,gBAAgB,CACzB,CAAC;IAEF,MAAM,EAAC,CAAC,EAAC,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAC5B,GAAG,EAAE,CACD,wBAAwB,CACpB,KAAK,EACL,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,iBAAiB,EACvB,QAAQ,EACR,CAAC,CACJ,EACL;QACI,KAAK;QACL,KAAK,CAAC,mBAAmB;QACzB,KAAK,CAAC,iBAAiB;QACvB,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,QAAQ;QACd,QAAQ;QACR,CAAC;KACJ,CACJ,CAAC;IAEF,OAAO;QACH,KAAK;QACL,QAAQ;QACR,QAAQ,CAAC,CAAC,EAAE,EAAE;YACV,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,WAAW,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC5C,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QACD,GAAG,UAAU;KAChB,CAAC;AACN,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState} from '@gravity-ui/uikit';\n\nimport type {Value} from '../../RelativeDatePicker';\nimport type {RangeValue} from '../../types';\nimport {i18n} from '../../utils/validation/i18n';\nimport {getRangeValidationResult} from '../../utils/validation/relativeRangeDatePicker';\n\nexport type RelativeRangeDatePickerValue = RangeValue<Value | null>;\n\nexport interface RelativeRangeDatePickerState {\n value: RelativeRangeDatePickerValue | null;\n timeZone: string;\n setValue: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n isInvalid: boolean;\n errors: string[];\n}\n\nexport interface RelativeRangeDatePickerStateOptions {\n value?: RelativeRangeDatePickerValue | null;\n defaultValue?: RelativeRangeDatePickerValue;\n onUpdate?: (value: RelativeRangeDatePickerValue | null, timeZone: string) => void;\n timeZone?: string;\n defaultTimeZone?: string;\n onUpdateTimeZone?: (timeZone: string) => void;\n /** The minimum allowed date that a user may select. */\n minValue?: DateTime;\n /** The maximum allowed date that a user may select. */\n maxValue?: DateTime;\n /** Callback that is called for each date of the calendar. If it returns true, then the date is unavailable. */\n isDateUnavailable?: (date: DateTime, endpoint: 'start' | 'end') => boolean;\n allowNullableValues?: boolean;\n}\n\nexport function useRelativeRangeDatePickerState(\n props: RelativeRangeDatePickerStateOptions,\n): RelativeRangeDatePickerState {\n const [value, setValue] = useControlledState(props.value, props.defaultValue ?? null);\n\n const [timeZone, setTimeZone] = useControlledState(\n props.timeZone,\n props.defaultTimeZone ?? 'default',\n props.onUpdateTimeZone,\n );\n\n const {t} = i18n.useTranslation();\n const validation = React.useMemo(\n () =>\n getRangeValidationResult(\n value,\n props.allowNullableValues,\n props.minValue,\n props.maxValue,\n props.isDateUnavailable,\n timeZone,\n t,\n ),\n [\n value,\n props.allowNullableValues,\n props.isDateUnavailable,\n props.maxValue,\n props.minValue,\n timeZone,\n t,\n ],\n );\n\n return {\n value,\n timeZone,\n setValue(v, tz) {\n setValue(v);\n setTimeZone(tz);\n if (value !== v || (value && timeZone !== tz)) {\n props.onUpdate?.(v, tz);\n }\n },\n ...validation,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputBase,\n InputDOMProps,\n PopupStyleProps,\n RangeValue,\n StyleProps,\n TextInputProps,\n Validation,\n} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport type {PresetTab} from './components/Presets/utils';\nimport type {\n RelativeRangeDatePickerStateOptions,\n RelativeRangeDatePickerValue,\n} from './hooks/useRelativeRangeDatePickerState';\n\nexport type RelativeRangeDatePickerTriggerProps = Pick<\n React.AllHTMLAttributes<HTMLElement>,\n | 'id'\n | 'role'\n | 'aria-controls'\n | 'aria-haspopup'\n | 'aria-expanded'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-details'\n | 'onClick'\n | 'onKeyDown'\n | 'disabled'\n | 'readOnly'\n>;\n\nexport interface RelativeRangeDatePickerRenderControlProps {\n ref: React.Ref<HTMLElement>;\n value: RelativeRangeDatePickerValue | null;\n title: string;\n errorMessage?: React.ReactNode;\n validationState?: 'invalid';\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerProps: RelativeRangeDatePickerTriggerProps;\n}\n\nexport interface RelativeRangeDatePickerProps\n extends RelativeRangeDatePickerStateOptions,\n DomProps,\n AccessibilityProps,\n InputBase,\n InputDOMProps,\n TextInputProps,\n Validation,\n FocusableProps,\n StyleProps,\n PopupStyleProps {\n /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */\n format?: string;\n /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */\n placeholderValue?: DateTime;\n /** Apply changes with button */\n withApplyButton?: boolean;\n /** Show time zone selector */\n withZonesList?: boolean;\n /** Show relative range presets */\n withPresets?: boolean;\n /** Apply presets immediately */\n applyPresetsImmediately?: boolean;\n /** Show header with docs tooltip */\n withHeader?: boolean;\n /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for picker, if empty array docs will be hidden */\n docs?: Preset[];\n /** Show selected relative values as absolute dates */\n alwaysShowAsAbsolute?: boolean;\n /** */\n getRangeTitle?: (value: RangeValue<Value | null> | null, timeZone: string) => string;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Used to render control. */\n renderControl?: (props: RelativeRangeDatePickerRenderControlProps) => React.ReactElement;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {DateTime} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {\n AccessibilityProps,\n DomProps,\n FocusableProps,\n InputBase,\n InputDOMProps,\n PopupStyleProps,\n RangeValue,\n StyleProps,\n TextInputProps,\n Validation,\n} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport type {PresetTab} from './components/Presets/utils';\nimport type {\n RelativeRangeDatePickerStateOptions,\n RelativeRangeDatePickerValue,\n} from './hooks/useRelativeRangeDatePickerState';\n\nexport type RelativeRangeDatePickerTriggerProps = Pick<\n React.AllHTMLAttributes<HTMLElement>,\n | 'id'\n | 'role'\n | 'aria-controls'\n | 'aria-haspopup'\n | 'aria-expanded'\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-describedby'\n | 'aria-details'\n | 'onClick'\n | 'onKeyDown'\n | 'disabled'\n | 'readOnly'\n>;\n\nexport interface RelativeRangeDatePickerRenderControlProps {\n ref: React.Ref<HTMLElement>;\n value: RelativeRangeDatePickerValue | null;\n title: string;\n errorMessage?: React.ReactNode;\n validationState?: 'invalid';\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerProps: RelativeRangeDatePickerTriggerProps;\n}\n\nexport interface RelativeRangeDatePickerProps\n extends\n RelativeRangeDatePickerStateOptions,\n DomProps,\n AccessibilityProps,\n InputBase,\n InputDOMProps,\n TextInputProps,\n Validation,\n FocusableProps,\n StyleProps,\n PopupStyleProps {\n /** Format of the date when rendered in the input. [Available formats](https://day.js.org/docs/en/display/format) */\n format?: string;\n /** A placeholder date that controls the default values of each segment when the user first interacts with them. Defaults to today's date at midnight. */\n placeholderValue?: DateTime;\n /** Apply changes with button */\n withApplyButton?: boolean;\n /** Show time zone selector */\n withZonesList?: boolean;\n /** Show relative range presets */\n withPresets?: boolean;\n /** Apply presets immediately */\n applyPresetsImmediately?: boolean;\n /** Show header with docs tooltip */\n withHeader?: boolean;\n /** Custom preset tabs */\n presetTabs?: PresetTab[];\n /** Custom docs for picker, if empty array docs will be hidden */\n docs?: Preset[];\n /** Show selected relative values as absolute dates */\n alwaysShowAsAbsolute?: boolean;\n /** */\n getRangeTitle?: (value: RangeValue<Value | null> | null, timeZone: string) => string;\n /** Handler that is called when the popup's open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Used to render control. */\n renderControl?: (props: RelativeRangeDatePickerRenderControlProps) => React.ReactElement;\n}\n"]}
@@ -2,17 +2,17 @@ import type { Value } from "../RelativeDatePicker/index.js";
2
2
  import type { ExtractFunctionType, RangeValue } from "../types/index.js";
3
3
  import type { Preset } from "./components/Presets/defaultPresets.js";
4
4
  import { i18n } from "./components/Presets/i18n/index.js";
5
- export declare function resolveTimeZone(timeZone: string): string;
6
5
  export declare function normalizeTimeZone(timeZone: string): string;
7
6
  export declare function getTimeZoneOffset(timeZone: string): string;
8
7
  interface GetDefaultTitleArgs {
9
8
  value: RangeValue<Value | null> | null;
10
9
  timeZone: string;
11
10
  alwaysShowAsAbsolute?: boolean;
11
+ allowNullableValues?: boolean;
12
12
  format?: string;
13
13
  presets?: Preset[];
14
14
  presetsTranslations?: ExtractFunctionType<typeof i18n>;
15
15
  lang?: string;
16
16
  }
17
- export declare function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format, presets, presetsTranslations, lang, }: GetDefaultTitleArgs): string;
17
+ export declare function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, allowNullableValues, format, presets, presetsTranslations, lang, }: GetDefaultTitleArgs): string;
18
18
  export {};
@@ -1,7 +1,7 @@
1
1
  import { dateTime, dateTimeParse } from '@gravity-ui/date-utils';
2
2
  import { i18n } from "./components/Presets/i18n/index.js";
3
3
  import { getPresetTitle } from "./components/Presets/utils.js";
4
- export function resolveTimeZone(timeZone) {
4
+ function resolveTimeZone(timeZone) {
5
5
  if (timeZone === 'default' || timeZone === 'system') {
6
6
  return dateTime({ timeZone }).timeZone();
7
7
  }
@@ -17,8 +17,25 @@ export function normalizeTimeZone(timeZone) {
17
17
  export function getTimeZoneOffset(timeZone) {
18
18
  return `UTC ${dateTime({ timeZone }).format('Z')}`;
19
19
  }
20
- export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format = 'L', presets, presetsTranslations = i18n, lang = 'en', }) {
21
- var _a, _b, _c, _d, _e, _f;
20
+ const isPresetValue = (value, allowNullableValues) => {
21
+ if (!value || value.start?.type === 'absolute' || value.end?.type === 'absolute') {
22
+ return null;
23
+ }
24
+ if (!allowNullableValues && (value.start === null || value.end === null)) {
25
+ // we can't get here with no nullable values allowed but just in case...
26
+ return null;
27
+ }
28
+ let start = null;
29
+ let end = null;
30
+ if (value.start?.type === 'relative') {
31
+ start = value.start.value;
32
+ }
33
+ if (value.end?.type === 'relative') {
34
+ end = value.end.value;
35
+ }
36
+ return { start, end };
37
+ };
38
+ export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, allowNullableValues, format = 'L', presets, presetsTranslations = i18n, lang = 'en', }) {
22
39
  if (!value) {
23
40
  return '';
24
41
  }
@@ -28,19 +45,26 @@ export function getDefaultTitle({ value, timeZone, alwaysShowAsAbsolute, format
28
45
  from =
29
46
  value.start.type === 'relative' && !alwaysShowAsAbsolute
30
47
  ? value.start.value
31
- : ((_b = (_a = dateTimeParse(value.start.value, { timeZone, lang })) === null || _a === void 0 ? void 0 : _a.format(format)) !== null && _b !== void 0 ? _b : '');
48
+ : (dateTimeParse(value.start.value, { timeZone, lang })?.format(format) ?? '');
32
49
  }
33
50
  let to = '';
34
51
  if (value.end) {
35
52
  to =
36
53
  value.end.type === 'relative' && !alwaysShowAsAbsolute
37
54
  ? value.end.value
38
- : ((_d = (_c = dateTimeParse(value.end.value, { timeZone, roundUp: true, lang })) === null || _c === void 0 ? void 0 : _c.format(format)) !== null && _d !== void 0 ? _d : '');
55
+ : (dateTimeParse(value.end.value, { timeZone, roundUp: true, lang })?.format(format) ?? '');
56
+ }
57
+ const presetSearch = isPresetValue(value, allowNullableValues);
58
+ if (!alwaysShowAsAbsolute && presetSearch) {
59
+ return getPresetTitle(presetSearch.start, presetSearch.end, presets, presetsTranslations);
39
60
  }
40
- if (!alwaysShowAsAbsolute &&
41
- ((_e = value.start) === null || _e === void 0 ? void 0 : _e.type) === 'relative' &&
42
- ((_f = value.end) === null || _f === void 0 ? void 0 : _f.type) === 'relative') {
43
- return getPresetTitle(value.start.value, value.end.value, presets, presetsTranslations);
61
+ if (allowNullableValues) {
62
+ if (!from) {
63
+ return `${presetsTranslations('To')}: ${to}${tz}`;
64
+ }
65
+ if (!to) {
66
+ return `${presetsTranslations('From')}: ${from}${tz}`;
67
+ }
44
68
  }
45
69
  const delimiter = ' — ';
46
70
  return `${from}${delimiter}${to}${tz}`;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAC,IAAI,EAAC,2CAAkC;AAC/C,OAAO,EAAC,cAAc,EAAC,sCAAmC;AAE1D,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC5C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAC9C,OAAO,OAAO,QAAQ,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAWD,MAAM,UAAU,eAAe,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,oBAAoB,EACpB,MAAM,GAAG,GAAG,EACZ,OAAO,EACP,mBAAmB,GAAG,IAAI,EAC1B,IAAI,GAAG,IAAI,GACO;;IAClB,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC;IAE7E,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI;YACA,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,oBAAoB;gBACpD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK;gBACnB,CAAC,CAAC,CAAC,MAAA,MAAA,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,0CAAE,MAAM,CAAC,MAAM,CAAC,mCAAI,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,EAAE;YACE,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,oBAAoB;gBAClD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK;gBACjB,CAAC,CAAC,CAAC,MAAA,MAAA,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,0CAAE,MAAM,CACpE,MAAM,CACT,mCAAI,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,IACI,CAAC,oBAAoB;QACrB,CAAA,MAAA,KAAK,CAAC,KAAK,0CAAE,IAAI,MAAK,UAAU;QAChC,CAAA,MAAA,KAAK,CAAC,GAAG,0CAAE,IAAI,MAAK,UAAU,EAChC,CAAC;QACC,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC;IAExB,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;AAC3C,CAAC","sourcesContent":["import {dateTime, dateTimeParse} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {ExtractFunctionType, RangeValue} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport {i18n} from './components/Presets/i18n';\nimport {getPresetTitle} from './components/Presets/utils';\n\nexport function resolveTimeZone(timeZone: string) {\n if (timeZone === 'default' || timeZone === 'system') {\n return dateTime({timeZone}).timeZone();\n }\n\n return timeZone;\n}\n\nexport function normalizeTimeZone(timeZone: string) {\n const lowered = timeZone.toLowerCase();\n if (lowered === 'default' || lowered === 'system') {\n return lowered;\n }\n\n return resolveTimeZone(timeZone);\n}\n\nexport function getTimeZoneOffset(timeZone: string) {\n return `UTC ${dateTime({timeZone}).format('Z')}`;\n}\n\ninterface GetDefaultTitleArgs {\n value: RangeValue<Value | null> | null;\n timeZone: string;\n alwaysShowAsAbsolute?: boolean;\n format?: string;\n presets?: Preset[];\n presetsTranslations?: ExtractFunctionType<typeof i18n>;\n lang?: string;\n}\nexport function getDefaultTitle({\n value,\n timeZone,\n alwaysShowAsAbsolute,\n format = 'L',\n presets,\n presetsTranslations = i18n,\n lang = 'en',\n}: GetDefaultTitleArgs): string {\n if (!value) {\n return '';\n }\n\n const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;\n\n let from = '';\n if (value.start) {\n from =\n value.start.type === 'relative' && !alwaysShowAsAbsolute\n ? value.start.value\n : (dateTimeParse(value.start.value, {timeZone, lang})?.format(format) ?? '');\n }\n let to = '';\n if (value.end) {\n to =\n value.end.type === 'relative' && !alwaysShowAsAbsolute\n ? value.end.value\n : (dateTimeParse(value.end.value, {timeZone, roundUp: true, lang})?.format(\n format,\n ) ?? '');\n }\n\n if (\n !alwaysShowAsAbsolute &&\n value.start?.type === 'relative' &&\n value.end?.type === 'relative'\n ) {\n return getPresetTitle(value.start.value, value.end.value, presets, presetsTranslations);\n }\n\n const delimiter = ' — ';\n\n return `${from}${delimiter}${to}${tz}`;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"../../../../src","sources":["components/RelativeRangeDatePicker/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {dateTime, dateTimeParse} from '@gravity-ui/date-utils';\n\nimport type {Value} from '../RelativeDatePicker';\nimport type {ExtractFunctionType, RangeValue} from '../types';\n\nimport type {Preset} from './components/Presets/defaultPresets';\nimport {i18n} from './components/Presets/i18n';\nimport {getPresetTitle} from './components/Presets/utils';\n\nfunction resolveTimeZone(timeZone: string) {\n if (timeZone === 'default' || timeZone === 'system') {\n return dateTime({timeZone}).timeZone();\n }\n\n return timeZone;\n}\n\nexport function normalizeTimeZone(timeZone: string) {\n const lowered = timeZone.toLowerCase();\n if (lowered === 'default' || lowered === 'system') {\n return lowered;\n }\n\n return resolveTimeZone(timeZone);\n}\n\nexport function getTimeZoneOffset(timeZone: string) {\n return `UTC ${dateTime({timeZone}).format('Z')}`;\n}\n\ninterface GetDefaultTitleArgs {\n value: RangeValue<Value | null> | null;\n timeZone: string;\n alwaysShowAsAbsolute?: boolean;\n allowNullableValues?: boolean;\n format?: string;\n presets?: Preset[];\n presetsTranslations?: ExtractFunctionType<typeof i18n>;\n lang?: string;\n}\n\nconst isPresetValue = (value: RangeValue<Value | null> | null, allowNullableValues?: boolean) => {\n if (!value || value.start?.type === 'absolute' || value.end?.type === 'absolute') {\n return null;\n }\n if (!allowNullableValues && (value.start === null || value.end === null)) {\n // we can't get here with no nullable values allowed but just in case...\n return null;\n }\n let start = null;\n let end = null;\n if (value.start?.type === 'relative') {\n start = value.start.value;\n }\n if (value.end?.type === 'relative') {\n end = value.end.value;\n }\n return {start, end};\n};\nexport function getDefaultTitle({\n value,\n timeZone,\n alwaysShowAsAbsolute,\n allowNullableValues,\n format = 'L',\n presets,\n presetsTranslations = i18n,\n lang = 'en',\n}: GetDefaultTitleArgs): string {\n if (!value) {\n return '';\n }\n\n const tz = timeZone === 'default' ? '' : ` (${getTimeZoneOffset(timeZone)})`;\n\n let from = '';\n if (value.start) {\n from =\n value.start.type === 'relative' && !alwaysShowAsAbsolute\n ? value.start.value\n : (dateTimeParse(value.start.value, {timeZone, lang})?.format(format) ?? '');\n }\n let to = '';\n if (value.end) {\n to =\n value.end.type === 'relative' && !alwaysShowAsAbsolute\n ? value.end.value\n : (dateTimeParse(value.end.value, {timeZone, roundUp: true, lang})?.format(\n format,\n ) ?? '');\n }\n\n const presetSearch = isPresetValue(value, allowNullableValues);\n if (!alwaysShowAsAbsolute && presetSearch) {\n return getPresetTitle(presetSearch.start, presetSearch.end, presets, presetsTranslations);\n }\n\n if (allowNullableValues) {\n if (!from) {\n return `${presetsTranslations('To')}: ${to}${tz}`;\n }\n if (!to) {\n return `${presetsTranslations('From')}: ${from}${tz}`;\n }\n }\n\n const delimiter = ' — ';\n\n return `${from}${delimiter}${to}${tz}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"inputs.js","sourceRoot":"../../../../src","sources":["components/types/inputs.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n TextInputProps as TextInputBaseProps,\n TextInputPin,\n TextInputSize,\n TextInputView,\n} from '@gravity-ui/uikit';\n\nexport type ValidationState = 'invalid';\n\nexport interface AccessibilityProps {\n /** Defines a string value that labels the current element. */\n 'aria-label'?: string;\n /** Identifies the element (or elements) that labels the current element. */\n 'aria-labelledby'?: string;\n /** Identifies the element (or elements) that describes the object. */\n 'aria-describedby'?: string;\n /** Identifies the element (or elements) that provide a detailed, extended description for the object. */\n 'aria-details'?: string;\n}\n\nexport interface ValueBase<T, C = T> {\n /** The current value (controlled). */\n value?: T;\n /** The default value (uncontrolled). */\n defaultValue?: T;\n /** Handler that is called when the value changes. */\n onUpdate?: (value: C) => void;\n}\n\nexport interface Validation\n extends Pick<TextInputBaseProps, 'validationState' | 'errorMessage' | 'errorPlacement'> {}\n\nexport interface DomProps {\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface InputDOMProps {\n /**\n * The name of the input element, used when submitting an HTML form.\n */\n name?: string;\n /**\n * The id of a form element in the same document. If this attribute is not set,\n * the input element is associated with its ancestor form element, if any.\n */\n form?: string;\n}\nexport interface InputBase {\n /**\n * Whether the field is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the calendar value is immutable.\n * @default false\n */\n readOnly?: boolean;\n}\n\nexport interface TextInputProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Corner rounding\n * @default 'round-round'\n */\n pin?: TextInputPin;\n /** Control view */\n view?: TextInputView;\n /** Inner field label */\n label?: TextInputBaseProps['label'];\n /** Text that appears in the field when it has no value set */\n placeholder?: string;\n /**\n * Show clear button\n * @default false\n */\n hasClear?: boolean;\n}\n\nexport interface TextInputExtendProps {\n /**\n * User`s node rendered before label and input\n */\n startContent?: TextInputBaseProps['startContent'];\n /**\n * User`s node rendered after input and clear button\n */\n endContent?: TextInputBaseProps['endContent'];\n}\n\nexport interface RangeValue<T> {\n /** The start value of the range. */\n start: T;\n /** The end value of the range. */\n end: T;\n}\n"]}
1
+ {"version":3,"file":"inputs.js","sourceRoot":"../../../../src","sources":["components/types/inputs.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n TextInputProps as TextInputBaseProps,\n TextInputPin,\n TextInputSize,\n TextInputView,\n} from '@gravity-ui/uikit';\n\nexport type ValidationState = 'invalid';\n\nexport interface AccessibilityProps {\n /** Defines a string value that labels the current element. */\n 'aria-label'?: string;\n /** Identifies the element (or elements) that labels the current element. */\n 'aria-labelledby'?: string;\n /** Identifies the element (or elements) that describes the object. */\n 'aria-describedby'?: string;\n /** Identifies the element (or elements) that provide a detailed, extended description for the object. */\n 'aria-details'?: string;\n}\n\nexport interface ValueBase<T, C = T> {\n /** The current value (controlled). */\n value?: T;\n /** The default value (uncontrolled). */\n defaultValue?: T;\n /** Handler that is called when the value changes. */\n onUpdate?: (value: C) => void;\n}\n\nexport interface Validation extends Pick<\n TextInputBaseProps,\n 'validationState' | 'errorMessage' | 'errorPlacement'\n> {}\n\nexport interface DomProps {\n /** The element's unique identifier. */\n id?: string;\n}\n\nexport interface InputDOMProps {\n /**\n * The name of the input element, used when submitting an HTML form.\n */\n name?: string;\n /**\n * The id of a form element in the same document. If this attribute is not set,\n * the input element is associated with its ancestor form element, if any.\n */\n form?: string;\n}\nexport interface InputBase {\n /**\n * Whether the field is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the calendar value is immutable.\n * @default false\n */\n readOnly?: boolean;\n}\n\nexport interface TextInputProps {\n /** The size of the element */\n size?: TextInputSize;\n /**\n * Corner rounding\n * @default 'round-round'\n */\n pin?: TextInputPin;\n /** Control view */\n view?: TextInputView;\n /** Inner field label */\n label?: TextInputBaseProps['label'];\n /** Text that appears in the field when it has no value set */\n placeholder?: string;\n /**\n * Show clear button\n * @default false\n */\n hasClear?: boolean;\n}\n\nexport interface TextInputExtendProps {\n /**\n * User`s node rendered before label and input\n */\n startContent?: TextInputBaseProps['startContent'];\n /**\n * User`s node rendered after input and clear button\n */\n endContent?: TextInputBaseProps['endContent'];\n}\n\nexport interface RangeValue<T> {\n /** The start value of the range. */\n start: T;\n /** The end value of the range. */\n end: T;\n}\n"]}
@@ -5,3 +5,5 @@ export declare const DAY: number;
5
5
  export declare const WEEK: number;
6
6
  export declare const MONTH: number;
7
7
  export declare const YEAR: number;
8
+ export declare const isMac: boolean;
9
+ export declare const CtrlCmd: string;
@@ -5,4 +5,10 @@ export const DAY = 24 * HOUR;
5
5
  export const WEEK = 7 * DAY;
6
6
  export const MONTH = 30 * DAY;
7
7
  export const YEAR = 365 * DAY;
8
+ const platform = typeof window !== 'undefined' && window.navigator
9
+ ? // @ts-expect-error
10
+ window.navigator['userAgentData']?.platform || window.navigator.platform
11
+ : '';
12
+ export const isMac = /^Mac/i.test(platform);
13
+ export const CtrlCmd = isMac ? 'metaKey' : 'ctrlKey';
8
14
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"../../../../src","sources":["components/utils/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;AAC3B,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;AAClC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;AAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;AAC5B,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC;AAC9B,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC","sourcesContent":["export const SECOND = 1000;\nexport const MINUTE = 60 * SECOND;\nexport const HOUR = 60 * MINUTE;\nexport const DAY = 24 * HOUR;\nexport const WEEK = 7 * DAY;\nexport const MONTH = 30 * DAY;\nexport const YEAR = 365 * DAY;\n"]}
1
+ {"version":3,"file":"constants.js","sourceRoot":"../../../../src","sources":["components/utils/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;AAC3B,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;AAClC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;AAChC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;AAC7B,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;AAC5B,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,GAAG,GAAG,CAAC;AAC9B,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAE9B,MAAM,QAAQ,GACV,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS;IAC7C,CAAC,CAAC,mBAAmB;QACnB,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ;IAC1E,CAAC,CAAC,EAAE,CAAC;AAEb,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC","sourcesContent":["export const SECOND = 1000;\nexport const MINUTE = 60 * SECOND;\nexport const HOUR = 60 * MINUTE;\nexport const DAY = 24 * HOUR;\nexport const WEEK = 7 * DAY;\nexport const MONTH = 30 * DAY;\nexport const YEAR = 365 * DAY;\n\nconst platform =\n typeof window !== 'undefined' && window.navigator\n ? // @ts-expect-error\n window.navigator['userAgentData']?.platform || window.navigator.platform\n : '';\n\nexport const isMac = /^Mac/i.test(platform);\nexport const CtrlCmd = isMac ? 'metaKey' : 'ctrlKey';\n"]}
@@ -1,11 +1,16 @@
1
1
  import type { DateTime } from '@gravity-ui/date-utils';
2
2
  export declare function isWeekend(date: DateTime): boolean;
3
- export interface PlaceholderValueOptions {
3
+ interface PlaceholderValueOptions {
4
4
  placeholderValue?: DateTime;
5
5
  timeZone?: string;
6
6
  }
7
7
  export declare function createPlaceholderValue({ placeholderValue, timeZone }: PlaceholderValueOptions): DateTime;
8
+ export declare function createPlaceholderRangeValue({ placeholderValue, timeZone }: PlaceholderValueOptions): {
9
+ start: DateTime;
10
+ end: DateTime;
11
+ };
8
12
  export declare function isInvalid(value: DateTime | null | undefined, minValue: DateTime | undefined, maxValue: DateTime | undefined): boolean;
9
13
  export declare function constrainValue(value: DateTime, minValue: DateTime | undefined, maxValue: DateTime | undefined): DateTime;
10
14
  export declare function mergeDateTime(date: DateTime, time: DateTime): DateTime;
11
15
  export declare function formatDateTime(date: DateTime, format: string, timezone: string, lang: string): string;
16
+ export {};
@@ -3,7 +3,11 @@ export function isWeekend(date) {
3
3
  return [0, 6].includes(date.day());
4
4
  }
5
5
  export function createPlaceholderValue({ placeholderValue, timeZone }) {
6
- return placeholderValue !== null && placeholderValue !== void 0 ? placeholderValue : dateTime({ timeZone }).startOf('day');
6
+ return placeholderValue ?? dateTime({ timeZone }).startOf('day');
7
+ }
8
+ export function createPlaceholderRangeValue({ placeholderValue, timeZone }) {
9
+ const date = createPlaceholderValue({ placeholderValue, timeZone });
10
+ return { start: date.startOf('day'), end: date.endOf('day') };
7
11
  }
8
12
  export function isInvalid(value, minValue, maxValue) {
9
13
  if (!value) {