@gravity-ui/date-components 3.4.2 → 4.1.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 (405) hide show
  1. package/README.md +31 -0
  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 +84 -118
  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 +180 -132
  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.d.ts +2 -1
  125. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
  126. package/dist/cjs/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  127. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
  128. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
  129. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  130. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
  131. package/dist/cjs/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  132. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
  133. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
  134. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  135. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
  136. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -16
  137. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  138. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +5 -1
  139. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +34 -7
  140. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  141. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
  142. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
  143. package/dist/cjs/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  144. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
  145. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js +9 -12
  146. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  147. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
  148. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  149. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
  150. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js +27 -16
  151. package/dist/cjs/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  152. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
  153. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
  154. package/dist/cjs/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  155. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
  156. package/dist/cjs/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  157. package/dist/cjs/components/RelativeRangeDatePicker/types.d.ts +3 -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/utils/constants.d.ts +2 -0
  163. package/dist/cjs/components/utils/constants.js +7 -1
  164. package/dist/cjs/components/utils/constants.js.map +1 -1
  165. package/dist/cjs/components/utils/dates.d.ts +6 -1
  166. package/dist/cjs/components/utils/dates.js +6 -1
  167. package/dist/cjs/components/utils/dates.js.map +1 -1
  168. package/dist/cjs/components/utils/filterDOMProps.js +1 -1
  169. package/dist/cjs/components/utils/filterDOMProps.js.map +1 -1
  170. package/dist/cjs/components/utils/mergeProps.js +1 -1
  171. package/dist/cjs/components/utils/mergeProps.js.map +1 -1
  172. package/dist/cjs/components/utils/validation/datePicker.js +1 -1
  173. package/dist/cjs/components/utils/validation/datePicker.js.map +1 -1
  174. package/dist/cjs/components/utils/validation/i18n/ru.json +2 -2
  175. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
  176. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js +6 -1
  177. package/dist/cjs/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
  178. package/dist/cjs/hooks/useEventHandler.js +1 -2
  179. package/dist/cjs/hooks/useEventHandler.js.map +1 -1
  180. package/dist/cjs/hooks/useMove.d.ts +2 -2
  181. package/dist/cjs/hooks/useMove.js +6 -9
  182. package/dist/cjs/hooks/useMove.js.map +1 -1
  183. package/dist/cjs/hooks/useResizeObserver.js +1 -1
  184. package/dist/cjs/hooks/useResizeObserver.js.map +1 -1
  185. package/dist/cjs/package.json +1 -1
  186. package/dist/docs/INDEX.md +131 -0
  187. package/dist/docs/components/Calendar.md +125 -0
  188. package/dist/docs/components/DateField.md +206 -0
  189. package/dist/docs/components/DatePicker.md +194 -0
  190. package/dist/docs/components/RangeCalendar.md +125 -0
  191. package/dist/docs/components/RelativeDateField.md +73 -0
  192. package/dist/docs/components/RelativeDatePicker.md +59 -0
  193. package/dist/esm/components/Calendar/Calendar.d.ts +6 -2
  194. package/dist/esm/components/Calendar/Calendar.js +1 -1
  195. package/dist/esm/components/Calendar/Calendar.js.map +1 -1
  196. package/dist/esm/components/CalendarView/Calendar.css +3 -0
  197. package/dist/esm/components/CalendarView/Calendar.css.map +1 -1
  198. package/dist/esm/components/CalendarView/CalendarView.d.ts +2 -1
  199. package/dist/esm/components/CalendarView/CalendarView.js +8 -8
  200. package/dist/esm/components/CalendarView/CalendarView.js.map +1 -1
  201. package/dist/esm/components/CalendarView/hooks/types.d.ts +5 -3
  202. package/dist/esm/components/CalendarView/hooks/types.js.map +1 -1
  203. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js +1 -2
  204. package/dist/esm/components/CalendarView/hooks/useCalendarCellProps.js.map +1 -1
  205. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js +10 -3
  206. package/dist/esm/components/CalendarView/hooks/useCalendarGridProps.js.map +1 -1
  207. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js +7 -1
  208. package/dist/esm/components/CalendarView/hooks/useCalendarProps.js.map +1 -1
  209. package/dist/esm/components/CalendarView/hooks/useCalendarState.d.ts +5 -3
  210. package/dist/esm/components/CalendarView/hooks/useCalendarState.js +74 -30
  211. package/dist/esm/components/CalendarView/hooks/useCalendarState.js.map +1 -1
  212. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js +16 -10
  213. package/dist/esm/components/CalendarView/hooks/useRangeCalendarState.js.map +1 -1
  214. package/dist/esm/components/DateField/DateField.d.ts +1 -1
  215. package/dist/esm/components/DateField/DateField.js +6 -18
  216. package/dist/esm/components/DateField/DateField.js.map +1 -1
  217. package/dist/esm/components/DateField/IncompleteDate.d.ts +28 -0
  218. package/dist/esm/components/DateField/IncompleteDate.js +112 -0
  219. package/dist/esm/components/DateField/IncompleteDate.js.map +1 -0
  220. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.d.ts +34 -68
  221. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js +17 -248
  222. package/dist/esm/components/DateField/hooks/useBaseDateFieldState.js.map +1 -1
  223. package/dist/esm/components/DateField/hooks/useDateFieldProps.d.ts +2 -0
  224. package/dist/esm/components/DateField/hooks/useDateFieldProps.js +250 -54
  225. package/dist/esm/components/DateField/hooks/useDateFieldProps.js.map +1 -1
  226. package/dist/esm/components/DateField/hooks/useDateFieldState.d.ts +20 -2
  227. package/dist/esm/components/DateField/hooks/useDateFieldState.js +85 -119
  228. package/dist/esm/components/DateField/hooks/useDateFieldState.js.map +1 -1
  229. package/dist/esm/components/DateField/hooks/useFocusManager.d.ts +29 -0
  230. package/dist/esm/components/DateField/hooks/useFocusManager.js +112 -0
  231. package/dist/esm/components/DateField/hooks/useFocusManager.js.map +1 -0
  232. package/dist/esm/components/{RangeDateField → DateField}/hooks/useRangeDateFieldState.d.ts +1 -1
  233. package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js +232 -0
  234. package/dist/esm/components/DateField/hooks/useRangeDateFieldState.js.map +1 -0
  235. package/dist/esm/components/DateField/i18n/ru.json +1 -1
  236. package/dist/esm/components/DateField/index.d.ts +2 -1
  237. package/dist/esm/components/DateField/index.js +1 -1
  238. package/dist/esm/components/DateField/index.js.map +1 -1
  239. package/dist/esm/components/DateField/types.d.ts +2 -22
  240. package/dist/esm/components/DateField/types.js.map +1 -1
  241. package/dist/esm/components/DateField/utils.d.ts +21 -34
  242. package/dist/esm/components/DateField/utils.js +179 -125
  243. package/dist/esm/components/DateField/utils.js.map +1 -1
  244. package/dist/esm/components/DatePicker/DatePicker.d.ts +3 -3
  245. package/dist/esm/components/DatePicker/DatePicker.js +3 -5
  246. package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
  247. package/dist/esm/components/DatePicker/MobileCalendar.d.ts +1 -1
  248. package/dist/esm/components/DatePicker/MobileCalendar.js +3 -5
  249. package/dist/esm/components/DatePicker/MobileCalendar.js.map +1 -1
  250. package/dist/esm/components/DatePicker/StubButton.d.ts +1 -1
  251. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.d.ts +1 -1
  252. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js +15 -6
  253. package/dist/esm/components/DatePicker/hooks/datePickerStateFactory.js.map +1 -1
  254. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.d.ts +2 -2
  255. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js +30 -18
  256. package/dist/esm/components/DatePicker/hooks/useDatePickerProps.js.map +1 -1
  257. package/dist/esm/components/HiddenInput/HiddenInput.d.ts +2 -5
  258. package/dist/esm/components/HiddenInput/HiddenInput.js +3 -4
  259. package/dist/esm/components/HiddenInput/HiddenInput.js.map +1 -1
  260. package/dist/esm/components/RangeCalendar/RangeCalendar.d.ts +2 -2
  261. package/dist/esm/components/RangeCalendar/RangeCalendar.js +2 -3
  262. package/dist/esm/components/RangeCalendar/RangeCalendar.js.map +1 -1
  263. package/dist/esm/components/RangeDateField/RangeDateField.d.ts +1 -1
  264. package/dist/esm/components/RangeDateField/RangeDateField.js +7 -20
  265. package/dist/esm/components/RangeDateField/RangeDateField.js.map +1 -1
  266. package/dist/esm/components/RangeDateField/index.d.ts +0 -1
  267. package/dist/esm/components/RangeDateField/index.js +0 -1
  268. package/dist/esm/components/RangeDateField/index.js.map +1 -1
  269. package/dist/esm/components/RangeDatePicker/RangeDatePicker.d.ts +2 -1
  270. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js +4 -6
  271. package/dist/esm/components/RangeDatePicker/RangeDatePicker.js.map +1 -1
  272. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.d.ts +1 -1
  273. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js +2 -3
  274. package/dist/esm/components/RangeDatePicker/hooks/useRangeDatePickerState.js.map +1 -1
  275. package/dist/esm/components/RangeDateSelection/RangeDateSelection.d.ts +1 -1
  276. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js +4 -5
  277. package/dist/esm/components/RangeDateSelection/RangeDateSelection.js.map +1 -1
  278. package/dist/esm/components/RangeDateSelection/components/NowLine/NowLine.d.ts +2 -1
  279. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.d.ts +1 -1
  280. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js +1 -1
  281. package/dist/esm/components/RangeDateSelection/components/Ruler/Ruler.js.map +1 -1
  282. package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js +2 -2
  283. package/dist/esm/components/RangeDateSelection/components/RulerViewport/RulerViewport.js.map +1 -1
  284. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.d.ts +2 -1
  285. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js +12 -22
  286. package/dist/esm/components/RangeDateSelection/components/SelectionControl/SelectionControl.js.map +1 -1
  287. package/dist/esm/components/RangeDateSelection/components/Ticks/MiddleTicks.d.ts +1 -1
  288. package/dist/esm/components/RangeDateSelection/components/Ticks/SlitTicks.d.ts +1 -1
  289. package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.d.ts +2 -2
  290. package/dist/esm/components/RangeDateSelection/components/Ticks/Ticks.js.map +1 -1
  291. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.d.ts +3 -4
  292. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js +1 -2
  293. package/dist/esm/components/RangeDateSelection/components/Ticks/UnavialableTicks.js.map +1 -1
  294. package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js +9 -10
  295. package/dist/esm/components/RangeDateSelection/hooks/useRangeDateSelectionState.js.map +1 -1
  296. package/dist/esm/components/RangeDateSelection/utils/span.d.ts +2 -1
  297. package/dist/esm/components/RangeDateSelection/utils/span.js.map +1 -1
  298. package/dist/esm/components/RelativeDateField/RelativeDateField.d.ts +1 -1
  299. package/dist/esm/components/RelativeDateField/RelativeDateField.js +4 -40
  300. package/dist/esm/components/RelativeDateField/RelativeDateField.js.map +1 -1
  301. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.d.ts +7 -2
  302. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js +71 -9
  303. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldProps.js.map +1 -1
  304. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.d.ts +2 -0
  305. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js +48 -34
  306. package/dist/esm/components/RelativeDateField/hooks/useRelativeDateFieldState.js.map +1 -1
  307. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.d.ts +1 -1
  308. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js +7 -4
  309. package/dist/esm/components/RelativeDatePicker/RelativeDatePicker.js.map +1 -1
  310. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.d.ts +1 -1
  311. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js +52 -22
  312. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerProps.js.map +1 -1
  313. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js +9 -10
  314. package/dist/esm/components/RelativeDatePicker/hooks/useRelativeDatePickerState.js.map +1 -1
  315. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.d.ts +2 -1
  316. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js +13 -5
  317. package/dist/esm/components/RelativeRangeDatePicker/RelativeRangeDatePicker.js.map +1 -1
  318. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css +1 -1
  319. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.css.map +1 -1
  320. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.d.ts +2 -1
  321. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js +12 -6
  322. package/dist/esm/components/RelativeRangeDatePicker/components/Control/Control.js.map +1 -1
  323. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.d.ts +1 -1
  324. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js +6 -8
  325. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDialog.js.map +1 -1
  326. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.d.ts +5 -3
  327. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js +18 -17
  328. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerDoc.js.map +1 -1
  329. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.d.ts +5 -1
  330. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js +33 -7
  331. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/PickerForm.js.map +1 -1
  332. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.d.ts +3 -3
  333. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js +19 -18
  334. package/dist/esm/components/RelativeRangeDatePicker/components/PickerDialog/useRelativeRangeDatePickerDialogState.js.map +1 -1
  335. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.d.ts +6 -9
  336. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js +8 -10
  337. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/Presets.js.map +1 -1
  338. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.d.ts +2 -2
  339. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/defaultPresets.js.map +1 -1
  340. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.d.ts +9 -4
  341. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js +26 -15
  342. package/dist/esm/components/RelativeRangeDatePicker/components/Presets/utils.js.map +1 -1
  343. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.d.ts +3 -3
  344. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js +3 -4
  345. package/dist/esm/components/RelativeRangeDatePicker/components/Zones/Zones.js.map +1 -1
  346. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js +8 -7
  347. package/dist/esm/components/RelativeRangeDatePicker/hooks/useRelativeRangeDatePickerState.js.map +1 -1
  348. package/dist/esm/components/RelativeRangeDatePicker/types.d.ts +3 -1
  349. package/dist/esm/components/RelativeRangeDatePicker/types.js.map +1 -1
  350. package/dist/esm/components/RelativeRangeDatePicker/utils.d.ts +2 -2
  351. package/dist/esm/components/RelativeRangeDatePicker/utils.js +33 -9
  352. package/dist/esm/components/RelativeRangeDatePicker/utils.js.map +1 -1
  353. package/dist/esm/components/utils/constants.d.ts +2 -0
  354. package/dist/esm/components/utils/constants.js +6 -0
  355. package/dist/esm/components/utils/constants.js.map +1 -1
  356. package/dist/esm/components/utils/dates.d.ts +6 -1
  357. package/dist/esm/components/utils/dates.js +5 -1
  358. package/dist/esm/components/utils/dates.js.map +1 -1
  359. package/dist/esm/components/utils/filterDOMProps.js +1 -1
  360. package/dist/esm/components/utils/filterDOMProps.js.map +1 -1
  361. package/dist/esm/components/utils/mergeProps.js +1 -1
  362. package/dist/esm/components/utils/mergeProps.js.map +1 -1
  363. package/dist/esm/components/utils/validation/datePicker.js +1 -1
  364. package/dist/esm/components/utils/validation/datePicker.js.map +1 -1
  365. package/dist/esm/components/utils/validation/i18n/ru.json +2 -2
  366. package/dist/esm/components/utils/validation/relativeRangeDatePicker.d.ts +7 -11
  367. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js +6 -1
  368. package/dist/esm/components/utils/validation/relativeRangeDatePicker.js.map +1 -1
  369. package/dist/esm/hooks/useEventHandler.js +1 -2
  370. package/dist/esm/hooks/useEventHandler.js.map +1 -1
  371. package/dist/esm/hooks/useMove.d.ts +2 -2
  372. package/dist/esm/hooks/useMove.js +6 -9
  373. package/dist/esm/hooks/useMove.js.map +1 -1
  374. package/dist/esm/hooks/useResizeObserver.js +1 -1
  375. package/dist/esm/hooks/useResizeObserver.js.map +1 -1
  376. package/dist/esm/package.json +1 -1
  377. package/package.json +34 -27
  378. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -224
  379. package/dist/cjs/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
  380. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
  381. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -9
  382. package/dist/cjs/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
  383. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
  384. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js +0 -42
  385. package/dist/cjs/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
  386. package/dist/cjs/components/RangeDateField/utils/index.d.ts +0 -3
  387. package/dist/cjs/components/RangeDateField/utils/index.js +0 -7
  388. package/dist/cjs/components/RangeDateField/utils/index.js.map +0 -1
  389. package/dist/cjs/components/RangeDateField/utils/isValidRange.d.ts +0 -3
  390. package/dist/cjs/components/RangeDateField/utils/isValidRange.js +0 -7
  391. package/dist/cjs/components/RangeDateField/utils/isValidRange.js.map +0 -1
  392. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js +0 -220
  393. package/dist/esm/components/RangeDateField/hooks/useRangeDateFieldState.js.map +0 -1
  394. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.d.ts +0 -5
  395. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js +0 -6
  396. package/dist/esm/components/RangeDateField/utils/createPlaceholderRangeValue.js.map +0 -1
  397. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.d.ts +0 -5
  398. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js +0 -39
  399. package/dist/esm/components/RangeDateField/utils/getRangeEditableSections.js.map +0 -1
  400. package/dist/esm/components/RangeDateField/utils/index.d.ts +0 -3
  401. package/dist/esm/components/RangeDateField/utils/index.js +0 -4
  402. package/dist/esm/components/RangeDateField/utils/index.js.map +0 -1
  403. package/dist/esm/components/RangeDateField/utils/isValidRange.d.ts +0 -3
  404. package/dist/esm/components/RangeDateField/utils/isValidRange.js +0 -4
  405. package/dist/esm/components/RangeDateField/utils/isValidRange.js.map +0 -1
@@ -0,0 +1,232 @@
1
+ import React from 'react';
2
+ import { useControlledState, useLang } from '@gravity-ui/uikit';
3
+ import { createPlaceholderRangeValue, isInvalid } from "../../utils/dates.js";
4
+ import { useDefaultTimeZone } from "../../utils/useDefaultTimeZone.js";
5
+ import { IncompleteDate } from "../IncompleteDate.js";
6
+ import { addSegment, adjustDateToFormat, getEditableSections, getFormatInfo, isEditableSectionType, parseDateFromString, setSegment, toEditableSection, useFormatSections, } from "../utils.js";
7
+ import { useBaseDateFieldState } from "./useBaseDateFieldState.js";
8
+ const RANGE_FORMAT_DELIMITER = ' — ';
9
+ export function useRangeDateFieldState(props) {
10
+ const [value, setRange] = useControlledState(props.value, props.defaultValue || null, props.onUpdate);
11
+ const inputTimeZone = useDefaultTimeZone(props.value?.start || props.defaultValue?.start || props.placeholderValue);
12
+ const timeZone = props.timeZone || inputTimeZone;
13
+ const handleUpdateRange = (v) => {
14
+ setRange(v ? { start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone) } : v);
15
+ };
16
+ const placeholder = React.useMemo(() => {
17
+ return createPlaceholderRangeValue({
18
+ placeholderValue: props.placeholderValue,
19
+ timeZone,
20
+ });
21
+ }, [props.placeholderValue, timeZone]);
22
+ const format = props.format || 'L';
23
+ const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;
24
+ const sections = useFormatSections(format);
25
+ const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);
26
+ const allSegments = formatInfo.availableUnits;
27
+ const [displayValue, setDisplayValue] = React.useState(() => {
28
+ return {
29
+ start: new IncompleteDate(value ? value.start.timeZone(timeZone) : null),
30
+ end: new IncompleteDate(value ? value.end.timeZone(timeZone) : null),
31
+ };
32
+ });
33
+ const [lastValue, setLastValue] = React.useState(value);
34
+ const [lastTimezone, setLastTimezone] = React.useState(timeZone);
35
+ if ((value &&
36
+ (!lastValue ||
37
+ !(value.start.isSame(lastValue.start) && value.end.isSame(lastValue.end)))) ||
38
+ (value && lastTimezone !== timeZone) ||
39
+ (value === null && lastValue !== null)) {
40
+ setLastValue(value);
41
+ setLastTimezone(timeZone);
42
+ setDisplayValue({
43
+ start: new IncompleteDate(value ? value.start.timeZone(timeZone) : null),
44
+ end: new IncompleteDate(value ? value.end.timeZone(timeZone) : null),
45
+ });
46
+ }
47
+ const { lang } = useLang();
48
+ const rangeValue = React.useMemo(() => {
49
+ return {
50
+ start: displayValue.start
51
+ .toDateTime(value?.start.timeZone(timeZone) ?? placeholder.start, {
52
+ setDate: formatInfo.hasDate,
53
+ setTime: formatInfo.hasTime,
54
+ })
55
+ .locale(lang),
56
+ end: displayValue.end
57
+ .toDateTime(value?.end.timeZone(timeZone) ?? placeholder.end, {
58
+ setDate: formatInfo.hasDate,
59
+ setTime: formatInfo.hasTime,
60
+ })
61
+ .locale(lang),
62
+ };
63
+ }, [displayValue, value, placeholder, formatInfo, timeZone, lang]);
64
+ const sectionsState = useSectionsState(sections, displayValue, rangeValue, delimiter);
65
+ function setValue(newValue) {
66
+ if (props.disabled || props.readOnly) {
67
+ return;
68
+ }
69
+ if (newValue === null ||
70
+ (newValue.start instanceof IncompleteDate &&
71
+ newValue.start.isCleared(allSegments) &&
72
+ newValue.end instanceof IncompleteDate &&
73
+ newValue.end.isCleared(allSegments))) {
74
+ setRange(null);
75
+ setDisplayValue({ start: new IncompleteDate(), end: new IncompleteDate() });
76
+ }
77
+ else if (newValue.start instanceof IncompleteDate &&
78
+ newValue.end instanceof IncompleteDate) {
79
+ if (newValue.start.isComplete(allSegments) && newValue.end.isComplete(allSegments)) {
80
+ const newRange = {
81
+ start: newValue.start.toDateTime(rangeValue.start, {
82
+ setDate: formatInfo.hasDate,
83
+ setTime: formatInfo.hasTime,
84
+ }),
85
+ end: newValue.end.toDateTime(rangeValue.end, {
86
+ setDate: formatInfo.hasDate,
87
+ setTime: formatInfo.hasTime,
88
+ }),
89
+ };
90
+ if (newValue.start.validate(newRange.start, allSegments) &&
91
+ newValue.end.validate(newRange.end, allSegments)) {
92
+ if (!value ||
93
+ !(newRange.start.isSame(value.start) && newRange.end.isSame(value.end))) {
94
+ handleUpdateRange({
95
+ start: adjustDateToFormat(newRange.start, formatInfo, 'startOf'),
96
+ end: adjustDateToFormat(newRange.end, formatInfo, 'endOf'),
97
+ });
98
+ }
99
+ }
100
+ }
101
+ setDisplayValue({ start: newValue.start, end: newValue.end });
102
+ }
103
+ else if (!(newValue.start instanceof IncompleteDate) &&
104
+ !(newValue.end instanceof IncompleteDate) &&
105
+ (!value || !(value.start.isSame(newValue.start) && value.end.isSame(newValue.end)))) {
106
+ handleUpdateRange({ start: newValue.start, end: newValue.end });
107
+ }
108
+ }
109
+ function setSection(sectionIndex, amount) {
110
+ const portion = sectionIndex <= sections.length ? 'start' : 'end';
111
+ const section = sectionsState.editableSections[sectionIndex];
112
+ setValue({
113
+ ...displayValue,
114
+ [portion]: setSegment(section, displayValue[portion], amount, rangeValue[portion]),
115
+ });
116
+ }
117
+ function adjustSection(sectionIndex, amount) {
118
+ const section = sectionsState.editableSections[sectionIndex];
119
+ const portion = sectionIndex <= sections.length ? 'start' : 'end';
120
+ if (section) {
121
+ setValue({
122
+ ...displayValue,
123
+ [portion]: addSegment(section, displayValue[portion], amount, rangeValue[portion]),
124
+ });
125
+ }
126
+ }
127
+ function clearSection(sectionIndex) {
128
+ const section = sectionsState.editableSections[sectionIndex];
129
+ const portion = sectionIndex <= sections.length ? 'start' : 'end';
130
+ if (section && isEditableSectionType(section.type)) {
131
+ setValue({
132
+ ...displayValue,
133
+ [portion]: displayValue[portion].clear(section.type),
134
+ });
135
+ }
136
+ }
137
+ function setValueFromString(str) {
138
+ const [startDate = '', endDate = ''] = str.split(delimiter);
139
+ const parseDate = props.parseDateFromString ?? parseDateFromString;
140
+ const start = parseDate(startDate, format, timeZone);
141
+ const end = parseDate(endDate, format, timeZone);
142
+ if (start.isValid() && end.isValid()) {
143
+ handleUpdateRange({ start, end });
144
+ return true;
145
+ }
146
+ return false;
147
+ }
148
+ function confirmPlaceholder() {
149
+ if (props.disabled || props.readOnly) {
150
+ return;
151
+ }
152
+ // If the display value is complete but invalid, we need to constrain it and emit onChange on blur.
153
+ if (displayValue.start.isComplete(allSegments) &&
154
+ displayValue.end.isComplete(allSegments)) {
155
+ const newValue = {
156
+ start: adjustDateToFormat(displayValue.start.toDateTime(rangeValue.start, {
157
+ setDate: formatInfo.hasDate,
158
+ setTime: formatInfo.hasTime,
159
+ }), formatInfo, 'startOf'),
160
+ end: adjustDateToFormat(displayValue.end.toDateTime(rangeValue.end, {
161
+ setDate: formatInfo.hasDate,
162
+ setTime: formatInfo.hasTime,
163
+ }), formatInfo, 'endOf'),
164
+ };
165
+ setValue(newValue);
166
+ }
167
+ }
168
+ const validationState = props.validationState ||
169
+ (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||
170
+ (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||
171
+ (value && !isValidRange(value) ? 'invalid' : undefined) ||
172
+ (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||
173
+ (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);
174
+ return useBaseDateFieldState({
175
+ value,
176
+ displayValue: rangeValue,
177
+ validationState,
178
+ editableSections: sectionsState.editableSections,
179
+ formatInfo,
180
+ readOnly: props.readOnly,
181
+ disabled: props.disabled,
182
+ isEmpty: displayValue.start.isCleared(allSegments) && displayValue.end.isCleared(allSegments),
183
+ setValue,
184
+ adjustSection,
185
+ setSection,
186
+ clearSection,
187
+ setValueFromString,
188
+ confirmPlaceholder,
189
+ });
190
+ }
191
+ function useSectionsState(sections, value, placeholder, delimiter) {
192
+ const [state, setState] = React.useState(() => {
193
+ return {
194
+ value,
195
+ sections,
196
+ placeholder,
197
+ delimiter,
198
+ editableSections: getRangeEditableSections(sections, value, placeholder, delimiter),
199
+ };
200
+ });
201
+ if (sections !== state.sections ||
202
+ value !== state.value ||
203
+ !(placeholder.start.isSame(state.placeholder.start) &&
204
+ placeholder.end.isSame(state.placeholder.end)) ||
205
+ delimiter !== state.delimiter) {
206
+ setState({
207
+ value,
208
+ sections,
209
+ placeholder,
210
+ delimiter,
211
+ editableSections: getRangeEditableSections(sections, value, placeholder, delimiter),
212
+ });
213
+ }
214
+ return state;
215
+ }
216
+ function getRangeEditableSections(sections, value, placeholder, delimiter) {
217
+ const start = getEditableSections(sections, value.start, placeholder.start);
218
+ const end = getEditableSections(sections, value.end, placeholder.end);
219
+ const delimiterSection = toEditableSection({
220
+ type: 'literal',
221
+ contentType: 'letter',
222
+ format: delimiter,
223
+ placeholder: delimiter,
224
+ hasLeadingZeros: false,
225
+ }, value.start, placeholder.start);
226
+ const editableSections = [...start, delimiterSection, ...end];
227
+ return editableSections;
228
+ }
229
+ function isValidRange({ start, end }) {
230
+ return start.isValid() && end.isValid() && (start.isSame(end) || start.isBefore(end));
231
+ }
232
+ //# sourceMappingURL=useRangeDateFieldState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRangeDateFieldState.js","sourceRoot":"../../../../../src","sources":["components/DateField/hooks/useRangeDateFieldState.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,kBAAkB,EAAE,OAAO,EAAC,MAAM,mBAAmB,CAAC;AAI9D,OAAO,EAAC,2BAA2B,EAAE,SAAS,EAAC,6BAA0B;AACzE,OAAO,EAAC,kBAAkB,EAAC,0CAAuC;AAClE,OAAO,EAAC,cAAc,EAAC,6BAA6B;AAEpD,OAAO,EACH,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,GACpB,oBAAiB;AAGlB,OAAO,EAAC,qBAAqB,EAAC,mCAAgC;AAM9D,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAIrC,MAAM,UAAU,sBAAsB,CAAC,KAAiC;IACpE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,kBAAkB,CACxC,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,YAAY,IAAI,IAAI,EAC1B,KAAK,CAAC,QAAQ,CACjB,CAAC;IAEF,MAAM,aAAa,GAAG,kBAAkB,CACpC,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,KAAK,CAAC,gBAAgB,CAC5E,CAAC;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC;IAEjD,MAAM,iBAAiB,GAAG,CAAC,CAA8B,EAAE,EAAE;QACzD,QAAQ,CACJ,CAAC,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,CACvF,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,OAAO,2BAA2B,CAAC;YAC/B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,QAAQ;SACX,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,sBAAsB,CAAC;IAC5D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC;IAE9C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QACxD,OAAO;YACH,KAAK,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,GAAG,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACvE,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjE,IACI,CAAC,KAAK;QACF,CAAC,CAAC,SAAS;YACP,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC,KAAK,IAAI,YAAY,KAAK,QAAQ,CAAC;QACpC,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,EACxC,CAAC;QACC,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1B,eAAe,CAAC;YACZ,KAAK,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,GAAG,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACvE,CAAC,CAAC;IACP,CAAC;IAED,MAAM,EAAC,IAAI,EAAC,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAClC,OAAO;YACH,KAAK,EAAE,YAAY,CAAC,KAAK;iBACpB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE;gBAC9D,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;aAC9B,CAAC;iBACD,MAAM,CAAC,IAAI,CAAC;YACjB,GAAG,EAAE,YAAY,CAAC,GAAG;iBAChB,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,GAAG,EAAE;gBAC1D,OAAO,EAAE,UAAU,CAAC,OAAO;gBAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;aAC9B,CAAC;iBACD,MAAM,CAAC,IAAI,CAAC;SACpB,CAAC;IACN,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAEnE,MAAM,aAAa,GAAG,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAEtF,SAAS,QAAQ,CAAC,QAAkE;QAChF,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,IACI,QAAQ,KAAK,IAAI;YACjB,CAAC,QAAQ,CAAC,KAAK,YAAY,cAAc;gBACrC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;gBACrC,QAAQ,CAAC,GAAG,YAAY,cAAc;gBACtC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAC1C,CAAC;YACC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,eAAe,CAAC,EAAC,KAAK,EAAE,IAAI,cAAc,EAAE,EAAE,GAAG,EAAE,IAAI,cAAc,EAAE,EAAC,CAAC,CAAC;QAC9E,CAAC;aAAM,IACH,QAAQ,CAAC,KAAK,YAAY,cAAc;YACxC,QAAQ,CAAC,GAAG,YAAY,cAAc,EACxC,CAAC;YACC,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjF,MAAM,QAAQ,GAAG;oBACb,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE;wBAC/C,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;qBAC9B,CAAC;oBACF,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE;wBACzC,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;qBAC9B,CAAC;iBACL,CAAC;gBACF,IACI,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;oBACpD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC,EAClD,CAAC;oBACC,IACI,CAAC,KAAK;wBACN,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACzE,CAAC;wBACC,iBAAiB,CAAC;4BACd,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC;4BAChE,GAAG,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;yBAC7D,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;YACL,CAAC;YACD,eAAe,CAAC,EAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,CAAC;QAChE,CAAC;aAAM,IACH,CAAC,CAAC,QAAQ,CAAC,KAAK,YAAY,cAAc,CAAC;YAC3C,CAAC,CAAC,QAAQ,CAAC,GAAG,YAAY,cAAc,CAAC;YACzC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EACrF,CAAC;YACC,iBAAiB,CAAC,EAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAC,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED,SAAS,UAAU,CAAC,YAAoB,EAAE,MAAc;QACpD,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC7D,QAAQ,CAAC;YACL,GAAG,YAAY;YACf,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;SACrF,CAAC,CAAC;IACP,CAAC;IAED,SAAS,aAAa,CAAC,YAAoB,EAAE,MAAc;QACvD,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,IAAI,OAAO,EAAE,CAAC;YACV,QAAQ,CAAC;gBACL,GAAG,YAAY;gBACf,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;aACrF,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,SAAS,YAAY,CAAC,YAAoB;QACtC,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAClE,IAAI,OAAO,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,QAAQ,CAAC;gBACL,GAAG,YAAY;gBACf,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;aACvD,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,SAAS,kBAAkB,CAAC,GAAW;QACnC,MAAM,CAAC,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,mBAAmB,IAAI,mBAAmB,CAAC;QACnE,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjD,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;YACnC,iBAAiB,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,SAAS,kBAAkB;QACvB,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,mGAAmG;QACnG,IACI,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;YAC1C,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAC1C,CAAC;YACC,MAAM,QAAQ,GAAG;gBACb,KAAK,EAAE,kBAAkB,CACrB,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE;oBAC5C,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;iBAC9B,CAAC,EACF,UAAU,EACV,SAAS,CACZ;gBACD,GAAG,EAAE,kBAAkB,CACnB,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE;oBACxC,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;iBAC9B,CAAC,EACF,UAAU,EACV,OAAO,CACV;aACJ,CAAC;YACF,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IAED,MAAM,eAAe,GACjB,KAAK,CAAC,eAAe;QACrB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACjF,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,CAAC,KAAK,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,CAAC,KAAK,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE5E,OAAO,qBAAqB,CAAmD;QAC3E,KAAK;QACL,YAAY,EAAE,UAAU;QACxB,eAAe;QACf,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;QAChD,UAAU;QACV,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EACH,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;QACxF,QAAQ;QACR,aAAa;QACb,UAAU;QACV,YAAY;QACZ,kBAAkB;QAClB,kBAAkB;KACrB,CAAC,CAAC;AACP,CAAC;AAED,SAAS,gBAAgB,CACrB,QAAyB,EACzB,KAAiC,EACjC,WAAiC,EACjC,SAAiB;IAEjB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC1C,OAAO;YACH,KAAK;YACL,QAAQ;YACR,WAAW;YACX,SAAS;YACT,gBAAgB,EAAE,wBAAwB,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC;SACtF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,IACI,QAAQ,KAAK,KAAK,CAAC,QAAQ;QAC3B,KAAK,KAAK,KAAK,CAAC,KAAK;QACrB,CAAC,CACG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;YACjD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAChD;QACD,SAAS,KAAK,KAAK,CAAC,SAAS,EAC/B,CAAC;QACC,QAAQ,CAAC;YACL,KAAK;YACL,QAAQ;YACR,WAAW;YACX,SAAS;YACT,gBAAgB,EAAE,wBAAwB,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC;SACtF,CAAC,CAAC;IACP,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,wBAAwB,CAC7B,QAAyB,EACzB,KAAiC,EACjC,WAAiC,EACjC,SAAiB;IAEjB,MAAM,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,GAAG,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAEtE,MAAM,gBAAgB,GAAG,iBAAiB,CACtC;QACI,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,QAAQ;QACrB,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,SAAS;QACtB,eAAe,EAAE,KAAK;KACzB,EACD,KAAK,CAAC,KAAK,EACX,WAAW,CAAC,KAAK,CACpB,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,GAAG,KAAK,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC,CAAC;IAE9D,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,EAAC,KAAK,EAAE,GAAG,EAAuB;IACpD,OAAO,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1F,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DateTime} from '@gravity-ui/date-utils';\nimport {useControlledState, useLang} from '@gravity-ui/uikit';\n\nimport type {DateFieldBase} from '../../types/datePicker';\nimport type {RangeValue} from '../../types/inputs';\nimport {createPlaceholderRangeValue, isInvalid} from '../../utils/dates';\nimport {useDefaultTimeZone} from '../../utils/useDefaultTimeZone';\nimport {IncompleteDate} from '../IncompleteDate.js';\nimport type {FormatSection} from '../types';\nimport {\n addSegment,\n adjustDateToFormat,\n getEditableSections,\n getFormatInfo,\n isEditableSectionType,\n parseDateFromString,\n setSegment,\n toEditableSection,\n useFormatSections,\n} from '../utils';\n\nimport type {DateFieldState} from './useBaseDateFieldState';\nimport {useBaseDateFieldState} from './useBaseDateFieldState';\n\nexport interface RangeDateFieldStateOptions extends DateFieldBase<RangeValue<DateTime>> {\n delimiter?: string;\n}\n\nconst RANGE_FORMAT_DELIMITER = ' — ';\n\nexport type RangeDateFieldState = DateFieldState<RangeValue<DateTime>>;\n\nexport function useRangeDateFieldState(props: RangeDateFieldStateOptions): RangeDateFieldState {\n const [value, setRange] = useControlledState(\n props.value,\n props.defaultValue || null,\n props.onUpdate,\n );\n\n const inputTimeZone = useDefaultTimeZone(\n props.value?.start || props.defaultValue?.start || props.placeholderValue,\n );\n const timeZone = props.timeZone || inputTimeZone;\n\n const handleUpdateRange = (v: RangeValue<DateTime> | null) => {\n setRange(\n v ? {start: v.start.timeZone(inputTimeZone), end: v.end.timeZone(inputTimeZone)} : v,\n );\n };\n\n const placeholder = React.useMemo(() => {\n return createPlaceholderRangeValue({\n placeholderValue: props.placeholderValue,\n timeZone,\n });\n }, [props.placeholderValue, timeZone]);\n\n const format = props.format || 'L';\n const delimiter = props.delimiter ?? RANGE_FORMAT_DELIMITER;\n const sections = useFormatSections(format);\n const formatInfo = React.useMemo(() => getFormatInfo(sections), [sections]);\n const allSegments = formatInfo.availableUnits;\n\n const [displayValue, setDisplayValue] = React.useState(() => {\n return {\n start: new IncompleteDate(value ? value.start.timeZone(timeZone) : null),\n end: new IncompleteDate(value ? value.end.timeZone(timeZone) : null),\n };\n });\n\n const [lastValue, setLastValue] = React.useState(value);\n const [lastTimezone, setLastTimezone] = React.useState(timeZone);\n if (\n (value &&\n (!lastValue ||\n !(value.start.isSame(lastValue.start) && value.end.isSame(lastValue.end)))) ||\n (value && lastTimezone !== timeZone) ||\n (value === null && lastValue !== null)\n ) {\n setLastValue(value);\n setLastTimezone(timeZone);\n setDisplayValue({\n start: new IncompleteDate(value ? value.start.timeZone(timeZone) : null),\n end: new IncompleteDate(value ? value.end.timeZone(timeZone) : null),\n });\n }\n\n const {lang} = useLang();\n const rangeValue = React.useMemo(() => {\n return {\n start: displayValue.start\n .toDateTime(value?.start.timeZone(timeZone) ?? placeholder.start, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n })\n .locale(lang),\n end: displayValue.end\n .toDateTime(value?.end.timeZone(timeZone) ?? placeholder.end, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n })\n .locale(lang),\n };\n }, [displayValue, value, placeholder, formatInfo, timeZone, lang]);\n\n const sectionsState = useSectionsState(sections, displayValue, rangeValue, delimiter);\n\n function setValue(newValue: RangeValue<DateTime> | RangeValue<IncompleteDate> | null) {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n if (\n newValue === null ||\n (newValue.start instanceof IncompleteDate &&\n newValue.start.isCleared(allSegments) &&\n newValue.end instanceof IncompleteDate &&\n newValue.end.isCleared(allSegments))\n ) {\n setRange(null);\n setDisplayValue({start: new IncompleteDate(), end: new IncompleteDate()});\n } else if (\n newValue.start instanceof IncompleteDate &&\n newValue.end instanceof IncompleteDate\n ) {\n if (newValue.start.isComplete(allSegments) && newValue.end.isComplete(allSegments)) {\n const newRange = {\n start: newValue.start.toDateTime(rangeValue.start, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n }),\n end: newValue.end.toDateTime(rangeValue.end, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n }),\n };\n if (\n newValue.start.validate(newRange.start, allSegments) &&\n newValue.end.validate(newRange.end, allSegments)\n ) {\n if (\n !value ||\n !(newRange.start.isSame(value.start) && newRange.end.isSame(value.end))\n ) {\n handleUpdateRange({\n start: adjustDateToFormat(newRange.start, formatInfo, 'startOf'),\n end: adjustDateToFormat(newRange.end, formatInfo, 'endOf'),\n });\n }\n }\n }\n setDisplayValue({start: newValue.start, end: newValue.end});\n } else if (\n !(newValue.start instanceof IncompleteDate) &&\n !(newValue.end instanceof IncompleteDate) &&\n (!value || !(value.start.isSame(newValue.start) && value.end.isSame(newValue.end)))\n ) {\n handleUpdateRange({start: newValue.start, end: newValue.end});\n }\n }\n\n function setSection(sectionIndex: number, amount: number) {\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n const section = sectionsState.editableSections[sectionIndex];\n setValue({\n ...displayValue,\n [portion]: setSegment(section, displayValue[portion], amount, rangeValue[portion]),\n });\n }\n\n function adjustSection(sectionIndex: number, amount: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (section) {\n setValue({\n ...displayValue,\n [portion]: addSegment(section, displayValue[portion], amount, rangeValue[portion]),\n });\n }\n }\n\n function clearSection(sectionIndex: number) {\n const section = sectionsState.editableSections[sectionIndex];\n const portion = sectionIndex <= sections.length ? 'start' : 'end';\n if (section && isEditableSectionType(section.type)) {\n setValue({\n ...displayValue,\n [portion]: displayValue[portion].clear(section.type),\n });\n }\n }\n\n function setValueFromString(str: string) {\n const [startDate = '', endDate = ''] = str.split(delimiter);\n const parseDate = props.parseDateFromString ?? parseDateFromString;\n const start = parseDate(startDate, format, timeZone);\n const end = parseDate(endDate, format, timeZone);\n if (start.isValid() && end.isValid()) {\n handleUpdateRange({start, end});\n return true;\n }\n return false;\n }\n\n function confirmPlaceholder() {\n if (props.disabled || props.readOnly) {\n return;\n }\n\n // If the display value is complete but invalid, we need to constrain it and emit onChange on blur.\n if (\n displayValue.start.isComplete(allSegments) &&\n displayValue.end.isComplete(allSegments)\n ) {\n const newValue = {\n start: adjustDateToFormat(\n displayValue.start.toDateTime(rangeValue.start, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n }),\n formatInfo,\n 'startOf',\n ),\n end: adjustDateToFormat(\n displayValue.end.toDateTime(rangeValue.end, {\n setDate: formatInfo.hasDate,\n setTime: formatInfo.hasTime,\n }),\n formatInfo,\n 'endOf',\n ),\n };\n setValue(newValue);\n }\n }\n\n const validationState =\n props.validationState ||\n (isInvalid(value?.start, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (isInvalid(value?.end, props.minValue, props.maxValue) ? 'invalid' : undefined) ||\n (value && !isValidRange(value) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.start) ? 'invalid' : undefined) ||\n (value && props.isDateUnavailable?.(value.end) ? 'invalid' : undefined);\n\n return useBaseDateFieldState<RangeValue<DateTime>, RangeValue<IncompleteDate>>({\n value,\n displayValue: rangeValue,\n validationState,\n editableSections: sectionsState.editableSections,\n formatInfo,\n readOnly: props.readOnly,\n disabled: props.disabled,\n isEmpty:\n displayValue.start.isCleared(allSegments) && displayValue.end.isCleared(allSegments),\n setValue,\n adjustSection,\n setSection,\n clearSection,\n setValueFromString,\n confirmPlaceholder,\n });\n}\n\nfunction useSectionsState(\n sections: FormatSection[],\n value: RangeValue<IncompleteDate>,\n placeholder: RangeValue<DateTime>,\n delimiter: string,\n) {\n const [state, setState] = React.useState(() => {\n return {\n value,\n sections,\n placeholder,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, placeholder, delimiter),\n };\n });\n\n if (\n sections !== state.sections ||\n value !== state.value ||\n !(\n placeholder.start.isSame(state.placeholder.start) &&\n placeholder.end.isSame(state.placeholder.end)\n ) ||\n delimiter !== state.delimiter\n ) {\n setState({\n value,\n sections,\n placeholder,\n delimiter,\n editableSections: getRangeEditableSections(sections, value, placeholder, delimiter),\n });\n }\n\n return state;\n}\n\nfunction getRangeEditableSections(\n sections: FormatSection[],\n value: RangeValue<IncompleteDate>,\n placeholder: RangeValue<DateTime>,\n delimiter: string,\n) {\n const start = getEditableSections(sections, value.start, placeholder.start);\n const end = getEditableSections(sections, value.end, placeholder.end);\n\n const delimiterSection = toEditableSection(\n {\n type: 'literal',\n contentType: 'letter',\n format: delimiter,\n placeholder: delimiter,\n hasLeadingZeros: false,\n },\n value.start,\n placeholder.start,\n );\n\n const editableSections = [...start, delimiterSection, ...end];\n\n return editableSections;\n}\n\nfunction isValidRange({start, end}: RangeValue<DateTime>): boolean {\n return start.isValid() && end.isValid() && (start.isSame(end) || start.isBefore(end));\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  "year_placeholder": "Г",
3
3
  "quarter_placeholder": "K",
4
4
  "month_placeholder": "М",
5
- "weekday_placeholder": "ДН",
5
+ "weekday_placeholder": "д",
6
6
  "day_placeholder": "Д",
7
7
  "hour_placeholder": "ч",
8
8
  "minute_placeholder": "м",
@@ -1,4 +1,5 @@
1
1
  export * from "./DateField.js";
2
2
  export * from "./hooks/useDateFieldState.js";
3
+ export * from "./hooks/useRangeDateFieldState.js";
3
4
  export * from "./hooks/useDateFieldProps.js";
4
- export * from "./hooks/useBaseDateFieldState.js";
5
+ export type { DateFieldState } from "./hooks/useBaseDateFieldState.js";
@@ -1,5 +1,5 @@
1
1
  export * from "./DateField.js";
2
2
  export * from "./hooks/useDateFieldState.js";
3
+ export * from "./hooks/useRangeDateFieldState.js";
3
4
  export * from "./hooks/useDateFieldProps.js";
4
- export * from "./hooks/useBaseDateFieldState.js";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/DateField/index.ts"],"names":[],"mappings":"AAAA,+BAA4B;AAE5B,6CAA0C;AAC1C,6CAA0C;AAC1C,iDAA8C","sourcesContent":["export * from './DateField';\n\nexport * from './hooks/useDateFieldState';\nexport * from './hooks/useDateFieldProps';\nexport * from './hooks/useBaseDateFieldState';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"../../../../src","sources":["components/DateField/index.ts"],"names":[],"mappings":"AAAA,+BAA4B;AAE5B,6CAA0C;AAC1C,kDAA+C;AAC/C,6CAA0C","sourcesContent":["export * from './DateField';\n\nexport * from './hooks/useDateFieldState';\nexport * from './hooks/useRangeDateFieldState';\nexport * from './hooks/useDateFieldProps';\n\nexport type {DateFieldState} from './hooks/useBaseDateFieldState';\n"]}
@@ -6,7 +6,7 @@ export type DateFormatTokenMap = {
6
6
  };
7
7
  };
8
8
  export interface DateFieldSection {
9
- value: number | undefined;
9
+ value: number | null;
10
10
  /**
11
11
  * Value of the section, as rendered inside the input.
12
12
  * For example, in the date `May 25, 1995`, the value of the month section is "May".
@@ -43,28 +43,8 @@ export interface DateFieldSection {
43
43
  * For example, the value `1` should be rendered as "01" instead of "1".
44
44
  */
45
45
  hasLeadingZeros: boolean;
46
- /**
47
- * If `true`, the section value has been modified since the last time the sections were generated from a valid date.
48
- * When we can generate a valid date from the section, we don't directly pass it to `onChange`,
49
- * Otherwise, we would lose all the information contained in the original date, things like:
50
- * - time if the format does not contain it
51
- * - timezone / UTC
52
- *
53
- * To avoid losing that information, we transfer the values of the modified sections from the newly generated date to the original date.
54
- */
55
- modified: boolean;
56
- /**
57
- * Start index of the section in the format
58
- */
59
- start: number;
60
- /**
61
- * End index of the section in the format
62
- */
63
- end: number;
64
- previousEditableSection: number;
65
- nextEditableSection: number;
66
46
  }
67
- export type DateFieldSectionWithoutPosition<TSection extends DateFieldSection = DateFieldSection> = Omit<TSection, 'start' | 'end' | 'value' | 'textValue' | 'modified' | 'previousEditableSection' | 'nextEditableSection'>;
47
+ export type FormatSection<TSection extends DateFieldSection = DateFieldSection> = Omit<TSection, 'value' | 'textValue'>;
68
48
  export type AvailableSections = Partial<Record<DateFieldSectionType, boolean>>;
69
49
  export interface FormatInfo {
70
50
  hasTime: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/DateField/types.ts"],"names":[],"mappings":"","sourcesContent":["export type DateFieldSectionType =\n | Extract<\n Intl.DateTimeFormatPartTypes,\n | 'day'\n | 'dayPeriod'\n | 'hour'\n | 'literal'\n | 'minute'\n | 'month'\n | 'second'\n | 'timeZoneName'\n | 'weekday'\n | 'year'\n | 'unknown'\n >\n | 'quarter';\n\nexport type DateFormatTokenMap = {\n [formatToken: string]:\n | DateFieldSectionType\n | {sectionType: DateFieldSectionType; contentType: 'digit' | 'letter'};\n};\n\nexport interface DateFieldSection {\n value: number | undefined;\n /**\n * Value of the section, as rendered inside the input.\n * For example, in the date `May 25, 1995`, the value of the month section is \"May\".\n */\n textValue: string;\n /**\n * Format token used to parse the value of this section from the date object.\n * For example, in the format `MMMM D, YYYY`, the format of the month section is \"MMMM\".\n */\n format: string;\n /**\n * Placeholder rendered when the value of this section is empty.\n */\n placeholder: string;\n /**\n * Type of the section.\n */\n type: DateFieldSectionType;\n /**\n * Type of content of the section.\n * Will determine if we should apply a digit-based editing or a letter-based editing.\n */\n contentType: 'digit' | 'letter';\n /**\n * Available values\n */\n options?: string[];\n /** The minimum numeric value for the segment, if applicable. */\n minValue?: number;\n /** The maximum numeric value for the segment, if applicable. */\n maxValue?: number;\n /**\n * If `true`, the value of this section is supposed to have leading zeroes.\n * For example, the value `1` should be rendered as \"01\" instead of \"1\".\n */\n hasLeadingZeros: boolean;\n /**\n * If `true`, the section value has been modified since the last time the sections were generated from a valid date.\n * When we can generate a valid date from the section, we don't directly pass it to `onChange`,\n * Otherwise, we would lose all the information contained in the original date, things like:\n * - time if the format does not contain it\n * - timezone / UTC\n *\n * To avoid losing that information, we transfer the values of the modified sections from the newly generated date to the original date.\n */\n modified: boolean;\n /**\n * Start index of the section in the format\n */\n start: number;\n /**\n * End index of the section in the format\n */\n end: number;\n\n previousEditableSection: number;\n nextEditableSection: number;\n}\n\nexport type DateFieldSectionWithoutPosition<TSection extends DateFieldSection = DateFieldSection> =\n Omit<\n TSection,\n | 'start'\n | 'end'\n | 'value'\n | 'textValue'\n | 'modified'\n | 'previousEditableSection'\n | 'nextEditableSection'\n >;\n\nexport type AvailableSections = Partial<Record<DateFieldSectionType, boolean>>;\n\nexport interface FormatInfo {\n hasTime: boolean;\n hasDate: boolean;\n availableUnits: AvailableSections;\n minDateUnit: 'day' | 'month' | 'quarter' | 'year';\n minTimeUnit: 'second' | 'minute' | 'hour';\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/DateField/types.ts"],"names":[],"mappings":"","sourcesContent":["export type DateFieldSectionType =\n | Extract<\n Intl.DateTimeFormatPartTypes,\n | 'day'\n | 'dayPeriod'\n | 'hour'\n | 'literal'\n | 'minute'\n | 'month'\n | 'second'\n | 'timeZoneName'\n | 'weekday'\n | 'year'\n | 'unknown'\n >\n | 'quarter';\n\nexport type DateFormatTokenMap = {\n [formatToken: string]:\n DateFieldSectionType | {sectionType: DateFieldSectionType; contentType: 'digit' | 'letter'};\n};\n\nexport interface DateFieldSection {\n value: number | null;\n /**\n * Value of the section, as rendered inside the input.\n * For example, in the date `May 25, 1995`, the value of the month section is \"May\".\n */\n textValue: string;\n /**\n * Format token used to parse the value of this section from the date object.\n * For example, in the format `MMMM D, YYYY`, the format of the month section is \"MMMM\".\n */\n format: string;\n /**\n * Placeholder rendered when the value of this section is empty.\n */\n placeholder: string;\n /**\n * Type of the section.\n */\n type: DateFieldSectionType;\n /**\n * Type of content of the section.\n * Will determine if we should apply a digit-based editing or a letter-based editing.\n */\n contentType: 'digit' | 'letter';\n /**\n * Available values\n */\n options?: string[];\n /** The minimum numeric value for the segment, if applicable. */\n minValue?: number;\n /** The maximum numeric value for the segment, if applicable. */\n maxValue?: number;\n /**\n * If `true`, the value of this section is supposed to have leading zeroes.\n * For example, the value `1` should be rendered as \"01\" instead of \"1\".\n */\n hasLeadingZeros: boolean;\n}\n\nexport type FormatSection<TSection extends DateFieldSection = DateFieldSection> = Omit<\n TSection,\n 'value' | 'textValue'\n>;\n\nexport type AvailableSections = Partial<Record<DateFieldSectionType, boolean>>;\n\nexport interface FormatInfo {\n hasTime: boolean;\n hasDate: boolean;\n availableUnits: AvailableSections;\n minDateUnit: 'day' | 'month' | 'quarter' | 'year';\n minTimeUnit: 'second' | 'minute' | 'hour';\n}\n"]}
@@ -1,44 +1,31 @@
1
1
  import type { DateTime } from '@gravity-ui/date-utils';
2
2
  import type { ExtractFunctionType } from "../types/index.js";
3
+ import type { IncompleteDate } from "./IncompleteDate.js";
3
4
  import { i18n } from "./i18n/index.js";
4
- import type { AvailableSections, DateFieldSection, DateFieldSectionType, DateFieldSectionWithoutPosition, FormatInfo } from "./types.js";
5
- export declare const EDITABLE_SEGMENTS: AvailableSections;
6
- export declare function getSectionLimits(section: DateFieldSectionWithoutPosition, date: DateTime): {
7
- minValue: number;
8
- maxValue: number;
9
- } | {
10
- minValue?: undefined;
11
- maxValue?: undefined;
5
+ import type { DateFieldSection, DateFieldSectionType, FormatInfo, FormatSection } from "./types.js";
6
+ declare const EDITABLE_SEGMENTS: {
7
+ year: true;
8
+ quarter: true;
9
+ month: true;
10
+ day: true;
11
+ weekday: true;
12
+ hour: true;
13
+ minute: true;
14
+ second: true;
15
+ dayPeriod: true;
12
16
  };
13
- export declare function getSectionValue(section: DateFieldSectionWithoutPosition, date: DateTime): number | undefined;
17
+ export declare const PAGE_STEP: Partial<Record<DateFieldSectionType, number>>;
14
18
  export declare function getDurationUnitFromSectionType(type: DateFieldSectionType): "year" | "month" | "day" | "hour" | "minute" | "second" | "quarter" | "date";
15
- export declare function addSegment(section: DateFieldSection, date: DateTime, amount: number): DateTime;
16
- export declare function setSegment(section: DateFieldSection, date: DateTime, amount: number): DateTime;
19
+ export declare function addSegment(section: DateFieldSection, date: IncompleteDate, amount: number, placeholder: DateTime): IncompleteDate;
20
+ export declare function setSegment(section: FormatSection, date: IncompleteDate, amount: number, placeholder: DateTime): IncompleteDate;
17
21
  type TranslateFunction = ExtractFunctionType<typeof i18n>;
18
- export declare function splitFormatIntoSections(format: string, t?: TranslateFunction, lang?: string): DateFieldSectionWithoutPosition[];
22
+ export declare function splitFormatIntoSections(format: string, t?: TranslateFunction, lang?: string): FormatSection[];
19
23
  export declare function cleanString(dirtyString: string): string;
20
- export declare function getEditableSections(sections: DateFieldSectionWithoutPosition[], value: DateTime, validSegments: AvailableSections): DateFieldSection[];
21
- export declare function isEditableSection(section: DateFieldSectionWithoutPosition): boolean;
22
- export declare function toEditableSection(section: DateFieldSectionWithoutPosition, value: DateTime, validSegments: AvailableSections, position: number, previousEditableSection: number): DateFieldSection;
23
- export declare function getCurrentEditableSectionIndex(sections: DateFieldSection[], selectedSections: 'all' | number): number;
24
- export declare function formatSections(sections: DateFieldSection[]): string;
24
+ export declare function getEditableSections(sections: FormatSection[], value: IncompleteDate, placeholder: DateTime): DateFieldSection[];
25
+ export declare function isEditableSectionType(type: DateFieldSectionType): type is keyof typeof EDITABLE_SEGMENTS;
26
+ export declare function toEditableSection(section: FormatSection, value: IncompleteDate, placeholder: DateTime): DateFieldSection;
25
27
  export declare function parseDateFromString(str: string, format: string, timeZone?: string): DateTime;
26
- export declare function isAllSegmentsValid(allSegments: AvailableSections, validSegments: AvailableSections): boolean;
27
- export declare function useFormatSections(format: string): DateFieldSectionWithoutPosition[];
28
- export declare function getFormatInfo(sections: DateFieldSectionWithoutPosition[]): FormatInfo;
28
+ export declare function useFormatSections(format: string): FormatSection[];
29
+ export declare function getFormatInfo(sections: FormatSection[]): FormatInfo;
29
30
  export declare function adjustDateToFormat(date: DateTime, formatInfo: FormatInfo, method?: 'startOf' | 'endOf'): DateTime;
30
- export declare function markValidSection(allSections: AvailableSections, editableSections: AvailableSections, unit: DateFieldSectionType): {
31
- year?: boolean | undefined;
32
- month?: boolean | undefined;
33
- day?: boolean | undefined;
34
- hour?: boolean | undefined;
35
- minute?: boolean | undefined;
36
- second?: boolean | undefined;
37
- quarter?: boolean | undefined;
38
- weekday?: boolean | undefined;
39
- dayPeriod?: boolean | undefined;
40
- literal?: boolean | undefined;
41
- timeZoneName?: boolean | undefined;
42
- unknown?: boolean | undefined;
43
- };
44
31
  export {};